From 240c139c34c9267e75bd1cf26242c0f753c7484f Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Mon, 21 Nov 2022 15:56:42 +0100 Subject: [PATCH 001/103] Removed old files from lib_debug --- Workspace_msvc/lib_debug.vcxproj | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Workspace_msvc/lib_debug.vcxproj b/Workspace_msvc/lib_debug.vcxproj index 5dc36d4633..43c601024d 100644 --- a/Workspace_msvc/lib_debug.vcxproj +++ b/Workspace_msvc/lib_debug.vcxproj @@ -143,20 +143,15 @@ - - - - - @@ -166,4 +161,4 @@ - + \ No newline at end of file -- GitLab From 77da6f3874c12b2f2d591ed76640d162308184ce Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Tue, 22 Nov 2022 09:21:36 +0100 Subject: [PATCH 002/103] Replaced old files with wmc_auto.h and wmc_auto.c --- Workspace_msvc/lib_debug.vcxproj | 2 + lib_debug/mem_count.c | 909 ------------------- lib_debug/mem_count.h | 104 --- lib_debug/memory.c | 187 ---- lib_debug/wmc_auto.c | 1450 ++++++++++++++++++++++++++++++ lib_debug/wmc_auto.h | 523 +++++++++++ lib_debug/wmops.c | 503 ----------- lib_debug/wmops.h | 777 ---------------- 8 files changed, 1975 insertions(+), 2480 deletions(-) delete mode 100644 lib_debug/mem_count.c delete mode 100644 lib_debug/mem_count.h delete mode 100644 lib_debug/memory.c create mode 100644 lib_debug/wmc_auto.c create mode 100644 lib_debug/wmc_auto.h delete mode 100644 lib_debug/wmops.c delete mode 100644 lib_debug/wmops.h diff --git a/Workspace_msvc/lib_debug.vcxproj b/Workspace_msvc/lib_debug.vcxproj index 43c601024d..401709477f 100644 --- a/Workspace_msvc/lib_debug.vcxproj +++ b/Workspace_msvc/lib_debug.vcxproj @@ -146,12 +146,14 @@ + + diff --git a/lib_debug/mem_count.c b/lib_debug/mem_count.c deleted file mode 100644 index ca4832399f..0000000000 --- a/lib_debug/mem_count.c +++ /dev/null @@ -1,909 +0,0 @@ -/* - * Memory Counting Tool - * - * Copyright 2022 VoiceAge Corporation. All Rights Reserved. - * - * This software is protected by copyright law and by international treaties. - * VoiceAge Corporation retains full ownership rights in their respective contributions in the software. - * No license of any kind, including but not limited to patent license, of any foregoing parties is - * hereby granted by implication, estoppel or otherwise. - * - * 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/or fitness for a particular purpose are hereby disclaimed and excluded. - * - * Written by : Guy J. Richard - August 2017 - * - */ - -#include -#include "options.h" -#include "mem_count.h" - -#include /* for printf, ... */ -#include /* for stricmp, ... */ -#include /* for alloc, NULL, ... */ -#include /* for tolower */ - -/* Mostly to get a 'int32_t' */ -#if !defined( _MSC_VER ) || _MSC_VER >= 1600 -#include -#else -#include -#endif - -#ifdef RAM_COUNTING_TOOL - -#if defined( _MSC_VER ) && _MSC_VER < 1600 -typedef UINT32 uint32_t; -typedef INT32 int32_t; -typedef UINT64 uint64_t; -typedef INT64 int64_t; -#endif - -#ifndef TRUE -#define TRUE ( 0 == 0 ) -#endif -#ifndef FALSE -#define FALSE 0 -#endif - -/* How to use the tool notes - ========================= - - The tool measure SRAM memory allocated by malloc(), calloc() and - deallocated by free(). - - In order to run the tool, one needs to: - 1) Prepend 'count_' to all calls to 'malloc', 'calloc' and 'free' except debug files. - 2) Add the following code into e.g. prot.h, so that all files with calls to these functions see it. - #ifdef RAM_COUNTING_TOOL - #define count_malloc(n1) MALLOC_FCT_CALL(n1) - #define count_calloc(n1,n2) CALLOC_FCT_CALL(n1, n2) - #define count_free(ptr) FREE_FCT_CALL(ptr) - #else - #define count_malloc(n1) malloc(n1) - #define count_calloc(n1,n2) calloc(n1, n2) - #define count_free(ptr) free(ptr) - #endif - 3) Call mem_count_init() at the beginning of encoding/decoding - - The first param allows to set a limit on the RAM that can be allocated. - While the codec is running, if memory is requested such that the maximum - is passed (Mem Alloc > Limit), the codec will stop and the summary will - be printed. - - The second param allows to decide the units (bytes, shorts or longs). - Please note that the unit specified is combined with the limit param to - produce the total size that can be allocated. Ex ..init(1000, USE_16BITS); - will set the limit to 1000 x 16 Bits Word (2000 bytes in total). - 4) Call mem_count_summary() at the end of encoding/decoding to print-out the results. - - The first parameter allows to overwrite the initial units configuration. - The Total size allocated (always in bytes internally) will be converted - to the unit selected before being reported. - - The switch 'RAM_COUNTING_TOOL' also has to be defined to enable memory counting. - - There is a define 'MEM_COUNT_DETAILS' in options.h that enables printing per - sub-structure details when DEBUGGING is activated. -*/ - -/*-------------------------------------------------------------------* - * LOCAL CONSTANTS - *-------------------------------------------------------------------*/ - -/* 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 -#else -#define MAX_INFO_RECORDS 3000 -#endif -/* This is the length after which the function name - will be truncated when the summary is printed. */ -#define MAX_FUNCTION_NAME_LENGTH 18 - -/* This is the length after which the parameter to - the allocating function will be truncated when - the summary is printed. */ -#define MAX_PARAMS_LENGTH 36 - -/* This is the value (in bytes) towards which the block size - is rounded. For example, a block of 123 bytes, when using - a 32 bits system, will end up taking 124 bytes since - the last unused byte cannot be used for another block. */ -#ifdef MEM_ALIGN_64BITS -#define BLOCK_ROUNDING 8 -#else /* Align on 32 Bits Instead */ -#define BLOCK_ROUNDING 4 -#endif - -#define N_32BITS_BLOCKS ( BLOCK_ROUNDING / sizeof( int32_t ) ) - -/* Special Value to See if Memory was ever written */ -#define MAGIC_VALUE_OOB 0x12A534F0 /* Put Before & After Buffer */ -#define MAGIC_VALUE_USED ( ~MAGIC_VALUE_OOB ) /* To Detect if Memory was Written */ -/* OOB Flags */ -#define OOB_START 0x1 -#define OOB_END 0x2 - -/*-------------------------------------------------------------------* - * LOCAL MACROS - *-------------------------------------------------------------------*/ - -#define ROUND_BLOCK_SIZE( n ) ( ( ( n ) + BLOCK_ROUNDING - 1 ) & ~( BLOCK_ROUNDING - 1 ) ) -#define IS_CALLOC( str ) ( ( size_str[0] ) == 'c' ) - -#define WARNING( msg ) \ - do \ - { \ - printf( "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, msg ); \ - } while ( 0 ) -#define ERROR( msg ) \ - do \ - { \ - WARNING( msg ); \ - exit( -1 ); \ - } while ( 0 ) - -/*-------------------------------------------------------------------* - * LOCAL TYPES - *-------------------------------------------------------------------*/ - -typedef struct -{ - void *block_ptr; - size_t block_size; - int lineno; - char name[MAX_FUNCTION_NAME_LENGTH + 1]; /* +1 for NUL */ - char params[1 + MAX_PARAMS_LENGTH + 1]; /* +1 for 'm'/'c' alloc & +1 for NUL */ - int used; - int OOB_Flag; - int seq_no; /* To Help Sorting by Order of Creation when all else is identical */ - int noccurances; -} allocator_record; - -typedef allocator_record allocation_list[MAX_INFO_RECORDS]; - -/*-------------------------------------------------------------------* - * LOCAL DATA - *-------------------------------------------------------------------*/ - -static allocation_list Current_Allocations, Peak_Allocations, Freed_Allocations; -static size_t RAM_Limit = NO_RAM_LIMIT; /* Always in Bytes */ -static size_t Current_RAM = 0, Peak_RAM = 0; /* In Bytes */ -static unsigned int Num_Records_Cur_RAM = 0, Num_Records_Peak_RAM = 0, Num_Records_Freed_RAM = 0; -static int Seq_No = 0; - -static size_t Stat_Cnt_Size = USE_BYTES; - -#ifndef DISABLE_NULL_PTR_FREE_WARNING -static allocation_list Missing_Allocations; -static unsigned int Num_Records_Missing_Alloc_Warnings = 0; -#endif - -/*-------------------------------------------------------------------* - * LOCAL CONST DATA - *-------------------------------------------------------------------*/ - -/* Suffix after numeral value printed in the summary */ -/* One char for each size */ -static const char Count_suffix[] = "BsL"; /* Using 's' because 'S' - looks a lot like '5'. */ -/* */ -static const char *Count_Name[] = { "Bytes", "Shorts", "Longs" }; - -/*-------------------------------------------------------------------* - * GLOBAL FUNCTIONS - *-------------------------------------------------------------------*/ - -/* It is not necessary to call dyn_mem_stats_init() since all static - variables are pre-initialised. It can be used to run stats again. */ -void mem_count_init( size_t limit, Counting_Size cnt_size ) -{ - if ( cnt_size != USE_DEFAULT ) - Stat_Cnt_Size = cnt_size; - Current_RAM = Peak_RAM = 0; - RAM_Limit = limit << Stat_Cnt_Size; - Num_Records_Cur_RAM = Num_Records_Peak_RAM = Num_Records_Freed_RAM = 0; -#ifndef DISABLE_NULL_PTR_FREE_WARNING - Num_Records_Missing_Alloc_Warnings = 0; -#endif - Seq_No = 0; -} - -/* This Function basically uses 'malloc' to allocate memory but also - records information about which functions allocated memory, the peak, ... - When, dyn_mem_print_stats() is called, all this info is printed as - well as the memory that has not been de-allocated; it is useful to - find memory leaks. */ -void *mem_alloc( - const char *func_name, - int func_lineno, - size_t size, - char *size_str /* the first char indicates m-alloc or c-alloc */ ) -{ - size_t rounded_size; - void *block_ptr; - char *tmp_ptr; - allocator_record *record_ptr; - size_t n, f; - int32_t fill_value; - int32_t *ptr32; - int32_t mask, temp; - unsigned int check; - - /* Do not Support Empty Requests */ - if ( size == 0 ) - { - ERROR( "Size of Zero not Supported" ); - } - - if ( Num_Records_Cur_RAM == MAX_INFO_RECORDS ) - { - ERROR( "Too Many Allocs. Increase 'MAX_INFO_RECORDS'" ); - } - - /* Round Up Block Size */ - rounded_size = ROUND_BLOCK_SIZE( size ); - - /* Allocate using the standard mem allocator. - Allocate a bit More to Have Room for Signature Values */ - block_ptr = malloc( rounded_size + BLOCK_ROUNDING * 2 ); - - /* the split line is to prevent a 'search/replace' adding a '_' to the name */ - /* We request more memory to have room to put signatures at the start - and end of the allocated buffer to check for OOBounds accesses. */ - /* Stop if it Failed */ - if ( block_ptr == NULL ) - { - ERROR( "Out of System RAM" ); - } - - /* Cannot use #if sizeof(int32_t) to catch this at compile time - because the preprocessor doesn't know anything about types - or sizes. */ - check = sizeof( int32_t ); - if ( check != 4 ) - { - ERROR( "Expecting 'int32_t' to be a 32 Bits Integer" ); - } - - /* Set Signatures and Fill (or Clear) Memory */ - ptr32 = (int32_t *) block_ptr; - /* Signature at Start of Block */ - n = N_32BITS_BLOCKS; - do - { - *ptr32++ = MAGIC_VALUE_OOB; - } while ( --n ); - /* Fill with Pattern or Clear Memory */ - fill_value = MAGIC_VALUE_USED; - if ( IS_CALLOC( size_str ) ) - { - fill_value = 0x00000000; - } - n = size / sizeof( int32_t ); - while ( n-- ) - { - *ptr32++ = fill_value; - } - n = rounded_size - size; - /* When Initializing with '0' */ - /* Need to Adapt the Magic Value */ - f = n % sizeof( int32_t ); - if ( f != 0 ) - { - /* For f=, shift by [1->24, 2->16, 3->8] */ - mask = 0xFFFFFFFF << ( ( sizeof( int32_t ) - f ) * 8 ); /* (1) */ - temp = MAGIC_VALUE_OOB & mask; - if ( fill_value != 0x0 ) - { /* Using M-Alloc */ - /* Merge Fill Value */ - temp += ( ~mask ) & MAGIC_VALUE_USED; - } /* for C-Alloc, the code in (1) hereabove already introduces zeros */ - *ptr32++ = temp; - } - n /= sizeof( int32_t ); - n += N_32BITS_BLOCKS; - /* Signature at End of Block */ - do - { - *ptr32++ = MAGIC_VALUE_OOB; - } while ( --n ); - - /* Adjust Pointer (Magic Value Before and After the Memory Region Requested) */ - tmp_ptr = (char *) block_ptr; - tmp_ptr += BLOCK_ROUNDING; - block_ptr = (void *) tmp_ptr; - - /* Save Information about Function Requesting the RAM */ - record_ptr = &Current_Allocations[Num_Records_Cur_RAM]; - - /* Save Name (and NUL Terminate it) */ - strncpy( record_ptr->name, func_name, MAX_FUNCTION_NAME_LENGTH ); - record_ptr->name[MAX_FUNCTION_NAME_LENGTH] = '\0'; - /* Save Params (and NUL Terminate it) - There string starts with a Marker (either 'm' or 'c') - that indicates the type of allocation requested. */ - strncpy( record_ptr->params, size_str, MAX_PARAMS_LENGTH ); - record_ptr->params[MAX_PARAMS_LENGTH] = '\0'; - /* Save Other Info */ - record_ptr->lineno = func_lineno; - record_ptr->block_ptr = block_ptr; - record_ptr->block_size = size; - record_ptr->used = -1; /* By default do not check mem usage */ - record_ptr->seq_no = ++Seq_No; - record_ptr->noccurances = 1; - - /* Increase # of Records */ - Num_Records_Cur_RAM++; - /* Update Amount of RAM Allocated */ - Current_RAM += rounded_size; - - /* Is this the Worst Case */ - if ( Peak_RAM < Current_RAM ) - { /* Yes */ - /* Update the Peak RAM */ - Peak_RAM = Current_RAM; - /* Keep the Information */ - memmove( Peak_Allocations, Current_Allocations, sizeof( allocator_record ) * Num_Records_Cur_RAM ); - Num_Records_Peak_RAM = Num_Records_Cur_RAM; - } - - /* Limit Busted? */ - if ( RAM_Limit != NO_RAM_LIMIT ) - { - if ( Current_RAM > RAM_Limit ) - { - char info_msg[100]; - - mem_count_summary( USE_DEFAULT ); - - sprintf( info_msg, "Alloc Limit of %lu %s was Passed", (unsigned long) RAM_Limit >> Stat_Cnt_Size, Count_Name[Stat_Cnt_Size] ); - ERROR( info_msg ); - } - } - - return block_ptr; -} - -/* Calculate Memory Usage of Block (Look for Signature) */ -static void mem_set_usage( allocator_record *record_ptr ) -{ - int total_bytes_used; - - size_t n; - int32_t *ptr32; - char *ptr8; - size_t total_bytes; - int32_t fill_value; - - fill_value = MAGIC_VALUE_USED; - if ( ( record_ptr->params[0] ) == 'c' ) - { - fill_value = 0x00000000; - } - - total_bytes = record_ptr->block_size; - - /* Check 4 bytes at a time */ - ptr32 = (int32_t *) record_ptr->block_ptr; - total_bytes_used = 0; - for ( n = total_bytes / sizeof( int32_t ); n > 0; n-- ) - { - if ( *ptr32++ != fill_value ) - total_bytes_used += sizeof( int32_t ); - } - - /* Check Remaining Bytes (If Applicable) */ - ptr8 = (char *) ptr32; - for ( n = total_bytes % sizeof( int32_t ); n > 0; n-- ) - { - if ( *ptr8++ != (char) fill_value ) - total_bytes_used++; - /* Update Value */ - fill_value >>= 8; - } - - /* Save Space Used */ - record_ptr->used = total_bytes_used; -} - -static void mem_check_OOB( allocator_record *record_ptr ) -{ - int32_t *ptr32; - unsigned int OOB_Flag = 0x0; - int32_t mask; - size_t i; - int f; - - ptr32 = (int32_t *) record_ptr->block_ptr - N_32BITS_BLOCKS; - /* Check at Beginning of Block */ - i = N_32BITS_BLOCKS; - do - { - if ( *ptr32++ ^ MAGIC_VALUE_OOB ) - OOB_Flag |= OOB_START; - } while ( --i ); - - /* Advance to End (Snap to lowest 32 Bits) */ - ptr32 += record_ptr->block_size / sizeof( int32_t ); - - /* Calculate Unused Space That has been - added to get to the rounded Block Size */ - i = ROUND_BLOCK_SIZE( record_ptr->block_size ) - record_ptr->block_size; - - /* Partial Check (For Block Size that have been rounded) */ - f = i % sizeof( int32_t ); - if ( f != 0 ) - { - mask = 0xFFFFFFFF << ( ( sizeof( int32_t ) - f ) * 8 ); - if ( ( *ptr32++ ^ MAGIC_VALUE_OOB ) & mask ) - OOB_Flag |= OOB_END; - } - - /* Full Check (all 32 Bits) for Remaining */ - i /= sizeof( int32_t ); - i += N_32BITS_BLOCKS; - do - { - if ( *ptr32++ ^ MAGIC_VALUE_OOB ) - OOB_Flag |= OOB_END; - } while ( --i ); - - record_ptr->OOB_Flag = OOB_Flag; -} - -/* Just to make the code cleaner */ -static int is_same_record( const allocator_record *record_ptr1, allocator_record *record_ptr2 ) -{ - return record_ptr2->block_size == record_ptr1->block_size && - record_ptr2->lineno == record_ptr1->lineno && - strcmp( record_ptr2->name, record_ptr1->name ) == 0 && - strcmp( record_ptr2->params, record_ptr1->params ) == 0 && - record_ptr2->OOB_Flag == record_ptr1->OOB_Flag - ? 1 - : 0; -} - -/* This Function basically uses 'free' and removes the - Information about the memory block from the list of - currently allocated Memory */ -void mem_free( const char *func_name, int func_lineno, void *ptr ) -{ - unsigned int i, j, k; - char *tmp_ptr; - allocator_record *record_ptr, *record_ptr2; - - char info_msg[100]; - - /* Search for the Block Pointer in the List */ - record_ptr = &Current_Allocations[0]; - for ( i = 0; i < Num_Records_Cur_RAM; i++ ) - { - /* Same Pointer? */ - if ( ptr == record_ptr->block_ptr ) - { /* Yes, Found it */ - if ( Num_Records_Freed_RAM == MAX_INFO_RECORDS ) - { - ERROR( "Too Many Allocs. Increase 'MAX_INFO_RECORDS'" ); - } - - for ( j = 0; j < Num_Records_Peak_RAM; j++ ) - { - /* Is this Block Part of the Peak RAM? */ - if ( memcmp( record_ptr, &Peak_Allocations[j], sizeof( *record_ptr ) ) == 0 ) - { - break; /* Stop the 'j' loop */ - } - } - - mem_set_usage( record_ptr ); - mem_check_OOB( record_ptr ); - - /* De-Allocated Block was Part of Peak RAM? */ - if ( j == Num_Records_Peak_RAM ) - { /* No */ - /* Here, in order to avoid filling this list with repetitive blocks */ - /* that are allocated and deallocated repeatedly, we look for a block */ - /* that has the same module, line #, size & same OOB characteristics. */ - /* We then just increase the # of occurances of this block definition. */ - /* The % used will be merged */ - record_ptr2 = &Freed_Allocations[0]; - for ( k = 0; k < Num_Records_Freed_RAM; k++ ) - { - /* Same Block but allocated many times */ - if ( is_same_record( record_ptr2, record_ptr ) ) - { - record_ptr2->noccurances++; - record_ptr2->used += record_ptr->used; - break; - } - record_ptr2++; - } - /* Found it */ - } - else - { - /* Force Add to List */ - k = Num_Records_Freed_RAM; - } - - if ( k == Num_Records_Freed_RAM ) - { /* No */ - /* Add to List */ - memmove( &Freed_Allocations[Num_Records_Freed_RAM], record_ptr, sizeof( allocator_record ) ); - /* Increase # of Records for Deallocated Block List */ - Num_Records_Freed_RAM++; - } - - /* De-Allocated Block was Part of Peak RAM? */ - if ( j != Num_Records_Peak_RAM ) - { /* Yes */ - /* Update Block Info There too (The Info here is Bytes Used and OOB Flags) */ - memmove( &Peak_Allocations[j], record_ptr, sizeof( *record_ptr ) ); - } - - /* First Adjust Pointer to Get to the Start of the Block */ - tmp_ptr = (char *) ptr; - tmp_ptr -= BLOCK_ROUNDING; - ptr = (void *) tmp_ptr; - /* De-allocate using the standard memory facilities */ - fr\ -ee( ptr ); /* the split line is to prevent a 'search/replace' adding a '_' to the name */ - - /* Decrease # of Records */ - Num_Records_Cur_RAM--; - /* Update (decrease) Amount of RAM Allocated */ - Current_RAM -= ROUND_BLOCK_SIZE( record_ptr->block_size ); - - /* Erase the entry (Move the Last One over it) */ - memmove( record_ptr, &Current_Allocations[Num_Records_Cur_RAM], sizeof( allocator_record ) ); - - return; - } - record_ptr++; - } - - /* Not Found, Problem! */ - if ( ptr != NULL ) - { - /* Stop */ - sprintf( info_msg, "Invalid Pointer: '%p'", ptr ); - ERROR( info_msg ); - } -#ifndef DISABLE_NULL_PTR_FREE_WARNING - else - { /* Warn about Freeing of NULL Pointers */ - /* Search to Warn Only Once. */ - record_ptr = &Missing_Allocations[0]; - for ( i = 0; i < Num_Records_Missing_Alloc_Warnings; i++ ) - { - /* Same Name? */ - if ( strncmp( record_ptr->name, func_name, MAX_FUNCTION_NAME_LENGTH ) == 0 ) - { /* Yes */ - /* Same Line Number? */ - if ( record_ptr->lineno == func_lineno ) - { /* Yes */ - /* No Need to Warn Again */ - return; - } - } - record_ptr++; - } - /* Save Name */ - strncpy( record_ptr->name, func_name, MAX_FUNCTION_NAME_LENGTH ); - record_ptr->name[MAX_FUNCTION_NAME_LENGTH] = '\0'; - - /* Save Line No */ - record_ptr->lineno = func_lineno; - /* Save Pointer */ - record_ptr->block_ptr = ptr; - /* Save Size */ - record_ptr->block_size = 0; /* It is an Unknown Block, so there is no size, we put a '0' */ - - Num_Records_Missing_Alloc_Warnings++; - - WARNING( "Trying to Free 'NULL' Pointer" ); - } -#endif -} - -#ifdef MEM_COUNT_DETAILS -/* Used to Sort Block Information Records */ -static int compare_mem_records( const void *ptr1, const void *ptr2 ) -{ - const allocator_record *record_ptr1 = (const allocator_record *) ptr1, - *record_ptr2 = (const allocator_record *) ptr2; - int result; - - /* Sort First by 'Name', then by 'Line No' and finaly by 'Block Size' */ - - /* Compare Function Name */ - result = strcmp( record_ptr1->name, record_ptr2->name ); - /* Same Function Name? */ - if ( result == 0 ) - { /* Yes */ - /* Compare Line Number */ - result = record_ptr1->lineno - record_ptr2->lineno; - /* Same Line Number */ - if ( result == 0 ) - { /* Yes */ - /* Compare Block Size */ - result = record_ptr1->block_size - record_ptr2->block_size; - /* Same Size? */ - if ( result == 0 ) - { - result = record_ptr1->seq_no - record_ptr2->seq_no; - } - } - } - - return result; -} - -static void mem_print_records( allocator_record *record_ptr, int num_records, Counting_Size cnt_size, int print_size ) -{ - int i, sum, total; - char *last_name = NULL; - int single_flag; - char chr = Count_suffix[cnt_size]; - size_t nwords, rounded_block_size; - char nblocks_str[22]; - char quantity_str[22]; - char format_str[50]; - char *tmp_ptr; - int nblocks; - - char *OOB_str[] = { "- ", "beg", "end", "b+e" }; - - strcpy( format_str, "\n %-*s %5i %-*s %3s %3.0f%% %8s" ); - if ( print_size != FALSE ) - strcat( format_str, " %6u" ); - - /* Sort it */ - qsort( record_ptr, num_records, sizeof( allocator_record ), compare_mem_records ); - - single_flag = 0; - - nblocks = 0; - - if ( num_records > 0 ) - { - /* Print Header */ - printf( " %-*s Ln No %-*s OOB Used Quantity%s", MAX_FUNCTION_NAME_LENGTH, "Function Name", MAX_PARAMS_LENGTH, "Parameters ('m' or 'c' alloc)", print_size != FALSE ? " Size" : "" ); - - total = sum = 0; - for ( i = num_records - 1; i >= 0; i-- ) - { - if ( sum == 0 ) - { - last_name = record_ptr->name; - } - - rounded_block_size = ROUND_BLOCK_SIZE( record_ptr->block_size ) >> cnt_size; - nwords = rounded_block_size * record_ptr->noccurances; - - /* Calc Usage (It has already been done for a De-Allocated Block - That was part of the Peak Mem. But not for a Block that is - still allocated (never freed). */ - if ( record_ptr->used < 0 ) - { - mem_set_usage( record_ptr ); - /* Check Out of Bounds Too */ - mem_check_OOB( record_ptr ); - } - - sprintf( quantity_str, "%i", record_ptr->noccurances ); - - /* Print Quantity x Size */ - tmp_ptr = strchr( quantity_str, '\0' ); - *tmp_ptr++ = 'x'; - sprintf( tmp_ptr, "%i", (int) rounded_block_size ); - - printf( format_str, MAX_FUNCTION_NAME_LENGTH, record_ptr->name, record_ptr->lineno, MAX_PARAMS_LENGTH, record_ptr->params, OOB_str[record_ptr->OOB_Flag], ( record_ptr->used * 100.0f / record_ptr->block_size / record_ptr->noccurances ), quantity_str, (uint32_t) nwords ); - /* Count $ of Blocks */ - nblocks += record_ptr->noccurances; - /* Add Size */ - sum += nwords; - /* Advance */ - record_ptr++; - - if ( print_size != FALSE ) - { - /* End Reached or New Function? */ - if ( i == 0 || strcmp( last_name, record_ptr->name ) != 0 ) - { - /* Cumulate Total */ - total += sum; - - if ( i == 0 && total == sum ) - single_flag = 1; -#ifdef MEM_COUNT_TOTAL_PER_FUNC - /* Print 'Total' on the Line if there is only one Function - that allocated all the RAM */ - printf( " %7i%c", sum, chr ); -#endif - /* Reset Sum */ - sum = 0; - } - } - } - /* Print the Total */ - if ( !single_flag && print_size != FALSE ) - { -#ifdef MEM_COUNT_TOTAL_PER_FUNC -#define SPACES 9 -#else -#define SPACES 0 -#endif - - sprintf( nblocks_str, "%i Blocks", nblocks ); - - printf( "\n %*s %*s %*s --------\n", MAX_FUNCTION_NAME_LENGTH, "", MAX_PARAMS_LENGTH, "", SPACES, "" ); - printf( " %-*s %-*s %*s%7i%c\n", MAX_FUNCTION_NAME_LENGTH, "Total", MAX_PARAMS_LENGTH, nblocks_str, SPACES, "", total, chr ); - } - else - printf( "\n" ); - } - else - { - printf( " \n" ); - } -} -#endif - -/* Print Memory Summary. - Return Peak Memory Used (according to Units Specified) */ -size_t mem_count_summary( Counting_Size cnt_size ) -{ - size_t size; -#ifdef MEM_COUNT_DETAILS - unsigned int i, j; - size_t num; - allocation_list Allocations; -#endif - if ( cnt_size == USE_DEFAULT ) - cnt_size = Stat_Cnt_Size; - - size = Peak_RAM >> cnt_size; -#ifdef MEM_COUNT_DETAILS - printf( "\n\n====== STATIC RAM COUNTING TOOL: MEMORY SUMMARY ======\n\n" ); - - printf( " NOTES\n" - " 1) %c = %s, %c = %s (16 Bits Words) & %c = %s (32 Bits Words).\n" - " 2) The '%%' of 'Used' memory is not very reliable for c-alloc.\n" - " 3) The Out Of Bounds (OOB) Checking is primitive as it checks\n" - " only for writing before and past the buffer when it is freed\n" - " or when the summary is printed.\n" - " 4) Quantity Filed format is N x Block Size.\n" - " When it is 1: Size = Block Size\n" - " Otherwise, Size = The Total Size Allocated for the 'N' Blocks.\n" - "\n", - Count_suffix[USE_BYTES], Count_Name[USE_BYTES], Count_suffix[USE_16BITS], Count_Name[USE_16BITS], Count_suffix[USE_32BITS], Count_Name[USE_32BITS] ); - - /* Create a Temporary List of Block to Print */ - /* from all the Block Allocated in the Peak */ - /* Scenario. We want to Merge Entries allocated */ - /* from the exact same code location and having */ - /* the same block size. In order to simplifiy the */ - /* printout. */ - num = 0; - for ( i = 0; i < Num_Records_Peak_RAM; i++ ) - { - /* Check if an Identical Block Before Adding to List */ - for ( j = 0; j < num; j++ ) - { - if ( is_same_record( &Peak_Allocations[i], &Allocations[j] ) ) - { - Allocations[j].noccurances++; - Allocations[j].used += Peak_Allocations[i].used; - break; - } - } - - /* Unique Block? */ - if ( j == num ) - { /* Yes */ - /* Add to List */ - memmove( &Allocations[num++], &Peak_Allocations[i], sizeof( allocator_record ) ); - } - } - /* Print the Peak Allocated */ - printf( " Peak Memory Allocated\n" ); - mem_print_records( &Allocations[0], num, cnt_size, TRUE ); - printf( "\n" ); - - /* Create a Temporary List of Block to Print */ - /* from all the Block Allocated BUT excluding */ - /* blocks that are part of the peak (and that */ - /* are already printed). */ - /* This is done every time the summary is printed */ - /* so that the code can continue to be executed */ - /* and the summary can be printed again with blocks */ - /* that are part of the peak having changed and thus */ - /* those that end up in this 'catch all' category. */ - num = 0; - for ( i = 0; i < Num_Records_Freed_RAM; i++ ) - { - /* Check if Record is in the Peak */ - for ( j = 0; j < Num_Records_Peak_RAM; j++ ) - { - /* Is this Block Part of the Peak RAM OR Still Allocated ? */ - if ( is_same_record( &Freed_Allocations[i], &Peak_Allocations[j] ) ) - { /* Yes */ - break; /* Stop the 'j' loop */ - } - } - /* If part of the Peak, skip it */ - if ( j == Num_Records_Peak_RAM ) - { /* Not Part of Peak */ - /* Check if an Identical Block Before Adding to List */ - for ( j = 0; j < num; j++ ) - { -#ifndef MEM_COUNT_SEPARATE_OTHER_BLOCKS - /* Just Check for Same Size, Params and OOB Result */ - if ( Freed_Allocations[i].block_size == Allocations[j].block_size && - strcmp( Freed_Allocations[i].params, Allocations[j].params ) == 0 && - Freed_Allocations[i].OOB_Flag == Allocations[j].OOB_Flag ) - { - Allocations[j].noccurances += Freed_Allocations[i].noccurances; - Allocations[j].used += Freed_Allocations[i].used; - /* Indicate that Locations are Multiple */ - strncpy( Allocations[j].name, "MULTIPLE LOCATIONS", MAX_FUNCTION_NAME_LENGTH ); - /* Wipe the Line # */ - Allocations[j].lineno = 0; - break; - } -#else - if ( is_same_record( &Freed_Allocations[i], &Allocations[j] ) ) - { - Allocations[j].noccurances++; - Allocations[j].used += Freed_Allocations[i].used; - break; - } -#endif - } - - /* Unique Block? */ - if ( j == num ) - { /* Yes */ - /* Add to List */ - memmove( &Allocations[num++], &Freed_Allocations[i], sizeof( allocator_record ) ); - } - } - } - - if ( num != 0 ) - { - /* Print all Other Block (Those that have been Freed but are not Part - of the Peak Memory). */ - printf( " Other Memory Allocated\n" ); - mem_print_records( &Allocations[0], num, cnt_size, FALSE /*Do not print the size column*/ ); - printf( "\n" ); - } - - /* If we have busted the RAM Limit, we will end up in the - summary function (here) and abort. Hence, no point printing - the memory still allocated, it will be the same as the Peak! */ - if ( RAM_Limit == 0 || Current_RAM <= RAM_Limit ) - { - /* Print the Not Deallocated */ - printf( " Memory Still Allocated\n" ); - mem_print_records( &Current_Allocations[0], Num_Records_Cur_RAM, cnt_size, TRUE ); - printf( "\n" ); - } -#endif - -#ifndef MEM_COUNT_DETAILS - if ( Num_Records_Cur_RAM > 0 ) - { - printf( "\nWarning: Part of the SRAM is still allocated! Activate MEM_COUNT_DETAILS for more details.\n" ); - } -#endif - printf( "Peak SRAM Allocated: %i%c\n\n\n", (int) size, Count_suffix[cnt_size] ); - - return size; -} - -#endif diff --git a/lib_debug/mem_count.h b/lib_debug/mem_count.h deleted file mode 100644 index d30fc3ab1a..0000000000 --- a/lib_debug/mem_count.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * mem_count.h - * - * Copyright 2022 VoiceAge Corporation. All Rights Reserved. - * - * This software is protected by copyright law and by international treaties. - * VoiceAge Corporation retains full ownership rights in their respective contributions in the software. - * No license of any kind, including but not limited to patent license, of any foregoing parties is - * hereby granted by implication, estoppel or otherwise. - * - * 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/or fitness for a particular purpose are hereby disclaimed and excluded. - * - * Written by : Guy J. Richard - August 2017 - * - */ - -#ifndef __MEM_COUNT_H__ -#define __MEM_COUNT_H__ - -#include -#include "options.h" -#include /* for size_t, ... */ - -#ifdef RAM_COUNTING_TOOL -/*-------------------------------------------------------------------* - * Global Constants - *-------------------------------------------------------------------*/ - -#define NO_RAM_LIMIT 0 - -/* Define this when using 64 Bits values in the code (ex: double) */ -/*#define MEM_ALIGN_64BITS */ /* Will Align on 32 Bits if not Defined */ - -/*#define DISABLE_NULL_PTR_FREE_WARNING*/ - -/*#define MEM_COUNT_DETAILS*/ - -/*#define MEM_COUNT_SEPARATE_OTHER_BLOCKS */ /* Print separate lines with location details if the same block is allocated in multiple places and is not a part of the Peak memory */ - /* if not defined, MULTIPLE LOCATIONS is printed instead */ - -/*-------------------------------------------------------------------* - * Global Types - *-------------------------------------------------------------------*/ - -typedef enum -{ - USE_DEFAULT = -1, - USE_BYTES, - USE_16BITS, - USE_32BITS -} Counting_Size; - -/*-------------------------------------------------------------------* - * Global Macros - *-------------------------------------------------------------------*/ - -#define STRINGIFY( x ) #x -#define TO_STRING( x ) STRINGIFY( x ) - -#if ( defined( _WIN32 ) && ( _MSC_VER <= 1800 ) && ( _MSC_VER >= 1300 ) ) -#define __func__ __FUNCTION__ -#elif defined( __STDC_VERSION__ ) && __STDC_VERSION__ < 199901L -#if ( __GNUC__ >= 2 ) -#define __func__ __FUNCTION__ -#else -#define __func__ "" -#endif -#elif defined( __GNUC__ ) -#define __func__ __extension__ __FUNCTION__ -#endif - -/* MALLOC_FCT_CALL, FREE_FCT_CALL, ... are defined here because 'wmc_auto.h' uses */ -/* them to map malloc, free & calloc to a Memory Counting Mechanism. If the WMC Tool */ -/* is not used, then these definitions will have no effect and are harmless. */ -#define MALLOC_FCT_CALL( size ) mem_alloc( __func__, __LINE__, size, "m:" TO_STRING( size ) ) -#define FREE_FCT_CALL( ptr ) mem_free( __func__, __LINE__, ptr ) -#define CALLOC_FCT_CALL( n, sz ) mem_alloc( __func__, __LINE__, ( n ) * ( sz ), "c:" TO_STRING( n ) ", " TO_STRING( sz ) ) - - -/*-------------------------------------------------------------------* - * Prototypes - *-------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" -{ -#endif - - extern void mem_count_init( size_t limit, Counting_Size cnt_size ); - extern size_t mem_count_summary( Counting_Size cnt_size ); - - extern void *mem_alloc( const char *func_name, int func_lineno, size_t size, char *alloc_str ); - extern void mem_free( const char *func_name, int func_lineno, void *ptr ); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/lib_debug/memory.c b/lib_debug/memory.c deleted file mode 100644 index afd292ddbc..0000000000 --- a/lib_debug/memory.c +++ /dev/null @@ -1,187 +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 "options.h" -#include -#include -#include -#include - -#include "prot.h" -#include "debug.h" -#include "wmops.h" -#include "rom_enc.h" -#include "rom_dec.h" -#include "rom_com.h" -#include "stat_enc.h" -#include "stat_dec.h" - -#ifdef WMOPS - -/*-------------------------------------------------------------------* - * Memory counting tool - *--------------------------------------------------------------------*/ - -int16_t *ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ -int16_t *ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ -int32_t wc_frame = 0; /* Frame corresponding to the worst-case stack usage */ -char location_max_stack[256] = "undefined"; -#define MAX_FCT_NAME_LENGTH 30 -typedef struct -{ - char function_name[MAX_FCT_NAME_LENGTH + 1]; - int16_t *stack_ptr; -} caller_info; -int current_calls = 0; -#define MAX_RECORDABLE_CALLS 40 -caller_info stack_callers[2][MAX_RECORDABLE_CALLS]; - - -/*-------------------------------------------------------------------* - * reset_stack() - * - * Initialize/reset the base stack counter.. - *--------------------------------------------------------------------*/ - -void reset_stack() -{ - int16_t something; - - ptr_base_stack = &something; - ptr_max_stack = ptr_base_stack; -} - -/*-------------------------------------------------------------------* - * push_stack() - * - * Check the current stack pointer and update the maximum stack pointer, if new maximum found. - *--------------------------------------------------------------------*/ - -int push_stack( const char *filename, const char *fctname ) -{ - int16_t something; - - (void) *filename; /* to avoid compilation warning */ - - /* Is there room to save the caller's information? */ - if ( current_calls >= MAX_RECORDABLE_CALLS ) - { /* No */ - fprintf( stderr, "memory.c: No more room to store call stack info. Please increase MAX_RECORDABLE_CALLS" ); - exit( -1 ); - } - /* Valid Function Name? */ - if ( fctname[0] == 0 ) - { /* No */ - fprintf( stderr, "memory.c: Invalid function name for call stack info." ); - exit( -1 ); - } - /* Save the Name of the Calling Function in the Table */ - strncpy( stack_callers[0][current_calls].function_name, fctname, MAX_FCT_NAME_LENGTH ); - stack_callers[0][current_calls].function_name[MAX_FCT_NAME_LENGTH] = 0; /* Nul Terminate */ - /* Save the Stack Pointer */ - stack_callers[0][current_calls].stack_ptr = &something; - /* Increase Stack Calling Tree Level */ - current_calls++; - /* Is this the First Time or the Worst Case? */ - if ( &something < ptr_max_stack || ptr_max_stack == NULL ) - { /* Yes */ - /* Save Info about it */ - ptr_max_stack = &something; - wc_frame = frame; - strncpy( location_max_stack, fctname, sizeof( location_max_stack ) - 1 ); - location_max_stack[sizeof( location_max_stack ) - 1] = '\0'; - - /* Save Call Tree */ - memmove( stack_callers[1], stack_callers[0], sizeof( caller_info ) * current_calls ); - - /* Terminate the List (Unless Full) */ - if ( current_calls < MAX_RECORDABLE_CALLS ) - { - stack_callers[1][current_calls].function_name[0] = 0; - } - } - return 0 /* for Now */; -} - -int pop_stack( const char *filename, const char *fctname ) -{ - caller_info *caller_info_ptr; - - (void) *filename; /* to avoid compilation warning */ - - /* Decrease Stack Calling */ - current_calls--; - - /* Get Pointer to Caller Information */ - caller_info_ptr = &stack_callers[0][current_calls]; - - /* Check if Names Match */ - if ( strncmp( caller_info_ptr->function_name, fctname, MAX_FCT_NAME_LENGTH ) != 0 ) - { - fprintf( stderr, "memory.c: Invalid pop_stack()" ); - exit( -1 ); - } - - /* Erase Entry */ - caller_info_ptr->function_name[0] = 0; - - return 0 /* for Now */; -} - -void print_stack_call_tree( void ) -{ - caller_info *caller_info_ptr; - int call_level; - - fprintf( stdout, "Stack Call Tree (frame #%5d) Stack Usage in words\n", wc_frame ); - caller_info_ptr = &stack_callers[1][0]; - for ( call_level = 0; call_level < MAX_RECORDABLE_CALLS; call_level++ ) - { - /* Done? */ - if ( caller_info_ptr->function_name[0] == 0 ) - break; - /* Print Name */ - fprintf( stdout, "%-42s", caller_info_ptr->function_name ); - /* Print Stack Usage (Based on Difference) */ - if ( call_level != 0 ) - { - fprintf( stdout, "%ld\n", ( ( caller_info_ptr - 1 )->stack_ptr - caller_info_ptr->stack_ptr ) * sizeof( int16_t ) / sizeof( float ) ); - } - else - fprintf( stdout, "\n" ); - /* Advance */ - caller_info_ptr++; - } - fprintf( stdout, "\n" ); -} - -#endif /* WMOPS */ diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c new file mode 100644 index 0000000000..f9fbcc6f82 --- /dev/null +++ b/lib_debug/wmc_auto.c @@ -0,0 +1,1450 @@ +/* + * (C) 2022 copyright VoiceAge Corporation. All Rights Reserved. + * + * This software is protected by copyright law and by international treaties. The source code, and all of its derivations, + * is provided by VoiceAge Corporation under the "ITU-T Software Tools' General Public License". Please, read the license file + * or refer to ITU-T Recommendation G.191 on "SOFTWARE TOOLS FOR SPEECH AND AUDIO CODING STANDARDS". + * + * Any use of this software is permitted provided that this notice is not removed and that neither the authors nor + * VoiceAge Corporation are deemed to have made any representations as to the suitability of this software + * for any purpose nor are held responsible for any defects of this software. THERE IS NO WARRANTY FOR THIS SOFTWARE. + * + * Authors: Guy Richard, Vladimir Malenovsky (Vladimir.Malenovsky@USherbrooke.ca) + */ + +#include +#include +#include +#include +#include + +#ifndef _MSC_VER +#include +#include +#else +#include +#endif + +#include "options.h" +#include "wmc_auto.h" + + + /*-------------------------------------------------------------------* + * WMOPS counting tool + *--------------------------------------------------------------------*/ + +#ifdef WMOPS + +#define WMC_TOOL_SKIP /* Skip the instrumentation of this file, if invoked by accident */ + +#define MAX_RECORDS 1024 +#define MAX_CHAR 64 +#define MAX_STACK 64 +#define DOUBLE_MAX 0x80000000 + +struct wmops_record +{ + char label[MAX_CHAR]; + long call_number; + long update_cnt; + int call_tree[MAX_RECORDS]; + double start_selfcnt; + double current_selfcnt; + double max_selfcnt; + double min_selfcnt; + double tot_selfcnt; + double start_cnt; /* The following take into account the decendants */ + double current_cnt; + double max_cnt; + double min_cnt; + double tot_cnt; +}; + +double ops_cnt; +double prom_cnt; +double inst_cnt[NUM_INST]; + +static struct wmops_record wmops[MAX_RECORDS]; +static int stack[MAX_STACK]; +static int sptr; +static int num_records; +static int current_record; +static long update_cnt; +static double start_cnt; +static double max_cnt; +static double min_cnt; +static double inst_cnt_wc[NUM_INST]; +static long fnum_cnt_wc; + + +void reset_wmops(void) +{ + int i, j; + + for (i = 0; i < MAX_RECORDS; i++) + { + strcpy(&wmops[i].label[0], "\0"); + wmops[i].call_number = 0; + wmops[i].update_cnt = 0; + for (j = 0; j < MAX_RECORDS; j++) + { + wmops[i].call_tree[j] = -1; + } + wmops[i].start_selfcnt = 0.0; + wmops[i].current_selfcnt = 0.0; + wmops[i].max_selfcnt = 0.0; + wmops[i].min_selfcnt = DOUBLE_MAX; + wmops[i].tot_selfcnt = 0.0; + wmops[i].start_cnt = 0.0; + wmops[i].current_cnt = 0.0; + wmops[i].max_cnt = 0.0; + wmops[i].min_cnt = DOUBLE_MAX; + wmops[i].tot_cnt = 0.0; + } + + for (i = 0; i < MAX_STACK; i++) + { + stack[i] = -1; + } + sptr = 0; + num_records = 0; + current_record = -1; + update_cnt = 0; + + max_cnt = 0.0; + min_cnt = DOUBLE_MAX; + start_cnt = 0.0; + ops_cnt = 0.0; +} + + +void push_wmops(const char* label) +{ + int new_flag; + int i, j; + + /* Check if new function record label */ + new_flag = 1; + for (i = 0; i < num_records; i++) + { + if (strcmp(wmops[i].label, label) == 0) + { + new_flag = 0; + break; + } + } + + /* Configure new record */ + if (new_flag) + { + if (num_records >= MAX_RECORDS) + { + fprintf(stdout, "push_wmops(): exceeded MAX_RECORDS count.\n\n"); + exit(-1); + } + strcpy(wmops[i].label, label); + num_records++; + } + + /* Push current context onto stack */ + if (current_record >= 0) + { + if (sptr >= MAX_STACK) + { + fprintf(stdout, "\r push_wmops(): stack exceeded, try inreasing MAX_STACK\n"); + exit(-1); + } + stack[sptr++] = current_record; + + /* accumulate op counts */ + wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; + + /* update call tree */ + for (j = 0; j < MAX_RECORDS; j++) + { + if (wmops[i].call_tree[j] == current_record) + { + break; + } + else if (wmops[i].call_tree[j] == -1) + { + wmops[i].call_tree[j] = current_record; + break; + } + } + } + + /* init current record */ + current_record = i; + wmops[current_record].start_selfcnt = ops_cnt; + wmops[current_record].start_cnt = ops_cnt; + wmops[current_record].call_number++; + + return; +} + + +void pop_wmops(void) +{ + + /* Check for underflow */ + if (current_record < 0) + { + fprintf(stdout, "\r pop_wmops(): stack underflow, too many calls to pop_wmops()\n"); + exit(-1); + } + + /* update count of current record */ + wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; + wmops[current_record].current_cnt += ops_cnt - wmops[current_record].start_cnt; + + /* Get back previous context from stack */ + if (sptr > 0) + { + current_record = stack[--sptr]; + wmops[current_record].start_selfcnt = ops_cnt; + } + else + { + current_record = -1; + } + + return; +} + + +void update_wmops(void) +{ + int i; + double current_cnt; + + if (sptr != 0) + { + fprintf(stdout, "update_wmops(): Stack must be empty!\n"); + exit(-1); + } + + for (i = 0; i < num_records; i++) + { + wmops[i].tot_selfcnt += wmops[i].current_selfcnt; + wmops[i].tot_cnt += wmops[i].current_cnt; + + if (wmops[i].current_selfcnt > 0) + { + if (wmops[i].current_selfcnt > wmops[i].max_selfcnt) + { + wmops[i].max_selfcnt = wmops[i].current_selfcnt; + } + + if (wmops[i].current_selfcnt < wmops[i].min_selfcnt) + { + wmops[i].min_selfcnt = wmops[i].current_selfcnt; + } + } + + wmops[i].current_selfcnt = 0; + + if (wmops[i].current_cnt > 0) + { + if (wmops[i].current_cnt > wmops[i].max_cnt) + { + wmops[i].max_cnt = wmops[i].current_cnt; + } + + if (wmops[i].current_cnt < wmops[i].min_cnt) + { + wmops[i].min_cnt = wmops[i].current_cnt; + } + + wmops[i].update_cnt++; + } + + wmops[i].current_cnt = 0; + } + + current_cnt = ops_cnt - start_cnt; + if (current_cnt > max_cnt) + { + max_cnt = current_cnt; + + for (i = 0; i < NUM_INST; i++) + { + inst_cnt_wc[i] = inst_cnt[i]; + } + + fnum_cnt_wc = update_cnt + 1; + } + + if (current_cnt < min_cnt) + { + min_cnt = current_cnt; + } + + for (i = 0; i < NUM_INST; i++) + { + inst_cnt[i] = 0.0; + } + + start_cnt = ops_cnt; + update_cnt++; + + return; +} + + +void print_wmops(void) +{ + int i; + + char* sfmts = "%20s %8s %8s %7s %7s\n"; + char* dfmts = "%20s %8.2f %8.3f %7.3f %7.3f\n"; + char* sfmt = "%20s %8s %8s %7s %7s %7s %7s %7s\n"; + char* dfmt = "%20s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; + +#if ENABLE_TREE + + int j; + char* sfmtt = "%20s %4s %15s\n"; + char* dfmtt = "%20s %4d "; + +#endif + + fprintf(stdout, "\n\n --- Weighted MOPS Analysis --- \n\n"); + fprintf(stdout, "WMOPS boost factor: %4.2f\n\n", WMOPS_BOOST_FAC); + + fprintf(stdout, "%54s %23s\n", "|------ SELF ------|", "|--- CUMULATIVE ---|"); + fprintf(stdout, sfmt, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg "); + fprintf(stdout, sfmt, "---------------", "------", "------", "------", "------", "------", "------", "------"); + + for (i = 0; i < num_records; i++) + { + fprintf(stdout, dfmt, wmops[i].label, update_cnt == 0 ? 0 : (float)wmops[i].call_number / update_cnt, + wmops[i].min_selfcnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_selfcnt, + FAC * wmops[i].max_selfcnt, + wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_selfcnt / wmops[i].update_cnt, + wmops[i].min_cnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_cnt, + FAC * wmops[i].max_cnt, + wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_cnt / wmops[i].update_cnt); + } + + fprintf(stdout, sfmts, "---------------", "------", "------", "------", "------"); + fprintf(stdout, dfmts, "total", (float)update_cnt, FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt / update_cnt); + fprintf(stdout, "\n"); + +#if ENABLE_TREE + fprintf(stdout, "\nCall Tree:\n\n"); + fprintf(stdout, sfmtt, " function", "num", "called by: "); + fprintf(stdout, sfmtt, "---------------", "---", "--------------"); + + for (i = 0; i < num_records; i++) + { + fprintf(stdout, dfmtt, wmops[i].label, i); + for (j = 0; wmops[i].call_tree[j] != -1; j++) + { + if (j != 0) + { + fprintf(stdout, ", "); + } + fprintf(stdout, "%d", wmops[i].call_tree[j]); + } + fprintf(stdout, "\n"); + } + + fprintf(stdout, sfmtt, "---------------", "---", "--------------"); + fprintf(stdout, "\n\n"); + + fprintf(stdout, "\nInstruction Type Analysis (for worst case frame #%ld):\n\n", fnum_cnt_wc); /* added -- JPA */ + for (i = 0; i < NUM_INST; i++) + { + switch ((enum instructions)i) + { + case _ADD: + fprintf(stdout, "\tAdds: %12.1f\n", inst_cnt_wc[i]); + break; + case _ABS: + fprintf(stdout, "\tAbsolutes: %12.1f\n", inst_cnt_wc[i]); + break; + case _MULT: + fprintf(stdout, "\tMultiplies: %12.1f\n", inst_cnt_wc[i]); + break; + case _MAC: + fprintf(stdout, "\tMACs: %12.1f\n", inst_cnt_wc[i]); + break; + case _MOVE: + fprintf(stdout, "\tMoves: %12.1f\n", inst_cnt_wc[i]); + break; + case _STORE: + fprintf(stdout, "\tStores: %12.1f\n", inst_cnt_wc[i]); + break; + case _LOGIC: + fprintf(stdout, "\tLogicals: %12.1f\n", inst_cnt_wc[i]); + break; + case _SHIFT: + fprintf(stdout, "\tShifts: %12.1f\n", inst_cnt_wc[i]); + break; + case _BRANCH: + fprintf(stdout, "\tBranches: %12.1f\n", inst_cnt_wc[i]); + break; + case _DIV: + fprintf(stdout, "\tDivisions: %12.1f\n", inst_cnt_wc[i]); + break; + case _SQRT: + fprintf(stdout, "\tSquare Root: %12.1f\n", inst_cnt_wc[i]); + break; + case _TRANS: + fprintf(stdout, "\tTrans: %12.1f\n", inst_cnt_wc[i]); + break; + case _FUNC: + fprintf(stdout, "\tFunc Call: %12.1f\n", inst_cnt_wc[i]); + break; + case _LOOP: + fprintf(stdout, "\tLoop Init: %12.1f\n", inst_cnt_wc[i]); + break; + case _INDIRECT: + fprintf(stdout, "\tIndirect Addr: %12.1f\n", inst_cnt_wc[i]); + break; + case _PTR_INIT: + fprintf(stdout, "\tPointer Init: %12.1f\n", inst_cnt_wc[i]); + break; + case _TEST: + fprintf(stdout, "\tExtra condit.: %12.1f\n", inst_cnt_wc[i]); + break; + case _POWER: + fprintf(stdout, "\tExponential: %12.1f\n", inst_cnt_wc[i]); + break; + case _LOG: + fprintf(stdout, "\tLogarithm: %12.1f\n", inst_cnt_wc[i]); + break; + case _MISC: + fprintf(stdout, "\tAll other op.: %12.1f\n", inst_cnt_wc[i]); + break; + default: + fprintf(stdout, "\tERROR: Invalid instruction type: %d\n\n", i); + } + } +#endif + + return; +} + + +/*-------------------------------------------------------------------* + * Memory counting tool measuring RAM usage (stack and heap) + * + * Maximum RAM is measured by monitoring the total allocated memory (stack and heap) in each frame. + * + * Maximum stack is measured by monitoring the difference between the 'top' and 'bottom' of the stack. The 'bottom' of the stack is updated in each function + * with a macro 'func_start_' which is inserted automatically to all functions during the instrumentation process. + * + * Maximum heap is measured by summing the sizes of all memory blocks allocated by malloc() or calloc() and deallocated by free(). The maximum heap size is + * updated each time when the macros malloc_() or calloc_() is invoked. The macros 'malloc_ and calloc_' are inserted automatically during the instrumentation process. + * As part of heap measurements, intra-frame heap and inter-frame heap are measured separately. Intra-frame heap refers to heap memory which is allocated and deallocated + * within a single frame. Inter-frame heap, on the contrary, refers to heap memory which is preserved for more than one frame. + * + * In order to run the memory counting tool the function reset_mem(cnt_size) must be called at the beginning of the encoding/decoding process. + * The unit in which memory consumption is reported is set via the parameter 'cnt_size'. It can be set to 0 (bytes), 1 (32b words) or 2 (64b words). + * At the end of the encoding/decoding process, 'print_mem()' function may be called to print basic information about memory consumption. If the macro 'MEM_COUNT_DETAILS' + * is activated, detailed information is printed + * + * The macro 'WMOPS' needs to be activated to enable memory counting. To avoid the instrumentation of malloc()/calloc()/free() calls, use + * #define WMC_TOOL_SKIP ... #undef WMC_TOOL_SKIP macro pair around the malloc(), calloc() and free(). + *--------------------------------------------------------------------*/ + +#define MAX_RECORDABLE_CALLS 40 +#define MAX_FUNCTION_NAME_LENGTH 35 /* Maximum length that the function string will be truncated to */ +#define MAX_PARAMS_LENGTH 50 /* Maximum length that the parameter string will be truncated to */ +#define MAX_NUM_RECORDS 300 /* Initial maximum number of memory records -> mightb be increased during runtime, if needed */ +#define MAX_NUM_RECORDS_REALLOC_STEP 10 /* When re-allocating the list of memory records, increase the number of records by this number */ + + /* This is the value (in bytes) towards which the block size is rounded. For example, a block of 123 bytes, when using + a 32 bits system, will end up taking 124 bytes since the last unused byte cannot be used for another block. */ +#ifdef MEM_ALIGN_64BITS +#define BLOCK_ROUNDING 8 /* Align on 64 Bits */ +#else +#define BLOCK_ROUNDING 4 /* Align on 32 Bits */ +#endif + +#define N_32BITS_BLOCKS ( BLOCK_ROUNDING / sizeof( int32_t ) ) + +#define MAGIC_VALUE_OOB 0x12A534F0 /* Signature value which is inserted before and after each allocated memory block, used to detect out-of-bound access */ +#define MAGIC_VALUE_USED ( ~MAGIC_VALUE_OOB ) /* Value used to pre-fill allocated memory blocks, used to calculate actual memory usage */ +#define OOB_START 0x1 /* Flag indicating out-of-bounds access before memory block */ +#define OOB_END 0x2 /* Flag indicating out-of-bounds access after memory block */ + +#define ROUND_BLOCK_SIZE( n ) ( ( ( n ) + BLOCK_ROUNDING - 1 ) & ~( BLOCK_ROUNDING - 1 ) ) +#define IS_CALLOC( str ) ( str[0] == 'c' ) + +typedef struct +{ + char function_name[MAX_FUNCTION_NAME_LENGTH + 1]; + int16_t* stack_ptr; +} caller_info; + +caller_info stack_callers[2][MAX_RECORDABLE_CALLS]; + +typedef struct +{ + char name[MAX_FUNCTION_NAME_LENGTH + 1]; /* +1 for NUL */ + char params[1 + MAX_PARAMS_LENGTH + 1]; /* +1 for 'm'/'c' alloc & +1 for NUL */ + unsigned long hash; + int lineno; + void* block_ptr; + int block_size; + int max_block_size; /* Maximum block size allocated */ + int32_t wc_heap_size[2]; /* Worst-Case Heap [Frame#, Size] */ + int32_t wc_heap_size_intra_frame[2]; /* Worst-Case Intra-Frame Heap [Frame#, Size] */ + int32_t wc_heap_size_inter_frame[2]; /* Worst-Case Inter-Frame Heap [Frame#, Size] */ + int frame_allocated; /* Frame number in which the Memory Block has been allocated */ + float ave_usage; /* Average Usage of memory block calculated as ratio of used size and allocated size */ + int OOB_Flag; + int noccurances; /* Numer of times that the Memory Block Was Allocated */ +} allocator_record; + +allocator_record* allocation_list = NULL, * peak_allocations, * peak_allocations_one_frame, * peak_allocations_state; + +static int16_t* ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ +static int16_t* ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ +static int32_t wc_frame = 0; /* Frame corresponding to the worst-case stack usage */ +static int32_t wc_ram_size, wc_ram_frame; +static int32_t current_heap_size, wc_heap_size[2], wc_heap_size_intra_frame[2], wc_heap_size_inter_frame[2]; +static int current_calls = 0; +static char location_max_stack[256] = "undefined"; +static int Num_Records; +static size_t Stat_Cnt_Size = USE_BYTES; +static int Max_Num_Records; +static const char* Count_Unit[] = { "bytes", "words", "words" }; + +/* Local Functions */ +static unsigned long malloc_hash(const char* func_name, int func_lineno, char* size_str); +allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int func_lineno, char* size_str); +static void* mem_alloc_block(size_t size, const char* size_str); + +/*-------------------------------------------------------------------* + * reset_mem() + * + * Initialize/reset memory counting tool (stack and heap) + *--------------------------------------------------------------------*/ + +void reset_mem(Counting_Size cnt_size) +{ + int16_t something; + size_t tmp_size; + + /* initialize stack pointers */ + ptr_base_stack = &something; + ptr_max_stack = ptr_base_stack; + + Stat_Cnt_Size = cnt_size; + + /* Check, if sizeof(int32_t) is 4 bytes */ + tmp_size = sizeof(int32_t); + if (tmp_size != 4) + { + printf("Error: Expecting 'int32_t' to be a 32 Bits Integer!"); + exit(-1); + } + + /* create allocation list for malloc() memory blocks */ + if (allocation_list == NULL) + { + allocation_list = malloc(MAX_NUM_RECORDS * sizeof(allocator_record)); + } + + if (allocation_list == NULL) + { + printf("Error: Unable to Create List of Memory Blocks!"); + exit(-1); + } + + Num_Records = 0; + Max_Num_Records = MAX_NUM_RECORDS; + + wc_ram_size = 0; + wc_ram_frame = -1; + current_heap_size = 0; + wc_heap_size[0] = -1; + wc_heap_size[1] = 0; + wc_heap_size_intra_frame[0] = -1; + wc_heap_size_intra_frame[1] = 0; + wc_heap_size_inter_frame[0] = -1; + wc_heap_size_inter_frame[1] = 0; + + return; +} + +/*-------------------------------------------------------------------* + * reset_stack() + * + * Reset stack pointer + *--------------------------------------------------------------------*/ + +void reset_stack(void) +{ + int16_t something; + + /* initialize/reset stack pointers */ + ptr_base_stack = &something; + ptr_max_stack = ptr_base_stack; + + return; +} + +/*-------------------------------------------------------------------* + * push_stack() + * + * Check the current stack pointer and update the maximum stack pointer, if new maximum found. + *--------------------------------------------------------------------*/ + +int push_stack(const char* filename, const char* fctname) +{ + int16_t something; + int32_t current_stack_size; + + (void)*filename; /* to avoid compilation warning */ + + /* Is there room to save the caller's information? */ + if (current_calls >= MAX_RECORDABLE_CALLS) + { /* No */ + fprintf(stderr, "No more room to store call stack info. Please increase MAX_RECORDABLE_CALLS"); + exit(-1); + } + + /* Valid Function Name? */ + if (fctname[0] == 0) + { /* No */ + fprintf(stderr, "Invalid function name for call stack info."); + exit(-1); + } + + /* Save the Name of the Calling Function in the Table */ + strncpy(stack_callers[0][current_calls].function_name, fctname, MAX_FUNCTION_NAME_LENGTH); + stack_callers[0][current_calls].function_name[MAX_FUNCTION_NAME_LENGTH] = 0; /* Nul Terminate */ + + /* Save the Stack Pointer */ + stack_callers[0][current_calls].stack_ptr = &something; + + /* Increase Stack Calling Tree Level */ + current_calls++; + + /* Is this the First Time or the Worst Case? */ + if (&something < ptr_max_stack || ptr_max_stack == NULL) + { /* Yes */ + /* Save Info about it */ + ptr_max_stack = &something; + + //wc_frame = frame; + wc_frame = update_cnt; /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ + strncpy(location_max_stack, fctname, sizeof(location_max_stack) - 1); + location_max_stack[sizeof(location_max_stack) - 1] = '\0'; + + /* Save Call Tree */ + memmove(stack_callers[1], stack_callers[0], sizeof(caller_info) * current_calls); + + /* Terminate the List (Unless Full) */ + if (current_calls < MAX_RECORDABLE_CALLS) + { + stack_callers[1][current_calls].function_name[0] = 0; + } + } + + /* Check, if This is the New Worst-Case RAM (stack + heap) */ + current_stack_size = (int32_t)(((ptr_base_stack - ptr_max_stack) * sizeof(int16_t))); + if (current_stack_size + current_heap_size > wc_ram_size) + { + wc_ram_size = current_stack_size + current_heap_size; + wc_ram_frame = update_cnt; + } + + return 0 /* for Now */; +} + +/*-------------------------------------------------------------------* + * pop_stack() + * + * Remove stack caller entry from the list + *--------------------------------------------------------------------*/ + +int pop_stack(const char* filename, const char* fctname) +{ + caller_info* caller_info_ptr; + + (void)*filename; /* to avoid compilation warning */ + + /* Decrease Stack Calling */ + current_calls--; + + /* Get Pointer to Caller Information */ + caller_info_ptr = &stack_callers[0][current_calls]; + + /* Check, if Names Match */ + if (strncmp(caller_info_ptr->function_name, fctname, MAX_FUNCTION_NAME_LENGTH) != 0) + { + fprintf(stderr, "Invalid usage of pop_stack()"); + exit(-1); + } + + /* Erase Entry */ + caller_info_ptr->function_name[0] = 0; + + return 0 /* for Now */; +} + +#ifdef MEM_COUNT_DETAILS +/*-------------------------------------------------------------------* + * print_stack_call_tree() + * + * Print detailed information about worst-case stack usage + *--------------------------------------------------------------------*/ + +static void print_stack_call_tree(void) +{ + caller_info* caller_info_ptr; + int call_level; + + fprintf(stdout, "Stack Call Tree (frame #%d):\n", wc_frame); + caller_info_ptr = &stack_callers[1][0]; + for (call_level = 0; call_level < MAX_RECORDABLE_CALLS; call_level++) + { + /* Done? */ + if (caller_info_ptr->function_name[0] == 0) + break; + + /* Print Name */ + fprintf(stdout, "%-42s", caller_info_ptr->function_name); + + /* Print Stack Usage (Based on Difference) */ + if (call_level != 0) + { + fprintf(stdout, "%lu\n", ((caller_info_ptr - 1)->stack_ptr - caller_info_ptr->stack_ptr) * sizeof(int16_t) / sizeof(float)); + } + else + { + fprintf(stdout, "\n"); + } + + /* Advance */ + caller_info_ptr++; + } + + fprintf(stdout, "\n"); + + return; +} +#endif + + +/*-------------------------------------------------------------------* + * mem_alloc() + * + * Creates new record, stores auxiliary information about which function allocated the memory, line number, parameters, etc. + * Finally, it allocates physical memory using malloc() + * The function also updates worst-case heap size and worst-case RAM size + *--------------------------------------------------------------------*/ + +void* mem_alloc( + const char* func_name, + int func_lineno, + size_t size, + char* size_str /* the first char indicates m-alloc or c-alloc */) +{ + int i; + int32_t current_stack_size; + unsigned long hash; + allocator_record* ptr_record; + + if (size == 0) + { + printf("Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Size of Zero not Supported"); + exit(-1); + } + + /* Create new record, if not existing */ + if ((ptr_record = get_mem_record(&hash, func_name, func_lineno, size_str)) == NULL) + { + if (Num_Records >= Max_Num_Records) + { + /* There is no room for a new record -> reallocate memory */ + Max_Num_Records += MAX_NUM_RECORDS_REALLOC_STEP; + allocation_list = realloc(allocation_list, Max_Num_Records * sizeof(allocator_record)); + } + + ptr_record = &(allocation_list[Num_Records]); + + /* Initialize new record */ + ptr_record->hash = hash; + ptr_record->ave_usage = 0; + ptr_record->noccurances = 0; + ptr_record->max_block_size = 0; + ptr_record->frame_allocated = -1; + ptr_record->OOB_Flag = 0; + ptr_record->wc_heap_size[0] = -1; + ptr_record->wc_heap_size[1] = 0; + ptr_record->wc_heap_size_intra_frame[0] = -1; + ptr_record->wc_heap_size_intra_frame[1] = 0; + ptr_record->wc_heap_size_inter_frame[0] = -1; + ptr_record->wc_heap_size_inter_frame[1] = 0; + + Num_Records++; + } + else + { + printf("Record Exists"); + } + + /* Allocate memory block for the new record, add signature before the beginning and after the memory block and fill it with magic value */ + ptr_record->block_ptr = mem_alloc_block(size, size_str); + + if (ptr_record->block_ptr == NULL) + { + printf("Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Cannot Allocate Memory!"); + exit(-1); + } + + /* Save all zuxiliary information about the memory block */ + strncpy(ptr_record->name, func_name, MAX_FUNCTION_NAME_LENGTH); + ptr_record->name[MAX_FUNCTION_NAME_LENGTH] = '\0'; + strncpy(ptr_record->params, size_str, MAX_PARAMS_LENGTH); /* Note: The size string starts with either 'm' or 'c' to indicate 'm'alloc or 'c'alloc */ + ptr_record->params[MAX_PARAMS_LENGTH] = '\0'; + ptr_record->lineno = func_lineno; + ptr_record->block_size = size; + + if (ptr_record->block_size > ptr_record->max_block_size) + { + ptr_record->max_block_size = ptr_record->block_size; + } + + if (ptr_record->frame_allocated != -1) + { + printf("Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Attempt to Allocate the Same Memory Block with Freeing it First!"); + exit(-1); + } + + ptr_record->frame_allocated = update_cnt; /* Store the current frame number -> later it will be used to determine the total duration */ + ptr_record->noccurances++; + + /* Update Heap Size in the current frame */ + current_heap_size += ptr_record->block_size; + + /* Update Worst-Case Heap Size, if Exceeded */ + if (current_heap_size > wc_heap_size[1]) + { + for (i = 0; i < Num_Records; i++) + { + if (allocation_list[i].block_ptr != NULL) + { + allocation_list[i].wc_heap_size[0] = update_cnt; + allocation_list[i].wc_heap_size[1] = allocation_list[i].block_size; + } + else + { + allocation_list[i].wc_heap_size[0] = -1; + allocation_list[i].wc_heap_size[1] = 0; + } + } + + wc_heap_size[0] = update_cnt; + wc_heap_size[1] = current_heap_size; + } + + /* Check, if this is the new Worst-Case RAM (stack + heap) */ + current_stack_size = (int32_t)(((ptr_base_stack - ptr_max_stack) * sizeof(int16_t))); + if (current_stack_size + current_heap_size > wc_ram_size) + { + wc_ram_size = current_stack_size + current_heap_size; + wc_ram_frame = update_cnt; + } + + return ptr_record->block_ptr; +} + +/*-------------------------------------------------------------------* + * mem_alloc_block() + * + * Physical allocation of memory using malloc(). Appends 'signature' before and after the block, + * pre-fills memory block with magic value + *--------------------------------------------------------------------*/ + +static void* mem_alloc_block(size_t size, const char* size_str) +{ + size_t rounded_size; + void* block_ptr; + char* tmp_ptr; + size_t n, f; + int32_t fill_value; + int32_t* ptr32; + int32_t mask, temp; + + /* Round Up Block Size */ + rounded_size = ROUND_BLOCK_SIZE(size); + + /* Allocate memory using the standard malloc() by adding room for Signature Values */ + block_ptr = malloc(rounded_size + BLOCK_ROUNDING * 2); + + if (block_ptr == NULL) + { + return NULL; + } + + /* Add Signature Before the Start of the Block */ + ptr32 = (int32_t*)block_ptr; + n = N_32BITS_BLOCKS; + do + { + *ptr32++ = MAGIC_VALUE_OOB; + } while (--n); + + /* Fill Memory Block with Magic Value or 0 */ + fill_value = MAGIC_VALUE_USED; + if (IS_CALLOC(size_str)) + { + fill_value = 0x00000000; + } + n = size / sizeof(int32_t); + while (n--) + { + *ptr32++ = fill_value; + } + + /* Fill the Reminder of the Memory Block - After Rounding */ + n = rounded_size - size; + f = n % sizeof(int32_t); + if (f != 0) + { + /* when filling with '0' need to adapt the magic value */ + /* shift by [1->24, 2->16, 3->8] */ + mask = 0xFFFFFFFF << ((sizeof(int32_t) - f) * 8); /* (1) */ + temp = MAGIC_VALUE_OOB & mask; + if (fill_value != 0x0) + { /* for malloc merge fill value */ + temp += (~mask) & MAGIC_VALUE_USED; + } /* for calloc the code in (1) above already introduces zeros */ + *ptr32++ = temp; + } + n /= sizeof(int32_t); + n += N_32BITS_BLOCKS; + + /* Add Signature After the End of Block */ + do + { + *ptr32++ = MAGIC_VALUE_OOB; + } while (--n); + + /* Adjust the Memory Block Pointer (Magic Value Before and After the Memory Block Requested) */ + tmp_ptr = (char*)block_ptr; + tmp_ptr += BLOCK_ROUNDING; + block_ptr = (void*)tmp_ptr; + + return block_ptr; +} + +/*-------------------------------------------------------------------* + * mem_set_usage() + * + * Calculates actual usage of memory block by checking the magic value that was used to pre-fill + * each memory block during its allocation + *--------------------------------------------------------------------*/ + +static int mem_set_usage(allocator_record* record_ptr) +{ + int total_bytes_used; + + size_t n; + int32_t* ptr32; + char* ptr8; + size_t total_bytes; + int32_t fill_value; + + fill_value = MAGIC_VALUE_USED; + if ((record_ptr->params[0]) == 'c') + { + fill_value = 0x00000000; + } + + total_bytes = record_ptr->block_size; + + /* Check 4 bytes at a time */ + ptr32 = (int32_t*)record_ptr->block_ptr; + total_bytes_used = 0; + for (n = total_bytes / sizeof(int32_t); n > 0; n--) + { + if (*ptr32++ != fill_value) + { + total_bytes_used += sizeof(int32_t); + } + } + + /* Check remaining bytes (If Applicable) 1 byte at a time */ + ptr8 = (char*)ptr32; + for (n = total_bytes % sizeof(int32_t); n > 0; n--) + { + if (*ptr8++ != (char)fill_value) + { + total_bytes_used++; + } + + /* Update Value */ + fill_value >>= 8; + } + + return total_bytes_used; +} + +/*-------------------------------------------------------------------* + * mem_check_OOB() + * + * Checks, if out-of-bounds access has occured. This is done by inspecting the 'signature' value + * taht has been added before and after the memory block during its allocation + *--------------------------------------------------------------------*/ + +static unsigned int mem_check_OOB(allocator_record* record_ptr) +{ + int32_t* ptr32; + unsigned int OOB_Flag = 0x0; + int32_t mask; + size_t i; + int f; + + ptr32 = (int32_t*)record_ptr->block_ptr - N_32BITS_BLOCKS; + + /* Check the Signature at the Beginning of Memory Block */ + i = N_32BITS_BLOCKS; + do + { + if (*ptr32++ ^ MAGIC_VALUE_OOB) + { + OOB_Flag |= OOB_START; + } + } while (--i); + + /* Advance to End (Snap to lowest 32 Bits) */ + ptr32 += record_ptr->block_size / sizeof(int32_t); + + /* Calculate Unused Space That has been added to get to the rounded Block Size */ + i = ROUND_BLOCK_SIZE(record_ptr->block_size) - record_ptr->block_size; + + /* Partial Check of Signature at the End of Memory Block (for block size that has been rounded) */ + f = i % sizeof(int32_t); + if (f != 0) + { + mask = 0xFFFFFFFF << ((sizeof(int32_t) - f) * 8); + if ((*ptr32++ ^ MAGIC_VALUE_OOB) & mask) + { + OOB_Flag |= OOB_END; + } + } + + /* Full Check of Signature at the End of Memory Block, i.e. all 32 Bits (for the remainder after rounding) */ + i /= sizeof(int32_t); + i += N_32BITS_BLOCKS; + do + { + if (*ptr32++ ^ MAGIC_VALUE_OOB) + { + OOB_Flag |= OOB_END; + } + } while (--i); + + return OOB_Flag; +} + +/*-------------------------------------------------------------------* + * malloc_hash() + * + * Calculate hash from function name, line number and malloc size + *--------------------------------------------------------------------*/ + +static unsigned long malloc_hash(const char* func_name, int func_lineno, char* size_str) +{ + unsigned long hash = 5381; + const char* ptr_str; + int c; + + ptr_str = func_name; + while (c = *ptr_str++) + { + hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + } + + hash = ((hash << 5) + hash) + func_lineno; /* hash * 33 + func_lineno */ + + ptr_str = size_str; + while (c = *ptr_str++) + { + hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + } + + return hash; +} + +/*-------------------------------------------------------------------* + * get_mem_record() + * + * Search for memory record in the internal list, return NULL if not found + *--------------------------------------------------------------------*/ + +allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int func_lineno, char* size_str) +{ + int i; + + /* calculate hash */ + *hash = malloc_hash(func_name, func_lineno, size_str); + + for (i = 0; i < Num_Records; i++) + { + /* check, if memory block is not allocated at the moment and the hash matches */ + if (allocation_list[i].block_ptr == NULL && *hash == allocation_list[i].hash) + { + return &(allocation_list[i]); + } + } + + /* not found */ + return NULL; +} + +/*-------------------------------------------------------------------* + * mem_free() + * + * This function updates worst-case intra-frame memory and worst-case inter-frame memory. It also updates actual and average usage of + * the memory block and finally, it de-allocates the physical memory with free() + * + * Note: The record is not removed from the list and may be reused later on in mem_alloc()! + *--------------------------------------------------------------------*/ + +void mem_free(const char* func_name, int func_lineno, void* ptr) +{ + int i; + int32_t current_heap_size_intra_frame, current_heap_size_inter_frame; + float current_usage; + char* tmp_ptr; + allocator_record* ptr_record; + + /* Search for the Block Pointer in the List */ + ptr_record = NULL; + for (i = 0; i < Num_Records; i++) + { + if (ptr == allocation_list[i].block_ptr) + { /* Yes, Found it */ + ptr_record = &(allocation_list[i]); + break; + } + } + + if (ptr_record == NULL) + { + printf("Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Unable to Find Record Corresponding to the Allocated Memory Block!"); + exit(-1); + } + + /* Update the Heap Size */ + current_heap_size -= ptr_record->block_size; + + /* Calculate Intra-Frame Heap Size and Inter-Frame Heap Size in the Current Frame */ + current_heap_size_intra_frame = 0; + current_heap_size_inter_frame = 0; + for (i = 0; i < Num_Records; i++) + { + if (allocation_list[i].block_ptr != NULL) + { + if (allocation_list[i].frame_allocated == update_cnt) + { + current_heap_size_intra_frame += allocation_list[i].block_size; + } + else + { + current_heap_size_inter_frame += allocation_list[i].block_size; + } + } + } + + /* Update Worst-Case Intra-Frame Heap Size, if Exceeded */ + if (ptr_record->frame_allocated == update_cnt && current_heap_size_intra_frame > wc_heap_size_intra_frame[1]) + { + for (i = 0; i < Num_Records; i++) + { + if (allocation_list[i].block_ptr != NULL) + { + allocation_list[i].wc_heap_size_intra_frame[0] = update_cnt; + allocation_list[i].wc_heap_size_intra_frame[1] = allocation_list[i].block_size; + } + else + { + allocation_list[i].wc_heap_size_intra_frame[0] = -1; + allocation_list[i].wc_heap_size_intra_frame[1] = 0; + } + } + + wc_heap_size_intra_frame[0] = update_cnt; + wc_heap_size_intra_frame[1] = current_heap_size_intra_frame; + } + + /* Update Worst-Case Inter-Frame Heap Size, if Exceeded */ + if (ptr_record->frame_allocated < update_cnt && current_heap_size_inter_frame > wc_heap_size_inter_frame[1]) + { + for (i = 0; i < Num_Records; i++) + { + if (allocation_list[i].block_ptr != NULL) + { + allocation_list[i].wc_heap_size_inter_frame[0] = update_cnt; + allocation_list[i].wc_heap_size_inter_frame[1] = allocation_list[i].block_size; + } + else + { + allocation_list[i].wc_heap_size_inter_frame[0] = -1; + allocation_list[i].wc_heap_size_inter_frame[1] = 0; + } + } + + wc_heap_size_inter_frame[0] = update_cnt; + wc_heap_size_inter_frame[1] = current_heap_size_inter_frame; + + } + + /* Update the Average Usage of Memory Block (Look for Signature) */ + current_usage = (float)mem_set_usage(ptr_record) / ptr_record->block_size; + ptr_record->ave_usage = ((ptr_record->noccurances - 1.0f) / ptr_record->noccurances) * ptr_record->ave_usage + (1.0f / ptr_record->noccurances) * current_usage; + + /* Check, if Out-Of-Bounds Access has been Detected */ + ptr_record->OOB_Flag = mem_check_OOB(ptr_record); + + /* De-Allocate Memory Block */ + tmp_ptr = (char*)ptr; + tmp_ptr -= BLOCK_ROUNDING; + ptr = (void*)tmp_ptr; + free(ptr); + + /* Reset some properties of the memory record */ + ptr_record->frame_allocated = -1; + ptr_record->block_ptr = NULL; + ptr_record->block_size = 0; + + return; +} + +#ifdef MEM_COUNT_DETAILS +/*-------------------------------------------------------------------* + * subst() + * + * Substitute character in string + *--------------------------------------------------------------------*/ + +static void subst(char* s, char from, char to) +{ + while (*s == from) + { + *s++ = to; + } + + return; +} + +/*-------------------------------------------------------------------* + * mem_count_summary() + * + * Print detailed (per-item) information about heap memory usage + *--------------------------------------------------------------------*/ + +static void mem_count_summary(void) +{ + int i, j, flag_intra_frame_memory; + size_t length; + char format_str[50], name_str[MAX_FUNCTION_NAME_LENGTH + 1], parms_str[MAX_PARAMS_LENGTH + 1], type_str[10], usage_str[20], size_str[20], line_str[10]; + char buf[300]; + allocator_record* record_ptr; + + /* Prepare format string */ + sprintf(format_str, "%%-%ds %%5s %%6s %%-%ds %%14s %%6s ", MAX_FUNCTION_NAME_LENGTH, MAX_PARAMS_LENGTH); + + /* Check, if we have at least one Intra-Frame Heap memory block in the list */ + flag_intra_frame_memory = 0; + for (i = 0; i < Num_Records; i++) + { + record_ptr = &(allocation_list[i]); + if (record_ptr->wc_heap_size_intra_frame[1] > 0) + { + flag_intra_frame_memory = 1; + break; + } + } + + for (j = 0; j < 3; j++) + { + if (j == 0 && wc_heap_size[1] > 0) + { + /* Total Heap Size */ + printf("\nList of memory blocks when maximum heap size is reached:\n\n"); + } + else if (j == 1 && flag_intra_frame_memory && wc_heap_size_intra_frame[1] > 0) + { + /* Intra-Frame Heap Size */ + printf("\nList of memory blocks when maximum Intra-Frame Heap Size is reached:\n\n"); + } + else if (j == 2 && flag_intra_frame_memory && wc_heap_size_inter_frame[1] > 0) + { + /* Inter-Frame Heap Size */ + printf("\nList of memory blocks when maximum Inter-Frame Heap Size is reached:\n\n"); + } + else + { + continue; + } + + /* Print Header */ + sprintf(buf, format_str, "Function Name", "Line", "Type", "Function Parameters", "Maximum Size", "Usage"); + puts(buf); + length = strlen(buf); + sprintf(buf, "%0*d\n", (int)length - 1, 0); + subst(buf, '0', '-'); + puts(buf); + + /* Print all Records */ + for (i = 0; i < Num_Records; i++) + { + record_ptr = &(allocation_list[i]); + + if ((j == 0 && record_ptr->wc_heap_size[1] > 0) || + (j == 1 && record_ptr->wc_heap_size_intra_frame[1] > 0) || + (j == 2 && record_ptr->wc_heap_size_inter_frame[1] > 0) + ) + { + strncpy(name_str, record_ptr->name, MAX_FUNCTION_NAME_LENGTH); + name_str[MAX_FUNCTION_NAME_LENGTH] = '\0'; + strncpy(parms_str, &(record_ptr->params[2]), MAX_PARAMS_LENGTH); + parms_str[MAX_PARAMS_LENGTH] = '\0'; + + if (record_ptr->params[0] == 'm') + { + strcpy(type_str, "malloc"); + } + else + { + strcpy(type_str, "calloc"); + } + + sprintf(usage_str, "%d%%", (int)(record_ptr->ave_usage * 100.0f)); + sprintf(line_str, "%d", record_ptr->lineno); + sprintf(size_str, "%d %s", (int)(record_ptr->max_block_size >> Stat_Cnt_Size), Count_Unit[Stat_Cnt_Size]); + + sprintf(buf, format_str, name_str, line_str, type_str, parms_str, size_str, usage_str); + puts(buf); + } + } + + printf("\n\n"); + } + + return; +} +#endif + +/*-------------------------------------------------------------------* + * print_mem() + * + * Print information about ROM and RAM memory usage + *--------------------------------------------------------------------*/ + +void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) +{ + int i, nElem; + + if (Const_Data_PROM_Table != NULL) + { + fprintf(stdout, "\n\n --- Program ROM usage --- \n\n"); + + nElem = 0; + while (strcmp(Const_Data_PROM_Table[nElem].file_spec, "") != 0) nElem++; + + for (i = 0; i < nElem; i++) + { + fprintf(stdout, "Program ROM size (%s): %d words (instructions)\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size); + } + + fprintf(stdout, "\n\n --- Table ROM (const data) usage --- \n\n"); + + for (i = 0; i < nElem; i++) + { + if (Const_Data_PROM_Table[i].Get_Const_Data_Size_Func == NULL) + { + fprintf(stdout, "Error: Cannot retrieve or calculate Table ROM size of (%s)!\n", Const_Data_PROM_Table[i].file_spec); + } + + fprintf(stdout, "Table ROM size (%s): %d words\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].Get_Const_Data_Size_Func()); + } + } + + if (wc_ram_size > 0) + { + fprintf(stdout, "\n\n --- RAM usage (Stack + Heap) --- \n\n"); + fprintf(stdout, "Maximum RAM size: %d %s in frame %d\n", wc_ram_size >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_ram_frame); + } + + if (ptr_base_stack - ptr_max_stack > 0) + { + fprintf(stdout, "\n\n --- Stack usage --- \n\n"); + fprintf(stdout, "Maximum stack size: %lu %s in frame #%d\n", ((ptr_base_stack - ptr_max_stack) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], + wc_frame); +#ifdef MEM_COUNT_DETAILS + print_stack_call_tree(); +#endif + } + + + /* check, if all memory blocks have been deallocated (freed) */ + for (i = 0; i < Num_Records; i++) + { + if (allocation_list[i].block_ptr != NULL) + { + printf("Fct=%s, Ln=%i: %s!\n", allocation_list[i].name, allocation_list[i].lineno, "Error: Memory Block has not been De-Allocated with free()!"); + exit(-1); + } + } + + if (wc_heap_size[1] > 0) + { + fprintf(stdout, "\n\n --- Heap usage (malloc/calloc) --- \n\n"); + printf("Maximum heap size: %d %s in frame %d\n", wc_heap_size[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size[0]); + } + + if (wc_heap_size_intra_frame[1] > 0) + { + printf("Maximum intra-frame heap size: %d %s in frame %d\n", wc_heap_size_intra_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_intra_frame[0]); + } + + if (wc_heap_size_inter_frame[1] > 0 && wc_heap_size_inter_frame[1] != wc_heap_size[1]) + { + printf("Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size_inter_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_inter_frame[1]); + } + +#ifdef MEM_COUNT_DETAILS + /* Print detailed information abour heap memory usage */ + mem_count_summary(); +#endif + + if (Stat_Cnt_Size > 0) + { + fprintf(stdout, "\nNote: 1 word = %d bits\n", 8 << Stat_Cnt_Size); + fprintf(stdout, "This is an optimistic estimate of memory consumption assuming that each variable type is stored with sizeof(type) bits\n\n"); + } + + /* De-allocate list of heap memory blocks */ + if (allocation_list != NULL) + { + free(allocation_list); + } + + return; +} + +#endif /* WMOPS */ + +#ifndef WMOPS +int cntr_push_pop = 0; /* global counter for checking balanced push_wmops()/pop_wmops() pairs when WMOPS is not activated */ +#endif + +#undef WMC_TOOL_SKIP + + + + + + diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h new file mode 100644 index 0000000000..f379572bc7 --- /dev/null +++ b/lib_debug/wmc_auto.h @@ -0,0 +1,523 @@ +/* + * (C) 2022 copyright VoiceAge Corporation. All Rights Reserved. + * + * This software is protected by copyright law and by international treaties. The source code, and all of its derivations, + * is provided by VoiceAge Corporation under the "ITU-T Software Tools' General Public License". Please, read the license file + * or refer to ITU-T Recommendation G.191 on "SOFTWARE TOOLS FOR SPEECH AND AUDIO CODING STANDARDS". + * + * Any use of this software is permitted provided that this notice is not removed and that neither the authors nor + * VoiceAge Corporation are deemed to have made any representations as to the suitability of this software + * for any purpose nor are held responsible for any defects of this software. THERE IS NO WARRANTY FOR THIS SOFTWARE. + * + * Authors: Guy Richard, Vladimir Malenovsky (Vladimir.Malenovsky@USherbrooke.ca) + */ + +#ifndef WMOPS_H +#define WMOPS_H + +/* To Prevent "warning: '$' in identifier or number" message under GCC */ +#ifdef __GNUC__ +#pragma GCC system_header +#endif + +/* Real-time relationships */ +#define FRAMES_PER_SECOND 50.0 +#define MILLION_CYCLES 1e6 + +#define WMOPS_BOOST_FAC (1.0f) /* scaling factor for equalizing the difference between automatic and manual instrumentation */ + +#define FAC (FRAMES_PER_SECOND/(MILLION_CYCLES*WMOPS_BOOST_FAC)) + +#define ENABLE_TREE 0 /* Call tree may be activated by setting this flag to 1 */ +#define NUM_INST 20 /* Total number of instruction types (in enum below) */ + + +/* inline function for memset in combination with float pointer */ +#define SET_FLOAT(ptr,value,num) \ +{ \ + int i; \ + LOOP(1); MOVE(num); \ + for (i=0; i < num; i++) \ + { \ + ptr[i] = value; \ + } \ +} + +/* inline function for memset in combination with integer */ +#define SET_INT(ptr,value,num) \ +{ \ + int i; \ + LOOP(1); MOVE(num); \ + for (i=0; i < num; i++) \ + { \ + ptr[i] = value; \ + } \ +} + +#ifdef WMOPS +enum instructions {_ADD,_ABS, _MULT, _MAC, _MOVE, _STORE, _LOGIC, _SHIFT, _BRANCH, _DIV, _SQRT, _TRANS, _FUNC, _LOOP, _INDIRECT, _PTR_INIT, _TEST, _POWER, _LOG, _MISC}; + +#define _ADD_C 1 +#define _ABS_C 1 +#define _MULT_C 1 +#define _MAC_C 1 +#define _MOVE_C 1 +#define _STORE_C 1 +#define _LOGIC_C 1 +#define _SHIFT_C 1 +#define _BRANCH_C 4 +#define _DIV_C 18 +#define _SQRT_C 10 +#define _TRANS_C 25 +#define _FUNC_C 2 /* need to add number of arguments */ +#define _LOOP_C 3 +#define _INDIRECT_C 2 +#define _PTR_INIT_C 1 +#define _TEST_C 2 +#define _POWER_C 25 +#define _LOG_C 25 +#define _MISC_C 1 + +#define _ADD_P 1 +#define _ABS_P 1 +#define _MULT_P 1 +#define _MAC_P 1 +#define _MOVE_P 1 +#define _STORE_P 0 +#define _LOGIC_P 1 +#define _SHIFT_P 1 +#define _BRANCH_P 2 +#define _DIV_P 2 +#define _SQRT_P 2 +#define _TRANS_P 2 +#define _FUNC_P 2 /* need to add number of arguments */ +#define _LOOP_P 1 +#define _INDIRECT_P 2 +#define _PTR_INIT_P 1 +#define _TEST_P 1 +#define _POWER_P 2 +#define _LOG_P 2 +#define _MISC_P 1 + +#define ADD(x) { {ops_cnt+=(_ADD_C*(x)); inst_cnt[_ADD]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_ADD_P*(x)); }}}} +#define ABS(x) { {ops_cnt+=(_ABS_C*(x)); inst_cnt[_ABS]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_ABS_P*(x)); }}}} +#define MULT(x) { {ops_cnt+=(_MULT_C*(x)); inst_cnt[_MULT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MULT_P*(x)); }}}} +#define MAC(x) { {ops_cnt+=(_MAC_C*(x)); inst_cnt[_MAC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MAC_P*(x)); }}}} +#define MOVE(x) { {ops_cnt+=(_MOVE_C*(x)); inst_cnt[_MOVE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MOVE_P*(x)); }}}} +#define STORE(x) { {ops_cnt+=(_STORE_C*(x)); inst_cnt[_STORE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_STORE_P*(x)); }}}} +#define LOGIC(x) { {ops_cnt+=(_LOGIC_C*(x)); inst_cnt[_LOGIC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_LOGIC_P*(x)); }}}} +#define SHIFT(x) { {ops_cnt+=(_SHIFT_C*(x)); inst_cnt[_SHIFT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_SHIFT_P*(x)); }}}} +#define BRANCH(x) { {ops_cnt+=(_BRANCH_C*(x)); inst_cnt[_BRANCH]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_BRANCH_P*(x)); }}}} +#define DIV(x) { {ops_cnt+=(_DIV_C*(x)); inst_cnt[_DIV]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_DIV_P*(x)); }}}} +#define SQRT(x) { {ops_cnt+=(_SQRT_C*(x)); inst_cnt[_SQRT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_SQRT_P*(x)); }}}} +#define TRANS(x) { {ops_cnt+=(_TRANS_C*(x)); inst_cnt[_TRANS]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_TRANS_P*(x)); }}}} +#define LOOP(x) { {ops_cnt+=(_LOOP_C*(x)); inst_cnt[_LOOP]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_LOOP_P*(x)); }}}} +#define INDIRECT(x) { {ops_cnt+=(_INDIRECT_C*(x)); inst_cnt[_INDIRECT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_INDIRECT_P*(x)); }}}} +#define PTR_INIT(x) { {ops_cnt+=(_PTR_INIT_C*(x)); inst_cnt[_PTR_INIT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_PTR_INIT_P*(x)); }}}} +#define TEST(x) { {ops_cnt+=(_TEST_C*(x)); inst_cnt[_TEST]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_TEST_P*(x)); }}}} +#define POWER(x) { {ops_cnt+=(_POWER_C*(x)); inst_cnt[_POWER]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_POWER_P*(x)); }}}} +#define LOG(x) { {ops_cnt+=(_LOG_C*(x)); inst_cnt[_LOG]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_LOG_P*(x)); }}}} +#define MISC(x) { {ops_cnt+=(_MISC_C*(x)); inst_cnt[_MISC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MISC_P*(x)); }}}} + +#define FUNC(x) { {ops_cnt+=(_FUNC_C+_MOVE_C*(x)); inst_cnt[_FUNC]++; inst_cnt[_MOVE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_FUNC_P+_MOVE_P*(x)); }}}} + +#define DADD(x) { {ops_cnt+=(2*_ADD_C*(x)); inst_cnt[_ADD]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_ADD_P*(x)); }}}} +#define DMULT(x) { {ops_cnt+=(2*_MULT_C*(x)); inst_cnt[_MULT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MULT_P*(x)); }}}} +#define DMAC(x) { {ops_cnt+=(2*_MAC_C*(x)); inst_cnt[_MAC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MAC_P*(x)); }}}} +#define DMOVE(x) { {ops_cnt+=(2*_MOVE_C*(x)); inst_cnt[_MOVE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MOVE_P*(x)); }}}} +#define DSTORE(x) { {ops_cnt+=(2*_STORE_C*(x)); inst_cnt[_STORE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_STORE_P*(x)); }}}} +#define DLOGIC(x) { {ops_cnt+=(2*_LOGIC_C*(x)); inst_cnt[_LOGIC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_LOGIC_P*(x)); }}}} +#define DSHIFT(x) { {ops_cnt+=(2*_SHIFT_C*(x)); inst_cnt[_SHIFT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_SHIFT_P*(x)); }}}} +#define DDIV(x) { {ops_cnt+=(2*_DIV_C*(x)); inst_cnt[_DIV]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_DIV_P*(x)); }}}} +#define DSQRT(x) { {ops_cnt+=(2*_SQRT_C*(x)); inst_cnt[_SQRT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_SQRT_P*(x)); }}}} +#define DTRANS(x) { {ops_cnt+=(2*_TRANS_C*(x)); inst_cnt[_TRANS]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_TRANS_P*(x)); }}}} + +extern double ops_cnt; +extern double prom_cnt; +extern double inst_cnt [NUM_INST]; +extern int ops_cnt_activ; + +void reset_wmops (void); +void push_wmops (const char *label); +void pop_wmops (void); +void update_wmops (void); +void print_wmops (void); + +#else /* WMOPS counting disabled */ + +#define reset_wmops() +extern int cntr_push_pop; +#define push_wmops(x) (cntr_push_pop++) +#define pop_wmops() (cntr_push_pop--) +#define update_wmops() (assert(cntr_push_pop == 0)) +#define print_wmops() + +#define ADD(x) +#define ABS(x) +#define MULT(x) +#define MAC(x) +#define MOVE(x) +#define STORE(x) +#define LOGIC(x) +#define SHIFT(x) +#define BRANCH(x) +#define DIV(x) +#define SQRT(x) +#define TRANS(x) +#define FUNC(x) +#define LOOP(x) +#define INDIRECT(x) +#define PTR_INIT(x) +#define TEST(x) +#define POWER(x) +#define LOG(x) +#define MISC(x) + +#define DADD(x) +#define DMULT(x) +#define DMAC(x) +#define DMOVE(x) +#define DSTORE(x) +#define DLOGIC(x) +#define DSHIFT(x) +#define DDIV(x) +#define DSQRT(x) +#define DTRANS(x) + +#endif + +/* mac & msu (Non Instrumented Versions) */ +#ifndef mac +#define mac(a, b, c) ((a)+(b)*(c)) +#endif +#ifndef mac +#define msu(a, b, c) ((a)-(b)*(c)) +#endif + +#ifndef WMOPS +/* DESACTIVATE the Counting Mechanism */ +#define OP_COUNT_(op, n) + +/* DESACTIVATE Operation Counter Wrappers */ +#define OP_COUNT_WRAPPER1_(op, val) (val) +#define OP_COUNT_WRAPPER2_(expr) +#define OP_COUNT_WRAPPER3_(op, expr) expr + +/* DESACTIVATE Logical & Ternary Operators */ +#define __ +#define _ + +#else + +/* '*ops_cnt_ptr' is Used to Avoid: "warning: operation on 'ops_cnt' may be undefined" with Cygwin gcc Compiler */ +static double* ops_cnt_ptr = &ops_cnt; +#define OP_COUNT_(op, x) (*ops_cnt_ptr+=(op##_C*(x)), inst_cnt[op]+=(x)) + +/* #pragma GCC diagnostic is Available from gcc V4.2.4 */ +#if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) >= 40204 +/* Disable Some Warnings with Cygwin gcc Compiler (Only when WMOPS are Activated) */ +/* To Avoid: "warning: suggest parentheses around && within ||" and + "warning: suggest explicit braces to avoid ambiguous else" */ +#pragma GCC diagnostic ignored "-Wparentheses" /* Otherwise use : "-Wno-parentheses" */ +#endif + +/******************************************************************/ +/* NOTES: */ +/* The 'wmc_flag_' flag is global to avoid declaration in every */ +/* function and 'static' to avoid clashing with other modules */ +/* that include this header file. */ +/* */ +/* The declarations of 'wmc_flag_' and 'wops_' in this header */ +/* file prevent the addition of a 'C' file to the Project. */ +/******************************************************************/ + +/* General Purpose Global Flag */ +static int wmc_flag_ = 0; + +/* Operation Counter Wrappers */ +#define OP_COUNT_WRAPPER1_(op, val) (op, val) +#define OP_COUNT_WRAPPER2_(expr) if (expr, 0); else +#define OP_COUNT_WRAPPER3_(op, expr) if ( op , 0); else expr + +#endif + +/* Define all Macros without '{' & '}' (None of these should be called externally!) */ +#define ABS_(x) OP_COUNT_(_ABS, (x)*WMOPS_BOOST_FAC) +#define ADD_(x) OP_COUNT_(_ADD, (x)*WMOPS_BOOST_FAC) +#define MULT_(x) OP_COUNT_(_MULT, (x)*WMOPS_BOOST_FAC) +#define MAC_(x) OP_COUNT_(_MAC, (x)*WMOPS_BOOST_FAC) +#define MOVE_(x) OP_COUNT_(_MOVE, (x)*WMOPS_BOOST_FAC) +#define STORE_(x) OP_COUNT_(_STORE, (x)*WMOPS_BOOST_FAC) +#define LOGIC_(x) OP_COUNT_(_LOGIC, (x)*WMOPS_BOOST_FAC) +#define SHIFT_(x) OP_COUNT_(_SHIFT, (x)*WMOPS_BOOST_FAC) +#define BRANCH_(x) OP_COUNT_(_BRANCH, (x)*WMOPS_BOOST_FAC) +#define DIV_(x) OP_COUNT_(_DIV, (x)*WMOPS_BOOST_FAC) +#define SQRT_(x) OP_COUNT_(_SQRT, (x)*WMOPS_BOOST_FAC) +#define TRANS_(x) OP_COUNT_(_TRANS, (x)*WMOPS_BOOST_FAC) +#define POWER_(x) TRANS_(x) +#define LOG_(x) TRANS_(x) +#define LOOP_(x) OP_COUNT_(_LOOP, (x)*WMOPS_BOOST_FAC) +#define INDIRECT_(x) OP_COUNT_(_INDIRECT, (x)*WMOPS_BOOST_FAC) +#define PTR_INIT_(x) OP_COUNT_(_PTR_INIT, (x)*WMOPS_BOOST_FAC) +#define FUNC_(x) (OP_COUNT_(_MOVE, (x)*WMOPS_BOOST_FAC), OP_COUNT_(_FUNC, 1)) +#define MISC_(x) ABS_(x) + +/* Math Operations */ +#define abs_ OP_COUNT_WRAPPER1_( ABS_(1), abs) +#define fabs_ OP_COUNT_WRAPPER1_( ABS_(1), fabs) +#define labs_ OP_COUNT_WRAPPER1_( ABS_(1), labs) +#define floor_ OP_COUNT_WRAPPER1_( MISC_(1), floor) +#define sqrt_ OP_COUNT_WRAPPER1_( SQRT_(1), sqrt) +#define pow_ OP_COUNT_WRAPPER1_(POWER_(1), pow) +#define exp_ OP_COUNT_WRAPPER1_(POWER_(1), exp) +#define log_ OP_COUNT_WRAPPER1_( LOG_(1), log) +#define log10_ OP_COUNT_WRAPPER1_( LOG_(1), log10) +#define cos_ OP_COUNT_WRAPPER1_(TRANS_(1), cos) +#define sin_ OP_COUNT_WRAPPER1_(TRANS_(1), sin) +#define tan_ OP_COUNT_WRAPPER1_(TRANS_(1), tan) +#define acos_ OP_COUNT_WRAPPER1_(TRANS_(1), acos) +#define asin_ OP_COUNT_WRAPPER1_(TRANS_(1), asin) +#define atan_ OP_COUNT_WRAPPER1_(TRANS_(1), atan) +#define atan2_ OP_COUNT_WRAPPER1_(TRANS_(1), atan2) +#define cosh_ OP_COUNT_WRAPPER1_(TRANS_(1), cosh) +#define sinh_ OP_COUNT_WRAPPER1_(TRANS_(1), sinh) +#define tanh_ OP_COUNT_WRAPPER1_(TRANS_(1), tanh) +#define fmod_ OP_COUNT_WRAPPER1_( DIV_(1), fmod) +/* these macros use any local macros already defined */ +/* min/max and their Variants */ +#define min_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), min((a),(b))) +#define max_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), max((a),(b))) +#define MIN_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), MIN((a),(b))) +#define MAX_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), MAX((a),(b))) +#define Min_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), Min((a),(b))) +#define Max_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), Max((a),(b))) +/* Square and its Variants */ +#define sqr_(x) OP_COUNT_WRAPPER1_(MULT_(1), sqr((x))) +#define Sqr_(x) OP_COUNT_WRAPPER1_(MULT_(1), Sqr((x))) +#define SQR_(x) OP_COUNT_WRAPPER1_(MULT_(1), SQR((x))) +#define square_(x) OP_COUNT_WRAPPER1_(MULT_(1),square((x))) +#define Square_(x) OP_COUNT_WRAPPER1_(MULT_(1),Square((x))) +#define SQUARE_(x) OP_COUNT_WRAPPER1_(MULT_(1),SQUARE((x))) +/* Sign and its Variants */ +#define sign_(x) OP_COUNT_WRAPPER1_(MOVE_(1), sign((x))) +#define Sign_(x) OP_COUNT_WRAPPER1_(MOVE_(1), Sign((x))) +#define SIGN_(x) OP_COUNT_WRAPPER1_(MOVE_(1), SIGN((x))) +/* Square Root and its Variants */ +#define sqrtf_(x) OP_COUNT_WRAPPER1_(SQRT_(1), sqrtf((x))) +/* Invert Square Root and its Variants */ +#define inv_sqrt_(x) OP_COUNT_WRAPPER1_(SQRT_(1), inv_sqrt((x))) +/* Others */ +#define log_base_2_(x) OP_COUNT_WRAPPER1_(( LOG_(1),MULT_(1)), log_base_2((x))) +#define log2_f_(x) OP_COUNT_WRAPPER1_(( LOG_(1),MULT_(1)), log2_f((x))) +/* The 'wmc_flag_=wmc_flag_' is Used to Avoid: "warning: left-hand operand of comma expression has no effect" + with Cygwin gcc Compiler */ +#define _round_(x) OP_COUNT_WRAPPER1_(wmc_flag_=wmc_flag_, _round((x))) +#define round_f_(x) OP_COUNT_WRAPPER1_(wmc_flag_=wmc_flag_, round_f((x))) +#define _squant_(x) OP_COUNT_WRAPPER1_(wmc_flag_=wmc_flag_, _squant((x))) +/* Set Min/Max */ +#define set_min_(a, b) OP_COUNT_WRAPPER3_((ADD_(1),BRANCH_(1),MOVE_(1)), set_min((a),(b))) +#define set_max_(a, b) OP_COUNT_WRAPPER3_((ADD_(1),BRANCH_(1),MOVE_(1)), set_max((a),(b))) +/* mac & msu (Instrumented Versions) */ +#define mac_(a, b, c) OP_COUNT_WRAPPER1_(MAC_(1), mac(a, b, c)) +#define msu_(a, b, c) OP_COUNT_WRAPPER1_(MAC_(1), msu(a, b, c)) + +/* Functions */ +#define func_(name, x) OP_COUNT_WRAPPER1_(FUNC_(x), name) + +/* Logical Operators */ +#ifndef __ +#define __ (BRANCH_(1), 1) && +#endif + +/* Ternary Operators (? and :) */ +#ifndef _ +#define _ (BRANCH_(1), 0)?0: +#endif + +/* Flow Control keywords */ +#define if_ OP_COUNT_WRAPPER2_(BRANCH_(1)) if +#define for_ OP_COUNT_WRAPPER2_( LOOP_(1)) for +#define while_(c) while OP_COUNT_WRAPPER1_(BRANCH_(1), (c)) /* needs extra "()" if ',' encountered */ +#define do_ do { +#define _while BRANCH_(1);} while + +#define goto_ OP_COUNT_WRAPPER2_(BRANCH_(1)) goto +#define break_ OP_COUNT_WRAPPER2_(BRANCH_(1)) break +#define continue_ OP_COUNT_WRAPPER2_(BRANCH_(1)) continue +#define return_ OP_COUNT_WRAPPER2_((wmc_flag_=stack_tree_level_, STACK_DEPTH_FCT_RETURN)) return + +#define switch_ OP_COUNT_WRAPPER2_((BRANCH_(1),wmc_flag_=1)) switch +#define cost_(n) OP_COUNT_WRAPPER2_(wmc_flag_?(ADD_(n),BRANCH_(n),wmc_flag_=0):0); + +#ifdef WMOPS + +/* Check if EOF is defined */ +#ifndef EOF +#include /* required for 'fprintf' */ +#endif + +/* Counter Function (should not be called externally!) */ +static void wops_(const char* ops) +{ + char lm = 0; /* lm: Last Operation is Math */ + static char lo = 0; /* Last Operation */ +#define ACC 2 +#define MUL 1 + void (*fct)(const char* ops) = wops_; +st: while (*ops != '\0') { + switch (*ops++) { + int cnt; + case '-': for (cnt = 0; ops[cnt] == '>'; cnt++); if (cnt & 1) goto ind; + case '+': lm = 2; if (lo & MUL) { MULT_(-1); MAC_(1); break; } + lo = ACC << 2; case 'U': case 'D': ADD_(1); break; + case '*': lm = 2; if (lo & ACC) { ADD_(-1); MAC_(1); break; } + lo = MUL << 2; MULT_(1); break; + case '/': case '%': lm = 2; DIV_(1); break; + case '&': case '|': case '^': lm = 2; case '~': LOGIC_(1); break; + case '<': case '>': if (*ops != ops[-1]) goto error; ops++; + case -85: case -69: lm = 2; SHIFT_(1); break; + case 'L': case 'G': if (*ops == 't') goto comp; + case 'E': case 'N': if (*ops != 'e') goto error; + comp: ops++; ADD_(1); break; + case '!': MISC_(2); break; + case 'M': MOVE_(1); break; + case 'S': STORE_(1); break; + case 'P': PTR_INIT_(1); break; + case '[': case ']': goto st; + ind: ops++; + case 'I': case '.': INDIRECT_(1); break; + case '=': if (lm) goto st; + case '\0': /* This Cannot Happen */ + /* These are Used to Avoid: "warning: 'name' defined but not used" + with Cygwin gcc Compiler */ + wmc_flag_ = wmc_flag_; + ops_cnt_ptr = ops_cnt_ptr; + fct(""); + error: default: + /* The Following Checks are made instead of Including the Required Files to + avoid generating warnings if they are already Included in the Source File */ +#ifdef EOF /* Will exist if is Included */ + fprintf(stderr, "\r wops: Invalid Counting Operation '%s'\n", ops - 1); +#ifdef EXIT_FAILURE /* Will exist if is Included */ + exit(EXIT_FAILURE); +#endif +#endif + return; /* If no Exit Mechanism, just continue */ + } lm >>= 1; lo >>= 2; +} +} + +#endif + +/* All Other Operations */ +#define $(str) OP_COUNT_WRAPPER2_(wops_(str)) + + +/*-------------------------------------------------------------------* + * Memory counting tool + *-------------------------------------------------------------------*/ + +/* Enhanced Const Data Size Counting (Rounding Up to the Nearest 'Integer' Size) */ +#define rsize(item) ((sizeof(item) + sizeof(int) - 1) / sizeof(int) * sizeof(int)) + +#ifdef _MSC_VER +/* Disable "warning C4210: nonstandard extension used : function given file scope" with Visual Studio Compiler */ +#pragma warning(disable: 4210) +#endif + +/* Const Data Size and PROM Size Wrapper Functions */ +#define Const_Data_Size_Func(file) Const_Data_Size_##file(void) +#define Get_Const_Data_Size(file, val_ptr) { extern int Const_Data_Size_##file(void); *(val_ptr) = Const_Data_Size_##file(); } +#define PROM_Size_Func(file) PROM_Size_##file(void) +#define Get_PROM_Size(file, val_ptr) { int PROM_Size_##file(void); *(val_ptr) = PROM_Size_##file(); } + +/* ROM Size Lookup Table - contains information about PROM size and Const Data Size in all source files */ +/* The print_mem() function looks for this table to print the results of Const Data usage and PROM usage */ +typedef struct ROM_Size_Lookup_Table +{ + const char file_spec[255]; + int PROM_size; + int (*Get_Const_Data_Size_Func) (void); +} ROM_Size_Lookup_Table; + +/* The WMC tool inserts the following declaration during the innstrumentation process in the .c file where the function print_mem() is located */ +/* and modifies it to print_mem(Const_Data_PROM_Table) */ + +/* #ifdef WMOPS + * ROM_Size_Lookup_Table Const_Data_PROM_Table[] = + * { + * {"../lib_enc/rom_enc.c", 0, NULL}, + * {"../lib_com/*.c", 0, NULL}, + * {"", -1, NULL} + * }; + * #endif + */ + +/*#define MEM_ALIGN_64BITS */ /* Define this when using 64 Bits values in the code (ex: double), otherwise it will align on 32 Bits */ +/*#define MEM_COUNT_DETAILS*/ + +typedef enum +{ + USE_BYTES = 0, + USE_16BITS = 1, + USE_32BITS = 2 +} Counting_Size; + +#if ( defined( _WIN32 ) && ( _MSC_VER <= 1800 ) && ( _MSC_VER >= 1300 ) ) +#define __func__ __FUNCTION__ +#elif defined( __STDC_VERSION__ ) && __STDC_VERSION__ < 199901L +#if ( __GNUC__ >= 2 ) +#define __func__ __FUNCTION__ +#else +#define __func__ "" +#endif +#elif defined( __GNUC__ ) +#define __func__ __extension__ __FUNCTION__ +#endif + + +#ifdef WMOPS + +void* mem_alloc(const char* func_name, int func_lineno, size_t size, char* alloc_str); +void mem_free(const char* func_name, int func_lineno, void* ptr); + +#define malloc_(size) mem_alloc( __func__, __LINE__, size, "m:" #size ) +#define calloc_(n,size) mem_alloc( __func__, __LINE__, ( n ) * ( size ), "c:" #n ", " #size ) +#define free_(ptr) mem_free( __func__, __LINE__, ptr ) + +void reset_mem(Counting_Size cnt_size); +void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]); + +int push_stack(const char* filename, const char* fctname); +int pop_stack(const char* filename, const char* fctname); + +#ifdef WMOPS_DETAIL +#define STACK_DEPTH_FCT_CALL (push_wmops(__FUNCTION__), push_stack(__FILE__,__FUNCTION__)) /* add push_wmops() in all function calls */ +#define STACK_DEPTH_FCT_RETURN (pop_wmops(), pop_stack(__FILE__,__FUNCTION__)) /* add pop_wmops() in all function returns */ +#else +#define STACK_DEPTH_FCT_CALL push_stack(__FILE__,__FUNCTION__) +#define STACK_DEPTH_FCT_RETURN pop_stack(__FILE__,__FUNCTION__) +#endif + +void reset_stack(void); +#define func_start_ int stack_tree_level_=STACK_DEPTH_FCT_CALL; + +#else +#define malloc_(n1) malloc( n1 ) +#define calloc_(n1,n2) calloc( n1, n2 ) +#define free_(ptr) free( ptr ) +#define reset_mem( cnt_size ) +#define print_mem( Const_Data_PROM_Table ) + +#define push_stack(file,fct) +#define pop_stack(file,fct) +#define reset_stack() +#define func_start_ + +#endif + +#endif /* WMOPS_H */ + + + + diff --git a/lib_debug/wmops.c b/lib_debug/wmops.c deleted file mode 100644 index fe75a207ff..0000000000 --- a/lib_debug/wmops.c +++ /dev/null @@ -1,503 +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 -#include -#include -#include -#include "options.h" -#ifdef DEBUGGING -#include "debug.h" -#endif -#include "wmops.h" - - -/*-------------------------------------------------------------------* - * WMOPS counting tool - *--------------------------------------------------------------------*/ - -#ifdef WMOPS - -#define MAX_RECORDS 1024 -#define MAX_CHAR 64 -#define MAX_STACK 64 -#define DOUBLE_MAX 0x80000000; - -struct wmops_record -{ - char label[MAX_CHAR]; - int32_t call_number; - int32_t update_cnt; - int call_tree[MAX_RECORDS]; - double start_selfcnt; - double current_selfcnt; - double max_selfcnt; - double min_selfcnt; - double tot_selfcnt; - double start_cnt; /* The following take into account the decendants */ - double current_cnt; - double max_cnt; - double min_cnt; - double tot_cnt; -#ifdef WMOPS_WC_FRAME_ANALYSIS - int32_t current_call_number; - double wc_cnt; - double wc_selfcnt; - int32_t wc_call_number; -#endif -}; - -double ops_cnt; -double prom_cnt; -double inst_cnt[NUM_INST]; - -int ops_cnt_activ = 1; - -static struct wmops_record wmops[MAX_RECORDS]; -static int stack[MAX_STACK]; -static int sptr; -static int num_records; -static int current_record; -static int32_t update_cnt; -static double start_cnt; -static double max_cnt; -static double min_cnt; -static double inst_cnt_wc[NUM_INST]; -static int32_t fnum_cnt_wc; - - -void reset_wmops( void ) -{ - int i, j; - - for ( i = 0; i < MAX_RECORDS; i++ ) - { - strcpy( &wmops[i].label[0], "\0" ); - wmops[i].call_number = 0; - wmops[i].update_cnt = 0; - for ( j = 0; j < MAX_RECORDS; j++ ) - { - wmops[i].call_tree[j] = -1; - } - wmops[i].start_selfcnt = 0.0; - wmops[i].current_selfcnt = 0.0; - wmops[i].max_selfcnt = 0.0; - wmops[i].min_selfcnt = DOUBLE_MAX; - wmops[i].tot_selfcnt = 0.0; - wmops[i].start_cnt = 0.0; - wmops[i].current_cnt = 0.0; - wmops[i].max_cnt = 0.0; - wmops[i].min_cnt = DOUBLE_MAX; - wmops[i].tot_cnt = 0.0; -#ifdef WMOPS_WC_FRAME_ANALYSIS - wmops[i].wc_cnt = 0.0; - wmops[i].wc_selfcnt = 0.0; - wmops[i].current_call_number = 0; -#endif - } - - for ( i = 0; i < MAX_STACK; i++ ) - { - stack[i] = -1; - } - sptr = 0; - num_records = 0; - current_record = -1; - update_cnt = 0; - - max_cnt = 0.0; - min_cnt = DOUBLE_MAX; - start_cnt = 0.0; - ops_cnt = 0.0; -} - - -void push_wmops( const char *label ) -{ - int new_flag; - int i, j; - - /* Check if new function record label */ - new_flag = 1; - for ( i = 0; i < num_records; i++ ) - { - if ( strcmp( wmops[i].label, label ) == 0 ) - { - new_flag = 0; - break; - } - } - - /* Configure new record */ - if ( new_flag ) - { - if ( num_records >= MAX_RECORDS ) - { - fprintf( stdout, "push_wmops(): exceeded MAX_RECORDS count.\n\n" ); - exit( -1 ); - } - strcpy( wmops[i].label, label ); - num_records++; - } - - /* Push current context onto stack */ - if ( current_record >= 0 ) - { - if ( sptr >= MAX_STACK ) - { - fprintf( stdout, "\r push_wmops(): stack exceeded, try inreasing MAX_STACK\n" ); - exit( -1 ); - } - stack[sptr++] = current_record; - - /* accumulate op counts */ - wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; - - /* update call tree */ - for ( j = 0; j < MAX_RECORDS; j++ ) - { - if ( wmops[i].call_tree[j] == current_record ) - { - break; - } - else if ( wmops[i].call_tree[j] == -1 ) - { - wmops[i].call_tree[j] = current_record; - break; - } - } - } - - /* init current record */ - current_record = i; - wmops[current_record].start_selfcnt = ops_cnt; - wmops[current_record].start_cnt = ops_cnt; - wmops[current_record].call_number++; -#ifdef WMOPS_WC_FRAME_ANALYSIS - wmops[current_record].current_call_number++; -#endif -} - -void wmops_sub_start( const char *label ) -{ -#ifndef WMOPS_DETAIL - push_wmops( label ); -#endif -} - -void pop_wmops( void ) -{ - - /* Check for underflow */ - if ( current_record < 0 ) - { - fprintf( stdout, "\r pop_wmops(): stack underflow, too many calls to pop_wmops()\n" ); - exit( -1 ); - } - - /* update count of current record */ - wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; - wmops[current_record].current_cnt += ops_cnt - wmops[current_record].start_cnt; - - /* Get back previous context from stack */ - if ( sptr > 0 ) - { - current_record = stack[--sptr]; - wmops[current_record].start_selfcnt = ops_cnt; - } - else - { - current_record = -1; - } -} - -void wmops_sub_end( void ) -{ -#ifndef WMOPS_DETAIL - pop_wmops(); -#endif -} - -void update_wmops( void ) -{ - int i; - double current_cnt; - - if ( sptr != 0 ) - { - fprintf( stdout, "update_wmops(): Stack must be empty!\n" ); - exit( -1 ); - } - -#ifdef WMOPS_PER_FRAME /* output complexity in WMOPS per frame - note that "frame" number was already incremented before calling this function */ - { - float tmpF = (float) ( FAC * wmops[0].current_cnt ); - dbgwrite( &tmpF, 4, 1, 1, "res/wmops" ); - } -#endif - -#ifdef WMOPS_WC_FRAME_ANALYSIS - if ( ops_cnt - start_cnt > max_cnt ) - { - for ( i = 0; i < num_records; i++ ) - { - wmops[i].wc_cnt = wmops[i].current_cnt; - wmops[i].wc_selfcnt = wmops[i].current_selfcnt; - wmops[i].wc_call_number = wmops[i].current_call_number; - } - } -#endif - - for ( i = 0; i < num_records; i++ ) - { - wmops[i].tot_selfcnt += wmops[i].current_selfcnt; - wmops[i].tot_cnt += wmops[i].current_cnt; - - if ( wmops[i].current_selfcnt > 0 ) - { - if ( wmops[i].current_selfcnt > wmops[i].max_selfcnt ) - { - wmops[i].max_selfcnt = wmops[i].current_selfcnt; - } - - if ( wmops[i].current_selfcnt < wmops[i].min_selfcnt ) - { - wmops[i].min_selfcnt = wmops[i].current_selfcnt; - } - } - - wmops[i].current_selfcnt = 0; - - if ( wmops[i].current_cnt > 0 ) - { - if ( wmops[i].current_cnt > wmops[i].max_cnt ) - { - wmops[i].max_cnt = wmops[i].current_cnt; - } - - if ( wmops[i].current_cnt < wmops[i].min_cnt ) - { - wmops[i].min_cnt = wmops[i].current_cnt; - } - - wmops[i].update_cnt++; - } - - wmops[i].current_cnt = 0; -#ifdef WMOPS_WC_FRAME_ANALYSIS - wmops[i].current_call_number = 0; -#endif - } - - current_cnt = ops_cnt - start_cnt; - if ( current_cnt > max_cnt ) - { - max_cnt = current_cnt; - - for ( i = 0; i < NUM_INST; i++ ) - { - inst_cnt_wc[i] = inst_cnt[i]; - } - - fnum_cnt_wc = update_cnt; - } - - if ( current_cnt < min_cnt ) - { - min_cnt = current_cnt; - } - - for ( i = 0; i < NUM_INST; i++ ) - { - inst_cnt[i] = 0.0; - } - - - start_cnt = ops_cnt; - update_cnt++; -} - - -void print_wmops( void ) -{ - int i, label_len, max_label_len; - - char *sfmts = "%*s %8s %8s %7s %7s\n"; - char *dfmts = "%*s %8.2f %8.3f %7.3f %7.3f\n"; - char *sfmt = "%*s %8s %8s %7s %7s %7s %7s %7s\n"; - char *dfmt = "%*s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; - -#if ENABLE_TREE - int j; - char *sfmtt = "%20s %4s %15s\n"; - char *dfmtt = "%20s %4d "; -#endif - - /* fprintf( stdout, "\nProgram Memory Analysis: %12.0f words\n", prom_cnt ); */ - /* fprintf (stdout, "\nInstruction Type Analysis (for worst case frame):\n\n"); */ - fprintf( stdout, "\nInstruction Type Analysis (for worst case frame number %d):\n\n", fnum_cnt_wc ); /* added -- JPA */ - for ( i = 0; i < NUM_INST; i++ ) - { - switch ( (enum instructions) i ) - { - case _ADD: - fprintf( stdout, "\tAdds: %12.1f\n", inst_cnt_wc[i] ); - break; - case _ABS: - fprintf( stdout, "\tAbsolutes: %12.1f\n", inst_cnt_wc[i] ); - break; - case _MULT: - fprintf( stdout, "\tMultiplies: %12.1f\n", inst_cnt_wc[i] ); - break; - case _MAC: - fprintf( stdout, "\tMACs: %12.1f\n", inst_cnt_wc[i] ); - break; - case _MOVE: - fprintf( stdout, "\tMoves: %12.1f\n", inst_cnt_wc[i] ); - break; - case _STORE: - fprintf( stdout, "\tStores: %12.1f\n", inst_cnt_wc[i] ); - break; - case _LOGIC: - fprintf( stdout, "\tLogicals: %12.1f\n", inst_cnt_wc[i] ); - break; - case _SHIFT: - fprintf( stdout, "\tShifts: %12.1f\n", inst_cnt_wc[i] ); - break; - case _BRANCH: - fprintf( stdout, "\tBranches: %12.1f\n", inst_cnt_wc[i] ); - break; - case _DIV: - fprintf( stdout, "\tDivisions: %12.1f\n", inst_cnt_wc[i] ); - break; - case _SQRT: - fprintf( stdout, "\tSquare Root: %12.1f\n", inst_cnt_wc[i] ); - break; - case _TRANS: - fprintf( stdout, "\tTrans: %12.1f\n", inst_cnt_wc[i] ); - break; - case _FUNC: - fprintf( stdout, "\tFunc Call: %12.1f\n", inst_cnt_wc[i] ); - break; - case _LOOP: - fprintf( stdout, "\tLoop Init: %12.1f\n", inst_cnt_wc[i] ); - break; - case _INDIRECT: - fprintf( stdout, "\tIndirect Addr: %12.1f\n", inst_cnt_wc[i] ); - break; - case _PTR_INIT: - fprintf( stdout, "\tPointer Init: %12.1f\n", inst_cnt_wc[i] ); - break; - case _TEST: - fprintf( stdout, "\tExtra condit.: %12.1f\n", inst_cnt_wc[i] ); - break; - case _POWER: - fprintf( stdout, "\tExponential: %12.1f\n", inst_cnt_wc[i] ); - break; - case _LOG: - fprintf( stdout, "\tLogarithm: %12.1f\n", inst_cnt_wc[i] ); - break; - case _MISC: - fprintf( stdout, "\tAll other op.: %12.1f\n", inst_cnt_wc[i] ); - break; - default: - fprintf( stdout, "\tERROR: Invalid instruction type: %d\n\n", i ); - } - } - - max_label_len = 0; - for ( i = 0; i < num_records; i++ ) - { - label_len = strlen( wmops[i].label ); - if ( label_len > max_label_len ) - { - max_label_len = label_len; - } - } - max_label_len += 4; - -#ifdef WMOPS_WC_FRAME_ANALYSIS - fprintf( stdout, "\n\nWeighted MOPS Analysis for worst case frame number %d ( WMOPS boost factor %4.2f ):\n", fnum_cnt_wc, WMOPS_BOOST_FAC ); - fprintf( stdout, "%*s %8s %10s %12s\n", max_label_len, " routine", " calls", " SELF", " CUMULATIVE" ); - fprintf( stdout, "%*s %8s %10s %10s\n", max_label_len, "---------------", "------", "------", "----------" ); - - for ( i = 0; i < num_records; i++ ) - { - fprintf( stdout, "%*s %8d %10.3f %12.3f\n", max_label_len, wmops[i].label, wmops[i].wc_call_number, FAC * wmops[i].wc_selfcnt, FAC * wmops[i].wc_cnt ); - } - -#endif - - fprintf( stdout, "\n\nWeighted MOPS Analysis ( WMOPS boost factor %4.2f ):\n", WMOPS_BOOST_FAC ); - fprintf( stdout, "%*s %34s %23s\n", max_label_len, "", "|------ SELF ------|", "|--- CUMULATIVE ---|" ); - fprintf( stdout, sfmt, max_label_len, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg " ); - fprintf( stdout, sfmt, max_label_len, "---------------", "------", "------", "------", "------", "------", "------", "------" ); - for ( i = 0; i < num_records; i++ ) - { - fprintf( stdout, dfmt, max_label_len, wmops[i].label, - update_cnt == 0 ? 0.0f : (float) wmops[i].call_number / update_cnt, - wmops[i].update_cnt == 0 ? 0.0f : FAC * wmops[i].min_selfcnt, FAC * wmops[i].max_selfcnt, - wmops[i].update_cnt == 0 ? 0.0f : FAC * wmops[i].tot_selfcnt / wmops[i].update_cnt, - wmops[i].update_cnt == 0 ? 0.0f : FAC * wmops[i].min_cnt, FAC * wmops[i].max_cnt, - wmops[i].update_cnt == 0 ? 0.0f : FAC * wmops[i].tot_cnt / wmops[i].update_cnt ); - } - fprintf( stdout, sfmts, max_label_len, "---------------", "------", "------", "------", "------" ); - fprintf( stdout, dfmts, max_label_len, "total", (float) update_cnt, FAC * min_cnt, FAC * max_cnt, FAC * ops_cnt / update_cnt ); - fprintf( stdout, "\n" ); - -#if ENABLE_TREE - - fprintf( stdout, "\nCall Tree:\n\n" ); - fprintf( stdout, sfmtt, " function", "num", "called by: " ); - fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); - - for ( i = 0; i < num_records; i++ ) - { - fprintf( stdout, dfmtt, wmops[i].label, i ); - for ( j = 0; wmops[i].call_tree[j] != -1; j++ ) - { - if ( j != 0 ) - { - fprintf( stdout, ", " ); - } - fprintf( stdout, "%d", wmops[i].call_tree[j] ); - } - fprintf( stdout, "\n" ); - } - - fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); - fprintf( stdout, "\n\n" ); - -#endif -} - -#endif /* WMOPS */ diff --git a/lib_debug/wmops.h b/lib_debug/wmops.h deleted file mode 100644 index f18c990ed5..0000000000 --- a/lib_debug/wmops.h +++ /dev/null @@ -1,777 +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 WMOPS_H -#define WMOPS_H - -#include -#include "options.h" - - -/*------------------------------------------------------------------------------------------* - * Memory calculation tool - *------------------------------------------------------------------------------------------*/ - -#ifdef WMOPS - -#ifdef _MSC_VER -#pragma warning( disable : 4033 ) -#pragma warning( disable : 4702 ) -#pragma warning( disable : 4709 ) -#endif - -extern int Const_Data_Size_rom_enc( void ); -extern int Const_Data_Size_rom_com( void ); -extern int Const_Data_Size_rom_dec( void ); -extern int Const_Data_Size_ivas_rom_enc( void ); -extern int Const_Data_Size_ivas_rom_com( void ); -extern int Const_Data_Size_ivas_rom_dec( void ); -extern int Const_Data_Size_ivas_spar_rom_com( void ); -extern int Const_Data_Size_ivas_rom_binauralRen( void ); -extern int Const_Data_Size_ivas_rom_TdBinauralR( void ); -extern int Const_Data_Size_ivas_rom_binaural_cr( void ); - -int push_stack( const char *filename, const char *fctname ); -int pop_stack( const char *filename, const char *fctname ); -void reset_stack( void ); -void print_stack_call_tree( void ); - -#else - -#define push_stack( file, fct ) -#define pop_stack( file, fct ) -#define reset_stack() -#define print_mem_enc( x ) -#define print_mem_dec( x ) -#define print_stack_call_tree() - -#endif - -/******************************************************************************************/ - -/* Real-time relationships */ -#define FRAMES_PER_SECOND 50.0 -#define MILLION_CYCLES 1e6 - -#define WMC_AUTO_WEIGHTING_FACT 0.91f /* constant to equalize difference between automatic and manual instrumentation */ -#define WMOPS_BOOST_FAC ( 1.0f / WMC_AUTO_WEIGHTING_FACT ) /* complexity scaling factor for manually instrumented code */ - -#define FAC ( FRAMES_PER_SECOND / MILLION_CYCLES * WMOPS_BOOST_FAC ) - -/******************************************************************************************/ - - -#define FLC_MSU( c ) MAC( c ) /* multiply and subtract is currently seen as MAC operation */ -#define FLC_MAX( c ) MISC( c ) /* max() is seen as MISC like abs() */ -#define FLC_MIN( c ) MISC( c ) /* min() is seen as MISC like abs() */ -#define FLC_NEG( c ) ADD( c ) /* negation is seen as addion: a = 0 - a */ -#define FLC_CAST( c ) /* type conversion is costfree for the moment, but who knows it for the future ? */ -#define FLC_INLINE_FUNC( c ) /* inline function calls are costfree, parameters/retval are currently not counted */ - /* example: FLC_INLINE_FUNC(3); SET_FLOAT(ptr,value,num); */ -#define FLC_ATAN2( c ) \ - DIV( c ); \ - TRANS( c ) /* atan2 is curently seen as division followed by atan */ - -/* inline function for memset in combination with float pointer */ -#define SET_FLOAT( ptr, value, num ) \ - { \ - int i; \ - LOOP( 1 ); \ - MOVE( num ); \ - for ( i = 0; i < num; i++ ) \ - { \ - ptr[i] = value; \ - } \ - } - -/* inline function for memset in combination with integer */ -#define SET_INT( ptr, value, num ) \ - { \ - int i; \ - LOOP( 1 ); \ - MOVE( num ); \ - for ( i = 0; i < num; i++ ) \ - { \ - ptr[i] = value; \ - } \ - } - -#ifdef WMOPS -#ifndef WMOPS_DETAIL -#define STACK_DEPTH_FCT_CALL push_stack( __FILE__, __func__ ) /* Define stack counting function for WMC Tool */ - -#define STACK_DEPTH_FCT_RETURN pop_stack( __FILE__, __func__ ) /* Define stack counting function for WMC Tool */ -#else -#define STACK_DEPTH_FCT_CALL ( push_wmops( __func__ ), push_stack( __FILE__, __func__ ) ) /* Define stack counting function for WMC Tool */ - -#define STACK_DEPTH_FCT_RETURN ( pop_wmops(), pop_stack( __FILE__, __func__ ) ) /* Define stack counting function for WMC Tool */ -#endif - -#define ENABLE_WMOPS 1 /* Only for the WMC_Tool */ -#define ENABLE_TREE 0 /* Call tree may be activated by setting this flag to 1 */ -#define NUM_INST 20 /* Total number of instruction types (in enum below) */ - -#define FLC_OPS_COND if ( ops_cnt_activ > 0 ) - -enum instructions -{ - _ADD, - _ABS, - _MULT, - _MAC, - _MOVE, - _STORE, - _LOGIC, - _SHIFT, - _BRANCH, - _DIV, - _SQRT, - _TRANS, - _FUNC, - _LOOP, - _INDIRECT, - _PTR_INIT, - _TEST, - _POWER, - _LOG, - _MISC -}; -enum flc_fields -{ - FLC_NOP = 0, - FLC_ADD, - FLC_MULT, - FLC_MAC, - FLC_MOVE, - FLC_STORE, - FLC_LOGIC, - FLC_SHIFT, - FLC_BRANCH, - FLC_DIV, - FLC_SQRT, - FLC_TRANS, - FLC_FUNC, - FLC_LOOP, - FLC_INDIRECT, - FLC_PTR_INIT, - FLC_MISC, - FLC_TEST, - FLC_POWER, - FLC_LOG, - FLC_OPEND -}; - - -#define _ADD_C 1 -#define _ABS_C 1 -#define _MULT_C 1 -#define _MAC_C 1 -#define _MOVE_C 1 -#define _STORE_C 1 -#define _LOGIC_C 1 -#define _SHIFT_C 1 -#define _BRANCH_C 4 -#define _DIV_C 18 -#define _SQRT_C 10 -#define _TRANS_C 25 -#define _FUNC_C 2 /* need to add number of arguments */ -#define _LOOP_C 3 -#define _INDIRECT_C 2 -#define _PTR_INIT_C 1 -#define _TEST_C 2 -#define _POWER_C 25 -#define _LOG_C 25 -#define _MISC_C 1 - -#define _ADD_P 1 -#define _ABS_P 1 -#define _MULT_P 1 -#define _MAC_P 1 -#define _MOVE_P 1 -#define _STORE_P 0 -#define _LOGIC_P 1 -#define _SHIFT_P 1 -#define _BRANCH_P 2 -#define _DIV_P 2 -#define _SQRT_P 2 -#define _TRANS_P 2 -#define _FUNC_P 2 /* need to add number of arguments */ -#define _LOOP_P 1 -#define _INDIRECT_P 2 -#define _PTR_INIT_P 1 -#define _TEST_P 1 -#define _POWER_P 2 -#define _LOG_P 2 -#define _MISC_P 1 - -#define ADD( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _ADD_C * ( x ) ); \ - inst_cnt[_ADD] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _ADD_P * ( x ) ); \ - } \ - } \ - } \ - } -#define ABS( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _ABS_C * ( x ) ); \ - inst_cnt[_ABS] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _ABS_P * ( x ) ); \ - } \ - } \ - } \ - } -#define MULT( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _MULT_C * ( x ) ); \ - inst_cnt[_MULT] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _MULT_P * ( x ) ); \ - } \ - } \ - } \ - } -#define MAC( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _MAC_C * ( x ) ); \ - inst_cnt[_MAC] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _MAC_P * ( x ) ); \ - } \ - } \ - } \ - } -#define MOVE( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _MOVE_C * ( x ) ); \ - inst_cnt[_MOVE] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _MOVE_P * ( x ) ); \ - } \ - } \ - } \ - } -#define STORE( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _STORE_C * ( x ) ); \ - inst_cnt[_STORE] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _STORE_P * ( x ) ); \ - } \ - } \ - } \ - } -#define LOGIC( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _LOGIC_C * ( x ) ); \ - inst_cnt[_LOGIC] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _LOGIC_P * ( x ) ); \ - } \ - } \ - } \ - } -#define SHIFT( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _SHIFT_C * ( x ) ); \ - inst_cnt[_SHIFT] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _SHIFT_P * ( x ) ); \ - } \ - } \ - } \ - } -#define BRANCH( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _BRANCH_C * ( x ) ); \ - inst_cnt[_BRANCH] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _BRANCH_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DIV( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _DIV_C * ( x ) ); \ - inst_cnt[_DIV] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _DIV_P * ( x ) ); \ - } \ - } \ - } \ - } -#define SQRT( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _SQRT_C * ( x ) ); \ - inst_cnt[_SQRT] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _SQRT_P * ( x ) ); \ - } \ - } \ - } \ - } -#define TRANS( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _TRANS_C * ( x ) ); \ - inst_cnt[_TRANS] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _TRANS_P * ( x ) ); \ - } \ - } \ - } \ - } -#define LOOP( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _LOOP_C * ( x ) ); \ - inst_cnt[_LOOP] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _LOOP_P * ( x ) ); \ - } \ - } \ - } \ - } -#define INDIRECT( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _INDIRECT_C * ( x ) ); \ - inst_cnt[_INDIRECT] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _INDIRECT_P * ( x ) ); \ - } \ - } \ - } \ - } -#define PTR_INIT( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _PTR_INIT_C * ( x ) ); \ - inst_cnt[_PTR_INIT] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _PTR_INIT_P * ( x ) ); \ - } \ - } \ - } \ - } -#define TEST( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _TEST_C * ( x ) ); \ - inst_cnt[_TEST] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _TEST_P * ( x ) ); \ - } \ - } \ - } \ - } -#define POWER( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _POWER_C * ( x ) ); \ - inst_cnt[_POWER] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _POWER_P * ( x ) ); \ - } \ - } \ - } \ - } -#define LOG( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _LOG_C * ( x ) ); \ - inst_cnt[_LOG] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _LOG_P * ( x ) ); \ - } \ - } \ - } \ - } -#define MISC( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _MISC_C * ( x ) ); \ - inst_cnt[_MISC] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _MISC_P * ( x ) ); \ - } \ - } \ - } \ - } - -#define FUNC( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( _FUNC_C + _MOVE_C * ( x ) ); \ - inst_cnt[_FUNC]++; \ - inst_cnt[_MOVE] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _FUNC_P + _MOVE_P * ( x ) ); \ - } \ - } \ - } \ - } - -#define DADD( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _ADD_C * ( x ) ); \ - inst_cnt[_ADD] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _ADD_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DMULT( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _MULT_C * ( x ) ); \ - inst_cnt[_MULT] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _MULT_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DMAC( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _MAC_C * ( x ) ); \ - inst_cnt[_MAC] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _MAC_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DMOVE( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _MOVE_C * ( x ) ); \ - inst_cnt[_MOVE] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _MOVE_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DSTORE( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _STORE_C * ( x ) ); \ - inst_cnt[_STORE] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _STORE_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DLOGIC( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _LOGIC_C * ( x ) ); \ - inst_cnt[_LOGIC] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _LOGIC_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DSHIFT( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _SHIFT_C * ( x ) ); \ - inst_cnt[_SHIFT] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _SHIFT_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DDIV( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _DIV_C * ( x ) ); \ - inst_cnt[_DIV] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _DIV_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DSQRT( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _SQRT_C * ( x ) ); \ - inst_cnt[_SQRT] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _SQRT_P * ( x ) ); \ - } \ - } \ - } \ - } -#define DTRANS( x ) \ - { \ - FLC_OPS_COND \ - { \ - ops_cnt += ( 2 * _TRANS_C * ( x ) ); \ - inst_cnt[_TRANS] += ( x ); \ - { \ - static int pcnt; \ - if ( !pcnt ) \ - { \ - pcnt = 1; \ - prom_cnt += ( _TRANS_P * ( x ) ); \ - } \ - } \ - } \ - } - -extern double ops_cnt; -extern double prom_cnt; -extern double inst_cnt[NUM_INST]; -extern int ops_cnt_activ; - -void reset_wmops( void ); -void push_wmops( const char *label ); -void pop_wmops( void ); -void wmops_sub_start( const char *label ); -void wmops_sub_end( void ); -void update_wmops( void ); -void print_wmops( void ); - -#else /* WMOPS counting disabled */ - -#define reset_wmops() -#define push_wmops( x ) -#define pop_wmops() -#define wmops_sub_start( x ) -#define wmops_sub_end() -#define update_wmops() -#define print_wmops() - -#define ADD( x ) -#define ABS( x ) -#define MULT( x ) -#define MAC( x ) -#define MOVE( x ) -#define STORE( x ) -#define LOGIC( x ) -#define SHIFT( x ) -#define BRANCH( x ) -#define DIV( x ) -#define SQRT( x ) -#define TRANS( x ) -#define FUNC( x ) -#define LOOP( x ) -#define INDIRECT( x ) -#define PTR_INIT( x ) -#define TEST( x ) -#define POWER( x ) -#define LOG( x ) -#define MISC( x ) - -#define DADD( x ) -#define DMULT( x ) -#define DMAC( x ) -#define DMOVE( x ) -#define DSTORE( x ) -#define DLOGIC( x ) -#define DSHIFT( x ) -#define DDIV( x ) -#define DSQRT( x ) -#define DTRANS( x ) - -#endif - -#endif -- GitLab From f27466252aaf0626afac9cdf56fb8a1876b08d55 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Tue, 22 Nov 2022 09:48:35 +0100 Subject: [PATCH 003/103] Added new binaries for Win32 and Linux --- scripts/tools/Linux/wmc_tool | Bin 0 -> 216328 bytes scripts/tools/Win32/wmc_tool.exe | 3 +++ scripts/wmc_tool.exe | 3 --- 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 scripts/tools/Linux/wmc_tool create mode 100644 scripts/tools/Win32/wmc_tool.exe delete mode 100644 scripts/wmc_tool.exe diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool new file mode 100644 index 0000000000000000000000000000000000000000..90517ea310d32c8c5421759cda3e32f53216069c GIT binary patch literal 216328 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

&b6!UT_ZfO@xJjosi;25?&&(iQiB^#472O`p0# zV)Nb|P<0CJ0z)WxWtq+l>f}HK;o~KszC8an2L62qnt!O52sQuE=WoekWMF9ip~T-h zn+dK1w6vg={r~^}4SPYPQYrfmCME`k*Q`4jK_gYIJm4|}VmP$+jp1)8WCG2>P6g?J zx)n0dy?_zqT!?C@A6gGUCSQDygGUeqAv2O-o$%RP@E8xoggM}L!y(8x0CeQzr3?NdGwkFL7i%P17sE0q}Q&fNo;pIJ0 z@eNKgjEoEoFrUf5-Ee>j>W1TBMNEiL0yXrYa<8R4dTm!YGBUha@(?sO1TCJSYI5tjxo%He}dTsF@g!6)dqF5J6k;{NCTvn-Ky5QbJ3&(N>d)Y~2kUI!3!)(YD9Q6^2J2?@=myiEN`<$C4~fTB zI{A1j$RVKo4i)zRtpVw61y8txW)H8w;JF8~;7~VM>R`y)0>}~rP)I44sC#s` zg2ypI=Tm`8OE3>SSP4pz9-RU&|9}f3h+eeVLwC!(4Y=L1*MX7Yg)&aJ@RkHY7e9bp z##Q2SycHA{j-bo~UmF36dFa}RC~#GAs2i*b99fADu*g#T%E0i_70KCeC z$}Hec1;l5FP)Vo*r5{l81i7TDE(FP44k&U_brwi+@g-VFJe3kqfdDf_zYf`Vmi18I zIidIt9KVqIp$1fRgI4!|!T{{M&Gs_wqU%Eu*h?kUR;VB?GsN z4taD#s~`c7?x`RrK?k@&vvrVg_2@=6yBx)Aq&|W$)a(q<91YlPsLLP}tY$6^M+#`( zQWYo<)FS{z85g)d0J{Sc@n9y@As8ayb!jDRFM}Z69+>;V`Jht(oaaFShMwm)UxMd( z$mA^gP{DE66Od+)>kg0R0}9|C8fc;vTnM^?hSo2Ddb~cpycuiJ%RQb|O5l;Y&7g4T zgenHr-)f?H}r-_FL;RWg=gnU&&~_r&de^*Vs}uSXa5F`|D0&9JpqgD zT#!!CbU^EY640ps1CQ1NrGnrA9&ot0UU&&Qm=7cX3P?yZ5b1Lqneipyp+Jx}l@icmJMj3(uUlXzyaXLD1~L`i9xr(dZjXb50i;I*)Z=pix5z-- zemg-!y}qCTy3t(<8ufjFNXlCGz-A(OYbGNDLu2h31_uTP{#MZNF~}-tqxphIcj*h% zKG5~|pu!#=swKQ0-Ju|dJn*nQR3r&%>Fxuq{{{u2+YPW?FYUnD#1%9L%;*7*5U}IG z<313V?PF*F`RMqI?z>*$3&EfP+k-BnjkDkoP%DK#NVlqW?>L zV50RUjxZ)KXbc4s(p)9bA-U2QNCUgOAob4i7gJtmz zyYF@0agdWZ7(BXtL2F$>VGS8iKK^3M2XJqdz0ntRTweo3Md$^Lm{@QJY!uw9rJ%qA z&9Gm1DGORh`I>9OYxW7yi7n8GW-Vw%kPT#3i}gjpd4gF8WIt$dhENt#U4@>7E-!;* zp@P>akqz!B^0$CaKk~qyg+NmNWKDTLVg+7TL=;GqF%%H?2S0I&AA2+phs&z6ElBO%c_5wyA)7LlNN z1yDr7mv${bOL9bh@aSa?SOAJ5=o;{Da5ui?D_y)}y!OMczrbuD>0UD+(&@in9=QgA;l?5$a0~H}J6+!LbX4e-S zFMp$jF6w$t&ofA&3z|s4vq%bB(}2pQ6VM<8#WZNb2o!ezmZ64Suj!n{pg1`G!V{Ey zIzj7QTtP`2noU6K4?KE(UwHI_7T<%%lVAY`+L5&jw9N_>WQ<=yL3X9N_6n?~0o8qA zpF)G}1+1pI0ji}vI$dwP1RWs<3RzG}h14`RK+LK-&>A!_6H?QFnNfA>FtzcZmX#}5 zR0W*C!4u&Vu7I5YUY>OWUd`}62NlX7Z-J+SKm{EvhM1r+bQ_#A5N-#jdeEHAjhBaz z;{{_u1#7Rx{E=y5kuJibdY0p3j8k|LNr+S`~AVs)R zJ!sn*G}YUE28AC|LM12F3qZrP{TiBKq^J7elkm`Od?Ns=emnPqy1E!WCQvs8RL6Nh z$CtouEpWdXCIW78L3_>Mo*1;->(k5ob}?$O_L^p!K$^D}PeB0((FI#G0ER-c!I_soPeP^ke20?fCh=cnwwuR?t?8% z+kFnyg8{|%%RNX|bwauZ(AGVMH+k@Q)53s};l)JINF1cA0gh4BxPA+Y9Z0l-yb0+V zg4BU{Rdq2)K>+C*!sMbr?PajnKq}))jF42SfM&noa{ByzphJt1)LA65_L%V=rs@L>{AtXuXfZE*9UPK8$B#nUTy_cXvEa5{V zrYnsg%5AYI2VEoa5;Wxq(G6-VK?a-}&ai+wpS|EdEW8g2$`z0b5#-#$ORyM38H;Lt z44TCT4_h^y;Q*Tgj(m7m64exK9HxM(dzf1Uz@~tEv)xm{=^wIc3*nZh7qPjeG_iRv zXegMW)W)N`7nlBhEDQ_|AP+6TZiqZ=fCe%W`LgXdXjLe3TNpe9gx;e}Jc3l>ffo0A z;Mg+)8qI>{ZAj17LBIoTUdx-8}^@n?O$S=;h6ut;7H>opcRhrPHFvcm~YM4#T_(nmw=pCHBs} zC;nmC3U%ind=Vr_9@4%67rMt=-$3P>_kvhF{QXP0L2DF29MBTT&I=wWOF?^C=TA{$ z@aPs{^5}(>O%Tsi9{T_Pcm3v}=aRAE7;CpwS6a6Iz=em z{(7|)7Ew=LjyypD?XLiCt>qcBdVtkftHbh zBa`uEH75fD#DlE-trNk;4enIZItk*ADuh#Q<&Y`+_X&1}|KN6=9&=F5nSjeBls05gcNm zP4^0|2TIs?GW@Uq|C)6tsGh>7Pa2|6@nGkvZg7I>HDU6Au2+UT15|t?%5B{6buvnD_s4%#B#dVs$LGz#tk4N2(0IJmXM zdvqp_(azcx||Jvp|H3g?Cs_U0w7P%0hRLDJbhsX4p0AA zgLpa=G;0TGJAs^nFQg4%Ryu&JJPhvTg98N=MAoG)`1F4113T9?mZ5>6L<$p`x8&hT@icmipx*$nE5KcHDHh$q0IjA-py^S6LbtA;hLI*-3lMp)d>?he28YPw&cBTV zpCbaHj<7gb;*3w7CR82&z6(%;A+f@H7@k_*f}#-``ur_%AReSt@UVu&Z9C{LmH+Mra&|**qQnv+BsgDNrP`CRa_pk#GMh8G=I;4uu2Cums<_2VSa zF4jP(>7Z1uQ!3KD7UX5dZm`ec3sb?)0I9I%Zw0MgYF-O+Gh;W{=@3;MFGE2SJKz%` zz{;T^Sqhru1D6w>VBzMyAPX2OIGgu^%wQ-ngNjsw7XNNiV}vaJ-3%%KpfmEJIR>;=17DOVbb+G;US;kBRaLK9K@=lCeQ!F!`Zz%oePGu^rrr=0BoDkA zK&>GA!MOvRh@hQBaL7ZGI)BS<(3&L35(4OS9>h%Wl+r#%1_f}B#|^9LrJ!k0P?kY5 z`DNDk|NmhvoQ+>VY*3Sn@ulAvP;Ur6EdVY)&{rCSZ3pc$jzui#0}XqkF3&yC;d z>jO}*fd&R49Ru*F8fY~>eU7x^~Xlr_a7Atl;aCC=0K`f~6W&ouW7SPtM zj|>b9FF|XZ8fp(Plo(()ok0O)dMCv6=GrF=6=?H8{H?N}URQT1Xa(T~)HcU?tzmU$lVVPfz1c4M+LV`UzdY7_=O(n6nI^X z-NOpt`O+C@K^l>R6Eti20nj{dLy| z(1m%prh3r_dO-utusICS;5&$a15*F-R`w%TN1%!y+ATNefpp8WKqG(P76~Zrg0@*f z1|E69V|}jRv1#b`-)`3npzdNX>z8g&MJNK=77rR3w>VV7*6ezL@%25Z3goTIOrRY_ zy{sPke>T2Br>K416 zuw`LTVBl}{03AKj4L$`4ZT5WT1yCE(^@B%q?FZ-vK+vA?7yCe0Yl4hku@h|c>s;{C z{ccyNt>E0f50vddivFV6Uux~q?fU_?Y8v9segC1}vOrfX_;LkknHuW+@)?hA)cIwB zjj&NBkLDu{9-Xxv=#vMoGobZH2ekg!-~rvFb=(!SNSmQMbdE>2>jp^C-Fa~rIHz_V z+Yi$ALhB^RqjS1l=RgZ@{+2jUH?-Sz1Ej>6gDAi~I$d{oK$d@Scyzk1fU;qGXbv2A zy}-yI0GjGv0clUUZh#aQqF&wLY6}$47}ZvpBqPI%^Ps^vNO7^iquX@>XmSlqTe}|M zZ!rRQFkKgT^qOYKLz=rO*FnR^t}8s6Yga(}&n3AY-M%Y4xc zVmU?ya(I+zJrs}5$W@VD-QngXASY&r$?Wj9K| zWq0BTxLM+m*!pk+UMzr8%?gOKK+EF6%qsrA7D&AS<~r2DWuo}|vXErr`CFoqxGMZD zK1f^*{#HLCcVeNVVyjErfd;mgfD>$9J1YKPQ zRsz{8087VB9k|o+Ix$9u7wlL(s=?o~jERBaWe$>4wfI|uplh$K>MKxb-R-&p zo(AepU`+$*?KslFG*L(zcykQX-PZgqT~PBuNkRv;G#OM_U)v0c*>;WO$*A-TBZ1 zBf##};cwXkX&r*Ow)`!i#^OuR?Q5VQ2Ki8fzZG2 z^qL09Kq5XKVIin!UI2=Xd0QZ!fUZPBuP>zVc*0GXk>SOB(D*d8zIb{0C#W|jFyS@t z1mxNjT=YVYX#_Q2H+XdWE`YY~r=R-&zxe}W%YhO_k6!S)xed@IxeD9B4ue+|rIE*7 zFEB9(G{AiA)5}}a0w0ftdi9qG#H+_aUIo>RpjrvM?Pmq3kSS(;`TWQK|IMy*7+>c7 z067+NPJ-(U^!YQzm5AydaSA1@LI+28r|XB~uAr-X89cg6L7O>0AXge33{2okBj_N= z9}lo80bT9_iUWPHk|&@ZN<|6y7)NlA?E$F52W?h72;Z3ATziM16nu68bUhBJA@&2z z2JPvCv<=gmk<$Sq0|U6RtS|x^V8zwZ-+aOUMbkV)FpqV!lCZAr= z0$otg-}MG!m-7ZtJcAaIflg5X_uTngmV&w!pe^dIFC4*#CxBYf;EV=sMLz)#CVTH``nvc=WQmL6|Q*dRbi|Oi;gW2DGbj;kYYkmm))R?FJ_P{%_zWHK7}|yX5Etk6v)g9JE0BfM@4P(10pz*J|hS7ZVSFdt(PYnrjb0o98VH!DfNi zg&#mJ-xxqm($3>Aiogx}72U2YpiSeFOwjlgB=lFHgg#{PAZV9PXXuS?fkx0ZpDy6T zwr+S}6@|o<3pl23Kovq_?}ArAxt=)gx&?FqdbjHqj~U&e zTR=YQyy)@$CU{>y<3;fBhv^A$+v@xau0lP)3??9t*Y>X4&Ap;z;ox&E;!t`wV)Pf=kXT_D!t^O`DQGz**p;AmF&8}T zFo8xHUMqp@14;10)0YhwxCsK*0#f7A?Yje<8M<9BAbR^Qpq9;0i1Erve^L-ST<`E0!7*R7mMeCvl**LbM65a9C^cA zh>_ui)jYy^1MGTG`wi}T76!2E`7m6+7@j8JndwI*j(Ak(0J-(}i`t#=KnGcJ02G)S z{H-=%qafw#PSAD>cxGw^<$Y+*11)q04VUkLcZ?aAfrIp=3|K!RmxJO7y!8Z}z;JDh2Hif+QaKpP&Z)2F8~R;NAy(F35Ea`VgM)T%?K@)b@d$ z>H%-YgGMFbyQ>a>Qn2J4aFqzEYhi2PK?mu)fVSr!`1JCAD~I<&AR~ImUwi?@IjF}2 zZi9jP@1PBdp`hjm=sXlqgSy*w53c|NLjq{t!WVS7D@YPLcLB0^BDm1J18Pu%8$aMP z$A3T@84q4oK<6R5UGG3=6X2UgK{I*iEei0iK5(M~Is*(@*bG@330`*qZsNjLAh&|n z$#`^wmmT@^@`|AOu-Ei2A0!pUgQ6T&7j#W1f6Ete3WXR2SxO7G4xBzk50)X-fS|er z(n$eV!*5v_8D6+;gQZW{A|=oYN>Cbtteb`LAnRsfJjl9P7%vLEZWhLateb`LAnRsf zJbnH?J&1E*B9{F9kSqqa9==MJb316z1-gJ196lc15FXfHye~_^#Q~&wf$&$asRZb3 ziO%CM^0vbL1zrOQ-)hXi?*O&3i#4to-EzugU`Z2{fw=b3FK%WAHjgh++GfpsP~3aF}xv zJT?u9TySj!X1+WK?qYxw6y$)1Uehbk+PejG6cjieqPnOFViG9T;!J~(wi|Cx2{>>; zeSJ{NRo-VOIK%atmO|~Q-2x9>ND2nK3bBhv5@Huv4!Zv{0d(dNL>W{Bd@d1+2>4tg z6cO;bL?|NQbBRzyASn#lF8w;t%57v3%X$Uq1UYCF2|Qr1dPDq?XX88HRr(AR%fAMSP z|NkAWLjOUB34tjay;6;Cum#Nz)LIXe@Hh5?Yy)+pUm7tpFf@a?3NQJX85sDtL9|4a z8o{)vqiOli1k=I<@c?L($jghMqcEVF_3J!g=2+I-!I%amd=Q%$o0o#@e-D+g00#zt zZ$H9>4zSS6T7-y=D}U=sP)`x+4<^t|Hz*@PjD&?aq%4I*89Z2Qv_S_4fdxT9stej4 z3Fqm9H*A9f7$j#|ha5Pf;NeWLQtSrn^Y?v#6ftlE`1|iMGBCV80ri}XTd5N)AQf5< zl=8wjY^?_nvEqOh#B)FcIN(@Gcv%5Dl>!>DKBf6E{UF1VU>uNsPt=qHDteB;csKq3 z|K=Y)B|6w7FM=gQQPKnG$bCqVI=uYHfJhIarKT{;KsLkE6Ub)dAbSK_R10>w!%NUw z6<9Dh)S1JWZuL4aqnKI`lp^b10@n>oBd=?qE(gU9q?UjMHDu#Gj0dSDU_8jidl(P0 z@gBy5Y`ll@5cwBmgJr!6B6EO`zW}L2iu{*-pm{}@`;}S`l-fgA!h*CLlp4aM7+VjN zs6axJ1(Hobdm$S3f-=5&9T&nDhz3;A40}`K$SX0mymqB|9KfKv4oNk*-bwnS-)526Wz{GDM{H zKq))K?Ho|wK}#RV?hSC|2=cEssObmi>7t&01v>p(9^?;bWs1>Wn3#vVy|DKW1H%ik zb?~Ae&0vr0RMacnlnQaSFJCMjs3pnS|7E2A|c&zm0W%z7j*rfl^_QUQ=OK zM$p|}z4=NEFPx`=>Jrw(T)6DCzYHK*|6C=87pl`hYq4B^c=Vcnhc<|mcOu4XVP~4v zgOdVSS;jw5b$I;6pB*U592giJUPd64O@Nwq6+;=rOGAXRS9y?CG3zjtF}>tMD0}<| zVre_7GVmq|&;}#$plz>dO%BAg1Poj9tpF`_gp5Xln|~gV zb(7F09e8+7UJwOszqVWfPrHLn zfDG(GECV;bMRT%n7ZNjmFfhFMxDsASfOjlFc6oxbd@Ss&hpkXIg5*&ruHUW&I|?KL z-|7IKhy$&j2e}bG#rb&}C7s zf?N;j1i^Ta0t?22bb??!NGAx!gEUcLJbnJY4Db*gZ1a(gC4YYyLImCkVp#>s9?<2V zV2aVB8y0Y&Ro2+bHqT}7)f1piN8s&Hpw)+8!Q*6LQ#^W21wn;H=kXW3TamImbRP>S zp}jl?Q4Vr5cnk@8bQSDOGVs+jmsWsE97tQN^Y{z(l_2LHLr#&9r0CPjYncH~gUk#J zJDXfsz}21kDoEdJD)LEZUsr%mI)gc!gMoqRr53onfH=JK_=~%s zf17_el!A`@fjHNL5hB%aMgi3AhaJZTN)eE57pVB2F%y<}Ae)S!DZlkD6KLZYEZFdc zw*c51H;Ge zLT4$w5Ci$y1G3&76m!=6t;-o07#hJr4XQUvK@EMdA`ELBP^^JZ0)VZ_0a-8uoSw?G?U zkAwTkAUQ}Q3wj(Bq(tkyxQhkcRD(`8mM#RvIjCs{xlRu{1;*bJ2+2Ai1Hm(4;Px75 z>IgO!32w7Nn{M3Z@C3Y zun0|%L#Mzs3~y92@`wpMmU~S*KY~K<_>23CAhGPx32qBR$Ads|UR~mG9DJi72a2mW zV3({x)}<))LvueUM8SQG`hUhdargto7m^5HKnB%d_JMe);RjjDw+Gxt)&ZSR+X^C~5my50pn<|15@{eA zJdp<8TgnTK#N!OhKq&*#81H7V1@TH8At4C9V+Gzr1A7b-dXIY1LofX=EcDhbV_XV5BWNJ0lsXx{)QG1xKU-Jzf( zU9=Oywc%m;h@A|e1*E;EFQF~rGEfM^6vG;x$sVBX1tDb-( zv4y>ZB(^p4K`9n=Og7|JJMhHx36E|DNUi~`U;eSL8eI4se^J*9^6#71paW+>YCs1m zqh^3d|W&4?cDpdLyhuBdEHA1Ws=O=*UuV2duZk0;&m|?>ssWz2E>hZa^`H5^pV_`yO6; zgWLw)Y6(3c*5x?ZBhW?))W4A9O~Lmq>4GX+&~cI=Bf&-f=^wB{>*qoShL_(#X&>TW z&{!*|dPMUtEIJ{Lv)AksUS0x~Z!gdM{r^9$c`wN84E%koL1T*80wU}OI46RSrF~)E z01gO9V+wCT{GR}-twF9v4hYbx+pVB%1wN+~l(9f}6t#jG4hoD1`S(L&Wc@)#(0L0W zm7N0JtTr*wE4z(jlo${P(}9Byy@bBffL30eK)O2*k^w=N-ngFVZUC>bfZYbj3_4Qu z-~(olUeS%u7#KjjPS+R5T|sB2FhGu?e*mf7!0VtuRU5QnatG9824C_Ct=afnB*57e zWDjUN*bU^|0Im-{bTdFMAW~&uU;u5b2KP9?Yv({0uymI~t%5g10zidA@eI(26@Le4 zfo)^$9nh|7NFx-FM)2l8E3n4OdYtM&r;C6_Lm=uvCmMoEYz_}Jhp<4^y_ybkNToh5 z^Bkb+4nfqR?_g_zjLm~W0=#Albeq5l4^VFEcKrd#O1+|gKu2PC9(%E^4^*gMX-1q- z2AaKTti1zj5tQ&Y*4_ct{`{@m!5IO$y6N=*EdzpjB=iAv6)eL7(8xO@|9tRKa|b}W zy1_2t0I#d)t+If*;O-Yt%0KqP1j7aP;EW8`C4jEW4eIWH;K~Tu-8@iTkd;;qouC@+ zL#M!N`^MTkpuM}LpzDrKc=YZ79VYG39r^-t4*>XD703a10YA~hVmGJ@QhNuqF}PH( zoAq%7G^5;#04?`(J<&Y@VwmfTZU+lco^n0W2^M;t4-LXngKpLhFm21RXj5Q3fTGc? z+x1TKgM`)tB|6=#RWO}}SapKD2(=KjckAUA&>%hXa^-H_4yW(lat0J@sq#tOX12Fy&w z93Wo^Nf=;ht5RL){xOtn=>py4bY}{@e*oIC{2H_-53EnKR3Do@1_lOJPglp>Uuvc7x`I^hl)DxfvBu!|k8hJix`R7Zn09m(@RQZqPI z7@smQyodsg3WF%f4a$PaNF@mtbqWd&3?OwC5OruJNeSqNInX(mpgnCj7)n6b zmw|2$1+5_YfL<}|u0pC90y=B&fUel<3Ozf!11fGg!L5;BS2gNgfvE1D%p86>6-# z1KR#t!r54RhZnSSksZ9Q=`|~)DcbFNqC=qD6{fyK58UiMeh?J59-W84HM&RV^-t?O zI!}0f2RRp1UV`r6OgqkC%h2umr1=4OBCy-_$!pNk-3t;gAA^z|cr`FI+cv%d-#^q@ zJEOC7ibrQ?hexMxgHLBGXw3{-9zO00UTVv~jrB(uXu<+~?*e~IH>gE@KrNUp z9=)YYJbHcKdGv-Z?snbc+4<2Ed=1zxNl^aiHC^tn#L#*CMLTFY3TSU7=sZscP_tqN za$x}5Ejqa$Q6RQX=LTISxPgJcV*)p*0|nIzTdUXUdcXsEP%_Pc?P5-#Je*PM{o1ReNat*{Ds{_c#Q!%eR>8c!y`MCfq??3@@%sAY>C{gK`77?SZ`F+r^_Byx5$h zI}~-rH)u`UgKh>}aFGDIFbc#06$>Sx6Qn^L&=y|)Ru|C0W3C%iL5s>k1EipwLK>|yVfEPHRfwdRh5JK_-WTQy8>lSc9#tYh{-3dD9bcsiA z=sS;I*TtUTBhfuN55kgBg0B+83n$Q+zw3tPT2Pv3;)JCM5721H4Ug^sj&9d2@Y4xg zXCMZPH#dS>O>5xm8Tnh?IT;wbT{nP_Q7Qpla}61vL3qC3ABX4n-Gz8w1T+)}sYS7- z6alE`5A=ZSM)rK`Sq`w}stin!0qP~-Vh$s*^5AlUHPi_c`v@f=NMf~xJE8Ree< z5Ab(@7Gb~>3}}-+fdr%Pt;Fy`@CV2UXo86XuSNrfGT{W%R1eaKoM7a^y1}7_x-o-+ zfe{pHH@iSOkfXWfDtIyyBda#QQh;DB|K zD&Uj~THGTAW`VkkEiK>`SgwmfYdIkI4S|+~yqAgH#-D1% z&;w6E@Kwo>ZPTEg4K`JEp#4%{CS*@7m>E^416utI8h(o}0bLRb7F7W^tHDhDI?#Y0 zm}yxr3Q`N7%CzhSr2)`d{!mc*+W{?>m3+Wy2Hl~(rY_Jlv%DMO&~Dca;9{foKndtR zSZMu(ToQsh(3Y+{_*)YgL6dHGeDga)2G6Q@ufDJ+v(h z3&Bor+#$I5IRnFsDuly8yL`Z>!E2PNVb3rScU>q!Z^JUZZUNa1aZ(E?f4)2no(FaX z2ck89>vT|M3fjv7J1HGJ!32-!M_yoOLYw^Xy{OiEY-s0Ovup& zmaf>G+JJCsD=*lUC{Y>ig(E6UKtn2>$6t6LoB~gC1VU^FMu>@fH0SPMeBBI63!v5f zpe2XR&=Hqz2FP((;Fa)@Fl_~o34(T*H6KtwE3cM$f*lMEJES?AtKg#+j=#_b4Zy+6 ztIz`;-QW{*W^=DbYA>kD1fLb++5zq99e>eW3o4C}%dZU3v=X$r z{6$*g}BGMveB4BzAN{f&zQo`YJ+!ZvG18TB@S~`#+A<&*T zaLWu59kAVLuK6=A+;%5y#VUA z9)EGL1r!rV^+JgySUU%}>TkUc2}JZl3`ZRS-YD1tDZ)S}+W3MT1xpY+AQ#RY0Jota zTci;QqNp0=3`BweUsyp-B52I}|Nphdgx9JQUMo#_EkEJ4%!JpH6JCo=cr85PHO5}_ zZp>{VX4$Y#IB2yK_^tuWvy#E9oj|t|gCmP5yVpEQAn zxIt>V!8ejY8%+EyxuD$E4RW0W2h4)fpjx;wnl)bL_s8c7+4LWbp^O#&|M0( z89rtL9tO^7f{!2u7i5AXs0Sp|2xdEh*a8qXXpoA(wFlJ3>}8d(1+AfLE%^Wc zKSH*Y!=o821ZqfwEEWJ2n+cHPNI=CUh+9<`1v&2*&xftm*^sMRZ2j; z5xB|vb)ZojIM=csWph5_A(2j$E2jrqGkKRfPXz6zB#nK8;u!EuvHS+dy zfL3FG!UE*yk_@O5K)p?rU|bAsv#El*1+6jQH~^8*=qmw@YEJ-#fA>_7FiOuC8g-Cv z254||1!&|4oFw5RtuwkE6hK8MSQIkY+Ra+z3>}!wbXH<`?F>tcy&aI@+1eQ%y`dYr zw}KKAD8YGxt~)>eV%9tCUcJiBz|ag%bBr&;K)XPCT{nQz^_fag84b4B13WSXW`Y_X zGdw^i^!B=LfCOW&=r3q5F1#GO6{YN;tPld)4FS3Y34GKzC{uu1Pad7E8K5grx}g+< zM`vrof6x)hAoqh*ff}kW7%jn0pI$sst;BEj~aRa8C!j>DY_IW!T;H zgbm~-&@uyNaKQ<&zBd4ra6tBBOD*L%%$g0}Y7H@=`2hG9omr`%GqE9igcvVC&t-20 zE79+ZO;Zd;%HMef(~-%JpST3Xci6JrT~v-dGxZ* zw}fX*56FlYDAU!JibJy|2gFs)2N%lk5p=6YrQtZLFm=$!$Fen(C4=};a z0|y{<;FcGZdm!dQMYu}BU>=7IbD(4?1_lQ3Xzrz2(C}TQHXfz00o~e8S_kzPm^OPnuVL+r?4^)(SbeDqaA&@diJpnDPK_2Nm z{$gJZw6rckw+v#0Wh*F?)#^idonYQ;MObdnx zhKPaYoIwr)WdslnEwPS+4FcIhPC)=3YQmeNj)I(t6#dNyI6yTe$ZL=Q0`=lRC!#`l z+F*Y`(lA7%^+279NB2}vY(WG(W_W;0V~_}R9Q|h6|Njul)&rHU5Z3n_p!qmRn(v0^ zrOt~Uy`oocg1W88Ug#8I&re~HQUEnNV37d2Aqq99pi7=WH$Q;g1c@Px@)~r0yXyjI zuy;=d#X;u;a4f)(QE1BAAQzep3@p%!%G4g}lSS3=#(0NEw`+%owQEBeXu=0-plb)T7J^GM zy`BKex6oYN>v{p&Z5wVDx$|Np-@91kijU~4rULxMe;-+)d+K{-2*+|1uv(QZi1bk z6$hU5@Af?aNg?2M@TV#n74a|IC6MzZ4|sNd z08PFg1tn?MDb2N0U>&8&ETB=f37yAZoCFszpr$ZLzXj;9E=bPpJoe&u4#;d|eR1F+ zBi9aiV|honhXJT~>~=8WU+=nv@dT)>cI|*Qo8>K_&1NwRC5CQM5fJIRgz-WrE2o7L z!)rsxs0e6O26WUXDEaPVP+$PZ*4|8X%b$Rnp{{e9AFzO;Hv}?Zgy!mA(U!~LXnSFY z;rQiX9iXsBiTI1n050yg9Li!&fDXbKsgIi)JVMTucItARPxYwG5pxjd9G zabQ6XhLYSiG z<`9c_Ujl{N@fWv1TofN`z%5RKSsaPQVigpNx5JY;N>HaES-cO-Hg$tqoQPrZ`ZAc0 zMPU~6V6m77#bW4)@Bxor(+?LRUi#Vutq(wl+Z%SX&NqdI-!xOq@Z&%+4ZJG8+ZANm zTBvEu(M$`4ndXDVG;lu>mK$C!0=JDYl0jf8A~sfn*`^*)%VL_LPKT$zS*74W(d%YC zV*>TYVG~Sm=pcLJwN5u{8%%XA7S%4us=Gls47B?g)Q^UiHl-adiK53GA#(#&MiwEn4^@U4A+sd%|Nj^K5#Yv7 zL9}B`?BP(4&Ziz|%cDROMj-b-3j^8h3O#=ra_X~BFYkFHL@fhdi+8pJtnvrsME9wn z#H<2cUjjWQPv;FPi{a=mBaqM0j-8?(pa=-Qdv~x&nD|2e|bB zy2S%jS8m|n#$dw>x^u)8%;YK&@#wWJKfu87qBsE*dq-Y^+JfMEzw`Ku)>>F&2sDZw zy21l8n!N*BiyVKkH4Ut(x%LR8_9^v&*1j7cwIjG1^C?1Pf+Zj}s5K8dLfaK#P!7Z( zh_2%=`imgE7G<1Cdou2vt z8D|iEWq^D9T5LZ9!;5^-kUe;u!4>C<2DKg_LZ!JL z-K8K`|3FL|2_tW7ccU`iCF-25)UYOft+Dm%5u#0F+)S` zV}=s@2GBw7M$puUvXjA@fuRAE%sY}mX#la4fxq=4xG;2maf|^p-3SUAkSAbnI}*6jL%@#RC%ifq^|%}*dX&Z8M}7AkT^1MR1R9fJzWF5u;}keTFO zQ&3=o0xKvKGYLU&X9lm8JLY;Dlutpo5kRzBx_&731C=QJ+Z_IPxZdL5=6cIUp+o{q zbC!T6h;G^ZFW~_5>r0iuG=k4^%=I=X@E>@97umZ$c)fB0$TV>HK#G#|a8Mt_^?`?_ z>xUAMdXNLaykb!F!F7VPfkNkh>3tCM7=yy=YaXC|FP+C<#8iTE2z1dRWbxsHhT7W< z{4JnW=Fl_yUqHL~-@^X?e+k-%(CvB$eIekcAlMuPEQmq5_XzalO;8IKx=j2Abme$= zDEPJn$mmYz#a&CmDFWK9xt9fs=_}o?SK!?m$lW2JwFaQo->6$+AR!JKk_DFt;7kn) zJm?)0qN2LEQ?BD~28I{2a^SfMo^mz#TQ7n01Nfrn7pPfx5vUaC1XU5PA0V4UTw#{2 z(7|olm0b)BFLV)>fl81E;En_+mMvX>lqNOQ9$^4g*WevUHy{gcz{NJ`z7cS~y$}Zq zoD0ph7ocUg6*xA*Cm^}P;>rt@UO{WHA;KS^QD__rI&16->{R;(x6WfpDpk?R`4A2V9qxlU!O?Lyx(6oXaO~qI>f%@g} zZIqx*%AFrNT3P;MxmXi)3<;>G;{n+e+uZhypgQv{NRq|JfsUU6~wCt59vaAEeA>yj)M=<0Pin`go#f#XfF&@1^+grz0@EvX!^PYN_L=O zPEbJkc0Pb^r`CZT>ic459s|S6{h)b*X0S^b!531&1Mm2Y?cf1HkapBlwn9L9AT9x= z$BCfXSFjUNl^LKaO9jtVV4B8*s;mvvVaHb=@C?A@!&}? zOiLG_D!Txl>cmu5gQ`pr#{p&$sLCERV|SYgsOpnBu@3x!NjwFr($*gbLJg~lbpko3a>?(Bl)!AEvsPc?IbL8idY`MC++lBIYA zwk0bqhk@Z`4|tFR9uwzrc*6%(8Q*N|zSTe|18sZ(A2-nS6}#I1;1LS2&G5+r5zw9y zEa~MMLM`|}U_>Z-^qQVN1PQao&!AEfY#^qhD5#10 zG8a^3_Tb|^FjJlak}}Zf8nm2(?x%#DrU>0|4mo=nbm{~H0}JTn6VJU6-|b2V#U(h# zQBnkdi!r#x4J`~ollb7>k4TgF;E7e};5?+9JpN*L0jwtjF%rL9m>3v1JbF#{?t!>P z58@U`3AqCDWuRM#UpD^x|G!}`sK#O_iH8-EpqPQg zg-XMR*Y?=~SQgux1+FeYl?TX8 zic7G&i478iU}Ydz5KJEj_&LBw!+P|Zu0H^A*1HrO&I%$rgduyqz~`KUlMH;h03^|X z6UxgpP(J{Y|Bg3+76c$w?~qy>G~fN&e8Ov!39k(&yw;oWT6+Qs%W%NCAGMRq`eKdy z|NkD1M?gbV$fFFP9o{E8OOJGh9>C~$fOoccyFRgYJ;L9665QYfcS1n-B7yphCp>xs z1Ux`n!@C(gz`JM;fX-#@c6|ZqSls8|=6WC6vAAyo=~&!{b}a7O)T3|0DgmuOeF5!M zya4O1FWHEt0m8_ymV~U3{i>d|#149Yxi#|7aAEEILXl0p4=U&h(8+w?4*N;G>3nUL~jj@7T zV@>NB7+%!*gHkAHDap$z;8pA3l@K1C;K@CZ9!SdzwBQ9I(|jPqqZ7PaVgV$TxHfq7 zy586YIw=a27r|A4t}Ccyc5U$JbnWl}Z3XCd?eOX4y`})pW1xk1(BnGygHE05JpQ6Q z36z*Yb33&ikj6NF%SK2Xf=1gwTYpwS2NotOfV&0og>lGx$Tn;Mo&S~q?}LDPdJ{mc zGRT?LU?x{-phtHoXqIjQbdCbNuBUk|XyFkfWa+}pgRkTmFEl@322H4g#38~SGx)c= zxZVIQbT|YPN$U&&^;ldx7+-=8&pZxZHw6mw<6vV!2Zce6Zr%$ri2=N~vqTrBpMQIZ z>y2)(E~xQomWS%jK%^n7uwL&&k)Hus&(gdXG(pQyS8*IXAqujndn#yw5%iE)$b2kB zXX}Ad9>}~k#6*Z_C)kD9T;~a~9_pYOmf)Gd(yI_rh!L-kL%a$a#elc~#Ddz5G7-N3 zR3m^I=B^FkYQeSRcxwrC=?-X|4Rkv;=%#Xz7-Jo%pYUQ01H+3aKJb+Jiw!ij2$J`J zY=~wA?E~{T_<+fS5tIcLAVz=;>*nYN8;)I}L?;K#>p9>hK`HFutA)Q^U*O(grzX6>J?Be+y{Ml1FzbXu($lq~i~n zTVw=JX&!&^JPH(cpyURLGHB<&BonfhjuE!{ta~a*4a&?Wc-<>#61@go?t|9DgU4|i zJepm1fQCbMbTe4Cf+V45zk};9*9J%!fpX=`jZC0Q5Yu%G2l&BDnLMN58V6FX$Ay8Jd4E@wcuepiTyq z(?LNFDHgk@g4mjeIxo!pz8AC}rxUtX2~^cU7V0#w1+67xgscOEl`F9j?VySgQj_(9 zscwPJiwA$oAABjtc&hmkv*xKz0f<6S#R94}A?t9u!OONlVlJ*X(ku^^&W4x{spnqz zLXv?dG#P-KAt)8h29PH}u4-Nj3SmY_h(q1R-vU}D0TIF;RuUlXpkT(Q2pmwLP=Gkb z8tfQQ3Izoi#Gw#JYeQlMw1%NOh@-m~WUxo_NsogMSv(joLe_qD9`oot|3c#{XrUKK z9ul%IZ9$Dbuy)3myx?I)$em>1W*qtz23ntIcn5Kq+jNZ`gx&a;!72s`ZpdoV5!1D%_k^($f4C)d>t`Py9 z{sgXdKs$oK_bj6y_QAlw0Pgku4F*lqg4adi0u_ZiaNh)T}_3msWc; zyPg0o_Bw$@3lGQvy{6nyEuSsHT0ob#yy#{y1+7g5O$NHY0QJ2fVbkoofe{q8NZn#k zc(|gge<=rZFz7BB$W+E0yZ`@RegF?afz&IzZfQMG0$TU-qMHG-wO<9apaml|prN@w z2;{m-j5SF@jG&pg<)Bmm3fu

4hbn$6S{)yae|@x^;K6ZZhp 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

LMlQl@!H;uL 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 literal 0 HcmV?d00001 diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe new file mode 100644 index 0000000000..9568101299 --- /dev/null +++ b/scripts/tools/Win32/wmc_tool.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7694acbdd63f95acdccd908d493d93d6121d2fdec7b29fd21f030b5a6906359 +size 309760 diff --git a/scripts/wmc_tool.exe b/scripts/wmc_tool.exe deleted file mode 100644 index 5524302886..0000000000 --- a/scripts/wmc_tool.exe +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b213d20b8edf59a094f0d9d4dd2624d4bf9944d1cf7f9732b302c580b790bed1 -size 207360 -- GitLab From e8b27323d57241e73eba12898b23e41bc637870f Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 09:52:17 +0100 Subject: [PATCH 004/103] Replaced wmops_sub_start() with push_wmops() --- lib_dec/acelp_core_dec.c | 6 +-- lib_dec/dec_acelp_tcx_main.c | 4 +- lib_dec/evs_dec.c | 8 +-- lib_dec/fd_cng_dec.c | 8 +-- lib_dec/hq_core_dec.c | 4 +- lib_dec/ivas_core_dec.c | 6 +-- lib_dec/ivas_cpe_dec.c | 6 +-- lib_dec/ivas_dec.c | 4 +- lib_dec/ivas_dirac_dec.c | 4 +- lib_dec/ivas_dirac_decorr_dec.c | 4 +- lib_dec/ivas_dirac_output_synthesis_cov.c | 12 ++--- lib_dec/ivas_dirac_output_synthesis_dec.c | 8 +-- lib_dec/ivas_ism_metadata_dec.c | 6 +-- lib_dec/ivas_ism_param_dec.c | 8 +-- lib_dec/ivas_mc_param_dec.c | 8 +-- lib_dec/ivas_mct_core_dec.c | 4 +- lib_dec/ivas_mct_dec.c | 4 +- lib_dec/ivas_mdct_core_dec.c | 4 +- lib_dec/ivas_out_setup_conversion.c | 12 ++--- lib_dec/ivas_sce_dec.c | 4 +- lib_dec/ivas_spar_decoder.c | 12 ++--- lib_dec/ivas_stereo_cng_dec.c | 4 +- lib_dec/ivas_stereo_dft_dec.c | 18 +++---- lib_dec/ivas_stereo_mdct_core_dec.c | 4 +- lib_dec/ivas_svd_dec.c | 4 +- lib_dec/ivas_tcx_core_dec.c | 4 +- lib_dec/ivas_vbap.c | 10 ++-- lib_dec/tonalMDCTconcealment.c | 14 ++--- lib_enc/acelp_core_enc.c | 4 +- lib_enc/enc_acelp_tcx_main.c | 4 +- lib_enc/evs_enc.c | 8 +-- lib_enc/hq_core_enc.c | 4 +- lib_enc/ivas_core_enc.c | 4 +- lib_enc/ivas_core_pre_proc.c | 4 +- lib_enc/ivas_core_pre_proc_front.c | 4 +- lib_enc/ivas_cpe_enc.c | 4 +- lib_enc/ivas_dirac_enc.c | 8 +-- lib_enc/ivas_enc.c | 4 +- lib_enc/ivas_front_vad.c | 8 +-- lib_enc/ivas_ism_enc.c | 4 +- lib_enc/ivas_ism_metadata_enc.c | 6 +-- lib_enc/ivas_ism_param_enc.c | 8 +-- lib_enc/ivas_mc_param_enc.c | 22 ++++---- lib_enc/ivas_mct_core_enc.c | 4 +- lib_enc/ivas_mct_enc.c | 4 +- lib_enc/ivas_mct_enc_mct.c | 4 +- lib_enc/ivas_mdct_core_enc.c | 8 +-- lib_enc/ivas_sce_enc.c | 4 +- lib_enc/ivas_spar_encoder.c | 4 +- lib_enc/ivas_stereo_dft_enc.c | 22 ++++---- lib_enc/ivas_stereo_mdct_core_enc.c | 4 +- lib_enc/ivas_stereo_mdct_stereo_enc.c | 8 +-- lib_enc/ivas_tcx_core_enc.c | 4 +- lib_enc/pre_proc.c | 4 +- lib_rend/ivas_binauralRenderer.c | 4 +- lib_rend/ivas_crend.c | 8 +-- lib_rend/ivas_objectRenderer.c | 4 +- lib_rend/ivas_rotation.c | 12 ++--- lib_rend/ivas_sba_rendering.c | 12 ++--- lib_rend/lib_rend.c | 64 +++++++++++------------ 60 files changed, 232 insertions(+), 232 deletions(-) diff --git a/lib_dec/acelp_core_dec.c b/lib_dec/acelp_core_dec.c index 4c52cdb811..54e062332f 100644 --- a/lib_dec/acelp_core_dec.c +++ b/lib_dec/acelp_core_dec.c @@ -131,7 +131,7 @@ ivas_error acelp_core_dec( return error; } - wmops_sub_start( "acelp_core_dec" ); + push_wmops( "acelp_core_dec" ); output_frame = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); @@ -179,7 +179,7 @@ ivas_error acelp_core_dec( set_f( synth, 0, output_frame ); /* They are however read in a few places which causes errors in the valgrind tests. Simplest solution from a code perspective was to set them to zero. */ /* CN generation done in DFT domain */ - wmops_sub_end(); + pop_wmops(); return error; } @@ -1432,6 +1432,6 @@ ivas_error acelp_core_dec( st->hTdCngDec->ho_16k_lsp[st->hTdCngDec->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); } - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_dec/dec_acelp_tcx_main.c b/lib_dec/dec_acelp_tcx_main.c index b9d3481579..31064aa7c7 100644 --- a/lib_dec/dec_acelp_tcx_main.c +++ b/lib_dec/dec_acelp_tcx_main.c @@ -295,7 +295,7 @@ void dec_acelp_tcx_frame( float old_bwe_exc[( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2]; /* excitation buffer */ float *ptr_bwe_exc; /* pointer to BWE excitation signal in the current frame */ - wmops_sub_start( "dec_acelp_tcx_frame" ); + push_wmops( "dec_acelp_tcx_frame" ); start_bit_pos = st->next_bit_pos; if ( st->rf_flag == 1 ) @@ -479,6 +479,6 @@ void dec_acelp_tcx_frame( st->last_coder_type = INACTIVE; } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/evs_dec.c b/lib_dec/evs_dec.c index 299e6a31ce..c55c5b4721 100644 --- a/lib_dec/evs_dec.c +++ b/lib_dec/evs_dec.c @@ -86,7 +86,7 @@ ivas_error evs_dec( error = IVAS_ERR_OK; - wmops_sub_start( "evs_dec" ); + push_wmops( "evs_dec" ); /*------------------------------------------------------------------* * Initialization *-----------------------------------------------------------------*/ @@ -285,7 +285,7 @@ ivas_error evs_dec( /*---------------------------------------------------------------------* * Pre-processing for bandwidth switching *---------------------------------------------------------------------*/ - wmops_sub_start( "BWE_decoding" ); + push_wmops( "BWE_decoding" ); bw_switching_pre_proc( st, old_syn_12k8_16k, -1, 1 ); @@ -356,7 +356,7 @@ ivas_error evs_dec( swb_CNG_dec( st, synth, hb_synth, sid_bw ); } - wmops_sub_end(); + pop_wmops(); /*----------------------------------------------------------------* * Delay ACELP core synthesis to be synchronized with the components of bandwidth extension layers @@ -975,6 +975,6 @@ ivas_error evs_dec( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_dec/fd_cng_dec.c b/lib_dec/fd_cng_dec.c index c1ddeeb79f..c9b8e9edd4 100644 --- a/lib_dec/fd_cng_dec.c +++ b/lib_dec/fd_cng_dec.c @@ -385,7 +385,7 @@ void ApplyFdCng( int16_t L_frame, last_L_frame; int32_t sr_core; - wmops_sub_start( "ApplyFdCng" ); + push_wmops( "ApplyFdCng" ); /* limit L_frame and core Fs values for MDCT-Stereo modes which can have higher core sampling than 16kHz, but use a downsampled buffer */ L_frame = min( st->L_frame, L_FRAME16k ); @@ -608,7 +608,7 @@ void ApplyFdCng( break; } - wmops_sub_end(); + pop_wmops(); return; } @@ -1771,7 +1771,7 @@ void generate_masking_noise_dirac( int16_t *seed = &( hFdCngCom->seed ); float scale; - wmops_sub_start( "fd_cng_dirac" ); + push_wmops( "fd_cng_dirac" ); /* Init */ scale = 0.f; @@ -1930,7 +1930,7 @@ void generate_masking_noise_dirac( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/hq_core_dec.c b/lib_dec/hq_core_dec.c index 547354eddc..431a30de01 100644 --- a/lib_dec/hq_core_dec.c +++ b/lib_dec/hq_core_dec.c @@ -87,7 +87,7 @@ void hq_core_dec( int16_t mdctWindowLength; int16_t mdctWindowLengthFB; - wmops_sub_start( "hq_core_dec" ); + push_wmops( "hq_core_dec" ); /*-------------------------------------------------------------------------- * Initializations *--------------------------------------------------------------------------*/ @@ -495,7 +495,7 @@ void hq_core_dec( mvr2r( output, st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame ); } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 1d98e39e2b..23f3a049f9 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -97,7 +97,7 @@ ivas_error ivas_core_dec( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_core_dec" ); + push_wmops( "ivas_core_dec" ); /*------------------------------------------------------------------* * General initialization @@ -408,7 +408,7 @@ ivas_error ivas_core_dec( { if ( hMCT ) { - wmops_sub_end(); + pop_wmops(); return error; } @@ -757,7 +757,7 @@ ivas_error ivas_core_dec( output_debug_mode_info_dec( sts, n_channels, output_frame, pitch_buf ); #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index 12b8fcb899..3a2a005fb6 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -80,7 +80,7 @@ ivas_error ivas_cpe_dec( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_cpe_dec" ); + push_wmops( "ivas_cpe_dec" ); ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; @@ -369,7 +369,7 @@ ivas_error ivas_cpe_dec( if ( st_ivas->hMCT ) { - wmops_sub_end(); + pop_wmops(); return error; } @@ -521,7 +521,7 @@ ivas_error ivas_cpe_dec( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 5d3a5a10f9..407fb01dfc 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -67,7 +67,7 @@ ivas_error ivas_dec( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_dec" ); + push_wmops( "ivas_dec" ); /*----------------------------------------------------------------* * IVAS decoder setup @@ -584,6 +584,6 @@ ivas_error ivas_dec( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index d7feb33256..98a4fb1f18 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -1787,7 +1787,7 @@ void ivas_dirac_dec( float *reference_power, *reference_power_smooth; float *onset_filter, *onset_filter_subframe, *p_onset_filter = NULL; uint16_t coherence_flag; - wmops_sub_start( "ivas_dirac_dec" ); + push_wmops( "ivas_dirac_dec" ); /* Initialize aux buffers */ hDirAC = st_ivas->hDirAC; @@ -2459,7 +2459,7 @@ void ivas_dirac_dec( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_dirac_decorr_dec.c b/lib_dec/ivas_dirac_decorr_dec.c index 437bdf8a64..2a02737336 100644 --- a/lib_dec/ivas_dirac_decorr_dec.c +++ b/lib_dec/ivas_dirac_decorr_dec.c @@ -315,7 +315,7 @@ void ivas_dirac_dec_decorr_process( float *filter_coeff_num_real, *filter_coeff_den_real, *decorr_buffer_start_ptr, *decorr_buffer_ptr; float input_real, input_imag, filter_frame_imag, filter_frame_real; - wmops_sub_start( "dirac_decorr_process" ); + push_wmops( "dirac_decorr_process" ); /* check handles */ if ( h_freq_domain_decorr_ap_params == NULL || h_freq_domain_decorr_ap_state == NULL ) @@ -571,7 +571,7 @@ void ivas_dirac_dec_decorr_process( } /*end of decorrelator*/ - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_dirac_output_synthesis_cov.c b/lib_dec/ivas_dirac_output_synthesis_cov.c index decca34452..d88108dc25 100644 --- a/lib_dec/ivas_dirac_output_synthesis_cov.c +++ b/lib_dec/ivas_dirac_output_synthesis_cov.c @@ -452,7 +452,7 @@ int16_t computeMixingMatrices( float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - wmops_sub_start( "dirac_cov_mix_mat" ); + push_wmops( "dirac_cov_mix_mat" ); set_zero( svd_s_buffer, MAX_OUTPUT_CHANNELS ); for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) @@ -665,7 +665,7 @@ int16_t computeMixingMatrices( mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); } - wmops_sub_end(); + pop_wmops(); return out; } @@ -706,7 +706,7 @@ int16_t computeMixingMatricesResidual( float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - wmops_sub_start( "dirac_cov_mix_mat_r" ); + push_wmops( "dirac_cov_mix_mat_r" ); /*-----------------------------------------------------------------* * Decomposition of Cy @@ -864,7 +864,7 @@ int16_t computeMixingMatricesResidual( mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); - wmops_sub_end(); + pop_wmops(); return out; } @@ -910,7 +910,7 @@ int16_t computeMixingMatricesISM( float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; int16_t nL, nC; - wmops_sub_start( "dirac_cov_mix_mat" ); + push_wmops( "dirac_cov_mix_mat" ); out = EXIT_SUCCESS; lengthCx = num_inputs; @@ -1047,7 +1047,7 @@ int16_t computeMixingMatricesISM( mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); } - wmops_sub_end(); + pop_wmops(); return out; } diff --git a/lib_dec/ivas_dirac_output_synthesis_dec.c b/lib_dec/ivas_dirac_output_synthesis_dec.c index 79c04f824b..c73c1375f4 100644 --- a/lib_dec/ivas_dirac_output_synthesis_dec.c +++ b/lib_dec/ivas_dirac_output_synthesis_dec.c @@ -945,7 +945,7 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( int16_t alphaMaxBin; int16_t alphaMaxBinFast; - wmops_sub_start( "dirac_out_synth_sfr" ); + push_wmops( "dirac_out_synth_sfr" ); h_dirac_output_synthesis_params = &( hDirAC->h_output_synthesis_psd_params ); h_dirac_output_synthesis_state = &( hDirAC->h_output_synthesis_psd_state ); @@ -1248,7 +1248,7 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( set_zero( h_dirac_output_synthesis_state->cy_cross_dir_smooth, num_freq_bands * nchan_out_woLFE ); set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth, num_freq_bands * nchan_out_woLFE ); - wmops_sub_end(); + pop_wmops(); return; } @@ -1277,7 +1277,7 @@ static void ivas_dirac_dec_get_response_split_order( float dv_0, dv_1, dv_2, dv_r_0, dv_r_1, dv_r_2; float w; - wmops_sub_start( "ivas_dirac_dec_get_response_split_order" ); + push_wmops( "ivas_dirac_dec_get_response_split_order" ); index_azimuth = ( azimuth + 180 ) % 360; index_elevation = elevation + 90; @@ -1411,7 +1411,7 @@ static void ivas_dirac_dec_get_response_split_order( response[b] = c; } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index 6b9f8ec8ba..1ce0a03aa0 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -76,7 +76,7 @@ ivas_error ivas_ism_metadata_dec( error = IVAS_ERR_OK; - wmops_sub_start( "ism_meta_dec" ); + push_wmops( "ism_meta_dec" ); if ( ism_total_brate == IVAS_SID_5k2 || ism_total_brate == FRAME_NO_DATA ) { @@ -97,7 +97,7 @@ ivas_error ivas_ism_metadata_dec( } #endif - wmops_sub_end(); + pop_wmops(); return error; } @@ -499,7 +499,7 @@ ivas_error ivas_ism_metadata_dec( hSCE[ch]->hCoreCoder[0]->bit_stream = hSCE[ch - 1]->hCoreCoder[0]->bit_stream + ( hSCE[ch - 1]->hCoreCoder[0]->total_brate / FRAMES_PER_SEC ); } - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 8ebf27afb5..7baeda81ee 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -398,7 +398,7 @@ ivas_error ivas_param_ism_dec_open( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_param_ism_dec_open" ); + push_wmops( "ivas_param_ism_dec_open" ); /*-----------------------------------------------------------------* * prepare library opening @@ -534,7 +534,7 @@ ivas_error ivas_param_ism_dec_open( st_ivas->hDirAC = hDirAC; - wmops_sub_end(); + pop_wmops(); return error; } @@ -764,7 +764,7 @@ void ivas_param_ism_dec( hSetup = st_ivas->hIntSetup; - wmops_sub_start( "ivas_param_ism_dec" ); + push_wmops( "ivas_param_ism_dec" ); /* Frame-level Processing */ /* De-quantization */ @@ -915,7 +915,7 @@ void ivas_param_ism_dec( st_ivas->hIsmMetaData[ch]->elevation = st_ivas->hDirAC->elevation_values[ch]; } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c index 29e2ce4002..e9eeaad813 100644 --- a/lib_dec/ivas_mc_param_dec.c +++ b/lib_dec/ivas_mc_param_dec.c @@ -599,7 +599,7 @@ void ivas_param_mc_dec_read_BS( int16_t ild_map_size_wo_lfe; HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC; - wmops_sub_start( "param_mc_read_bs" ); + push_wmops( "param_mc_read_bs" ); /* Inits */ *nb_bits = 0; @@ -771,7 +771,7 @@ void ivas_param_mc_dec_read_BS( hMetadataPMC->attackIndex = 0; } - wmops_sub_end(); + pop_wmops(); return; } @@ -817,7 +817,7 @@ void ivas_param_mc_dec( hParamMC = st_ivas->hParamMC; assert( hParamMC ); - wmops_sub_start( "param_mc_dec" ); + push_wmops( "param_mc_dec" ); set_s( channel_active, 0, MAX_CICP_CHANNELS ); nchan_transport = st_ivas->nchan_transport; @@ -1101,7 +1101,7 @@ void ivas_param_mc_dec( /* update */ hParamMC->hMetadataPMC->last_coded_bwidth = hParamMC->hMetadataPMC->coded_bwidth; param_mc_update_mixing_matrices( hParamMC, mixing_matrix, mixing_matrix_res, nchan_transport, nchan_out_cov ); - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_mct_core_dec.c b/lib_dec/ivas_mct_core_dec.c index d7459efabd..4ce7d2e82e 100644 --- a/lib_dec/ivas_mct_core_dec.c +++ b/lib_dec/ivas_mct_core_dec.c @@ -183,7 +183,7 @@ void ivas_mct_core_dec( float nrg[MCT_MAX_CHANNELS]; #endif - wmops_sub_start( "mct_decoding" ); + push_wmops( "mct_decoding" ); /*--------------------------------------------------------------------------------* * Initializations @@ -269,7 +269,7 @@ void ivas_mct_core_dec( apply_MCT_dec( hMCT, sts, x ); } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index b4a4da3e3c..86c1e4abe8 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -79,7 +79,7 @@ ivas_error ivas_mct_dec( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_mct_dec" ); + push_wmops( "ivas_mct_dec" ); nCPE = st_ivas->nCPE; hMCT = st_ivas->hMCT; @@ -263,7 +263,7 @@ ivas_error ivas_mct_dec( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c index 3e186d61b8..2dd875bdbf 100644 --- a/lib_dec/ivas_mdct_core_dec.c +++ b/lib_dec/ivas_mdct_core_dec.c @@ -474,7 +474,7 @@ void ivas_mdct_core_invQ( float concealment_noise[CPE_CHANNELS][L_FRAME48k]; TONALMDCTCONC_NOISE_GEN_MODE noise_gen_mode_bfi; - wmops_sub_start( "mdct_core_invQ" ); + push_wmops( "mdct_core_invQ" ); sts = hCPE->hCoreCoder; bfi = sts[0]->bfi; @@ -734,7 +734,7 @@ void ivas_mdct_core_invQ( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_out_setup_conversion.c b/lib_dec/ivas_out_setup_conversion.c index 55f53bae73..2a8fc9a548 100644 --- a/lib_dec/ivas_out_setup_conversion.c +++ b/lib_dec/ivas_out_setup_conversion.c @@ -460,7 +460,7 @@ void ivas_ls_setup_conversion( float dmxCoeff, tmpVal; float output_tmp[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - wmops_sub_start( "LS_Renderer" ); + push_wmops( "LS_Renderer" ); hLsSetUpConversion = st_ivas->hLsSetUpConversion; @@ -499,7 +499,7 @@ void ivas_ls_setup_conversion( mvr2r( output_tmp[chOutIdx], output[chOutIdx], output_frame ); } - wmops_sub_end(); + pop_wmops(); return; } @@ -535,7 +535,7 @@ void ivas_ls_setup_conversion_process_mdct( LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS]; - wmops_sub_start( "LS_Renderer_MDCT" ); + push_wmops( "LS_Renderer_MDCT" ); /* Assign all the declared variables */ inChannels = st_ivas->nchan_transport; @@ -736,7 +736,7 @@ void ivas_ls_setup_conversion_process_mdct( } } - wmops_sub_end(); + pop_wmops(); return; } @@ -1096,7 +1096,7 @@ void ivas_lssetupconversion_process_param_mc( float Cldfb_ImagBuffer_tmp[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; - wmops_sub_start( "LS_Renderer_Process_Param_MC" ); + push_wmops( "LS_Renderer_Process_Param_MC" ); /* inits */ inChannels = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; @@ -1199,6 +1199,6 @@ void ivas_lssetupconversion_process_param_mc( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_sce_dec.c b/lib_dec/ivas_sce_dec.c index 97ee2e8336..e6004ed51b 100644 --- a/lib_dec/ivas_sce_dec.c +++ b/lib_dec/ivas_sce_dec.c @@ -67,7 +67,7 @@ ivas_error ivas_sce_dec( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_sce_dec" ); + push_wmops( "ivas_sce_dec" ); hSCE = st_ivas->hSCE[sce_id]; st = hSCE->hCoreCoder[0]; @@ -285,7 +285,7 @@ ivas_error ivas_sce_dec( #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index ceed901c1a..a513302812 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -231,7 +231,7 @@ ivas_error ivas_spar_dec( uint16_t bstr_meta[MAX_BITS_METADATA], *bit_stream_orig; ivas_error error; - wmops_sub_start( "ivas_spar_decode" ); + push_wmops( "ivas_spar_decode" ); error = IVAS_ERR_OK; hDecoderConfig = st_ivas->hDecoderConfig; @@ -273,7 +273,7 @@ ivas_error ivas_spar_dec( *nb_bits_read += zero_pad_bits; } - wmops_sub_end(); + pop_wmops(); return error; } @@ -626,7 +626,7 @@ static void ivas_spar_dec_MD( DECODER_CONFIG_HANDLE hDecoderConfig = st_ivas->hDecoderConfig; SPAR_DEC_HANDLE hSpar = st_ivas->hSpar; - wmops_sub_start( "ivas_spar_dec_MD" ); + push_wmops( "ivas_spar_dec_MD" ); /*---------------------------------------------------------------------* * Initialization @@ -711,7 +711,7 @@ static void ivas_spar_dec_MD( set_s( hSpar->hMdDec->valid_bands, 0, IVAS_MAX_NUM_BANDS ); } - wmops_sub_end(); + pop_wmops(); return; } @@ -905,7 +905,7 @@ void ivas_spar_dec_upmixer( DECODER_CONFIG_HANDLE hDecoderConfig; SPAR_DEC_HANDLE hSpar; - wmops_sub_start( "ivas_spar_dec_upmixer" ); + push_wmops( "ivas_spar_dec_upmixer" ); hSpar = st_ivas->hSpar; hDecoderConfig = st_ivas->hDecoderConfig; @@ -1223,7 +1223,7 @@ void ivas_spar_dec_upmixer( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_stereo_cng_dec.c b/lib_dec/ivas_stereo_cng_dec.c index ac7f942b2a..d3e62935d1 100644 --- a/lib_dec/ivas_stereo_cng_dec.c +++ b/lib_dec/ivas_stereo_cng_dec.c @@ -225,7 +225,7 @@ static void stereo_dft_generate_comfort_noise( hFdCngCom = st->hFdCngDec->hFdCngCom; - wmops_sub_start( "DFT_CNG" ); + push_wmops( "DFT_CNG" ); set_f( dmpf, 0.0f, M + 2 ); set_f( Atmp, 0.0f, M + 2 ); @@ -625,7 +625,7 @@ static void stereo_dft_generate_comfort_noise( st->hFdCngDec->ms_last_inactive_bwidth = st->bwidth; } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_stereo_dft_dec.c b/lib_dec/ivas_stereo_dft_dec.c index 503c7e88f2..1e2e82889e 100644 --- a/lib_dec/ivas_stereo_dft_dec.c +++ b/lib_dec/ivas_stereo_dft_dec.c @@ -640,7 +640,7 @@ void stereo_dft_dec_analyze( int16_t mem_size; int16_t ovl2; - wmops_sub_start( "DFT_analysis" ); + push_wmops( "DFT_analysis" ); hStereoDft = hCPE->hStereoDft; @@ -762,7 +762,7 @@ void stereo_dft_dec_analyze( if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) { - wmops_sub_end(); + pop_wmops(); return; } @@ -913,7 +913,7 @@ void stereo_dft_dec_analyze( } } - wmops_sub_end(); + pop_wmops(); return; } @@ -943,7 +943,7 @@ void stereo_dft_dec_synthesize( int16_t ovl2, flat_portion_end; float ola_buff[STEREO_DFT32MS_OVL2_MAX]; int16_t moffset; - wmops_sub_start( "DFT_synthesis" ); + push_wmops( "DFT_synthesis" ); /*-----------------------------------------------------------------* * Initialization @@ -1069,7 +1069,7 @@ void stereo_dft_dec_synthesize( } #endif - wmops_sub_end(); + pop_wmops(); return; } @@ -2212,7 +2212,7 @@ void stereo_dft_dec_read_BS( fprintf( pF, "\nGain: %d ", I ); #endif - wmops_sub_start( "residual_decode" ); + push_wmops( "residual_decode" ); if ( I != ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO ) { ECSQ_init_instance( &ecsq_inst, 0 /*dummy index*/, &range_uni_dec_state ); @@ -2244,7 +2244,7 @@ void stereo_dft_dec_read_BS( } ( *nb_bits ) += n_bits; - wmops_sub_end(); + pop_wmops(); #ifdef DEBUG_MODE_DFT fprintf( pF, "%d (max: %d)", n_bits + STEREO_DFT_RES_GLOBAL_GAIN_BITS, max_bits ); @@ -2401,7 +2401,7 @@ void stereo_dft_generate_res_pred( float g2; int16_t nbands_respred; - wmops_sub_start( "gen_respred" ); + push_wmops( "gen_respred" ); /* smoothing and limiting parameters */ alpha = hStereoDft->wasTransient ? 0 : 0.2f; /* no smoothing after transients */ @@ -2733,7 +2733,7 @@ void stereo_dft_generate_res_pred( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_stereo_mdct_core_dec.c b/lib_dec/ivas_stereo_mdct_core_dec.c index d0d05f1fa0..c899278f6e 100644 --- a/lib_dec/ivas_stereo_mdct_core_dec.c +++ b/lib_dec/ivas_stereo_mdct_core_dec.c @@ -181,7 +181,7 @@ void stereo_mdct_core_dec( float signal_out_tmp[CPE_CHANNELS][L_FRAME_PLUS]; - wmops_sub_start( "stereo_mdct_core_dec" ); + push_wmops( "stereo_mdct_core_dec" ); /*--------------------------------------------------------------------------------* * Initializations @@ -365,7 +365,7 @@ void stereo_mdct_core_dec( mvr2r( signal_outFB_tmp[0], signal_outFB[0], hCPE->hCoreCoder[0]->hTcxDec->L_frameTCX ); mvr2r( signal_outFB_tmp[1], signal_outFB[1], hCPE->hCoreCoder[1]->hTcxDec->L_frameTCX ); - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_svd_dec.c b/lib_dec/ivas_svd_dec.c index ff9852d1df..c6d04a79d2 100644 --- a/lib_dec/ivas_svd_dec.c +++ b/lib_dec/ivas_svd_dec.c @@ -196,7 +196,7 @@ int16_t svd( float secDiag[MAX_OUTPUT_CHANNELS]; float eps_x = 0.0f, temp; - wmops_sub_start( "svd" ); + push_wmops( "svd" ); set_zero( secDiag, MAX_OUTPUT_CHANNELS ); @@ -252,7 +252,7 @@ int16_t svd( } } while ( condition == 1 ); - wmops_sub_end(); + pop_wmops(); return ( errorMessage ); } diff --git a/lib_dec/ivas_tcx_core_dec.c b/lib_dec/ivas_tcx_core_dec.c index 3ca3033cb4..e1d6bd63ff 100644 --- a/lib_dec/ivas_tcx_core_dec.c +++ b/lib_dec/ivas_tcx_core_dec.c @@ -191,7 +191,7 @@ void stereo_tcx_core_dec( TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - wmops_sub_start( "stereo_tcx_core_dec" ); + push_wmops( "stereo_tcx_core_dec" ); /*Sanity check*/ assert( !( st->total_brate == FRAME_NO_DATA || st->total_brate == SID_2k40 ) ); /*Active frame*/ @@ -773,7 +773,7 @@ void stereo_tcx_core_dec( #endif - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/ivas_vbap.c b/lib_dec/ivas_vbap.c index f0960bd127..2790dd379f 100644 --- a/lib_dec/ivas_vbap.c +++ b/lib_dec/ivas_vbap.c @@ -154,13 +154,13 @@ ivas_error vbap_init_data( VBAP_SPEAKER_NODE speaker_node_data[VBAP_MAX_NUM_SPEAKER_NODES]; VBAP_DATA *vbap; - wmops_sub_start( "vbap_init" ); + push_wmops( "vbap_init" ); /* Basic init checks */ if ( num_speaker_nodes > VBAP_MAX_NUM_SPEAKER_NODES || num_speaker_nodes < 3 ) { hVBAPdata = NULL; - wmops_sub_end(); + pop_wmops(); /* TODO: are these two paths correct behaviour or should and error be returned ? */ return IVAS_ERR_OK; } @@ -303,7 +303,7 @@ ivas_error vbap_init_data( determine_virtual_speaker_node_division_gains( vbap->back_virtual_speaker_node_index, vbap->back_virtual_speaker_node_division_gains, connections, virtual_back_type, max_num_connections, num_speaker_nodes ); } - wmops_sub_end(); + pop_wmops(); if ( is_success ) { @@ -400,7 +400,7 @@ void vbap_determine_gains( assert( gains != NULL && "VBAP gain determination requires reserved memory for gain output." ); #endif - wmops_sub_start( "vbap_gains" ); + push_wmops( "vbap_gains" ); num_speaker_nodes = hVBAPdata->num_speaker_nodes; bottom_virtual_speaker_node_index = hVBAPdata->bottom_virtual_speaker_node_index; top_virtual_speaker_node_index = hVBAPdata->top_virtual_speaker_node_index; @@ -484,7 +484,7 @@ void vbap_determine_gains( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_dec/tonalMDCTconcealment.c b/lib_dec/tonalMDCTconcealment.c index a16638da51..7a1c172f40 100644 --- a/lib_dec/tonalMDCTconcealment.c +++ b/lib_dec/tonalMDCTconcealment.c @@ -502,7 +502,7 @@ void TonalMDCTConceal_InsertNoise( float g, nrgNoiseInLastFrame, nrgWhiteNoise, tiltFactor, tilt; float last_block_nrg_correct; - wmops_sub_start( "InsertNoise" ); + push_wmops( "InsertNoise" ); g = 1.0f - crossfadeGain; if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) @@ -860,7 +860,7 @@ void TonalMDCTConceal_InsertNoise( *pSeed = rnd; - wmops_sub_end(); + pop_wmops(); return; } @@ -987,7 +987,7 @@ void TonalMdctConceal_create_concealment_noise( float *cngNoiseLevelPtr; float last_scf; - wmops_sub_start( "create_conc_noise" ); + push_wmops( "create_conc_noise" ); hStereoMdct = hCPE->hStereoMdct; st = hCPE->hCoreCoder[idchan]; @@ -1039,7 +1039,7 @@ void TonalMdctConceal_create_concealment_noise( concealment_noise[i] = *rnd; } - wmops_sub_end(); + pop_wmops(); return; } @@ -1118,7 +1118,7 @@ void TonalMdctConceal_create_concealment_noise( st->seed_tcx_plc = *rnd; - wmops_sub_end(); + pop_wmops(); return; } @@ -1135,7 +1135,7 @@ void TonalMdctConceal_whiten_noise_shape( float scfs_int[FDNS_NPTS]; const PsychoacousticParameters *psychParams; - wmops_sub_start( "apply_sns_on_noise_shape" ); + push_wmops( "apply_sns_on_noise_shape" ); scfs_bg = &st->hTonalMDCTConc->scaleFactorsBackground[0]; psychParams = st->hTonalMDCTConc->psychParams; @@ -1176,5 +1176,5 @@ void TonalMdctConceal_whiten_noise_shape( set_zero( hFdCngCom->cngNoiseLevel, stop_idx - start_idx ); } - wmops_sub_end(); + pop_wmops(); } diff --git a/lib_enc/acelp_core_enc.c b/lib_enc/acelp_core_enc.c index 857099ed92..95a986552a 100644 --- a/lib_enc/acelp_core_enc.c +++ b/lib_enc/acelp_core_enc.c @@ -131,7 +131,7 @@ ivas_error acelp_core_enc( return error; } - wmops_sub_start( "acelp_core_enc" ); + push_wmops( "acelp_core_enc" ); /*------------------------------------------------------------------* * Initialization *------------------------------------------------------------------*/ @@ -757,7 +757,7 @@ ivas_error acelp_core_enc( } } - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/enc_acelp_tcx_main.c b/lib_enc/enc_acelp_tcx_main.c index e087c8cede..f3b3076f78 100644 --- a/lib_enc/enc_acelp_tcx_main.c +++ b/lib_enc/enc_acelp_tcx_main.c @@ -64,7 +64,7 @@ void enc_acelp_tcx_main( float old_bwe_exc[( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2]; /* excitation buffer */ float *ptr_bwe_exc; /* pointer to BWE excitation signal in the current frame */ - wmops_sub_start( "enc_acelp_tcx_main" ); + push_wmops( "enc_acelp_tcx_main" ); ptr_bwe_exc = old_bwe_exc + PIT16k_MAX * 2; @@ -129,6 +129,6 @@ void enc_acelp_tcx_main( /* coreSwitching update of Mode 1 parameters in the last frame */ st->last_coder_type = st->coder_type; - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/evs_enc.c b/lib_enc/evs_enc.c index 29b610db79..864037f0d9 100644 --- a/lib_enc/evs_enc.c +++ b/lib_enc/evs_enc.c @@ -103,7 +103,7 @@ ivas_error evs_enc( error = IVAS_ERR_OK; - wmops_sub_start( "evs_enc" ); + push_wmops( "evs_enc" ); /*------------------------------------------------------------------* * Initialization *-----------------------------------------------------------------*/ @@ -390,7 +390,7 @@ ivas_error evs_enc( * WB TBE encoding * WB BWE encoding *---------------------------------------------------------------------*/ - wmops_sub_start( "BWE_encoding" ); + push_wmops( "BWE_encoding" ); if ( st->input_Fs >= 16000 && st->bwidth < SWB ) { @@ -497,7 +497,7 @@ ivas_error evs_enc( swb_CNG_enc( st, shb_speech, old_syn_12k8_16k ); } - wmops_sub_end(); + pop_wmops(); /*---------------------------------------------------------------------* * Channel-aware mode - write signaling information into the bitstream *---------------------------------------------------------------------*/ @@ -565,7 +565,7 @@ ivas_error evs_enc( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/hq_core_enc.c b/lib_enc/hq_core_enc.c index bb66182d3d..29e56f5268 100644 --- a/lib_enc/hq_core_enc.c +++ b/lib_enc/hq_core_enc.c @@ -72,7 +72,7 @@ void hq_core_enc( BSTR_ENC_HANDLE hBstr = st->hBstr; - wmops_sub_start( "hq_core_enc" ); + push_wmops( "hq_core_enc" ); set_f( t_audio, 0, L_FRAME48k ); st->Nb_ACELP_frames = 0; @@ -289,7 +289,7 @@ void hq_core_enc( mvr2r( output, st->hLPDmem->old_exc, L_FRAME16k ); } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index b863944b57..ff01e2bd13 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -105,7 +105,7 @@ ivas_error ivas_core_enc( int32_t element_brate, last_element_brate, input_Fs; ivas_error error; - wmops_sub_start( "ivas_core_enc" ); + push_wmops( "ivas_core_enc" ); error = IVAS_ERR_OK; @@ -522,7 +522,7 @@ ivas_error ivas_core_enc( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_core_pre_proc.c b/lib_enc/ivas_core_pre_proc.c index acbacc09e0..c928e55e09 100644 --- a/lib_enc/ivas_core_pre_proc.c +++ b/lib_enc/ivas_core_pre_proc.c @@ -85,7 +85,7 @@ ivas_error pre_proc_ivas( int32_t sr_core_tmp, total_brate_tmp; ivas_error error; - wmops_sub_start( "pre_proc" ); + push_wmops( "pre_proc" ); error = IVAS_ERR_OK; @@ -459,7 +459,7 @@ ivas_error pre_proc_ivas( dbgwrite( inp_16k, sizeof( float ), L_FRAME, 1, fname( debug_dir, "inp_16k", st->idchan, st->id_element, ENC ) ); #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c index b4336bdf62..8f5799b07f 100644 --- a/lib_enc/ivas_core_pre_proc_front.c +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -155,7 +155,7 @@ ivas_error pre_proc_front_ivas( int16_t LR_vad_flag; ivas_error error; - wmops_sub_start( "pre_proc_front" ); + push_wmops( "pre_proc_front" ); /*------------------------------------------------------------------* * Initialization @@ -843,7 +843,7 @@ ivas_error pre_proc_front_ivas( mvr2r( &old_inp_12k8[L_FRAME], st->old_inp_12k8, L_INP_MEM ); - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index e047defac6..e2b4fe4995 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -104,7 +104,7 @@ ivas_error ivas_cpe_enc( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_cpe_enc" ); + push_wmops( "ivas_cpe_enc" ); hCPE = st_ivas->hCPE[cpe_id]; sts = hCPE->hCoreCoder; @@ -687,7 +687,7 @@ ivas_error ivas_cpe_enc( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_dirac_enc.c b/lib_enc/ivas_dirac_enc.c index 223d23d695..98d39afcb5 100644 --- a/lib_enc/ivas_dirac_enc.c +++ b/lib_enc/ivas_dirac_enc.c @@ -313,7 +313,7 @@ void ivas_dirac_enc( { int16_t i; - wmops_sub_start( "ivas_dirac_enc" ); + push_wmops( "ivas_dirac_enc" ); /*Check if highest band of input signal <= enc_param_start_band: could happen for WB input signal in 4TCs mode*/ if ( hDirAC->band_grouping[hDirAC->hConfig->nbands] <= hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band] ) @@ -434,7 +434,7 @@ void ivas_dirac_enc( } } - wmops_sub_end(); + pop_wmops(); return; } @@ -587,7 +587,7 @@ void ivas_dirac_param_est_enc( float reference_power[CLDFB_NO_COL_MAX][DIRAC_NO_FB_BANDS_MAX]; - wmops_sub_start( "dirac_enc_param_est" ); + push_wmops( "dirac_enc_param_est" ); /* Initialization */ l_ts = input_frame / MAX_PARAM_SPATIAL_SUBFRAMES; @@ -863,7 +863,7 @@ void ivas_dirac_param_est_enc( } #endif - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index 7be1f11c49..8b60d95c00 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -70,7 +70,7 @@ ivas_error ivas_enc( #endif error = IVAS_ERR_OK; - wmops_sub_start( "ivas_enc" ); + push_wmops( "ivas_enc" ); /*------------------------------------------------------------------* * Initialization - general @@ -386,6 +386,6 @@ ivas_error ivas_enc( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_front_vad.c b/lib_enc/ivas_front_vad.c index e9818cb7ae..4bc3730818 100644 --- a/lib_enc/ivas_front_vad.c +++ b/lib_enc/ivas_front_vad.c @@ -83,7 +83,7 @@ ivas_error front_vad( error = IVAS_ERR_OK; - wmops_sub_start( "front_vad" ); + push_wmops( "front_vad" ); if ( hCPE != NULL ) { @@ -248,7 +248,7 @@ ivas_error front_vad( mvr2r( Bin_E, Bin_E_out, L_FRAME ); } - wmops_sub_end(); + pop_wmops(); return error; } @@ -389,7 +389,7 @@ ivas_error front_vad_spar( int16_t old_pitch; ivas_error error; - wmops_sub_start( "front_vad_SPAR" ); + push_wmops( "front_vad_SPAR" ); error = IVAS_ERR_OK; @@ -497,7 +497,7 @@ ivas_error front_vad_spar( hSpar->force_front_vad = 0; } - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_ism_enc.c b/lib_enc/ivas_ism_enc.c index 3c8a1f04b3..5a1f29fe29 100644 --- a/lib_enc/ivas_ism_enc.c +++ b/lib_enc/ivas_ism_enc.c @@ -91,7 +91,7 @@ ivas_error ivas_ism_enc( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_ism_enc" ); + push_wmops( "ivas_ism_enc" ); /*------------------------------------------------------------------* * Preprocesing @@ -275,7 +275,7 @@ ivas_error ivas_ism_enc( mvr2r( st->input, st->old_input_signal, input_frame ); } - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c index 60550bca0b..64c1c179b8 100644 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -157,7 +157,7 @@ ivas_error ivas_ism_metadata_enc( error = IVAS_ERR_OK; - wmops_sub_start( "ism_meta_enc" ); + push_wmops( "ism_meta_enc" ); if ( ism_mode == ISM_MODE_PARAM ) { @@ -175,7 +175,7 @@ ivas_error ivas_ism_metadata_enc( if ( num_obj == 1 && ( hSCE[0]->hCoreCoder[0]->core_brate == SID_2k40 || hSCE[0]->hCoreCoder[0]->core_brate == FRAME_NO_DATA ) && ( ism_mode == ISM_MODE_DISC ) ) { /* no metadata encoding in CNG */ - wmops_sub_end(); + pop_wmops(); return error; } @@ -705,7 +705,7 @@ ivas_error ivas_ism_metadata_enc( } } - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_ism_param_enc.c b/lib_enc/ivas_ism_param_enc.c index 8dcdef30b5..91eff650dc 100644 --- a/lib_enc/ivas_ism_param_enc.c +++ b/lib_enc/ivas_ism_param_enc.c @@ -197,7 +197,7 @@ void ivas_param_ism_stereo_dmx( float stereo_dmx[2][L_FRAME48k]; ISM_METADATA_HANDLE hIsmMetaData; - wmops_sub_start( "ivas_param_ism_st_dmx" ); + push_wmops( "ivas_param_ism_st_dmx" ); /*Initialization*/ alpha = 0.5; @@ -232,7 +232,7 @@ void ivas_param_ism_stereo_dmx( mvr2r( stereo_dmx[0], data[0], input_frame ); mvr2r( stereo_dmx[1], data[1], input_frame ); - wmops_sub_end(); + pop_wmops(); return; } @@ -362,7 +362,7 @@ void ivas_param_ism_enc( hDirAC = st_ivas->hDirAC; hParamIsm = hDirAC->hParamIsm; - wmops_sub_start( "ivas_param_ism_enc" ); + push_wmops( "ivas_param_ism_enc" ); l_ts = input_frame / PARAM_ISM_MDFT_NO_SLOTS; num_time_slots = PARAM_ISM_MDFT_NO_SLOTS; @@ -396,7 +396,7 @@ void ivas_param_ism_enc( /* Compute object indices and power ratios */ ivas_param_ism_compute_obj_parameters( reference_power_obj, hParamIsm ); - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/ivas_mc_param_enc.c b/lib_enc/ivas_mc_param_enc.c index af7a48a80b..67e0c3974c 100644 --- a/lib_enc/ivas_mc_param_enc.c +++ b/lib_enc/ivas_mc_param_enc.c @@ -267,7 +267,7 @@ void ivas_param_mc_enc( PARAM_MC_ENC_HANDLE hParamMC; int16_t nchan_inp; - wmops_sub_start( "param_mc_enc" ); + push_wmops( "param_mc_enc" ); /* initializations */ hParamMC = st_ivas->hParamMC; @@ -409,7 +409,7 @@ void ivas_param_mc_enc( /* updates */ hParamMC->hMetadataPMC.last_coded_bwidth = hParamMC->hMetadataPMC.coded_bwidth; - wmops_sub_end(); + pop_wmops(); return; } @@ -500,7 +500,7 @@ static void ivas_param_mc_param_est_enc( int16_t start_ts; const float *p_dmx_fac; - wmops_sub_start( "param_mc_prm_est" ); + push_wmops( "param_mc_prm_est" ); /* initializations */ @@ -777,7 +777,7 @@ static void ivas_param_mc_param_est_enc( } - wmops_sub_end(); + pop_wmops(); return; } @@ -1034,7 +1034,7 @@ static void ivas_param_mc_quantize_ilds( float tot_ener, dmx_ener, ener_fac, delta_fac; int16_t ILD_idx[PARAM_MC_SZ_ILD_MAP]; - wmops_sub_start( "param_mc_prm_q" ); + push_wmops( "param_mc_prm_q" ); /* Initialization */ set_zero( Nrg, MAX_CICP_CHANNELS ); @@ -1056,7 +1056,7 @@ static void ivas_param_mc_quantize_ilds( /* Downsampling */ if ( ( hParamMC->hMetadataPMC.bAttackPresent == 0 ) && ( hParamMC->hMetadataPMC.param_frame_idx != hParamMC->hMetadataPMC.coding_band_mapping[freq_idx] ) ) { - wmops_sub_end(); + pop_wmops(); return; } @@ -1143,7 +1143,7 @@ static void ivas_param_mc_quantize_ilds( /* Save current quantized ICLDs */ mvs2s( ILD_idx, ILD_idx_out + freq_idx * ild_map_size, num_ilds_to_code ); - wmops_sub_end(); + pop_wmops(); return; } @@ -1308,7 +1308,7 @@ static void ivas_param_mc_transient_detection( float *pAccSubblockNrg; float attackRatioThreshold; - wmops_sub_start( "param_mc_trn_det" ); + push_wmops( "param_mc_trn_det" ); attackRatioThreshold = hTranDet->transientDetector.attackRatioThreshold; pSubblockNrg = &hTranDet->subblockEnergies.subblockNrg[hParamMC->transient_detector_delay]; @@ -1339,7 +1339,7 @@ static void ivas_param_mc_transient_detection( *pAttackIndex = attackIndex; *pbIsAttackPresent = bIsAttackPresent; - wmops_sub_end(); + pop_wmops(); return; } @@ -1369,7 +1369,7 @@ static void ivas_param_mc_write_bs( int16_t ild_map_size_wo_lfe; int16_t ild_map_size; - wmops_sub_start( "param_mc_prm_enc" ); + push_wmops( "param_mc_prm_enc" ); /* Init */ set_zero( seq_tmp_uni, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP ); @@ -1434,7 +1434,7 @@ static void ivas_param_mc_write_bs( ivas_param_mc_encode_parameter( ILD_idx, &hParamMC->hMetadataPMC, &hParamMC->hMetadataPMC.ild_coding, nbands, band_step, ild_map_size_wo_lfe, ild_map_size, bit_buffer, bit_pos ); - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index 4a94dee5d9..a5db75de59 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -243,7 +243,7 @@ void ivas_mct_core_enc( static FILE *f_bit_split = 0; #endif - wmops_sub_start( "mct_encoding" ); + push_wmops( "mct_encoding" ); /*--------------------------------------------------------------* * Initialization @@ -580,7 +580,7 @@ void ivas_mct_core_enc( assert( ( total_brate + ( NBITS_BWIDTH + format_bits + mct_bits + sba_meta + lfe_bits ) * FRAMES_PER_SEC ) == ivas_total_brate ); #endif - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index 18c3b93fb9..72bfd4efbc 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -70,7 +70,7 @@ ivas_error ivas_mct_enc( error = IVAS_ERR_OK; - wmops_sub_start( "ivas_mct_enc" ); + push_wmops( "ivas_mct_enc" ); /* Initialization */ hMCT = st_ivas->hMCT; @@ -148,7 +148,7 @@ ivas_error ivas_mct_enc( } } - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_mct_enc_mct.c b/lib_enc/ivas_mct_enc_mct.c index 0e36280b20..c506f4e431 100755 --- a/lib_enc/ivas_mct_enc_mct.c +++ b/lib_enc/ivas_mct_enc_mct.c @@ -474,7 +474,7 @@ void apply_MCT_enc( float tmp_max_corr; int16_t count_active_ch = 0; - wmops_sub_start( "mct_core_enc_mct" ); + push_wmops( "mct_core_enc_mct" ); forceKeepTree = 1; inactiveBlockDetected = 0; @@ -739,7 +739,7 @@ void apply_MCT_enc( } #endif - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/ivas_mdct_core_enc.c b/lib_enc/ivas_mdct_core_enc.c index aaf76ceb35..595469530a 100644 --- a/lib_enc/ivas_mdct_core_enc.c +++ b/lib_enc/ivas_mdct_core_enc.c @@ -602,7 +602,7 @@ void ivas_mdct_core_whitening_enc( int16_t nbits_start_sns; int16_t num_sns; - wmops_sub_start( "mdct_core_whitening" ); + push_wmops( "mdct_core_whitening" ); /*--------------------------------------------------------------* * Initialization @@ -1147,7 +1147,7 @@ void ivas_mdct_core_whitening_enc( } } - wmops_sub_end(); + pop_wmops(); return; } @@ -1186,7 +1186,7 @@ void ivas_mdct_quant_coder( int16_t target_bitsTCX10[CPE_CHANNELS][NB_DIV]; int16_t nbits_start, total_nbbits; - wmops_sub_start( "mdct_core_Q" ); + push_wmops( "mdct_core_Q" ); sts = hCPE->hCoreCoder; @@ -1306,7 +1306,7 @@ void ivas_mdct_quant_coder( assert( st->bits_frame_channel == total_nbbits ); } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/ivas_sce_enc.c b/lib_enc/ivas_sce_enc.c index 0b49c56854..f1ebe700b4 100644 --- a/lib_enc/ivas_sce_enc.c +++ b/lib_enc/ivas_sce_enc.c @@ -91,7 +91,7 @@ ivas_error ivas_sce_enc( ivas_error error; int16_t flag_16k_smc; - wmops_sub_start( "ivas_sce_enc" ); + push_wmops( "ivas_sce_enc" ); error = IVAS_ERR_OK; @@ -258,7 +258,7 @@ ivas_error ivas_sce_enc( } #endif - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index b08eeb5e4b..60df797acd 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -358,7 +358,7 @@ static ivas_error ivas_spar_enc_process( float dir[3], avg_dir[3]; float energySum, vecLen; - wmops_sub_start( "ivas_spar_enc_process" ); + push_wmops( "ivas_spar_enc_process" ); /*-----------------------------------------------------------------------------------------* * Initialization @@ -774,7 +774,7 @@ static ivas_error ivas_spar_enc_process( set_f( data_f[order[j]], 0.0f, input_frame ); } - wmops_sub_end(); + pop_wmops(); return error; } diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c index de44362ddd..911baa16a9 100644 --- a/lib_enc/ivas_stereo_dft_enc.c +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -739,7 +739,7 @@ void stereo_dft_enc_analyze( int16_t trigo_step; - wmops_sub_start( "DFT_analysis" ); + push_wmops( "DFT_analysis" ); /*-----------------------------------------------------------------* * Initialization @@ -863,7 +863,7 @@ void stereo_dft_enc_analyze( } } - wmops_sub_end(); + pop_wmops(); return; } @@ -939,7 +939,7 @@ float stereo_dft_enc_synthesize( win = hStereoDft->win; win_ana = hStereoDft->win_ana; - wmops_sub_start( "DFT_synth_fs" ); + push_wmops( "DFT_synth_fs" ); } else if ( output_sampling_rate == INT_FS_12k8 ) { @@ -956,7 +956,7 @@ float stereo_dft_enc_synthesize( win = hStereoDft->win_12k8; win_ana = hStereoDft->win_ana_12k8; - wmops_sub_start( "DFT_synth_12k8" ); + push_wmops( "DFT_synth_12k8" ); } else if ( output_sampling_rate == 16000 ) { @@ -973,13 +973,13 @@ float stereo_dft_enc_synthesize( { mem = hStereoDft->output_mem_dmx_16k_shb; - wmops_sub_start( "DFT_synth_16k_shb" ); + push_wmops( "DFT_synth_16k_shb" ); } else { mem = hStereoDft->output_mem_dmx_16k; - wmops_sub_start( "DFT_synth_16k" ); + push_wmops( "DFT_synth_16k" ); } win = hStereoDft->win_16k; win_ana = hStereoDft->win_ana_16k; @@ -999,7 +999,7 @@ float stereo_dft_enc_synthesize( win = hStereoDft->win_32k; win_ana = hStereoDft->win_ana_32k; - wmops_sub_start( "DFT_synth_32k" ); + push_wmops( "DFT_synth_32k" ); } else if ( output_sampling_rate == 8000 ) { @@ -1016,7 +1016,7 @@ float stereo_dft_enc_synthesize( win = hStereoDft->win_8k; win_ana = hStereoDft->win_ana_8k; - wmops_sub_start( "DFT_synth_8k" ); + push_wmops( "DFT_synth_8k" ); } else { @@ -1212,7 +1212,7 @@ float stereo_dft_enc_synthesize( } #endif - wmops_sub_end(); + pop_wmops(); return ( nrg ); } @@ -1925,7 +1925,7 @@ void stereo_dft_enc_res( dbgwrite( &max_snr, sizeof( float ), 1, 1, "./res/stereo_dft_res_cod_target_snr.dat" ); #endif - wmops_sub_start( "residual_encode" ); + push_wmops( "residual_encode" ); /* residual encoding */ ECSQ_init_instance( &ecsq_inst, 0 /*dummy index*/, &range_uni_enc_state ); @@ -2003,7 +2003,7 @@ void stereo_dft_enc_res( } #endif - wmops_sub_end(); + pop_wmops(); #ifdef DEBUG_MODE_DFT { diff --git a/lib_enc/ivas_stereo_mdct_core_enc.c b/lib_enc/ivas_stereo_mdct_core_enc.c index 6d1e9a32b0..c35f7670ec 100755 --- a/lib_enc/ivas_stereo_mdct_core_enc.c +++ b/lib_enc/ivas_stereo_mdct_core_enc.c @@ -146,7 +146,7 @@ void stereo_mdct_core_enc( int16_t stereo_bits; int16_t meta_bits, signal_bits; - wmops_sub_start( "stereo_mdct_core_enc" ); + push_wmops( "stereo_mdct_core_enc" ); L_subframeTCX = 0; /* to avoid compilation warning */ @@ -451,7 +451,7 @@ void stereo_mdct_core_enc( ivas_mdct_quant_coder( hCPE, 0, tnsBits, tnsSize, p_param, 0 ); - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c index fcad004b3a..9975b95871 100644 --- a/lib_enc/ivas_stereo_mdct_stereo_enc.c +++ b/lib_enc/ivas_stereo_mdct_stereo_enc.c @@ -189,7 +189,7 @@ void stereo_coder_tcx( int16_t k; int16_t nSubframes, L_frameTCX; int16_t nAvailBitsMS[NB_DIV]; - wmops_sub_start( "stereo_coder_tcx" ); + push_wmops( "stereo_coder_tcx" ); set_s( nAvailBitsMS, 0, NB_DIV ); @@ -321,7 +321,7 @@ void stereo_coder_tcx( #endif hStereoMdct->sw_uncorr = 1; - wmops_sub_end(); + pop_wmops(); return; } #ifdef DEBUGGING @@ -342,7 +342,7 @@ void stereo_coder_tcx( set_s( &ms_mask[k][0], 1, MAX_SFB ); } - wmops_sub_end(); + pop_wmops(); return; } #endif @@ -464,7 +464,7 @@ void stereo_coder_tcx( hStereoMdct->sw_uncorr = ( sw_uncorr_mean > 0.6f ); } - wmops_sub_end(); + pop_wmops(); #ifdef DEBUG_MODE_MDCT /* MDCT stereo data */ diff --git a/lib_enc/ivas_tcx_core_enc.c b/lib_enc/ivas_tcx_core_enc.c index e8cfaf6697..1e04a7ad82 100644 --- a/lib_enc/ivas_tcx_core_enc.c +++ b/lib_enc/ivas_tcx_core_enc.c @@ -171,7 +171,7 @@ void stereo_tcx_core_enc( pF = fopen( "./res/stereo_tcx_enc_ind.txt", "w" ); #endif - wmops_sub_start( "stereo_tcx_core_enc" ); + push_wmops( "stereo_tcx_core_enc" ); /*Sanity check*/ assert( st->mdct_sw == MODE1 && "MDCT switching should be in TCX MODE 1\n" ); @@ -547,7 +547,7 @@ void stereo_tcx_core_enc( set_f( pitch_buf, L_SUBFR, NB_SUBFR16k ); } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_enc/pre_proc.c b/lib_enc/pre_proc.c index a17612290f..1afdcef5a0 100644 --- a/lib_enc/pre_proc.c +++ b/lib_enc/pre_proc.c @@ -118,7 +118,7 @@ void pre_proc( int16_t clas_mod; int16_t old_pitch1; - wmops_sub_start( "pre_proc" ); + push_wmops( "pre_proc" ); /*------------------------------------------------------------------* * Initialization @@ -959,6 +959,6 @@ void pre_proc( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_rend/ivas_binauralRenderer.c b/lib_rend/ivas_binauralRenderer.c index 53f8dbcfa3..b647073188 100644 --- a/lib_rend/ivas_binauralRenderer.c +++ b/lib_rend/ivas_binauralRenderer.c @@ -874,7 +874,7 @@ void ivas_binRenderer( int16_t chIdx, k; int16_t numTimeSlots = MAX_PARAM_SPATIAL_SUBFRAMES; - wmops_sub_start( "fastconv_binaural_rendering" ); + push_wmops( "fastconv_binaural_rendering" ); /* Compute Convolution */ /* memory reset for the binaural output */ @@ -952,7 +952,7 @@ void ivas_binRenderer( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 3782f5789e..760dbcbaed 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -1045,7 +1045,7 @@ ivas_error ivas_crend_process( AUDIO_CONFIG intern_config; ivas_error error; - wmops_sub_start( "ivas_crend_process" ); + push_wmops( "ivas_crend_process" ); intern_config = st_ivas->intern_config; nchan_out = st_ivas->hDecoderConfig->nchan_out; @@ -1131,7 +1131,7 @@ ivas_error ivas_crend_process( mvr2r( pcm_tmp[i], output[i], output_frame ); } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -1782,7 +1782,7 @@ ivas_error ivas_rend_crendProcess( IVAS_REND_AudioConfigType inConfigType; ivas_error error; - wmops_sub_start( "ivas_rend_crendProcess" ); + push_wmops( "ivas_rend_crendProcess" ); in_config = getIvasAudioConfigFromRendAudioConfig( inConfig ); inConfigType = getAudioConfigType( inConfig ); @@ -1818,7 +1818,7 @@ ivas_error ivas_rend_crendProcess( mvr2r( pcm_tmp[i], output[i], output_frame ); } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index 31bc3b5e0a..14e8154018 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -679,7 +679,7 @@ ivas_error ivas_rend_TDObjRenderFrame( IVAS_FORMAT ivas_format; IVAS_REND_AudioConfigType inConfigType; - wmops_sub_start( "ivas_rend_TDObjRenderFrame" ); + push_wmops( "ivas_rend_TDObjRenderFrame" ); inConfigType = getAudioConfigType( inConfig ); lfe_idx = LFE_CHANNEL; @@ -751,7 +751,7 @@ ivas_error ivas_rend_TDObjRenderFrame( // } // } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 4f5ba72d39..9774900c57 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -277,7 +277,7 @@ void rotateAziEle_DirAC( float dv_r_0, dv_r_1, dv_r_2; float w; - wmops_sub_start( "rotateAziEle_DirAC" ); + push_wmops( "rotateAziEle_DirAC" ); for ( b = band1; b < band2; b++ ) { @@ -297,7 +297,7 @@ void rotateAziEle_DirAC( ele[b] = (int16_t) ( atan2f( dv_r_2, sqrtf( dv_r_0 * dv_r_0 + dv_r_1 * dv_r_1 ) ) * _180_OVER_PI ); } - wmops_sub_end(); + pop_wmops(); return; } @@ -475,7 +475,7 @@ void rotateFrame_sd( float cross_fade[IVAS_FB_1MS_48K_SAMP]; #endif - wmops_sub_start( "rotateFrame_sd" ); + push_wmops( "rotateFrame_sd" ); nchan = hTransSetup.nchan_out_woLFE + hTransSetup.num_lfe; index_lfe = hTransSetup.index_lfe[0]; @@ -601,7 +601,7 @@ void rotateFrame_sd( mvr2r( &output_tmp[ch_out][subframe_idx * subframe_len], &output[ch_out][subframe_idx * subframe_len], subframe_len ); } - wmops_sub_end(); + pop_wmops(); return; } @@ -727,7 +727,7 @@ void rotateFrame_sd_cldfb( int16_t nInChannels; int16_t isPlanar; - wmops_sub_start( "rotateFrame_sd_cldfb" ); + push_wmops( "rotateFrame_sd_cldfb" ); nInChannels = hOutputSetup->nchan_out_woLFE; isPlanar = 1; @@ -806,7 +806,7 @@ void rotateFrame_sd_cldfb( } } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_rend/ivas_sba_rendering.c b/lib_rend/ivas_sba_rendering.c index e2977a81e4..b7c5553671 100755 --- a/lib_rend/ivas_sba_rendering.c +++ b/lib_rend/ivas_sba_rendering.c @@ -160,7 +160,7 @@ void ivas_sba2mc_cldfb( float *p_real, *p_imag, *p_realOut, *p_imagOut; int16_t nb_channels_in; - wmops_sub_start( "ivas_sba2mc_cldfb" ); + push_wmops( "ivas_sba2mc_cldfb" ); nb_channels_in = hInSetup.nchan_out_woLFE; assert( ( nb_channels_in == 16 ) && ( nb_channels_out == 11 ) && "ivas_sba2mc_cldfb; only HOA3 to CICP19 is for now supported!" ); @@ -206,7 +206,7 @@ void ivas_sba2mc_cldfb( } } - wmops_sub_end(); + pop_wmops(); return; } @@ -501,7 +501,7 @@ void ivas_sba_upmixer_renderer( int16_t i, nchan_internal; float temp; - wmops_sub_start( "ivas_sba_upmixer_renderer" ); + push_wmops( "ivas_sba_upmixer_renderer" ); nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order ); @@ -524,7 +524,7 @@ void ivas_sba_upmixer_renderer( ivas_sba_linear_renderer( output, output_frame, st_ivas->hIntSetup.nchan_out_woLFE, st_ivas->hDecoderConfig->output_config, st_ivas->hOutSetup, st_ivas->hoa_dec_mtx ); } - wmops_sub_end(); + pop_wmops(); return; } @@ -616,7 +616,7 @@ void ivas_sba_prototype_renderer( int16_t firstSlot, slotEnd, firstInCh, inChEnd, firstOutCh, outChEnd; int16_t sf_idx; - wmops_sub_start( "ivas_sba_prototype_renderer" ); + push_wmops( "ivas_sba_prototype_renderer" ); hSpar = st_ivas->hSpar; hDecoderConfig = st_ivas->hDecoderConfig; @@ -745,7 +745,7 @@ void ivas_sba_prototype_renderer( } } - wmops_sub_end(); + pop_wmops(); return; } diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index caff4d52c0..035d0ee4cb 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -3455,7 +3455,7 @@ static ivas_error rotateFrameMc( rotation_gains gains; float tmp_gains[MAX_INPUT_CHANNELS]; - wmops_sub_start( "rotateFrameMc" ); + push_wmops( "rotateFrameMc" ); if ( inConfig != IVAS_REND_AUDIO_CONFIG_LS_CUSTOM ) { @@ -3541,7 +3541,7 @@ static ivas_error rotateFrameMc( } } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -3563,7 +3563,7 @@ static ivas_error rotateFrameSba( float tmpRot[2 * HEADROT_ORDER + 1]; rotation_gains gains; - wmops_sub_start( "rotateFrameSba" ); + push_wmops( "rotateFrameSba" ); getAmbisonicsOrder( inConfig, &shd_rot_max_order ); @@ -3639,7 +3639,7 @@ static ivas_error rotateFrameSba( } } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -3651,7 +3651,7 @@ static ivas_error renderIsmToBinaural( float tmpTDRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; ivas_error error; - wmops_sub_start( "renderIsmToBinaural" ); + push_wmops( "renderIsmToBinaural" ); copyBufferTo2dArray( ismInput->base.inputBuffer, tmpTDRendBuffer ); @@ -3670,7 +3670,7 @@ static ivas_error renderIsmToBinaural( accumulate2dArrayToBuffer( tmpTDRendBuffer, &outAudio ); - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -3693,7 +3693,7 @@ static ivas_error renderIsmToBinauralRoom( IVAS_REND_AudioObjectPosition rotatedPos; const IVAS_REND_HeadRotData *headRotData; - wmops_sub_start( "renderIsmToBinauralRoom" ); + push_wmops( "renderIsmToBinauralRoom" ); headRotData = ismInput->base.ctx.pHeadRotData; rotatedPos = defaultObjectPosition(); @@ -3769,7 +3769,7 @@ static ivas_error renderIsmToBinauralRoom( count_free( tmpMcBuffer.data ); - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -3782,7 +3782,7 @@ static ivas_error renderIsmToMc( pan_vector previousPanGains; ivas_error error; - wmops_sub_start( "renderIsmToMc" ); + push_wmops( "renderIsmToMc" ); /* TODO(sgi): Possible optimization: less processing needed if position didn't change */ if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper, ismInput->currentPos.azimuth, ismInput->currentPos.elevation, currentPanGains ) ) != IVAS_ERR_OK ) @@ -3798,7 +3798,7 @@ static ivas_error renderIsmToMc( * This should have been validated in IVAS_REND_FeedInputAudio() */ renderBufferChannelLerp( ismInput->base.inputBuffer, 0, currentPanGains, previousPanGains, outAudio ); - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -3815,7 +3815,7 @@ static ivas_error renderIsmToSba( ivas_error error; error = IVAS_ERR_OK; - wmops_sub_start( "renderIsmToSba" ); + push_wmops( "renderIsmToSba" ); if ( ( error = getAudioConfigNumChannels( outConfig, &numOutChannels ) ) != IVAS_ERR_OK ) { @@ -3842,7 +3842,7 @@ static ivas_error renderIsmToSba( * This should have been validated in IVAS_REND_FeedInputAudio() */ renderBufferChannelLerp( ismInput->base.inputBuffer, 0, currentPanGains, previousPanGains, outAudio ); - wmops_sub_end(); + pop_wmops(); return error; } @@ -3936,7 +3936,7 @@ static ivas_error renderLfeToBinaural( assert( ( outAudio.config.numChannels == 2 ) && "Must be binaural output" ); - wmops_sub_start( "renderLfeToBinaural" ); + push_wmops( "renderLfeToBinaural" ); gain = GAIN_LFE; @@ -3969,7 +3969,7 @@ static ivas_error renderLfeToBinaural( *writePtr++ += gain * ( *readPtr++ ); } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -3986,7 +3986,7 @@ static ivas_error renderMcToBinaural( ivas_error error; IVAS_REND_AudioBuffer tmpRotBuffer; - wmops_sub_start( "renderMcToBinaural" ); + push_wmops( "renderMcToBinaural" ); headRotEnabled = mcInput->base.ctx.pHeadRotData->headRotEnabled; inConfig = mcInput->base.inConfig; @@ -4045,7 +4045,7 @@ static ivas_error renderMcToBinaural( /* TODO tmu : needs delay compensation */ renderLfeToBinaural( mcInput, outAudio ); - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -4060,7 +4060,7 @@ static ivas_error renderMcToBinauralRoom( ivas_error error; IVAS_REND_AudioBuffer tmpRotBuffer; - wmops_sub_start( "renderMcToBinauralRoom" ); + push_wmops( "renderMcToBinauralRoom" ); /* apply rotation */ if ( mcInput->base.ctx.pHeadRotData->headRotEnabled ) @@ -4097,7 +4097,7 @@ static ivas_error renderMcToBinauralRoom( /* TODO tmu : needs delay compensation */ renderLfeToBinaural( mcInput, outAudio ); - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -4116,7 +4116,7 @@ static ivas_error renderMcCustomLsToBinauralRoom( IVAS_REND_AudioBuffer tmpMcBuffer; IVAS_REND_AudioBuffer *tmpBufPtr; - wmops_sub_start( "renderMcCustomLsToBinauralRoom" ); + push_wmops( "renderMcCustomLsToBinauralRoom" ); tmpRotBuffer = outAudio; /* avoid compilation warning */ @@ -4169,7 +4169,7 @@ static ivas_error renderMcCustomLsToBinauralRoom( } count_free( tmpMcBuffer.data ); - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -4181,7 +4181,7 @@ static ivas_error renderMcToMc( int16_t i; IVAS_REND_AudioBuffer inAudio; - wmops_sub_start( "renderMcToMc" ); + push_wmops( "renderMcToMc" ); inAudio = mcInput->base.inputBuffer; @@ -4190,7 +4190,7 @@ static ivas_error renderMcToMc( renderBufferChannel( inAudio, i, mcInput->panGains[i], outAudio ); } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -4202,7 +4202,7 @@ static ivas_error renderMcToSba( int16_t i; IVAS_REND_AudioBuffer inAudio; - wmops_sub_start( "renderMcToSba" ); + push_wmops( "renderMcToSba" ); inAudio = mcInput->base.inputBuffer; @@ -4211,7 +4211,7 @@ static ivas_error renderMcToSba( renderBufferChannel( inAudio, i, mcInput->panGains[i], outAudio ); } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -4310,7 +4310,7 @@ static ivas_error renderSbaToMc( int16_t i; IVAS_REND_AudioBuffer inAudio; - wmops_sub_start( "renderSbaToMc" ); + push_wmops( "renderSbaToMc" ); inAudio = sbaInput->base.inputBuffer; @@ -4319,7 +4319,7 @@ static ivas_error renderSbaToMc( renderBufferChannel( inAudio, i, sbaInput->hoaDecMtx[i], outAudio ); } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -4331,7 +4331,7 @@ static ivas_error renderSbaToSba( int16_t i; IVAS_REND_AudioBuffer inAudio; - wmops_sub_start( "renderSbaToSba" ); + push_wmops( "renderSbaToSba" ); inAudio = sbaInput->base.inputBuffer; @@ -4340,7 +4340,7 @@ static ivas_error renderSbaToSba( renderBufferChannel( inAudio, i, sbaInput->hoaDecMtx[i], outAudio ); } - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -4355,7 +4355,7 @@ static ivas_error renderSbaToBinaural( ivas_error error; IVAS_REND_AudioBuffer tmpRotBuffer; - wmops_sub_start( "renderSbaToBinaural" ); + push_wmops( "renderSbaToBinaural" ); /* apply rotation */ if ( sbaInput->base.ctx.pHeadRotData->headRotEnabled ) @@ -4388,7 +4388,7 @@ static ivas_error renderSbaToBinaural( accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } @@ -4410,7 +4410,7 @@ static ivas_error renderSbaToBinauralRoom( tmpRotBuffer = outAudio; /* avoid compilation warning */ - wmops_sub_start( "renderSbaToBinauralRoom" ); + push_wmops( "renderSbaToBinauralRoom" ); headRotEnabled = sbaInput->base.ctx.pHeadRotData->headRotEnabled; @@ -4454,7 +4454,7 @@ static ivas_error renderSbaToBinauralRoom( } count_free( tmpMcBuffer.data ); - wmops_sub_end(); + pop_wmops(); return IVAS_ERR_OK; } -- GitLab From cf91c02c09a6ef590c62580ef74733d498ae2695 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 10:36:50 +0100 Subject: [PATCH 005/103] Replaced #include wmops.h with wmc_auto.h --- apps/decoder.c | 2 +- apps/encoder.c | 2 +- apps/renderer.c | 2 +- lib_com/ACcontextMapping.c | 2 +- lib_com/ari.c | 2 +- lib_com/ari_hm.c | 2 +- lib_com/arith_coder.c | 2 +- lib_com/bitalloc.c | 2 +- lib_com/bitallocsum.c | 2 +- lib_com/bits_alloc.c | 2 +- lib_com/bitstream.c | 2 +- lib_com/calc_st_com.c | 2 +- lib_com/cb_shape.c | 2 +- lib_com/cldfb.c | 2 +- lib_com/cng_exc.c | 2 +- lib_com/codec_tcx_common.c | 2 +- lib_com/core_com_config.c | 2 +- lib_com/deemph.c | 2 +- lib_com/delay_comp.c | 2 +- lib_com/dlpc_bfi.c | 2 +- lib_com/edct.c | 2 +- lib_com/enhancer.c | 2 +- lib_com/enr_1_az.c | 2 +- lib_com/env_adj.c | 2 +- lib_com/env_stab.c | 2 +- lib_com/env_stab_trans.c | 2 +- lib_com/est_tilt.c | 2 +- lib_com/fd_cng_com.c | 2 +- lib_com/fft.c | 2 +- lib_com/fft_cldfb.c | 2 +- lib_com/fft_rel.c | 2 +- lib_com/fill_spectrum.c | 2 +- lib_com/findpulse.c | 2 +- lib_com/fine_gain_bits.c | 2 +- lib_com/frame_ener.c | 2 +- lib_com/get_gain.c | 2 +- lib_com/gs_bitallocation.c | 2 +- lib_com/gs_gains.c | 2 +- lib_com/gs_inact_switching.c | 2 +- lib_com/gs_noisefill.c | 2 +- lib_com/gs_preech.c | 2 +- lib_com/guided_plc_util.c | 2 +- lib_com/hp50.c | 2 +- lib_com/hq2_bit_alloc.c | 2 +- lib_com/hq2_core_com.c | 2 +- lib_com/hq2_noise_inject.c | 2 +- lib_com/hq_bit_allocation.c | 2 +- lib_com/hq_conf.c | 2 +- lib_com/hq_tools.c | 2 +- lib_com/hvq_pvq_bitalloc.c | 2 +- lib_com/ifft_rel.c | 2 +- lib_com/igf_base.c | 2 +- lib_com/index_pvq_opt.c | 2 +- lib_com/int_lsp.c | 2 +- lib_com/interleave_spectrum.c | 2 +- lib_com/interpol.c | 2 +- lib_com/isf_dec_amr_wb.c | 2 +- lib_com/ivas_agc_com.c | 2 +- lib_com/ivas_arith.c | 2 +- lib_com/ivas_avq_pos_reorder_com.c | 2 +- lib_com/ivas_cov_smooth.c | 2 +- lib_com/ivas_dirac_com.c | 2 +- lib_com/ivas_entropy_coder_common.c | 2 +- lib_com/ivas_fb_mixer.c | 2 +- lib_com/ivas_filters.c | 2 +- lib_com/ivas_ism_config.c | 2 +- lib_com/ivas_masa_com.c | 2 +- lib_com/ivas_mc_com.c | 2 +- lib_com/ivas_mc_param_com.c | 2 +- lib_com/ivas_mcmasa_com.c | 2 +- lib_com/ivas_mct_com.c | 2 +- lib_com/ivas_mdct_core_com.c | 2 +- lib_com/ivas_mdct_imdct.c | 2 +- lib_com/ivas_mdft_imdft.c | 2 +- lib_com/ivas_pca_tools.c | 2 +- lib_com/ivas_qmetadata_com.c | 2 +- lib_com/ivas_qspherical_com.c | 2 +- lib_com/ivas_rom_com.c | 2 +- lib_com/ivas_sba_config.c | 2 +- lib_com/ivas_sns_com.c | 2 +- lib_com/ivas_spar_com.c | 2 +- lib_com/ivas_spar_com_quant_util.c | 2 +- lib_com/ivas_stereo_dft_com.c | 2 +- lib_com/ivas_stereo_eclvq_com.c | 2 +- lib_com/ivas_stereo_ica_com.c | 2 +- lib_com/ivas_stereo_mdct_bands_com.c | 2 +- lib_com/ivas_stereo_mdct_stereo_com.c | 2 +- lib_com/ivas_stereo_psychlpc_com.c | 2 +- lib_com/ivas_stereo_td_bit_alloc.c | 2 +- lib_com/ivas_tools.c | 2 +- lib_com/ivas_transient_det.c | 2 +- lib_com/lag_wind.c | 2 +- lib_com/lerp.c | 2 +- lib_com/limit_t0.c | 2 +- lib_com/logqnorm.c | 2 +- lib_com/longarith.c | 2 +- lib_com/low_rate_band_att.c | 2 +- lib_com/lpc_tools.c | 2 +- lib_com/lsf_dec_bfi.c | 2 +- lib_com/lsf_msvq_ma.c | 2 +- lib_com/lsf_tools.c | 2 +- lib_com/lsp_conv_poly.c | 2 +- lib_com/modif_fs.c | 2 +- lib_com/mslvq_com.c | 2 +- lib_com/nelp.c | 2 +- lib_com/parameter_bitmaping.c | 2 +- lib_com/phase_dispersion.c | 2 +- lib_com/ppp.c | 2 +- lib_com/pred_lt4.c | 2 +- lib_com/preemph.c | 2 +- lib_com/pvq_com.c | 2 +- lib_com/range_com.c | 2 +- lib_com/re8_ppv.c | 4 ++-- lib_com/re8_util.c | 2 +- lib_com/realft.c | 2 +- lib_com/recovernorm.c | 2 +- lib_com/reordvct.c | 2 +- lib_com/residu.c | 2 +- lib_com/rom_com.c | 2 +- lib_com/stab_est.c | 2 +- lib_com/stat_noise_uv_mod.c | 2 +- lib_com/swb_bwe_com.c | 2 +- lib_com/swb_bwe_com_hr.c | 2 +- lib_com/swb_bwe_com_lr.c | 2 +- lib_com/swb_tbe_com.c | 2 +- lib_com/syn_12k8.c | 2 +- lib_com/syn_filt.c | 2 +- lib_com/tcq_position_arith.c | 2 +- lib_com/tcx_ltp.c | 2 +- lib_com/tcx_mdct.c | 2 +- lib_com/tcx_mdct_window.c | 2 +- lib_com/tcx_utils.c | 2 +- lib_com/tec_com.c | 2 +- lib_com/tns_base.c | 2 +- lib_com/tools.c | 2 +- lib_com/trans_direct.c | 2 +- lib_com/trans_inv.c | 2 +- lib_com/vlpc_2st_com.c | 2 +- lib_com/weight.c | 2 +- lib_com/weight_a.c | 2 +- lib_com/wi.c | 2 +- lib_com/window_ola.c | 2 +- lib_com/wtda.c | 2 +- lib_debug/debug.c | 2 +- lib_debug/sba_debug.c | 2 +- lib_debug/segsnr.c | 2 +- lib_debug/snr.c | 2 +- lib_dec/ACcontextMapping_dec.c | 2 +- lib_dec/FEC.c | 2 +- lib_dec/FEC_HQ_core.c | 2 +- lib_dec/FEC_HQ_phase_ecu.c | 2 +- lib_dec/FEC_adapt_codebook.c | 2 +- lib_dec/FEC_clas_estim.c | 2 +- lib_dec/FEC_lsf_estim.c | 2 +- lib_dec/FEC_pitch_estim.c | 2 +- lib_dec/FEC_scale_syn.c | 2 +- lib_dec/LD_music_post_filter.c | 2 +- lib_dec/TonalComponentDetection.c | 2 +- lib_dec/acelp_core_dec.c | 2 +- lib_dec/acelp_core_switch_dec.c | 2 +- lib_dec/amr_wb_dec.c | 2 +- lib_dec/ari_dec.c | 2 +- lib_dec/ari_hm_dec.c | 2 +- lib_dec/arith_coder_dec.c | 2 +- lib_dec/avq_dec.c | 2 +- lib_dec/bass_psfilter.c | 2 +- lib_dec/cng_dec.c | 2 +- lib_dec/core_dec_init.c | 2 +- lib_dec/core_dec_reconf.c | 2 +- lib_dec/core_dec_switch.c | 2 +- lib_dec/core_switching_dec.c | 2 +- lib_dec/d_gain2p.c | 2 +- lib_dec/dec2t32.c | 2 +- lib_dec/dec4t64.c | 2 +- lib_dec/dec_LPD.c | 2 +- lib_dec/dec_ace.c | 2 +- lib_dec/dec_acelp.c | 2 +- lib_dec/dec_acelp_tcx_main.c | 2 +- lib_dec/dec_amr_wb.c | 2 +- lib_dec/dec_gen_voic.c | 2 +- lib_dec/dec_higher_acelp.c | 2 +- lib_dec/dec_nelp.c | 2 +- lib_dec/dec_pit_exc.c | 2 +- lib_dec/dec_post.c | 2 +- lib_dec/dec_ppp.c | 2 +- lib_dec/dec_prm.c | 2 +- lib_dec/dec_tcx.c | 2 +- lib_dec/dec_tran.c | 2 +- lib_dec/dec_uv.c | 2 +- lib_dec/decision_matrix_dec.c | 2 +- lib_dec/dlpc_avq.c | 2 +- lib_dec/dlpc_stoch.c | 2 +- lib_dec/er_dec_acelp.c | 2 +- lib_dec/er_dec_tcx.c | 2 +- lib_dec/er_scale_syn.c | 2 +- lib_dec/er_sync_exc.c | 2 +- lib_dec/er_util.c | 2 +- lib_dec/evs_dec.c | 2 +- lib_dec/fd_cng_dec.c | 2 +- lib_dec/gain_dec.c | 2 +- lib_dec/gaus_dec.c | 2 +- lib_dec/gs_dec.c | 2 +- lib_dec/gs_dec_amr_wb.c | 2 +- lib_dec/hdecnrm.c | 2 +- lib_dec/hf_synth.c | 2 +- lib_dec/hq_classifier_dec.c | 2 +- lib_dec/hq_conf_fec.c | 2 +- lib_dec/hq_core_dec.c | 2 +- lib_dec/hq_env_dec.c | 2 +- lib_dec/hq_hr_dec.c | 2 +- lib_dec/hq_lr_dec.c | 2 +- lib_dec/igf_dec.c | 2 +- lib_dec/igf_scf_dec.c | 2 +- lib_dec/init_dec.c | 2 +- lib_dec/inov_dec.c | 2 +- lib_dec/ivas_agc_dec.c | 2 +- lib_dec/ivas_core_dec.c | 2 +- lib_dec/ivas_corecoder_dec_reconfig.c | 2 +- lib_dec/ivas_cpe_dec.c | 2 +- lib_dec/ivas_dec.c | 2 +- lib_dec/ivas_decision_matrix_dec.c | 2 +- lib_dec/ivas_dirac_dec.c | 2 +- lib_dec/ivas_dirac_dec_binaural_functions.c | 2 +- lib_dec/ivas_dirac_decorr_dec.c | 2 +- lib_dec/ivas_dirac_onsets_dec.c | 2 +- lib_dec/ivas_dirac_output_synthesis_cov.c | 2 +- lib_dec/ivas_dirac_output_synthesis_dec.c | 2 +- lib_dec/ivas_entropy_decoder.c | 2 +- lib_dec/ivas_init_dec.c | 2 +- lib_dec/ivas_ism_metadata_dec.c | 2 +- lib_dec/ivas_ism_param_dec.c | 2 +- lib_dec/ivas_ism_renderer.c | 2 +- lib_dec/ivas_lfe_dec.c | 2 +- lib_dec/ivas_lfe_plc.c | 2 +- lib_dec/ivas_masa_dec.c | 2 +- lib_dec/ivas_mc_param_dec.c | 2 +- lib_dec/ivas_mct_core_dec.c | 2 +- lib_dec/ivas_mct_dec.c | 2 +- lib_dec/ivas_mct_dec_mct.c | 2 +- lib_dec/ivas_mdct_core_dec.c | 2 +- lib_dec/ivas_mono_dmx_renderer.c | 2 +- lib_dec/ivas_out_setup_conversion.c | 2 +- lib_dec/ivas_pca_dec.c | 2 +- lib_dec/ivas_post_proc.c | 2 +- lib_dec/ivas_qmetadata_dec.c | 2 +- lib_dec/ivas_qspherical_dec.c | 2 +- lib_dec/ivas_range_uni_dec.c | 2 +- lib_dec/ivas_rom_dec.c | 2 +- lib_dec/ivas_sba_dec.c | 2 +- lib_dec/ivas_sba_dirac_stereo_dec.c | 2 +- lib_dec/ivas_sce_dec.c | 2 +- lib_dec/ivas_sns_dec.c | 2 +- lib_dec/ivas_spar_decoder.c | 2 +- lib_dec/ivas_spar_md_dec.c | 2 +- lib_dec/ivas_stereo_adapt_GR_dec.c | 2 +- lib_dec/ivas_stereo_cng_dec.c | 2 +- lib_dec/ivas_stereo_dft_dec.c | 2 +- lib_dec/ivas_stereo_dft_dec_dmx.c | 2 +- lib_dec/ivas_stereo_dft_plc.c | 2 +- lib_dec/ivas_stereo_eclvq_dec.c | 2 +- lib_dec/ivas_stereo_esf_dec.c | 2 +- lib_dec/ivas_stereo_ica_dec.c | 2 +- lib_dec/ivas_stereo_icbwe_dec.c | 2 +- lib_dec/ivas_stereo_mdct_core_dec.c | 2 +- lib_dec/ivas_stereo_mdct_stereo_dec.c | 2 +- lib_dec/ivas_stereo_switching_dec.c | 2 +- lib_dec/ivas_stereo_td_dec.c | 2 +- lib_dec/ivas_stereo_td_low_rate_dec.c | 2 +- lib_dec/ivas_svd_dec.c | 2 +- lib_dec/ivas_tcx_core_dec.c | 2 +- lib_dec/ivas_td_decorr.c | 2 +- lib_dec/ivas_vbap.c | 2 +- lib_dec/jbm_jb4_circularbuffer.c | 2 +- lib_dec/jbm_jb4_jmf.c | 2 +- lib_dec/jbm_jb4sb.c | 2 +- lib_dec/jbm_pcmdsp_apa.c | 2 +- lib_dec/jbm_pcmdsp_fifo.c | 2 +- lib_dec/jbm_pcmdsp_similarityestimation.c | 2 +- lib_dec/jbm_pcmdsp_window.c | 2 +- lib_dec/lead_deindexing.c | 2 +- lib_dec/lib_dec.c | 2 +- lib_dec/lp_exc_d.c | 2 +- lib_dec/lsf_dec.c | 2 +- lib_dec/lsf_msvq_ma_dec.c | 2 +- lib_dec/nelp_dec.c | 2 +- lib_dec/peak_vq_dec.c | 2 +- lib_dec/pit_dec.c | 2 +- lib_dec/pitch_extr.c | 2 +- lib_dec/post_dec.c | 2 +- lib_dec/ppp_dec.c | 2 +- lib_dec/pvq_core_dec.c | 2 +- lib_dec/pvq_decode.c | 2 +- lib_dec/range_dec.c | 2 +- lib_dec/re8_dec.c | 2 +- lib_dec/rom_dec.c | 2 +- lib_dec/rst_dec.c | 2 +- lib_dec/stat_noise_uv_dec.c | 2 +- lib_dec/swb_bwe_dec.c | 2 +- lib_dec/swb_bwe_dec_hr.c | 2 +- lib_dec/swb_bwe_dec_lr.c | 2 +- lib_dec/swb_tbe_dec.c | 2 +- lib_dec/syn_outp.c | 2 +- lib_dec/tcq_core_dec.c | 2 +- lib_dec/tcx_utils_dec.c | 2 +- lib_dec/tns_base_dec.c | 2 +- lib_dec/tonalMDCTconcealment.c | 2 +- lib_dec/transition_dec.c | 2 +- lib_dec/updt_dec.c | 2 +- lib_dec/vlpc_1st_dec.c | 2 +- lib_dec/vlpc_2st_dec.c | 2 +- lib_dec/voiced_dec.c | 2 +- lib_dec/waveadjust_fec_dec.c | 2 +- lib_enc/ACcontextMapping_enc.c | 2 +- lib_enc/FEC_enc.c | 2 +- lib_enc/SNR_calc.c | 2 +- lib_enc/acelp_core_enc.c | 2 +- lib_enc/acelp_core_switch_enc.c | 2 +- lib_enc/acelp_enc_util.c | 2 +- lib_enc/amr_wb_enc.c | 2 +- lib_enc/analy_lp.c | 2 +- lib_enc/analy_sp.c | 2 +- lib_enc/ari_enc.c | 2 +- lib_enc/ari_hm_enc.c | 2 +- lib_enc/arith_coder_enc.c | 2 +- lib_enc/avq_cod.c | 2 +- lib_enc/bass_psfilter_enc.c | 2 +- lib_enc/bw_detect.c | 2 +- lib_enc/cng_enc.c | 2 +- lib_enc/cod2t32.c | 2 +- lib_enc/cod4t64.c | 2 +- lib_enc/cod4t64_fast.c | 2 +- lib_enc/cod_ace.c | 2 +- lib_enc/cod_tcx.c | 2 +- lib_enc/cod_uv.c | 2 +- lib_enc/comvad_decision.c | 2 +- lib_enc/cor_shif.c | 2 +- lib_enc/core_enc_2div.c | 2 +- lib_enc/core_enc_init.c | 2 +- lib_enc/core_enc_ol.c | 2 +- lib_enc/core_enc_reconf.c | 2 +- lib_enc/core_enc_switch.c | 2 +- lib_enc/core_enc_updt.c | 2 +- lib_enc/core_switching_enc.c | 2 +- lib_enc/corr_xh.c | 2 +- lib_enc/decision_matrix_enc.c | 2 +- lib_enc/detect_transient.c | 2 +- lib_enc/diffcod.c | 2 +- lib_enc/dtx.c | 2 +- lib_enc/enc_acelp.c | 2 +- lib_enc/enc_acelp_tcx_main.c | 2 +- lib_enc/enc_acelpx.c | 2 +- lib_enc/enc_amr_wb.c | 2 +- lib_enc/enc_gain.c | 2 +- lib_enc/enc_gen_voic.c | 2 +- lib_enc/enc_gen_voic_rf.c | 2 +- lib_enc/enc_higher_acelp.c | 2 +- lib_enc/enc_nelp.c | 2 +- lib_enc/enc_pit_exc.c | 2 +- lib_enc/enc_ppp.c | 2 +- lib_enc/enc_prm.c | 2 +- lib_enc/enc_tran.c | 2 +- lib_enc/enc_uv.c | 2 +- lib_enc/energy.c | 2 +- lib_enc/eval_pit_contr.c | 2 +- lib_enc/evs_enc.c | 2 +- lib_enc/ext_sig_ana.c | 2 +- lib_enc/fd_cng_enc.c | 2 +- lib_enc/find_tar.c | 2 +- lib_enc/find_tilt.c | 2 +- lib_enc/find_uv.c | 2 +- lib_enc/find_wsp.c | 2 +- lib_enc/frame_spec_dif_cor_rate.c | 2 +- lib_enc/gain_enc.c | 2 +- lib_enc/gaus_enc.c | 2 +- lib_enc/gp_clip.c | 2 +- lib_enc/gs_enc.c | 2 +- lib_enc/guided_plc_enc.c | 2 +- lib_enc/hf_cod_amrwb.c | 2 +- lib_enc/hq_classifier_enc.c | 2 +- lib_enc/hq_core_enc.c | 2 +- lib_enc/hq_env_enc.c | 2 +- lib_enc/hq_hr_enc.c | 2 +- lib_enc/hq_lr_enc.c | 2 +- lib_enc/hvq_enc.c | 2 +- lib_enc/igf_enc.c | 2 +- lib_enc/igf_scf_enc.c | 2 +- lib_enc/init_enc.c | 2 +- lib_enc/inov_enc.c | 2 +- lib_enc/isf_enc_amr_wb.c | 2 +- lib_enc/ivas_agc_enc.c | 2 +- lib_enc/ivas_core_enc.c | 2 +- lib_enc/ivas_core_pre_proc.c | 2 +- lib_enc/ivas_core_pre_proc_front.c | 2 +- lib_enc/ivas_corecoder_enc_reconfig.c | 2 +- lib_enc/ivas_cpe_enc.c | 2 +- lib_enc/ivas_decision_matrix_enc.c | 2 +- lib_enc/ivas_dirac_enc.c | 2 +- lib_enc/ivas_enc.c | 2 +- lib_enc/ivas_enc_cov_handler.c | 2 +- lib_enc/ivas_entropy_coder.c | 2 +- lib_enc/ivas_front_vad.c | 2 +- lib_enc/ivas_init_enc.c | 2 +- lib_enc/ivas_ism_enc.c | 2 +- lib_enc/ivas_ism_metadata_enc.c | 2 +- lib_enc/ivas_ism_param_enc.c | 2 +- lib_enc/ivas_lfe_enc.c | 2 +- lib_enc/ivas_masa_enc.c | 2 +- lib_enc/ivas_mc_param_enc.c | 2 +- lib_enc/ivas_mcmasa_enc.c | 2 +- lib_enc/ivas_mct_core_enc.c | 2 +- lib_enc/ivas_mct_enc.c | 2 +- lib_enc/ivas_mct_enc_mct.c | 2 +- lib_enc/ivas_mdct_core_enc.c | 2 +- lib_enc/ivas_pca_enc.c | 2 +- lib_enc/ivas_qmetadata_enc.c | 2 +- lib_enc/ivas_qspherical_enc.c | 2 +- lib_enc/ivas_range_uni_enc.c | 2 +- lib_enc/ivas_rom_enc.c | 2 +- lib_enc/ivas_sba_enc.c | 2 +- lib_enc/ivas_sce_enc.c | 2 +- lib_enc/ivas_sns_enc.c | 2 +- lib_enc/ivas_spar_encoder.c | 2 +- lib_enc/ivas_spar_md_enc.c | 2 +- lib_enc/ivas_stereo_adapt_GR_enc.c | 2 +- lib_enc/ivas_stereo_classifier.c | 2 +- lib_enc/ivas_stereo_cng_enc.c | 2 +- lib_enc/ivas_stereo_dft_enc.c | 2 +- lib_enc/ivas_stereo_dft_enc_itd.c | 2 +- lib_enc/ivas_stereo_dft_td_itd.c | 2 +- lib_enc/ivas_stereo_dmx_evs.c | 2 +- lib_enc/ivas_stereo_eclvq_enc.c | 2 +- lib_enc/ivas_stereo_ica_enc.c | 2 +- lib_enc/ivas_stereo_icbwe_enc.c | 2 +- lib_enc/ivas_stereo_mdct_core_enc.c | 2 +- lib_enc/ivas_stereo_mdct_igf_enc.c | 2 +- lib_enc/ivas_stereo_mdct_stereo_enc.c | 2 +- lib_enc/ivas_stereo_switching_enc.c | 2 +- lib_enc/ivas_stereo_td_analysis.c | 2 +- lib_enc/ivas_stereo_td_enc.c | 2 +- lib_enc/ivas_stereo_td_low_rate_enc.c | 2 +- lib_enc/ivas_tcx_core_enc.c | 2 +- lib_enc/lead_indexing.c | 2 +- lib_enc/lib_enc.c | 2 +- lib_enc/long_enr.c | 2 +- lib_enc/lp_exc_e.c | 2 +- lib_enc/lsf_enc.c | 2 +- lib_enc/lsf_msvq_ma_enc.c | 2 +- lib_enc/ltd_stable.c | 2 +- lib_enc/mdct_classifier.c | 2 +- lib_enc/mdct_selector.c | 2 +- lib_enc/mslvq_enc.c | 2 +- lib_enc/multi_harm.c | 2 +- lib_enc/nelp_enc.c | 2 +- lib_enc/nois_est.c | 2 +- lib_enc/noise_adjust.c | 2 +- lib_enc/normalizecoefs.c | 2 +- lib_enc/peak_vq_enc.c | 2 +- lib_enc/pit_enc.c | 2 +- lib_enc/pitch_ol.c | 2 +- lib_enc/pitch_ol2.c | 2 +- lib_enc/plc_enc_ext.c | 2 +- lib_enc/ppp_enc.c | 2 +- lib_enc/pre_proc.c | 2 +- lib_enc/pvq_core_enc.c | 2 +- lib_enc/pvq_encode.c | 2 +- lib_enc/q_gain2p.c | 2 +- lib_enc/qlpc_avq.c | 2 +- lib_enc/qlpc_stoch.c | 2 +- lib_enc/range_enc.c | 2 +- lib_enc/re8_cod.c | 2 +- lib_enc/reordernorm.c | 2 +- lib_enc/rom_enc.c | 2 +- lib_enc/rst_enc.c | 2 +- lib_enc/set_impulse.c | 2 +- lib_enc/setmodeindex.c | 2 +- lib_enc/sig_clas.c | 2 +- lib_enc/spec_center.c | 2 +- lib_enc/spec_flatness.c | 2 +- lib_enc/speech_music_classif.c | 2 +- lib_enc/stat_noise_uv_enc.c | 2 +- lib_enc/subband_fft.c | 2 +- lib_enc/swb_bwe_enc.c | 2 +- lib_enc/swb_bwe_enc_hr.c | 2 +- lib_enc/swb_bwe_enc_lr.c | 2 +- lib_enc/swb_pre_proc.c | 2 +- lib_enc/swb_tbe_enc.c | 2 +- lib_enc/tcq_core_enc.c | 2 +- lib_enc/tcx_ltp_enc.c | 2 +- lib_enc/tcx_utils_enc.c | 2 +- lib_enc/tfa_enc.c | 2 +- lib_enc/tns_base_enc.c | 2 +- lib_enc/transient_detection.c | 2 +- lib_enc/transition_enc.c | 2 +- lib_enc/update_decision.c | 2 +- lib_enc/updt_enc.c | 2 +- lib_enc/updt_tar.c | 2 +- lib_enc/vad.c | 2 +- lib_enc/vad_param_updt.c | 2 +- lib_enc/vad_proc.c | 2 +- lib_enc/vbr_average_rate.c | 2 +- lib_enc/vlpc_1st_cod.c | 2 +- lib_enc/vlpc_2st_cod.c | 2 +- lib_enc/voiced_enc.c | 2 +- lib_enc/waveadjust_fec_cod.c | 2 +- lib_rend/ivas_allrad_dec.c | 2 +- lib_rend/ivas_binauralRenderer.c | 2 +- lib_rend/ivas_binaural_reverb.c | 2 +- lib_rend/ivas_crend.c | 2 +- lib_rend/ivas_efap.c | 2 +- lib_rend/ivas_hrtf.c | 2 +- lib_rend/ivas_limiter.c | 2 +- lib_rend/ivas_ls_custom_dec.c | 2 +- lib_rend/ivas_objectRenderer.c | 2 +- lib_rend/ivas_objectRenderer_hrFilt.c | 2 +- lib_rend/ivas_objectRenderer_mix.c | 2 +- lib_rend/ivas_objectRenderer_sfx.c | 2 +- lib_rend/ivas_objectRenderer_sources.c | 2 +- lib_rend/ivas_objectRenderer_vec.c | 2 +- lib_rend/ivas_orient_trk.c | 2 +- lib_rend/ivas_output_init.c | 2 +- lib_rend/ivas_render_config.c | 2 +- lib_rend/ivas_reverb.c | 2 +- lib_rend/ivas_reverb_delay_line.c | 2 +- lib_rend/ivas_reverb_fft_filter.c | 2 +- lib_rend/ivas_reverb_filter_design.c | 2 +- lib_rend/ivas_reverb_iir_filter.c | 2 +- lib_rend/ivas_reverb_utils.c | 2 +- lib_rend/ivas_rom_TdBinauralRenderer.c | 2 +- lib_rend/ivas_rom_binauralRenderer.c | 2 +- lib_rend/ivas_rotation.c | 2 +- lib_rend/ivas_sba_rendering.c | 2 +- lib_rend/lib_rend.c | 2 +- lib_util/audio_file_reader.c | 2 +- lib_util/audio_file_writer.c | 2 +- scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c | 2 +- 535 files changed, 536 insertions(+), 536 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 64779c92b1..aaef6c2cd5 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -46,7 +46,7 @@ #ifdef WMOPS #include "PROM_Size_lib_com.h" #include "PROM_Size_lib_dec.h" -#include "wmops.h" +#include "wmc_auto.h" #endif #ifdef RAM_COUNTING_TOOL #include "mem_count.h" diff --git a/apps/encoder.c b/apps/encoder.c index e9325ded59..45e292ddf8 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -42,7 +42,7 @@ #ifdef WMOPS #include "PROM_Size_lib_com.h" #include "PROM_Size_lib_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #endif #ifdef RAM_COUNTING_TOOL #include "mem_count.h" diff --git a/apps/renderer.c b/apps/renderer.c index 0d46dd05f4..5674793bcc 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -47,7 +47,7 @@ #include "render_config_reader.h" #ifdef WMOPS #include "PROM_Size_lib_rend.h" -#include "wmops.h" +#include "wmc_auto.h" #endif #ifdef RAM_COUNTING_TOOL #include "mem_count.h" diff --git a/lib_com/ACcontextMapping.c b/lib_com/ACcontextMapping.c index 27c51eb179..d9170b7ea0 100644 --- a/lib_com/ACcontextMapping.c +++ b/lib_com/ACcontextMapping.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * get_next_coeff_mapped() diff --git a/lib_com/ari.c b/lib_com/ari.c index 3b7ccfd9a4..55d88af255 100644 --- a/lib_com/ari.c +++ b/lib_com/ari.c @@ -39,7 +39,7 @@ #include "prot.h" #include "basop_util.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- diff --git a/lib_com/ari_hm.c b/lib_com/ari_hm.c index 78e639ea91..d4727d6116 100644 --- a/lib_com/ari_hm.c +++ b/lib_com/ari_hm.c @@ -42,7 +42,7 @@ #include "basop_util.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * UnmapIndex() diff --git a/lib_com/arith_coder.c b/lib_com/arith_coder.c index e534a23e04..7a862fa5d0 100644 --- a/lib_com/arith_coder.c +++ b/lib_com/arith_coder.c @@ -45,7 +45,7 @@ #include "prot.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" #define WMC_TOOL_MAN diff --git a/lib_com/bitalloc.c b/lib_com/bitalloc.c index 97acd28c58..43b27971d3 100644 --- a/lib_com/bitalloc.c +++ b/lib_com/bitalloc.c @@ -44,7 +44,7 @@ #include "prot.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * bitalloc() diff --git a/lib_com/bitallocsum.c b/lib_com/bitallocsum.c index 124bf69fe5..99d4096758 100644 --- a/lib_com/bitallocsum.c +++ b/lib_com/bitallocsum.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * bitallocsum() diff --git a/lib_com/bits_alloc.c b/lib_com/bits_alloc.c index e9f9878853..6217037c35 100644 --- a/lib_com/bits_alloc.c +++ b/lib_com/bits_alloc.c @@ -43,7 +43,7 @@ #include "prot.h" #include "ivas_cnst.h" #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c index 12f172f2a3..0c13dfc580 100644 --- a/lib_com/bitstream.c +++ b/lib_com/bitstream.c @@ -49,7 +49,7 @@ #include "ivas_prot.h" #include "ivas_cnst.h" #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUGGING diff --git a/lib_com/calc_st_com.c b/lib_com/calc_st_com.c index 5f1c3776d9..642f6159fe 100644 --- a/lib_com/calc_st_com.c +++ b/lib_com/calc_st_com.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------------- diff --git a/lib_com/cb_shape.c b/lib_com/cb_shape.c index b44c46ab0f..306d1c9a45 100644 --- a/lib_com/cb_shape.c +++ b/lib_com/cb_shape.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * cb_shape() diff --git a/lib_com/cldfb.c b/lib_com/cldfb.c index 1d9fefcebb..1706030a5a 100644 --- a/lib_com/cldfb.c +++ b/lib_com/cldfb.c @@ -44,7 +44,7 @@ #include "stat_dec.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #if __STDC_VERSION__ >= 199901L #if defined __ICL diff --git a/lib_com/cng_exc.c b/lib_com/cng_exc.c index 62955ee955..58f6fa87be 100644 --- a/lib_com/cng_exc.c +++ b/lib_com/cng_exc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_com/codec_tcx_common.c b/lib_com/codec_tcx_common.c index 98a2fb4bd0..16bf165bbf 100644 --- a/lib_com/codec_tcx_common.c +++ b/lib_com/codec_tcx_common.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * tcxGetNoiseFillingTilt() diff --git a/lib_com/core_com_config.c b/lib_com/core_com_config.c index 7ffb4f0e9f..d6a2ce9ada 100644 --- a/lib_com/core_com_config.c +++ b/lib_com/core_com_config.c @@ -42,7 +42,7 @@ #endif #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" diff --git a/lib_com/deemph.c b/lib_com/deemph.c index 20b5c43719..4cfff30ba4 100644 --- a/lib_com/deemph.c +++ b/lib_com/deemph.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * deemph() diff --git a/lib_com/delay_comp.c b/lib_com/delay_comp.c index a957150b93..60e4193ab1 100644 --- a/lib_com/delay_comp.c +++ b/lib_com/delay_comp.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * get_delay() diff --git a/lib_com/dlpc_bfi.c b/lib_com/dlpc_bfi.c index 33ba286c3c..8adefe60a2 100644 --- a/lib_com/dlpc_bfi.c +++ b/lib_com/dlpc_bfi.c @@ -42,7 +42,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * routine: dlpc_bfi() diff --git a/lib_com/edct.c b/lib_com/edct.c index 8fe84049a6..9321b838a7 100644 --- a/lib_com/edct.c +++ b/lib_com/edct.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include /* for cosf, sinf */ static ivas_error get_edct_table( diff --git a/lib_com/enhancer.c b/lib_com/enhancer.c index 2ed4271c05..964f2845b7 100644 --- a/lib_com/enhancer.c +++ b/lib_com/enhancer.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_com/enr_1_az.c b/lib_com/enr_1_az.c index f5f88ed55c..6c99e673b7 100644 --- a/lib_com/enr_1_az.c +++ b/lib_com/enr_1_az.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * enr_1_Az() diff --git a/lib_com/env_adj.c b/lib_com/env_adj.c index a169311615..3f7fa94d8e 100644 --- a/lib_com/env_adj.c +++ b/lib_com/env_adj.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * env_adj() diff --git a/lib_com/env_stab.c b/lib_com/env_stab.c index abe93eddce..d07c74874d 100644 --- a/lib_com/env_stab.c +++ b/lib_com/env_stab.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUGGING #include "assert.h" #endif diff --git a/lib_com/env_stab_trans.c b/lib_com/env_stab_trans.c index 6a8ca2b266..58ef2843d2 100644 --- a/lib_com/env_stab_trans.c +++ b/lib_com/env_stab_trans.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * env_stab_transient_detect() diff --git a/lib_com/est_tilt.c b/lib_com/est_tilt.c index e126f761f8..8089d546dd 100644 --- a/lib_com/est_tilt.c +++ b/lib_com/est_tilt.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * est_tilt() diff --git a/lib_com/fd_cng_com.c b/lib_com/fd_cng_com.c index 98b5a3df75..655a868166 100644 --- a/lib_com/fd_cng_com.c +++ b/lib_com/fd_cng_com.c @@ -43,7 +43,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- diff --git a/lib_com/fft.c b/lib_com/fft.c index ed0d6604e6..1823f51372 100644 --- a/lib_com/fft.c +++ b/lib_com/fft.c @@ -44,7 +44,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef _MSC_VER #pragma warning( disable : 4310 ) diff --git a/lib_com/fft_cldfb.c b/lib_com/fft_cldfb.c index 6967f87bcd..b2dcab8954 100644 --- a/lib_com/fft_cldfb.c +++ b/lib_com/fft_cldfb.c @@ -39,7 +39,7 @@ #include #include "prot.h" #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" #if __STDC_VERSION__ >= 199901L #if defined __ICL diff --git a/lib_com/fft_rel.c b/lib_com/fft_rel.c index a8b96e8217..e9d12d41a9 100644 --- a/lib_com/fft_rel.c +++ b/lib_com/fft_rel.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_com/fill_spectrum.c b/lib_com/fill_spectrum.c index a3dbcf304b..e6923efc6a 100644 --- a/lib_com/fill_spectrum.c +++ b/lib_com/fill_spectrum.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * fill_spectrum() diff --git a/lib_com/findpulse.c b/lib_com/findpulse.c index e26980d225..4b8acee231 100644 --- a/lib_com/findpulse.c +++ b/lib_com/findpulse.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------------------* * findpulse() diff --git a/lib_com/fine_gain_bits.c b/lib_com/fine_gain_bits.c index 240b174bef..8977479814 100644 --- a/lib_com/fine_gain_bits.c +++ b/lib_com/fine_gain_bits.c @@ -42,7 +42,7 @@ #include "rom_com.h" #include "prot.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * subband_gain_bits() diff --git a/lib_com/frame_ener.c b/lib_com/frame_ener.c index d5c38e6640..ff10a6e914 100644 --- a/lib_com/frame_ener.c +++ b/lib_com/frame_ener.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------------------* * fer_energy() diff --git a/lib_com/get_gain.c b/lib_com/get_gain.c index 320d5ad12c..0cc12d4482 100644 --- a/lib_com/get_gain.c +++ b/lib_com/get_gain.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------------------* * get_gain() diff --git a/lib_com/gs_bitallocation.c b/lib_com/gs_bitallocation.c index 8458fb754f..5015a6219a 100644 --- a/lib_com/gs_bitallocation.c +++ b/lib_com/gs_bitallocation.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_com/gs_gains.c b/lib_com/gs_gains.c index ea23b27781..4cc66d04b3 100644 --- a/lib_com/gs_gains.c +++ b/lib_com/gs_gains.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_com/gs_inact_switching.c b/lib_com/gs_inact_switching.c index a9d2a80046..f028160807 100644 --- a/lib_com/gs_inact_switching.c +++ b/lib_com/gs_inact_switching.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_com/gs_noisefill.c b/lib_com/gs_noisefill.c index 2885f324ca..23205aa5aa 100644 --- a/lib_com/gs_noisefill.c +++ b/lib_com/gs_noisefill.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * gs_noisf() diff --git a/lib_com/gs_preech.c b/lib_com/gs_preech.c index b7ab89a879..9a323db597 100644 --- a/lib_com/gs_preech.c +++ b/lib_com/gs_preech.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_com/guided_plc_util.c b/lib_com/guided_plc_util.c index cb14c503c8..0c962db3af 100644 --- a/lib_com/guided_plc_util.c +++ b/lib_com/guided_plc_util.c @@ -38,7 +38,7 @@ #include "options.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_com/hp50.c b/lib_com/hp50.c index 58b15a4211..50287d78a9 100644 --- a/lib_com/hp50.c +++ b/lib_com/hp50.c @@ -41,7 +41,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /* diff --git a/lib_com/hq2_bit_alloc.c b/lib_com/hq2_bit_alloc.c index b46f54480e..b3fa6f3616 100644 --- a/lib_com/hq2_bit_alloc.c +++ b/lib_com/hq2_bit_alloc.c @@ -45,7 +45,7 @@ #include "basop_util.h" #include "basop_mpy.h" #include "stl.h" -#include "wmops.h" +#include "wmc_auto.h" #define WMC_TOOL_MAN diff --git a/lib_com/hq2_core_com.c b/lib_com/hq2_core_com.c index 33411f9334..062d86615e 100644 --- a/lib_com/hq2_core_com.c +++ b/lib_com/hq2_core_com.c @@ -45,7 +45,7 @@ #include "prot.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * mdct_spectrum_denorm() diff --git a/lib_com/hq2_noise_inject.c b/lib_com/hq2_noise_inject.c index 3eac77d81b..5c112b60d9 100644 --- a/lib_com/hq2_noise_inject.c +++ b/lib_com/hq2_noise_inject.c @@ -41,7 +41,7 @@ #endif #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * hq2_noise_inject() diff --git a/lib_com/hq_bit_allocation.c b/lib_com/hq_bit_allocation.c index fbb655e4f3..221178d5b1 100644 --- a/lib_com/hq_bit_allocation.c +++ b/lib_com/hq_bit_allocation.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * hq_bit_allocation() diff --git a/lib_com/hq_conf.c b/lib_com/hq_conf.c index ed548171a1..3a08d0de1c 100644 --- a/lib_com/hq_conf.c +++ b/lib_com/hq_conf.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * hq_configure() diff --git a/lib_com/hq_tools.c b/lib_com/hq_tools.c index 7a154a00a6..627590dd42 100644 --- a/lib_com/hq_tools.c +++ b/lib_com/hq_tools.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * Local function prototypes diff --git a/lib_com/hvq_pvq_bitalloc.c b/lib_com/hvq_pvq_bitalloc.c index 9357a37964..6004e35baa 100644 --- a/lib_com/hvq_pvq_bitalloc.c +++ b/lib_com/hvq_pvq_bitalloc.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------*/ /* Function hvq_pvq_bitalloc */ diff --git a/lib_com/ifft_rel.c b/lib_com/ifft_rel.c index d0200f87be..ab3d68ac03 100644 --- a/lib_com/ifft_rel.c +++ b/lib_com/ifft_rel.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constants diff --git a/lib_com/igf_base.c b/lib_com/igf_base.c index 70b202770a..4d4c63f835 100644 --- a/lib_com/igf_base.c +++ b/lib_com/igf_base.c @@ -42,7 +42,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * IGF_ApplyTransFac() diff --git a/lib_com/index_pvq_opt.c b/lib_com/index_pvq_opt.c index e09c831dab..31010e2786 100644 --- a/lib_com/index_pvq_opt.c +++ b/lib_com/index_pvq_opt.c @@ -44,7 +44,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * LOCAL DEFINITIONS diff --git a/lib_com/int_lsp.c b/lib_com/int_lsp.c index 5e1175ab1e..d4d05d5f73 100644 --- a/lib_com/int_lsp.c +++ b/lib_com/int_lsp.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * int_lsp() diff --git a/lib_com/interleave_spectrum.c b/lib_com/interleave_spectrum.c index ae1432a1eb..a6bc325189 100644 --- a/lib_com/interleave_spectrum.c +++ b/lib_com/interleave_spectrum.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * interleave_spectrum() diff --git a/lib_com/interpol.c b/lib_com/interpol.c index da4b41a9f9..c23f790780 100644 --- a/lib_com/interpol.c +++ b/lib_com/interpol.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * interpolation() diff --git a/lib_com/isf_dec_amr_wb.c b/lib_com/isf_dec_amr_wb.c index 79eeda7b54..6a4dd2d96c 100644 --- a/lib_com/isf_dec_amr_wb.c +++ b/lib_com/isf_dec_amr_wb.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * isf_dec_amr_wb() diff --git a/lib_com/ivas_agc_com.c b/lib_com/ivas_agc_com.c index b02853555b..3716d3fa19 100644 --- a/lib_com/ivas_agc_com.c +++ b/lib_com/ivas_agc_com.c @@ -39,7 +39,7 @@ #include "debug.h" #endif #include -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_com/ivas_arith.c b/lib_com/ivas_arith.c index 9edbf5f53c..00fb12db22 100644 --- a/lib_com/ivas_arith.c +++ b/lib_com/ivas_arith.c @@ -35,7 +35,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" #include "ivas_prot.h" #include "stat_dec.h" diff --git a/lib_com/ivas_avq_pos_reorder_com.c b/lib_com/ivas_avq_pos_reorder_com.c index 66152d26fd..79e31e9aac 100644 --- a/lib_com/ivas_avq_pos_reorder_com.c +++ b/lib_com/ivas_avq_pos_reorder_com.c @@ -36,7 +36,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * ordr_esti() diff --git a/lib_com/ivas_cov_smooth.c b/lib_com/ivas_cov_smooth.c index eaaec6a982..86e929bd1c 100644 --- a/lib_com/ivas_cov_smooth.c +++ b/lib_com/ivas_cov_smooth.c @@ -36,7 +36,7 @@ #include "debug.h" #endif #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c index a3bfeabdb2..0f49c3cc2c 100644 --- a/lib_com/ivas_dirac_com.c +++ b/lib_com/ivas_dirac_com.c @@ -39,7 +39,7 @@ #include "ivas_prot.h" #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_com/ivas_entropy_coder_common.c b/lib_com/ivas_entropy_coder_common.c index 1bc72598e2..5bb17f4555 100644 --- a/lib_com/ivas_entropy_coder_common.c +++ b/lib_com/ivas_entropy_coder_common.c @@ -39,7 +39,7 @@ #include "ivas_rom_com.h" #include "math.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------------------------* diff --git a/lib_com/ivas_fb_mixer.c b/lib_com/ivas_fb_mixer.c index 8e60b4f841..ed034787bf 100644 --- a/lib_com/ivas_fb_mixer.c +++ b/lib_com/ivas_fb_mixer.c @@ -40,7 +40,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_com/ivas_filters.c b/lib_com/ivas_filters.c index 898ba7fe89..ae37910c66 100644 --- a/lib_com/ivas_filters.c +++ b/lib_com/ivas_filters.c @@ -38,7 +38,7 @@ #include "ivas_prot.h" #include "ivas_cnst.h" #include "ivas_stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_com/ivas_ism_config.c b/lib_com/ivas_ism_config.c index fc4be3127e..6c5ddb5910 100644 --- a/lib_com/ivas_ism_config.c +++ b/lib_com/ivas_ism_config.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_com/ivas_masa_com.c b/lib_com/ivas_masa_com.c index f98dcd8414..5bec680806 100644 --- a/lib_com/ivas_masa_com.c +++ b/lib_com/ivas_masa_com.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- * Local constants diff --git a/lib_com/ivas_mc_com.c b/lib_com/ivas_mc_com.c index a6ee0069ff..f9f3803a28 100644 --- a/lib_com/ivas_mc_com.c +++ b/lib_com/ivas_mc_com.c @@ -39,7 +39,7 @@ #include #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- diff --git a/lib_com/ivas_mc_param_com.c b/lib_com/ivas_mc_param_com.c index 3690c1219f..8e198a643a 100644 --- a/lib_com/ivas_mc_param_com.c +++ b/lib_com/ivas_mc_param_com.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_com/ivas_mcmasa_com.c b/lib_com/ivas_mcmasa_com.c index 2441cf7973..4f03ed50a8 100644 --- a/lib_com/ivas_mcmasa_com.c +++ b/lib_com/ivas_mcmasa_com.c @@ -36,7 +36,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* diff --git a/lib_com/ivas_mct_com.c b/lib_com/ivas_mct_com.c index 97d7636a03..33b9c975ee 100644 --- a/lib_com/ivas_mct_com.c +++ b/lib_com/ivas_mct_com.c @@ -35,7 +35,7 @@ #include "ivas_cnst.h" #include "ivas_prot.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include diff --git a/lib_com/ivas_mdct_core_com.c b/lib_com/ivas_mdct_core_com.c index fd80b2d054..32dba0ca7a 100644 --- a/lib_com/ivas_mdct_core_com.c +++ b/lib_com/ivas_mdct_core_com.c @@ -35,7 +35,7 @@ #include "ivas_cnst.h" #include "ivas_prot.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * ivas_mdct_tcx10_bit_distribution() diff --git a/lib_com/ivas_mdct_imdct.c b/lib_com/ivas_mdct_imdct.c index 036f89201f..9e058b2777 100644 --- a/lib_com/ivas_mdct_imdct.c +++ b/lib_com/ivas_mdct_imdct.c @@ -38,7 +38,7 @@ #include "debug.h" #endif #include "ivas_stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_com/ivas_mdft_imdft.c b/lib_com/ivas_mdft_imdft.c index 61797d6746..c4e77186a5 100644 --- a/lib_com/ivas_mdft_imdft.c +++ b/lib_com/ivas_mdft_imdft.c @@ -39,7 +39,7 @@ #endif #include "ivas_rom_com.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------------------------* diff --git a/lib_com/ivas_pca_tools.c b/lib_com/ivas_pca_tools.c index 21f3c0c1ec..62a6f543ff 100644 --- a/lib_com/ivas_pca_tools.c +++ b/lib_com/ivas_pca_tools.c @@ -40,7 +40,7 @@ #include #include #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" diff --git a/lib_com/ivas_qmetadata_com.c b/lib_com/ivas_qmetadata_com.c index ee8cfd2f2f..fa508c05ff 100644 --- a/lib_com/ivas_qmetadata_com.c +++ b/lib_com/ivas_qmetadata_com.c @@ -39,7 +39,7 @@ #include "ivas_prot.h" #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * Local constants diff --git a/lib_com/ivas_qspherical_com.c b/lib_com/ivas_qspherical_com.c index cf88d4da30..b5cd6060af 100644 --- a/lib_com/ivas_qspherical_com.c +++ b/lib_com/ivas_qspherical_com.c @@ -39,7 +39,7 @@ #include "ivas_prot.h" #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_com/ivas_rom_com.c b/lib_com/ivas_rom_com.c index c843d5ddc4..fefbffdcc6 100644 --- a/lib_com/ivas_rom_com.c +++ b/lib_com/ivas_rom_com.c @@ -39,7 +39,7 @@ #include "cnst.h" #include "ivas_cnst.h" #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /* clang-format off */ diff --git a/lib_com/ivas_sba_config.c b/lib_com/ivas_sba_config.c index 64635577b4..a58f44ebab 100644 --- a/lib_com/ivas_sba_config.c +++ b/lib_com/ivas_sba_config.c @@ -44,7 +44,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_com/ivas_sns_com.c b/lib_com/ivas_sns_com.c index cc0f07ffe0..052486f97e 100644 --- a/lib_com/ivas_sns_com.c +++ b/lib_com/ivas_sns_com.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index 31db5f1bbc..0c7d08f42e 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -43,7 +43,7 @@ #include "ivas_rom_com.h" #include "cnst.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_com/ivas_spar_com_quant_util.c b/lib_com/ivas_spar_com_quant_util.c index c095e20107..7a6b0d2d85 100644 --- a/lib_com/ivas_spar_com_quant_util.c +++ b/lib_com/ivas_spar_com_quant_util.c @@ -40,7 +40,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------------------------* * Function ivas_quantise_real_values() diff --git a/lib_com/ivas_stereo_dft_com.c b/lib_com/ivas_stereo_dft_com.c index 2b889dde0a..d541e0ed30 100644 --- a/lib_com/ivas_stereo_dft_com.c +++ b/lib_com/ivas_stereo_dft_com.c @@ -38,7 +38,7 @@ #include "ivas_prot.h" #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- * stereo_dft_config() diff --git a/lib_com/ivas_stereo_eclvq_com.c b/lib_com/ivas_stereo_eclvq_com.c index 76fcff1395..d0e87c5875 100644 --- a/lib_com/ivas_stereo_eclvq_com.c +++ b/lib_com/ivas_stereo_eclvq_com.c @@ -37,7 +37,7 @@ #include "ivas_cnst.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- * ECSQ_init_instance() diff --git a/lib_com/ivas_stereo_ica_com.c b/lib_com/ivas_stereo_ica_com.c index b35c438d2e..1796cb88d1 100644 --- a/lib_com/ivas_stereo_ica_com.c +++ b/lib_com/ivas_stereo_ica_com.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "rom_com.h" #include "ivas_rom_com.h" diff --git a/lib_com/ivas_stereo_mdct_bands_com.c b/lib_com/ivas_stereo_mdct_bands_com.c index 16149941e4..43613beb59 100644 --- a/lib_com/ivas_stereo_mdct_bands_com.c +++ b/lib_com/ivas_stereo_mdct_bands_com.c @@ -38,7 +38,7 @@ #include "ivas_prot.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local union diff --git a/lib_com/ivas_stereo_mdct_stereo_com.c b/lib_com/ivas_stereo_mdct_stereo_com.c index cbb1423cd1..13aac9de70 100644 --- a/lib_com/ivas_stereo_mdct_stereo_com.c +++ b/lib_com/ivas_stereo_mdct_stereo_com.c @@ -34,7 +34,7 @@ #include "options.h" #include "ivas_cnst.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include /*-------------------------------------------------------------------* diff --git a/lib_com/ivas_stereo_psychlpc_com.c b/lib_com/ivas_stereo_psychlpc_com.c index 8a50caaa29..52df610e79 100644 --- a/lib_com/ivas_stereo_psychlpc_com.c +++ b/lib_com/ivas_stereo_psychlpc_com.c @@ -36,7 +36,7 @@ #include "ivas_prot.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include /*-------------------------------------------------------------------* diff --git a/lib_com/ivas_stereo_td_bit_alloc.c b/lib_com/ivas_stereo_td_bit_alloc.c index 7d5b0afb55..167cbafccd 100644 --- a/lib_com/ivas_stereo_td_bit_alloc.c +++ b/lib_com/ivas_stereo_td_bit_alloc.c @@ -42,7 +42,7 @@ #include "ivas_rom_com.h" #include "ivas_cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_com/ivas_tools.c b/lib_com/ivas_tools.c index b8fbaa833f..15defd670a 100644 --- a/lib_com/ivas_tools.c +++ b/lib_com/ivas_tools.c @@ -39,7 +39,7 @@ #include #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_rom_com.h" /*--------------------------------------------------------------- diff --git a/lib_com/ivas_transient_det.c b/lib_com/ivas_transient_det.c index 0b398ec9d1..9a02c78c41 100644 --- a/lib_com/ivas_transient_det.c +++ b/lib_com/ivas_transient_det.c @@ -36,7 +36,7 @@ #include "debug.h" #endif #include "math.h" -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" #include "ivas_cnst.h" #include "ivas_prot.h" diff --git a/lib_com/lag_wind.c b/lib_com/lag_wind.c index dba9f04de4..3e5a10bcfa 100644 --- a/lib_com/lag_wind.c +++ b/lib_com/lag_wind.c @@ -43,7 +43,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_com/lerp.c b/lib_com/lerp.c index 4708dc5ca4..0336ee0bb8 100644 --- a/lib_com/lerp.c +++ b/lib_com/lerp.c @@ -37,7 +37,7 @@ #include #include "options.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------* diff --git a/lib_com/limit_t0.c b/lib_com/limit_t0.c index 33a3ba4231..305d972626 100644 --- a/lib_com/limit_t0.c +++ b/lib_com/limit_t0.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------* * Local constants diff --git a/lib_com/logqnorm.c b/lib_com/logqnorm.c index 50ecd83898..788249e2f3 100644 --- a/lib_com/logqnorm.c +++ b/lib_com/logqnorm.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "prot.h" /* Function prototypes */ -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * logqnorm() diff --git a/lib_com/longarith.c b/lib_com/longarith.c index 2e5604d277..c8da255345 100644 --- a/lib_com/longarith.c +++ b/lib_com/longarith.c @@ -38,7 +38,7 @@ #include #include "options.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_com/low_rate_band_att.c b/lib_com/low_rate_band_att.c index 2ff62af41b..5a13fe5f14 100644 --- a/lib_com/low_rate_band_att.c +++ b/lib_com/low_rate_band_att.c @@ -42,7 +42,7 @@ #include #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * fine_gain_pred() diff --git a/lib_com/lpc_tools.c b/lib_com/lpc_tools.c index 7e84d83fb2..191374577d 100644 --- a/lib_com/lpc_tools.c +++ b/lib_com/lpc_tools.c @@ -44,7 +44,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constants diff --git a/lib_com/lsf_dec_bfi.c b/lib_com/lsf_dec_bfi.c index f6da9ffb21..4b4492aeba 100644 --- a/lib_com/lsf_dec_bfi.c +++ b/lib_com/lsf_dec_bfi.c @@ -40,7 +40,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * routine: lsf_dec_bfi() diff --git a/lib_com/lsf_msvq_ma.c b/lib_com/lsf_msvq_ma.c index 0f091463bd..ac98c88293 100644 --- a/lib_com/lsf_msvq_ma.c +++ b/lib_com/lsf_msvq_ma.c @@ -45,7 +45,7 @@ #include "rom_com.h" #include "stl.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * midlsf_dec() diff --git a/lib_com/lsf_tools.c b/lib_com/lsf_tools.c index 3fc93a05f7..88aa59c9ae 100644 --- a/lib_com/lsf_tools.c +++ b/lib_com/lsf_tools.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_com/lsp_conv_poly.c b/lib_com/lsp_conv_poly.c index 1f882b5e90..7b3529202a 100644 --- a/lib_com/lsp_conv_poly.c +++ b/lib_com/lsp_conv_poly.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_com/modif_fs.c b/lib_com/modif_fs.c index a817f0c348..ee60cdb1f5 100644 --- a/lib_com/modif_fs.c +++ b/lib_com/modif_fs.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * modify_Fs() diff --git a/lib_com/mslvq_com.c b/lib_com/mslvq_com.c index 4d0593ce56..72db553cf3 100644 --- a/lib_com/mslvq_com.c +++ b/lib_com/mslvq_com.c @@ -39,7 +39,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" /*-----------------------------------------------------------------* diff --git a/lib_com/nelp.c b/lib_com/nelp.c index 63489ea27e..4c1243d31c 100644 --- a/lib_com/nelp.c +++ b/lib_com/nelp.c @@ -39,7 +39,7 @@ #include #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * dequantize_uvg() diff --git a/lib_com/parameter_bitmaping.c b/lib_com/parameter_bitmaping.c index 95d5b77bbe..8a273aafea 100644 --- a/lib_com/parameter_bitmaping.c +++ b/lib_com/parameter_bitmaping.c @@ -42,7 +42,7 @@ #endif #include "stat_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /********************************/ diff --git a/lib_com/phase_dispersion.c b/lib_com/phase_dispersion.c index 7e1a1a4b14..a61ff20f2b 100644 --- a/lib_com/phase_dispersion.c +++ b/lib_com/phase_dispersion.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * phase_dispersion() diff --git a/lib_com/ppp.c b/lib_com/ppp.c index 9008e1b441..d8dbc23638 100644 --- a/lib_com/ppp.c +++ b/lib_com/ppp.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Interpol_delay() diff --git a/lib_com/pred_lt4.c b/lib_com/pred_lt4.c index 3226c31b57..d319ae17cb 100644 --- a/lib_com/pred_lt4.c +++ b/lib_com/pred_lt4.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * pred_lt4() diff --git a/lib_com/preemph.c b/lib_com/preemph.c index 32283198cd..000c828444 100644 --- a/lib_com/preemph.c +++ b/lib_com/preemph.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------* * preemph() diff --git a/lib_com/pvq_com.c b/lib_com/pvq_com.c index 750c20adb9..7c6629c9e1 100644 --- a/lib_com/pvq_com.c +++ b/lib_com/pvq_com.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "prot.h" #include "stl.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local definitions diff --git a/lib_com/range_com.c b/lib_com/range_com.c index 083b95edbb..57c6de705b 100644 --- a/lib_com/range_com.c +++ b/lib_com/range_com.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * rc_get_bits2() diff --git a/lib_com/re8_ppv.c b/lib_com/re8_ppv.c index ab48b24ced..6239a1960d 100644 --- a/lib_com/re8_ppv.c +++ b/lib_com/re8_ppv.c @@ -41,8 +41,8 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" -#include "wmops.h" +#include "wmc_auto.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_com/re8_util.c b/lib_com/re8_util.c index e4600774b4..c52bfdbd4c 100644 --- a/lib_com/re8_util.c +++ b/lib_com/re8_util.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_com/realft.c b/lib_com/realft.c index 0c0b8236c5..17db0602e7 100644 --- a/lib_com/realft.c +++ b/lib_com/realft.c @@ -42,7 +42,7 @@ #endif #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * four1() diff --git a/lib_com/recovernorm.c b/lib_com/recovernorm.c index b5e35de268..43ea89468c 100644 --- a/lib_com/recovernorm.c +++ b/lib_com/recovernorm.c @@ -42,7 +42,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * recovernorm() diff --git a/lib_com/reordvct.c b/lib_com/reordvct.c index a497f28e4a..0f517e1a0f 100644 --- a/lib_com/reordvct.c +++ b/lib_com/reordvct.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * reordvct() diff --git a/lib_com/residu.c b/lib_com/residu.c index a897f70f25..119057f9ca 100644 --- a/lib_com/residu.c +++ b/lib_com/residu.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------* * residu() diff --git a/lib_com/rom_com.c b/lib_com/rom_com.c index e5f2b7ce0b..612d577135 100644 --- a/lib_com/rom_com.c +++ b/lib_com/rom_com.c @@ -43,7 +43,7 @@ #include "rom_com.h" #include "prot.h" #include "basop_util.h" -#include "wmops.h" +#include "wmc_auto.h" /* clang-format off */ diff --git a/lib_com/stab_est.c b/lib_com/stab_est.c index 0ee40153a6..2ffadd6554 100644 --- a/lib_com/stab_est.c +++ b/lib_com/stab_est.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_com/stat_noise_uv_mod.c b/lib_com/stat_noise_uv_mod.c index 72b843d1db..0c37a66311 100644 --- a/lib_com/stat_noise_uv_mod.c +++ b/lib_com/stat_noise_uv_mod.c @@ -41,7 +41,7 @@ #endif #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_com/swb_bwe_com.c b/lib_com/swb_bwe_com.c index 4e692fc22b..9e9fc51405 100644 --- a/lib_com/swb_bwe_com.c +++ b/lib_com/swb_bwe_com.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * WB_BWE_gain_pred() diff --git a/lib_com/swb_bwe_com_hr.c b/lib_com/swb_bwe_com_hr.c index ebad781a99..4d4d674248 100644 --- a/lib_com/swb_bwe_com_hr.c +++ b/lib_com/swb_bwe_com_hr.c @@ -41,7 +41,7 @@ #endif #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * swb_hr_nonzero_subband_noise_fill() diff --git a/lib_com/swb_bwe_com_lr.c b/lib_com/swb_bwe_com_lr.c index 963d881cb3..15fe32156f 100644 --- a/lib_com/swb_bwe_com_lr.c +++ b/lib_com/swb_bwe_com_lr.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * hf_parinitiz() diff --git a/lib_com/swb_tbe_com.c b/lib_com/swb_tbe_com.c index cc0c70cbbf..ac45f375e4 100644 --- a/lib_com/swb_tbe_com.c +++ b/lib_com/swb_tbe_com.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" #include diff --git a/lib_com/syn_12k8.c b/lib_com/syn_12k8.c index 4323853f98..96c462682a 100644 --- a/lib_com/syn_12k8.c +++ b/lib_com/syn_12k8.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------ * syn_12k8() diff --git a/lib_com/syn_filt.c b/lib_com/syn_filt.c index d571b9cb7f..680fc55c5c 100644 --- a/lib_com/syn_filt.c +++ b/lib_com/syn_filt.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include /*------------------------------------------------------------------* diff --git a/lib_com/tcq_position_arith.c b/lib_com/tcq_position_arith.c index 4c3c49e197..ca8e26ae84 100644 --- a/lib_com/tcq_position_arith.c +++ b/lib_com/tcq_position_arith.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" static void bitstream_save_bit( TCQ_PBITSTREAM pBS, const int16_t bit ); diff --git a/lib_com/tcx_ltp.c b/lib_com/tcx_ltp.c index 160a6e7875..ef119c62cb 100644 --- a/lib_com/tcx_ltp.c +++ b/lib_com/tcx_ltp.c @@ -42,7 +42,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- * Local constants diff --git a/lib_com/tcx_mdct.c b/lib_com/tcx_mdct.c index d9713c9cfc..88ede107f4 100644 --- a/lib_com/tcx_mdct.c +++ b/lib_com/tcx_mdct.c @@ -39,7 +39,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * TCX_MDCT() diff --git a/lib_com/tcx_mdct_window.c b/lib_com/tcx_mdct_window.c index 2d1d474404..c73f782c95 100644 --- a/lib_com/tcx_mdct_window.c +++ b/lib_com/tcx_mdct_window.c @@ -44,7 +44,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- * mdct_window_sine() diff --git a/lib_com/tcx_utils.c b/lib_com/tcx_utils.c index 6e868add48..42c5bce036 100644 --- a/lib_com/tcx_utils.c +++ b/lib_com/tcx_utils.c @@ -44,7 +44,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * tcx_get_windows() diff --git a/lib_com/tec_com.c b/lib_com/tec_com.c index 18b2e79b94..0aa4294289 100644 --- a/lib_com/tec_com.c +++ b/lib_com/tec_com.c @@ -41,7 +41,7 @@ #include "rom_com.h" #include "prot.h" #include "stat_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- * Local constants diff --git a/lib_com/tns_base.c b/lib_com/tns_base.c index 94b014b59b..7327c6c9a9 100644 --- a/lib_com/tns_base.c +++ b/lib_com/tns_base.c @@ -41,7 +41,7 @@ #include "rom_com.h" #include "prot.h" #include "stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------------- diff --git a/lib_com/tools.c b/lib_com/tools.c index 2ab9952c0c..8957544cb7 100644 --- a/lib_com/tools.c +++ b/lib_com/tools.c @@ -41,7 +41,7 @@ #endif #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * own_random() diff --git a/lib_com/trans_direct.c b/lib_com/trans_direct.c index d6e35d583e..2d65b87c52 100644 --- a/lib_com/trans_direct.c +++ b/lib_com/trans_direct.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- * direct_transform() diff --git a/lib_com/trans_inv.c b/lib_com/trans_inv.c index 18c5fe0431..be153ab569 100644 --- a/lib_com/trans_inv.c +++ b/lib_com/trans_inv.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * Local constants diff --git a/lib_com/vlpc_2st_com.c b/lib_com/vlpc_2st_com.c index 86fdf68c5f..32a1bd8559 100644 --- a/lib_com/vlpc_2st_com.c +++ b/lib_com/vlpc_2st_com.c @@ -40,7 +40,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * lsf_weight_2st() diff --git a/lib_com/weight.c b/lib_com/weight.c index e50707b688..99b0c74927 100644 --- a/lib_com/weight.c +++ b/lib_com/weight.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * sfm2mqb() diff --git a/lib_com/weight_a.c b/lib_com/weight_a.c index 0eda2133ce..dccb61bcda 100644 --- a/lib_com/weight_a.c +++ b/lib_com/weight_a.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------ * weight_a() diff --git a/lib_com/wi.c b/lib_com/wi.c index e63c0a4b92..d4ecd7d64d 100644 --- a/lib_com/wi.c +++ b/lib_com/wi.c @@ -40,7 +40,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_com/window_ola.c b/lib_com/window_ola.c index 7a5b153636..ec2c4b641a 100644 --- a/lib_com/window_ola.c +++ b/lib_com/window_ola.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * window_ola() diff --git a/lib_com/wtda.c b/lib_com/wtda.c index cd8d588ed5..2d5d4f93b5 100644 --- a/lib_com/wtda.c +++ b/lib_com/wtda.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_com.h" #include -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_PLOT #include "deb_out.h" #endif diff --git a/lib_debug/debug.c b/lib_debug/debug.c index 5ee8f10e31..c2f835b727 100644 --- a/lib_debug/debug.c +++ b/lib_debug/debug.c @@ -53,7 +53,7 @@ #include #else #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_debug/sba_debug.c b/lib_debug/sba_debug.c index 68fd39f4c0..b39a30f6f0 100644 --- a/lib_debug/sba_debug.c +++ b/lib_debug/sba_debug.c @@ -40,7 +40,7 @@ #include "prot.h" #include "sba_debug.h" #include -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_SBA #include #include "tinywaveout_c.h" diff --git a/lib_debug/segsnr.c b/lib_debug/segsnr.c index 561a4e239d..69a25f0e4f 100644 --- a/lib_debug/segsnr.c +++ b/lib_debug/segsnr.c @@ -34,7 +34,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include #include "options.h" #include "prot.h" diff --git a/lib_debug/snr.c b/lib_debug/snr.c index a524b35c26..f70b5f33eb 100644 --- a/lib_debug/snr.c +++ b/lib_debug/snr.c @@ -38,7 +38,7 @@ #endif #include #include -#include "wmops.h" +#include "wmc_auto.h" #include "cnst.h" #include "prot.h" diff --git a/lib_dec/ACcontextMapping_dec.c b/lib_dec/ACcontextMapping_dec.c index 10fb369741..fa11a6ce13 100644 --- a/lib_dec/ACcontextMapping_dec.c +++ b/lib_dec/ACcontextMapping_dec.c @@ -43,7 +43,7 @@ #include "rom_com.h" #include "ivas_rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" /* Range coder header file */ #include diff --git a/lib_dec/FEC.c b/lib_dec/FEC.c index 3267092e7e..7716f3ef9d 100644 --- a/lib_dec/FEC.c +++ b/lib_dec/FEC.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "rom_dec.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/FEC_HQ_core.c b/lib_dec/FEC_HQ_core.c index 53eca76982..df35a1a318 100644 --- a/lib_dec/FEC_HQ_core.c +++ b/lib_dec/FEC_HQ_core.c @@ -44,7 +44,7 @@ #include "rom_dec.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local prototypes diff --git a/lib_dec/FEC_HQ_phase_ecu.c b/lib_dec/FEC_HQ_phase_ecu.c index fd71f5c41b..54fd6af77d 100644 --- a/lib_dec/FEC_HQ_phase_ecu.c +++ b/lib_dec/FEC_HQ_phase_ecu.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_dec/FEC_adapt_codebook.c b/lib_dec/FEC_adapt_codebook.c index 5ffd9a1fde..d80eec01ae 100644 --- a/lib_dec/FEC_adapt_codebook.c +++ b/lib_dec/FEC_adapt_codebook.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_dec.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- * FEC_synchro_exc() diff --git a/lib_dec/FEC_clas_estim.c b/lib_dec/FEC_clas_estim.c index 7a27532f17..718923a604 100644 --- a/lib_dec/FEC_clas_estim.c +++ b/lib_dec/FEC_clas_estim.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "stat_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_dec/FEC_lsf_estim.c b/lib_dec/FEC_lsf_estim.c index f971ec4434..81fb282132 100644 --- a/lib_dec/FEC_lsf_estim.c +++ b/lib_dec/FEC_lsf_estim.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * FEC_lsf_estim() diff --git a/lib_dec/FEC_pitch_estim.c b/lib_dec/FEC_pitch_estim.c index e2f6491cc3..d0bfc99114 100644 --- a/lib_dec/FEC_pitch_estim.c +++ b/lib_dec/FEC_pitch_estim.c @@ -42,7 +42,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------* * FEC_pitch_estim() diff --git a/lib_dec/FEC_scale_syn.c b/lib_dec/FEC_scale_syn.c index 66fae0fc05..e13e3dce57 100644 --- a/lib_dec/FEC_scale_syn.c +++ b/lib_dec/FEC_scale_syn.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #define SCLSYN_LAMBDA 0.3f diff --git a/lib_dec/LD_music_post_filter.c b/lib_dec/LD_music_post_filter.c index f19e737595..56454f78ff 100644 --- a/lib_dec/LD_music_post_filter.c +++ b/lib_dec/LD_music_post_filter.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_dec/TonalComponentDetection.c b/lib_dec/TonalComponentDetection.c index 230dfe4086..69840ccfd4 100644 --- a/lib_dec/TonalComponentDetection.c +++ b/lib_dec/TonalComponentDetection.c @@ -46,7 +46,7 @@ #include "prot.h" #include "cnst.h" #include "stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" diff --git a/lib_dec/acelp_core_dec.c b/lib_dec/acelp_core_dec.c index 54e062332f..460a2a0894 100644 --- a/lib_dec/acelp_core_dec.c +++ b/lib_dec/acelp_core_dec.c @@ -48,7 +48,7 @@ #ifdef LSF_RE_USE_SECONDARY_CHANNEL #include "ivas_rom_com.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * acelp_core_dec() diff --git a/lib_dec/acelp_core_switch_dec.c b/lib_dec/acelp_core_switch_dec.c index be34a95e31..6a58533ef2 100644 --- a/lib_dec/acelp_core_switch_dec.c +++ b/lib_dec/acelp_core_switch_dec.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/amr_wb_dec.c b/lib_dec/amr_wb_dec.c index 29c4f939ed..44c1bcd1e1 100644 --- a/lib_dec/amr_wb_dec.c +++ b/lib_dec/amr_wb_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * amr_wb_dec() diff --git a/lib_dec/ari_dec.c b/lib_dec/ari_dec.c index fe97e69a52..64ffb220c5 100644 --- a/lib_dec/ari_dec.c +++ b/lib_dec/ari_dec.c @@ -41,7 +41,7 @@ #include "prot.h" #include "stat_com.h" #include "basop_util.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- diff --git a/lib_dec/ari_hm_dec.c b/lib_dec/ari_hm_dec.c index 78f14e4a28..1433af7869 100644 --- a/lib_dec/ari_hm_dec.c +++ b/lib_dec/ari_hm_dec.c @@ -42,7 +42,7 @@ #include "basop_util.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * DecodeIndex() diff --git a/lib_dec/arith_coder_dec.c b/lib_dec/arith_coder_dec.c index 793edcef26..28fe250e6d 100644 --- a/lib_dec/arith_coder_dec.c +++ b/lib_dec/arith_coder_dec.c @@ -45,7 +45,7 @@ #include "rom_com.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------* * tcx_arith_decode() diff --git a/lib_dec/avq_dec.c b/lib_dec/avq_dec.c index 99aabbb04c..d9ab4f0569 100644 --- a/lib_dec/avq_dec.c +++ b/lib_dec/avq_dec.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" #include /*-------------------------------------------------------------------* diff --git a/lib_dec/bass_psfilter.c b/lib_dec/bass_psfilter.c index 85c595460c..e07aa50a14 100644 --- a/lib_dec/bass_psfilter.c +++ b/lib_dec/bass_psfilter.c @@ -46,7 +46,7 @@ #include "debug.h" #endif #include -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_dec/cng_dec.c b/lib_dec/cng_dec.c index 415ac27b3a..6fa2974667 100644 --- a/lib_dec/cng_dec.c +++ b/lib_dec/cng_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/core_dec_init.c b/lib_dec/core_dec_init.c index 90827ca0ee..ae18893d8e 100644 --- a/lib_dec/core_dec_init.c +++ b/lib_dec/core_dec_init.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * open_decoder_LPD() diff --git a/lib_dec/core_dec_reconf.c b/lib_dec/core_dec_reconf.c index 201ccc0cb3..3915e74892 100644 --- a/lib_dec/core_dec_reconf.c +++ b/lib_dec/core_dec_reconf.c @@ -42,7 +42,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * reconfig_decoder_LPD() diff --git a/lib_dec/core_dec_switch.c b/lib_dec/core_dec_switch.c index c1f8e590fb..76d0aedbea 100644 --- a/lib_dec/core_dec_switch.c +++ b/lib_dec/core_dec_switch.c @@ -42,7 +42,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------* * mode_switch_decoder_LPD() diff --git a/lib_dec/core_switching_dec.c b/lib_dec/core_switching_dec.c index 8762f20ac3..b53394e355 100644 --- a/lib_dec/core_switching_dec.c +++ b/lib_dec/core_switching_dec.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "prot.h" #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local prototypes diff --git a/lib_dec/d_gain2p.c b/lib_dec/d_gain2p.c index 7a0cd8ed4f..7011d76d7e 100644 --- a/lib_dec/d_gain2p.c +++ b/lib_dec/d_gain2p.c @@ -44,7 +44,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * Mode2_gain_dec_mless diff --git a/lib_dec/dec2t32.c b/lib_dec/dec2t32.c index 67981738fc..ee2ebf3734 100644 --- a/lib_dec/dec2t32.c +++ b/lib_dec/dec2t32.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------------------* * dec_acelp_2t32() diff --git a/lib_dec/dec4t64.c b/lib_dec/dec4t64.c index 3a0a6a7e50..e309d2573c 100644 --- a/lib_dec/dec4t64.c +++ b/lib_dec/dec4t64.c @@ -43,7 +43,7 @@ #include "prot.h" #include "ivas_prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/dec_LPD.c b/lib_dec/dec_LPD.c index c06bee28f9..679a87d418 100644 --- a/lib_dec/dec_LPD.c +++ b/lib_dec/dec_LPD.c @@ -46,7 +46,7 @@ #include "cnst.h" #include "basop_proto_func.h" #include "stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/dec_ace.c b/lib_dec/dec_ace.c index 24fbf3149f..bcb7ed6596 100644 --- a/lib_dec/dec_ace.c +++ b/lib_dec/dec_ace.c @@ -42,7 +42,7 @@ #endif #include #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * decoder_acelp() diff --git a/lib_dec/dec_acelp.c b/lib_dec/dec_acelp.c index 7ccdee8888..445b8549e0 100644 --- a/lib_dec/dec_acelp.c +++ b/lib_dec/dec_acelp.c @@ -40,7 +40,7 @@ #include "typedef.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/dec_acelp_tcx_main.c b/lib_dec/dec_acelp_tcx_main.c index 31064aa7c7..51ed389e26 100644 --- a/lib_dec/dec_acelp_tcx_main.c +++ b/lib_dec/dec_acelp_tcx_main.c @@ -43,7 +43,7 @@ #include "debug.h" #endif #include "stat_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * decode_frame_type() diff --git a/lib_dec/dec_amr_wb.c b/lib_dec/dec_amr_wb.c index 79c9b8d951..b03bdc9f0d 100644 --- a/lib_dec/dec_amr_wb.c +++ b/lib_dec/dec_amr_wb.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * decod_amr_wb() diff --git a/lib_dec/dec_gen_voic.c b/lib_dec/dec_gen_voic.c index ba8f0424ea..65ea2826ad 100644 --- a/lib_dec/dec_gen_voic.c +++ b/lib_dec/dec_gen_voic.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * decod_gen_voic() diff --git a/lib_dec/dec_higher_acelp.c b/lib_dec/dec_higher_acelp.c index 32b5b70514..03a9ca0044 100644 --- a/lib_dec/dec_higher_acelp.c +++ b/lib_dec/dec_higher_acelp.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * transf_cdbk_dec() diff --git a/lib_dec/dec_nelp.c b/lib_dec/dec_nelp.c index 2cdcd126db..9e0d2171b2 100644 --- a/lib_dec/dec_nelp.c +++ b/lib_dec/dec_nelp.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * decod_nelp() diff --git a/lib_dec/dec_pit_exc.c b/lib_dec/dec_pit_exc.c index 547e321aaf..bda383a9ee 100644 --- a/lib_dec/dec_pit_exc.c +++ b/lib_dec/dec_pit_exc.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * dec_pit_exc() diff --git a/lib_dec/dec_post.c b/lib_dec/dec_post.c index 9c90fcac62..962cf09247 100644 --- a/lib_dec/dec_post.c +++ b/lib_dec/dec_post.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_dec/dec_ppp.c b/lib_dec/dec_ppp.c index c6a274bef4..a9d75b7b17 100644 --- a/lib_dec/dec_ppp.c +++ b/lib_dec/dec_ppp.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- * decod_ppp() diff --git a/lib_dec/dec_prm.c b/lib_dec/dec_prm.c index 4027b7f95b..14153810e2 100644 --- a/lib_dec/dec_prm.c +++ b/lib_dec/dec_prm.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/dec_tcx.c b/lib_dec/dec_tcx.c index 5b74ca0f6f..6debad10dc 100755 --- a/lib_dec/dec_tcx.c +++ b/lib_dec/dec_tcx.c @@ -45,7 +45,7 @@ #include #include "stat_com.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_rom_com.h" #ifdef DEBUG_PLOT #include "deb_out.h" diff --git a/lib_dec/dec_tran.c b/lib_dec/dec_tran.c index 7120211fb6..e124f6d09b 100644 --- a/lib_dec/dec_tran.c +++ b/lib_dec/dec_tran.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * decod_tran() diff --git a/lib_dec/dec_uv.c b/lib_dec/dec_uv.c index 2839521091..d94bcb5af7 100644 --- a/lib_dec/dec_uv.c +++ b/lib_dec/dec_uv.c @@ -37,7 +37,7 @@ #include #include "options.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * decod_unvoiced() diff --git a/lib_dec/decision_matrix_dec.c b/lib_dec/decision_matrix_dec.c index cb604dc5f7..4f4e711079 100644 --- a/lib_dec/decision_matrix_dec.c +++ b/lib_dec/decision_matrix_dec.c @@ -42,7 +42,7 @@ #include "stat_dec.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * decision_matrix_dec() diff --git a/lib_dec/dlpc_avq.c b/lib_dec/dlpc_avq.c index 2a89cdb35c..f7adce59ea 100644 --- a/lib_dec/dlpc_avq.c +++ b/lib_dec/dlpc_avq.c @@ -38,7 +38,7 @@ #include "options.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * dlpc_avq() diff --git a/lib_dec/dlpc_stoch.c b/lib_dec/dlpc_stoch.c index 21b1ab2d8d..de47da85c6 100644 --- a/lib_dec/dlpc_stoch.c +++ b/lib_dec/dlpc_stoch.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_com.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * lpc_unquantize() diff --git a/lib_dec/er_dec_acelp.c b/lib_dec/er_dec_acelp.c index 4e0d5c9b48..ba232d0f08 100644 --- a/lib_dec/er_dec_acelp.c +++ b/lib_dec/er_dec_acelp.c @@ -42,7 +42,7 @@ #endif #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * con_acelp() diff --git a/lib_dec/er_dec_tcx.c b/lib_dec/er_dec_tcx.c index 6710e2a6ff..8a1c61a046 100644 --- a/lib_dec/er_dec_tcx.c +++ b/lib_dec/er_dec_tcx.c @@ -45,7 +45,7 @@ #include #include "prot.h" #include "rom_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * con_tcx() diff --git a/lib_dec/er_scale_syn.c b/lib_dec/er_scale_syn.c index 1ae7f57104..c85346b4ed 100644 --- a/lib_dec/er_scale_syn.c +++ b/lib_dec/er_scale_syn.c @@ -39,7 +39,7 @@ #include #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------------------* diff --git a/lib_dec/er_sync_exc.c b/lib_dec/er_sync_exc.c index 3a66e83129..618f35ae3b 100644 --- a/lib_dec/er_sync_exc.c +++ b/lib_dec/er_sync_exc.c @@ -40,7 +40,7 @@ #include #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_dec/er_util.c b/lib_dec/er_util.c index f907781c29..2c2f0333e6 100644 --- a/lib_dec/er_util.c +++ b/lib_dec/er_util.c @@ -43,7 +43,7 @@ #include "prot.h" #include "cnst.h" #include "stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_dec/evs_dec.c b/lib_dec/evs_dec.c index c55c5b4721..ac0befbb3e 100644 --- a/lib_dec/evs_dec.c +++ b/lib_dec/evs_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_PLOT #include "deb_out.h" #endif diff --git a/lib_dec/fd_cng_dec.c b/lib_dec/fd_cng_dec.c index c9b8e9edd4..a475387fb1 100644 --- a/lib_dec/fd_cng_dec.c +++ b/lib_dec/fd_cng_dec.c @@ -45,7 +45,7 @@ #include "prot.h" #include "ivas_prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" #include "ivas_rom_dec.h" diff --git a/lib_dec/gain_dec.c b/lib_dec/gain_dec.c index dd8a58637c..e618fd9d1f 100644 --- a/lib_dec/gain_dec.c +++ b/lib_dec/gain_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Es_pred_dec() diff --git a/lib_dec/gaus_dec.c b/lib_dec/gaus_dec.c index fed8ab60ac..e287eda7e1 100644 --- a/lib_dec/gaus_dec.c +++ b/lib_dec/gaus_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/gs_dec.c b/lib_dec/gs_dec.c index f1b4e997af..ed6d673d7c 100644 --- a/lib_dec/gs_dec.c +++ b/lib_dec/gs_dec.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * decod_audio() diff --git a/lib_dec/gs_dec_amr_wb.c b/lib_dec/gs_dec_amr_wb.c index 956e065031..c8207d518e 100644 --- a/lib_dec/gs_dec_amr_wb.c +++ b/lib_dec/gs_dec_amr_wb.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_dec/hdecnrm.c b/lib_dec/hdecnrm.c index f1a119a867..7ae05db527 100644 --- a/lib_dec/hdecnrm.c +++ b/lib_dec/hdecnrm.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------*/ diff --git a/lib_dec/hf_synth.c b/lib_dec/hf_synth.c index 9c0f2c8463..1724930487 100644 --- a/lib_dec/hf_synth.c +++ b/lib_dec/hf_synth.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/hq_classifier_dec.c b/lib_dec/hq_classifier_dec.c index 38a0230079..9426014686 100644 --- a/lib_dec/hq_classifier_dec.c +++ b/lib_dec/hq_classifier_dec.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * hq_classifier_dec() diff --git a/lib_dec/hq_conf_fec.c b/lib_dec/hq_conf_fec.c index 5e0e6426f2..e93acf94a5 100644 --- a/lib_dec/hq_conf_fec.c +++ b/lib_dec/hq_conf_fec.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * hq_configure_bfi() diff --git a/lib_dec/hq_core_dec.c b/lib_dec/hq_core_dec.c index 431a30de01..4920e220ae 100644 --- a/lib_dec/hq_core_dec.c +++ b/lib_dec/hq_core_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" diff --git a/lib_dec/hq_env_dec.c b/lib_dec/hq_env_dec.c index d4abecfc5d..d8f851e71f 100644 --- a/lib_dec/hq_env_dec.c +++ b/lib_dec/hq_env_dec.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------* * decode_envelope_indices() diff --git a/lib_dec/hq_hr_dec.c b/lib_dec/hq_hr_dec.c index 3eb1108b24..24a51bd464 100644 --- a/lib_dec/hq_hr_dec.c +++ b/lib_dec/hq_hr_dec.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * hq_pred_hb_bws() diff --git a/lib_dec/hq_lr_dec.c b/lib_dec/hq_lr_dec.c index 5e7584384d..fd323f3bba 100644 --- a/lib_dec/hq_lr_dec.c +++ b/lib_dec/hq_lr_dec.c @@ -46,7 +46,7 @@ #include "prot.h" #include "stl.h" #include "basop_util.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/igf_dec.c b/lib_dec/igf_dec.c index 2cded75928..c7c2c549dd 100644 --- a/lib_dec/igf_dec.c +++ b/lib_dec/igf_dec.c @@ -45,7 +45,7 @@ #include "cnst.h" #include "stat_dec.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/igf_scf_dec.c b/lib_dec/igf_scf_dec.c index 29660271b3..176fdec9b7 100644 --- a/lib_dec/igf_scf_dec.c +++ b/lib_dec/igf_scf_dec.c @@ -41,7 +41,7 @@ #include "debug.h" #endif #include "stat_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_dec/init_dec.c b/lib_dec/init_dec.c index 4b74ccebb9..978248e695 100644 --- a/lib_dec/init_dec.c +++ b/lib_dec/init_dec.c @@ -43,7 +43,7 @@ #include "ivas_cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------* * init_decoder() diff --git a/lib_dec/inov_dec.c b/lib_dec/inov_dec.c index ce3c2728bc..bda5ac47a1 100644 --- a/lib_dec/inov_dec.c +++ b/lib_dec/inov_dec.c @@ -43,7 +43,7 @@ #include "prot.h" #include "ivas_prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------* * inov_decode() diff --git a/lib_dec/ivas_agc_dec.c b/lib_dec/ivas_agc_dec.c index 0b25c8216c..89a3196347 100644 --- a/lib_dec/ivas_agc_dec.c +++ b/lib_dec/ivas_agc_dec.c @@ -39,7 +39,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_AGC diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 23f3a049f9..d5bab20de1 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -42,7 +42,7 @@ #include "prot.h" #include "ivas_prot.h" #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_PLOT #include "deb_out.h" #endif diff --git a/lib_dec/ivas_corecoder_dec_reconfig.c b/lib_dec/ivas_corecoder_dec_reconfig.c index b11ba6cd39..88e5a4868a 100644 --- a/lib_dec/ivas_corecoder_dec_reconfig.c +++ b/lib_dec/ivas_corecoder_dec_reconfig.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index 3a2a005fb6..7e6a6e70a5 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 407fb01dfc..31d4352e36 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* diff --git a/lib_dec/ivas_decision_matrix_dec.c b/lib_dec/ivas_decision_matrix_dec.c index a62e1d29eb..6f183359b6 100644 --- a/lib_dec/ivas_decision_matrix_dec.c +++ b/lib_dec/ivas_decision_matrix_dec.c @@ -40,7 +40,7 @@ #include "ivas_prot.h" #include "prot.h" #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * ivas_decision_matrix_dec() diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 98a4fb1f18..49a1dd0048 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_dirac_dec_binaural_functions.c b/lib_dec/ivas_dirac_dec_binaural_functions.c index 1418193139..a9b3cea4a0 100644 --- a/lib_dec/ivas_dirac_dec_binaural_functions.c +++ b/lib_dec/ivas_dirac_dec_binaural_functions.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_dec/ivas_dirac_decorr_dec.c b/lib_dec/ivas_dirac_decorr_dec.c index 2a02737336..e484042a3c 100644 --- a/lib_dec/ivas_dirac_decorr_dec.c +++ b/lib_dec/ivas_dirac_decorr_dec.c @@ -44,7 +44,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_dec/ivas_dirac_onsets_dec.c b/lib_dec/ivas_dirac_onsets_dec.c index 67209cc052..95e6c90217 100644 --- a/lib_dec/ivas_dirac_onsets_dec.c +++ b/lib_dec/ivas_dirac_onsets_dec.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_dec/ivas_dirac_output_synthesis_cov.c b/lib_dec/ivas_dirac_output_synthesis_cov.c index d88108dc25..1176e853e1 100644 --- a/lib_dec/ivas_dirac_output_synthesis_cov.c +++ b/lib_dec/ivas_dirac_output_synthesis_cov.c @@ -48,7 +48,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "rom_dec.h" diff --git a/lib_dec/ivas_dirac_output_synthesis_dec.c b/lib_dec/ivas_dirac_output_synthesis_dec.c index c73c1375f4..a8a1e035f5 100644 --- a/lib_dec/ivas_dirac_output_synthesis_dec.c +++ b/lib_dec/ivas_dirac_output_synthesis_dec.c @@ -44,7 +44,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- * Local constants diff --git a/lib_dec/ivas_entropy_decoder.c b/lib_dec/ivas_entropy_decoder.c index cc3fab8656..f9d63ddee9 100644 --- a/lib_dec/ivas_entropy_decoder.c +++ b/lib_dec/ivas_entropy_decoder.c @@ -40,7 +40,7 @@ #endif #include "ivas_rom_com.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index e51b46779c..3d244cb4a7 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index 1ce0a03aa0..50f5cbb2a2 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------* diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 7baeda81ee..81ebf28a73 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index f27d49b111..c671c7fd3e 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------* diff --git a/lib_dec/ivas_lfe_dec.c b/lib_dec/ivas_lfe_dec.c index a909801b8f..066cd968f1 100644 --- a/lib_dec/ivas_lfe_dec.c +++ b/lib_dec/ivas_lfe_dec.c @@ -39,7 +39,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "math.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_dec/ivas_lfe_plc.c b/lib_dec/ivas_lfe_plc.c index 71d1aa7a5e..ea93dc0f90 100644 --- a/lib_dec/ivas_lfe_plc.c +++ b/lib_dec/ivas_lfe_plc.c @@ -39,7 +39,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* * Local constants diff --git a/lib_dec/ivas_masa_dec.c b/lib_dec/ivas_masa_dec.c index 3df3784405..5e263a91d1 100644 --- a/lib_dec/ivas_masa_dec.c +++ b/lib_dec/ivas_masa_dec.c @@ -42,7 +42,7 @@ #include "debug.h" #endif #include -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * Local constants diff --git a/lib_dec/ivas_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c index e9eeaad813..0d426078e9 100644 --- a/lib_dec/ivas_mc_param_dec.c +++ b/lib_dec/ivas_mc_param_dec.c @@ -47,7 +47,7 @@ #ifdef DEBUG_PLOT #include "deb_out.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "rom_dec.h" /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_mct_core_dec.c b/lib_dec/ivas_mct_core_dec.c index 4ce7d2e82e..d831b7044c 100644 --- a/lib_dec/ivas_mct_core_dec.c +++ b/lib_dec/ivas_mct_core_dec.c @@ -38,7 +38,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "cnst.h" #include "basop_proto_func.h" #include "stat_com.h" diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 86c1e4abe8..c034b54dad 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_PLOT #include "deb_out.h" #endif diff --git a/lib_dec/ivas_mct_dec_mct.c b/lib_dec/ivas_mct_dec_mct.c index 6b8f9b74fa..4369dea639 100644 --- a/lib_dec/ivas_mct_dec_mct.c +++ b/lib_dec/ivas_mct_dec_mct.c @@ -35,7 +35,7 @@ #include "ivas_cnst.h" #include "ivas_prot.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include #include "stat_enc.h" diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c index 2dd875bdbf..ea0a043734 100644 --- a/lib_dec/ivas_mdct_core_dec.c +++ b/lib_dec/ivas_mdct_core_dec.c @@ -38,7 +38,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "cnst.h" #include "basop_proto_func.h" #include "stat_com.h" diff --git a/lib_dec/ivas_mono_dmx_renderer.c b/lib_dec/ivas_mono_dmx_renderer.c index 20b677075e..f086831491 100644 --- a/lib_dec/ivas_mono_dmx_renderer.c +++ b/lib_dec/ivas_mono_dmx_renderer.c @@ -39,7 +39,7 @@ #include "ivas_cnst.h" #include "ivas_rom_com.h" #include "ivas_rom_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_dec/ivas_out_setup_conversion.c b/lib_dec/ivas_out_setup_conversion.c index 2a8fc9a548..e3be5b4f34 100644 --- a/lib_dec/ivas_out_setup_conversion.c +++ b/lib_dec/ivas_out_setup_conversion.c @@ -39,7 +39,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_rom_com.h" #include "ivas_rom_dec.h" diff --git a/lib_dec/ivas_pca_dec.c b/lib_dec/ivas_pca_dec.c index ef5694d656..84ca7025eb 100644 --- a/lib_dec/ivas_pca_dec.c +++ b/lib_dec/ivas_pca_dec.c @@ -39,7 +39,7 @@ #endif #include #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_post_proc.c b/lib_dec/ivas_post_proc.c index 1dce7978c2..277c5e81ae 100644 --- a/lib_dec/ivas_post_proc.c +++ b/lib_dec/ivas_post_proc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- * ivas_post_proc() diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c index 059ba752e7..b4b1ded927 100644 --- a/lib_dec/ivas_qmetadata_dec.c +++ b/lib_dec/ivas_qmetadata_dec.c @@ -38,7 +38,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "ivas_rom_dec.h" -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_qspherical_dec.c b/lib_dec/ivas_qspherical_dec.c index c37d03e5a9..57d58c4596 100644 --- a/lib_dec/ivas_qspherical_dec.c +++ b/lib_dec/ivas_qspherical_dec.c @@ -36,7 +36,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "ivas_stat_dec.h" -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" diff --git a/lib_dec/ivas_range_uni_dec.c b/lib_dec/ivas_range_uni_dec.c index de9b3a4559..7036416c60 100644 --- a/lib_dec/ivas_range_uni_dec.c +++ b/lib_dec/ivas_range_uni_dec.c @@ -39,7 +39,7 @@ #include #include "options.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUGGING #include "debug.h" #endif diff --git a/lib_dec/ivas_rom_dec.c b/lib_dec/ivas_rom_dec.c index c79bc38019..90c62a06f2 100644 --- a/lib_dec/ivas_rom_dec.c +++ b/lib_dec/ivas_rom_dec.c @@ -38,7 +38,7 @@ #include "cnst.h" #include "ivas_cnst.h" #include -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_stat_dec.h" /* clang-format off */ diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index fe043c746b..3adf4e39cd 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #ifdef SBA_BR_SWITCHING diff --git a/lib_dec/ivas_sba_dirac_stereo_dec.c b/lib_dec/ivas_sba_dirac_stereo_dec.c index e4ab91a7d7..8918712fc2 100644 --- a/lib_dec/ivas_sba_dirac_stereo_dec.c +++ b/lib_dec/ivas_sba_dirac_stereo_dec.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_sce_dec.c b/lib_dec/ivas_sce_dec.c index e6004ed51b..e93f06bcce 100644 --- a/lib_dec/ivas_sce_dec.c +++ b/lib_dec/ivas_sce_dec.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* diff --git a/lib_dec/ivas_sns_dec.c b/lib_dec/ivas_sns_dec.c index 444a76cf80..17e7ec26b3 100644 --- a/lib_dec/ivas_sns_dec.c +++ b/lib_dec/ivas_sns_dec.c @@ -35,7 +35,7 @@ #include "prot.h" #include "ivas_prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- * sns_1st_dec() diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index a513302812..9a05f6352d 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -43,7 +43,7 @@ #include "ivas_stat_com.h" #include #include -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index f316c746cf..969096c381 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -40,7 +40,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_stat_dec.h" /*#define ENABLE_DITHER */ /* IVAS_fmToDo: development switch */ diff --git a/lib_dec/ivas_stereo_adapt_GR_dec.c b/lib_dec/ivas_stereo_adapt_GR_dec.c index ec84df9831..313ca6b770 100644 --- a/lib_dec/ivas_stereo_adapt_GR_dec.c +++ b/lib_dec/ivas_stereo_adapt_GR_dec.c @@ -33,7 +33,7 @@ #include #include "options.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" #include "ivas_rom_com.h" #include "rom_dec.h" diff --git a/lib_dec/ivas_stereo_cng_dec.c b/lib_dec/ivas_stereo_cng_dec.c index d3e62935d1..8b46c5e6bd 100644 --- a/lib_dec/ivas_stereo_cng_dec.c +++ b/lib_dec/ivas_stereo_cng_dec.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- * Local constants diff --git a/lib_dec/ivas_stereo_dft_dec.c b/lib_dec/ivas_stereo_dft_dec.c index 1e2e82889e..d5a4bb495b 100644 --- a/lib_dec/ivas_stereo_dft_dec.c +++ b/lib_dec/ivas_stereo_dft_dec.c @@ -45,7 +45,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_stereo_dft_dec_dmx.c b/lib_dec/ivas_stereo_dft_dec_dmx.c index 48ee7cf4e6..c7ab872eb9 100644 --- a/lib_dec/ivas_stereo_dft_dec_dmx.c +++ b/lib_dec/ivas_stereo_dft_dec_dmx.c @@ -44,7 +44,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_dec/ivas_stereo_dft_plc.c b/lib_dec/ivas_stereo_dft_plc.c index 34eaa2013c..a616ed82ca 100644 --- a/lib_dec/ivas_stereo_dft_plc.c +++ b/lib_dec/ivas_stereo_dft_plc.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- * Local constants diff --git a/lib_dec/ivas_stereo_eclvq_dec.c b/lib_dec/ivas_stereo_eclvq_dec.c index 41ed8924d1..06529b3d9b 100644 --- a/lib_dec/ivas_stereo_eclvq_dec.c +++ b/lib_dec/ivas_stereo_eclvq_dec.c @@ -38,7 +38,7 @@ #include "ivas_rom_dec.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- diff --git a/lib_dec/ivas_stereo_esf_dec.c b/lib_dec/ivas_stereo_esf_dec.c index 0ab8bcdb49..c2a6e58f4e 100644 --- a/lib_dec/ivas_stereo_esf_dec.c +++ b/lib_dec/ivas_stereo_esf_dec.c @@ -38,7 +38,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * init_basic_allpass() diff --git a/lib_dec/ivas_stereo_ica_dec.c b/lib_dec/ivas_stereo_ica_dec.c index 122f739dba..6864accb29 100644 --- a/lib_dec/ivas_stereo_ica_dec.c +++ b/lib_dec/ivas_stereo_ica_dec.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "rom_com.h" #include "ivas_rom_com.h" diff --git a/lib_dec/ivas_stereo_icbwe_dec.c b/lib_dec/ivas_stereo_icbwe_dec.c index 6c3fef9eae..59f0bc90f2 100644 --- a/lib_dec/ivas_stereo_icbwe_dec.c +++ b/lib_dec/ivas_stereo_icbwe_dec.c @@ -38,7 +38,7 @@ #include "ivas_cnst.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "rom_com.h" #include "ivas_rom_com.h" #ifdef DEBUGGING diff --git a/lib_dec/ivas_stereo_mdct_core_dec.c b/lib_dec/ivas_stereo_mdct_core_dec.c index c899278f6e..766a9f7316 100644 --- a/lib_dec/ivas_stereo_mdct_core_dec.c +++ b/lib_dec/ivas_stereo_mdct_core_dec.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_dec/ivas_stereo_mdct_stereo_dec.c b/lib_dec/ivas_stereo_mdct_stereo_dec.c index 67b893a9f2..f11ef7cb7b 100644 --- a/lib_dec/ivas_stereo_mdct_stereo_dec.c +++ b/lib_dec/ivas_stereo_mdct_stereo_dec.c @@ -37,7 +37,7 @@ #include "ivas_cnst.h" #include "ivas_prot.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_stereo_switching_dec.c b/lib_dec/ivas_stereo_switching_dec.c index 355eed3906..ac0e91da34 100644 --- a/lib_dec/ivas_stereo_switching_dec.c +++ b/lib_dec/ivas_stereo_switching_dec.c @@ -40,7 +40,7 @@ #include "prot.h" #include "ivas_prot.h" #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include diff --git a/lib_dec/ivas_stereo_td_dec.c b/lib_dec/ivas_stereo_td_dec.c index f3bd292a8b..d636d12bd7 100644 --- a/lib_dec/ivas_stereo_td_dec.c +++ b/lib_dec/ivas_stereo_td_dec.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * stereo_td_init_dec() diff --git a/lib_dec/ivas_stereo_td_low_rate_dec.c b/lib_dec/ivas_stereo_td_low_rate_dec.c index 8a0757cd5e..4f10eab8f4 100644 --- a/lib_dec/ivas_stereo_td_low_rate_dec.c +++ b/lib_dec/ivas_stereo_td_low_rate_dec.c @@ -42,7 +42,7 @@ #include "ivas_cnst.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * tdm_low_rate_dec() diff --git a/lib_dec/ivas_svd_dec.c b/lib_dec/ivas_svd_dec.c index c6d04a79d2..cd05d5aeeb 100644 --- a/lib_dec/ivas_svd_dec.c +++ b/lib_dec/ivas_svd_dec.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_tcx_core_dec.c b/lib_dec/ivas_tcx_core_dec.c index e1d6bd63ff..ecf8bfbc3f 100644 --- a/lib_dec/ivas_tcx_core_dec.c +++ b/lib_dec/ivas_tcx_core_dec.c @@ -40,7 +40,7 @@ #include "prot.h" #include "rom_com.h" #include "stat_dec.h" -#include "wmops.h" +#include "wmc_auto.h" #include "basop_proto_func.h" #include "stat_com.h" #include "ivas_prot.h" diff --git a/lib_dec/ivas_td_decorr.c b/lib_dec/ivas_td_decorr.c index 29b748e4c7..1fdc60380d 100644 --- a/lib_dec/ivas_td_decorr.c +++ b/lib_dec/ivas_td_decorr.c @@ -39,7 +39,7 @@ #endif #include "math.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_dec/ivas_vbap.c b/lib_dec/ivas_vbap.c index 2790dd379f..c059f57658 100644 --- a/lib_dec/ivas_vbap.c +++ b/lib_dec/ivas_vbap.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * Local constants diff --git a/lib_dec/jbm_jb4_circularbuffer.c b/lib_dec/jbm_jb4_circularbuffer.c index a9da400a36..410e907f13 100644 --- a/lib_dec/jbm_jb4_circularbuffer.c +++ b/lib_dec/jbm_jb4_circularbuffer.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /* local includes */ #include "jbm_jb4_circularbuffer.h" diff --git a/lib_dec/jbm_jb4_jmf.c b/lib_dec/jbm_jb4_jmf.c index 7b0dd2f188..2095049373 100644 --- a/lib_dec/jbm_jb4_jmf.c +++ b/lib_dec/jbm_jb4_jmf.c @@ -46,7 +46,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /* local includes */ #include "jbm_jb4_jmf.h" diff --git a/lib_dec/jbm_jb4sb.c b/lib_dec/jbm_jb4sb.c index 28dfd43e61..806ed99487 100644 --- a/lib_dec/jbm_jb4sb.c +++ b/lib_dec/jbm_jb4sb.c @@ -46,7 +46,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /* local headers */ #include "jbm_jb4_circularbuffer.h" #include "jbm_jb4_inputbuffer.h" diff --git a/lib_dec/jbm_pcmdsp_apa.c b/lib_dec/jbm_pcmdsp_apa.c index 3968e38974..3fb6065c06 100644 --- a/lib_dec/jbm_pcmdsp_apa.c +++ b/lib_dec/jbm_pcmdsp_apa.c @@ -47,7 +47,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /* local headers */ #include "jbm_pcmdsp_apa.h" #include "jbm_pcmdsp_similarityestimation.h" diff --git a/lib_dec/jbm_pcmdsp_fifo.c b/lib_dec/jbm_pcmdsp_fifo.c index 86990618fd..6219098d4f 100644 --- a/lib_dec/jbm_pcmdsp_fifo.c +++ b/lib_dec/jbm_pcmdsp_fifo.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "jbm_pcmdsp_fifo.h" diff --git a/lib_dec/jbm_pcmdsp_similarityestimation.c b/lib_dec/jbm_pcmdsp_similarityestimation.c index 3016fab5e1..5398cafebb 100644 --- a/lib_dec/jbm_pcmdsp_similarityestimation.c +++ b/lib_dec/jbm_pcmdsp_similarityestimation.c @@ -44,7 +44,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /* local headers */ #include "jbm_pcmdsp_similarityestimation.h" diff --git a/lib_dec/jbm_pcmdsp_window.c b/lib_dec/jbm_pcmdsp_window.c index 94182e5ad6..482f26f6c1 100644 --- a/lib_dec/jbm_pcmdsp_window.c +++ b/lib_dec/jbm_pcmdsp_window.c @@ -43,7 +43,7 @@ #endif #include "jbm_pcmdsp_window.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * hannWindow() diff --git a/lib_dec/lead_deindexing.c b/lib_dec/lead_deindexing.c index 246e0df391..9bd4f34a0e 100644 --- a/lib_dec/lead_deindexing.c +++ b/lib_dec/lead_deindexing.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_dec.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index d16d1f2494..5a81f77346 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -43,7 +43,7 @@ #include "debug.h" #endif #ifdef WMOPS -#include "wmops.h" +#include "wmc_auto.h" #endif /*---------------------------------------------------------------------* diff --git a/lib_dec/lp_exc_d.c b/lib_dec/lp_exc_d.c index 046523105f..291feeddc7 100644 --- a/lib_dec/lp_exc_d.c +++ b/lib_dec/lp_exc_d.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * lp_filt_exc_dec() diff --git a/lib_dec/lsf_dec.c b/lib_dec/lsf_dec.c index ffa5e91e2c..acf1769b4e 100644 --- a/lib_dec/lsf_dec.c +++ b/lib_dec/lsf_dec.c @@ -47,7 +47,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_dec/lsf_msvq_ma_dec.c b/lib_dec/lsf_msvq_ma_dec.c index 1fe895b706..2ad2e97abf 100644 --- a/lib_dec/lsf_msvq_ma_dec.c +++ b/lib_dec/lsf_msvq_ma_dec.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_com.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * lsf_msvq_ma_decprm() diff --git a/lib_dec/nelp_dec.c b/lib_dec/nelp_dec.c index 1814031fb2..ccf0b9f36a 100644 --- a/lib_dec/nelp_dec.c +++ b/lib_dec/nelp_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * nelp_decoder() diff --git a/lib_dec/peak_vq_dec.c b/lib_dec/peak_vq_dec.c index 45897b77b3..1f3012e4f2 100644 --- a/lib_dec/peak_vq_dec.c +++ b/lib_dec/peak_vq_dec.c @@ -44,7 +44,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------* diff --git a/lib_dec/pit_dec.c b/lib_dec/pit_dec.c index 9f2ba3bcad..4d4b1f72db 100644 --- a/lib_dec/pit_dec.c +++ b/lib_dec/pit_dec.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------* * pit_decode() diff --git a/lib_dec/pitch_extr.c b/lib_dec/pitch_extr.c index d90f06af7a..a1a421564d 100644 --- a/lib_dec/pitch_extr.c +++ b/lib_dec/pitch_extr.c @@ -45,7 +45,7 @@ #include "cnst.h" #include "prot.h" #include "basop_util.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* diff --git a/lib_dec/post_dec.c b/lib_dec/post_dec.c index 0d7bd7e7c7..f9a87da144 100644 --- a/lib_dec/post_dec.c +++ b/lib_dec/post_dec.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Function prototypes diff --git a/lib_dec/ppp_dec.c b/lib_dec/ppp_dec.c index 24ad0146a0..5fd442f810 100644 --- a/lib_dec/ppp_dec.c +++ b/lib_dec/ppp_dec.c @@ -40,7 +40,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/pvq_core_dec.c b/lib_dec/pvq_core_dec.c index 0ef00c6ae3..c14263f163 100644 --- a/lib_dec/pvq_core_dec.c +++ b/lib_dec/pvq_core_dec.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "prot.h" #include "stl.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local prototypes diff --git a/lib_dec/pvq_decode.c b/lib_dec/pvq_decode.c index c9a2bf41ab..4986a25f2a 100644 --- a/lib_dec/pvq_decode.c +++ b/lib_dec/pvq_decode.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Function pvq_decode() * diff --git a/lib_dec/range_dec.c b/lib_dec/range_dec.c index 55010e0b36..5c958ca110 100644 --- a/lib_dec/range_dec.c +++ b/lib_dec/range_dec.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local prototypes diff --git a/lib_dec/re8_dec.c b/lib_dec/re8_dec.c index 22a0a538a2..29a61ca0c4 100644 --- a/lib_dec/re8_dec.c +++ b/lib_dec/re8_dec.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- diff --git a/lib_dec/rom_dec.c b/lib_dec/rom_dec.c index a79803ea5c..d8d7a6a59d 100644 --- a/lib_dec/rom_dec.c +++ b/lib_dec/rom_dec.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /* clang-format off */ diff --git a/lib_dec/rst_dec.c b/lib_dec/rst_dec.c index 6b8683767d..9b919044ba 100644 --- a/lib_dec/rst_dec.c +++ b/lib_dec/rst_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------------------* * CNG_reset_dec() diff --git a/lib_dec/stat_noise_uv_dec.c b/lib_dec/stat_noise_uv_dec.c index f9e8ec4f78..86abd752a2 100644 --- a/lib_dec/stat_noise_uv_dec.c +++ b/lib_dec/stat_noise_uv_dec.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------* * stat_noise_uv_dec() diff --git a/lib_dec/swb_bwe_dec.c b/lib_dec/swb_bwe_dec.c index fca9267bd0..cedf300ed7 100644 --- a/lib_dec/swb_bwe_dec.c +++ b/lib_dec/swb_bwe_dec.c @@ -45,7 +45,7 @@ #include "rom_com.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * para_pred_bws() diff --git a/lib_dec/swb_bwe_dec_hr.c b/lib_dec/swb_bwe_dec_hr.c index edfaaf67be..eda63e3869 100644 --- a/lib_dec/swb_bwe_dec_hr.c +++ b/lib_dec/swb_bwe_dec_hr.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * swb_bwe_dec_hr() diff --git a/lib_dec/swb_bwe_dec_lr.c b/lib_dec/swb_bwe_dec_lr.c index d10be17f5f..4a2860a3f8 100644 --- a/lib_dec/swb_bwe_dec_lr.c +++ b/lib_dec/swb_bwe_dec_lr.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_dec/swb_tbe_dec.c b/lib_dec/swb_tbe_dec.c index 5b602bbfd6..50844ff680 100644 --- a/lib_dec/swb_tbe_dec.c +++ b/lib_dec/swb_tbe_dec.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_dec.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" /*-----------------------------------------------------------------* diff --git a/lib_dec/syn_outp.c b/lib_dec/syn_outp.c index cff7d72374..aebc5ff5e0 100644 --- a/lib_dec/syn_outp.c +++ b/lib_dec/syn_outp.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * syn_output() diff --git a/lib_dec/tcq_core_dec.c b/lib_dec/tcq_core_dec.c index a7050f9de0..9089a8a512 100644 --- a/lib_dec/tcq_core_dec.c +++ b/lib_dec/tcq_core_dec.c @@ -44,7 +44,7 @@ #include "prot.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * tcq_core_LR_enc() diff --git a/lib_dec/tcx_utils_dec.c b/lib_dec/tcx_utils_dec.c index f817c61e03..683a3738f9 100644 --- a/lib_dec/tcx_utils_dec.c +++ b/lib_dec/tcx_utils_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- * tcx_decoder_memory_update() diff --git a/lib_dec/tns_base_dec.c b/lib_dec/tns_base_dec.c index b7d977c84f..d03815a19e 100644 --- a/lib_dec/tns_base_dec.c +++ b/lib_dec/tns_base_dec.c @@ -40,7 +40,7 @@ #include "rom_com.h" #include "prot.h" #include "stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_dec/tonalMDCTconcealment.c b/lib_dec/tonalMDCTconcealment.c index 7a1c172f40..c792fc0033 100644 --- a/lib_dec/tonalMDCTconcealment.c +++ b/lib_dec/tonalMDCTconcealment.c @@ -45,7 +45,7 @@ #include #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*******************************************************/ diff --git a/lib_dec/transition_dec.c b/lib_dec/transition_dec.c index 9bcecf40b8..6b7f22891f 100644 --- a/lib_dec/transition_dec.c +++ b/lib_dec/transition_dec.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/updt_dec.c b/lib_dec/updt_dec.c index 2c3eed80e3..cf9705e73e 100644 --- a/lib_dec/updt_dec.c +++ b/lib_dec/updt_dec.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_com.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * updt_dec() diff --git a/lib_dec/vlpc_1st_dec.c b/lib_dec/vlpc_1st_dec.c index 1aa1ab72f2..3740812449 100644 --- a/lib_dec/vlpc_1st_dec.c +++ b/lib_dec/vlpc_1st_dec.c @@ -39,7 +39,7 @@ #include "options.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * vlpc_1st_dec() diff --git a/lib_dec/vlpc_2st_dec.c b/lib_dec/vlpc_2st_dec.c index 83163cda78..49ab4e0629 100644 --- a/lib_dec/vlpc_2st_dec.c +++ b/lib_dec/vlpc_2st_dec.c @@ -37,7 +37,7 @@ #include #include "options.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * vlpc_2st_dec() diff --git a/lib_dec/voiced_dec.c b/lib_dec/voiced_dec.c index 08d58ffc7d..68e2b67818 100644 --- a/lib_dec/voiced_dec.c +++ b/lib_dec/voiced_dec.c @@ -40,7 +40,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * ppp_voiced_decoder() diff --git a/lib_dec/waveadjust_fec_dec.c b/lib_dec/waveadjust_fec_dec.c index 222fb66599..f0fec98056 100644 --- a/lib_dec/waveadjust_fec_dec.c +++ b/lib_dec/waveadjust_fec_dec.c @@ -41,7 +41,7 @@ #endif #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ACcontextMapping_enc.c b/lib_enc/ACcontextMapping_enc.c index 62ab9e7552..7f86ea5cf0 100644 --- a/lib_enc/ACcontextMapping_enc.c +++ b/lib_enc/ACcontextMapping_enc.c @@ -46,7 +46,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/FEC_enc.c b/lib_enc/FEC_enc.c index 89868e6729..98d07eb13e 100644 --- a/lib_enc/FEC_enc.c +++ b/lib_enc/FEC_enc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * FEC_encode() diff --git a/lib_enc/SNR_calc.c b/lib_enc/SNR_calc.c index 1ccaad6e0f..08ee8706dc 100644 --- a/lib_enc/SNR_calc.c +++ b/lib_enc/SNR_calc.c @@ -39,7 +39,7 @@ #include #include "prot.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/acelp_core_enc.c b/lib_enc/acelp_core_enc.c index 95a986552a..e1bfd633d4 100644 --- a/lib_enc/acelp_core_enc.c +++ b/lib_enc/acelp_core_enc.c @@ -50,7 +50,7 @@ #ifdef LSF_RE_USE_SECONDARY_CHANNEL #include "ivas_rom_com.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * acelp_core_enc() diff --git a/lib_enc/acelp_core_switch_enc.c b/lib_enc/acelp_core_switch_enc.c index efabd35882..6849b40a9e 100644 --- a/lib_enc/acelp_core_switch_enc.c +++ b/lib_enc/acelp_core_switch_enc.c @@ -44,7 +44,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/acelp_enc_util.c b/lib_enc/acelp_enc_util.c index 003dadb026..275cb239ec 100644 --- a/lib_enc/acelp_enc_util.c +++ b/lib_enc/acelp_enc_util.c @@ -43,7 +43,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * E_ACELP_toeplitz_mul() diff --git a/lib_enc/amr_wb_enc.c b/lib_enc/amr_wb_enc.c index 76ddf9e705..0cf0d8bc51 100644 --- a/lib_enc/amr_wb_enc.c +++ b/lib_enc/amr_wb_enc.c @@ -43,7 +43,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_MODE_INFO extern float snr_[2][320]; diff --git a/lib_enc/analy_lp.c b/lib_enc/analy_lp.c index b4b990634e..2f216cef90 100644 --- a/lib_enc/analy_lp.c +++ b/lib_enc/analy_lp.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * analy_lp() diff --git a/lib_enc/analy_sp.c b/lib_enc/analy_sp.c index 5828e72483..ab3e69bf0f 100644 --- a/lib_enc/analy_sp.c +++ b/lib_enc/analy_sp.c @@ -44,7 +44,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include #include "ivas_cnst.h" diff --git a/lib_enc/ari_enc.c b/lib_enc/ari_enc.c index 3c6df474f8..7b5a17f6c0 100644 --- a/lib_enc/ari_enc.c +++ b/lib_enc/ari_enc.c @@ -44,7 +44,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------- diff --git a/lib_enc/ari_hm_enc.c b/lib_enc/ari_hm_enc.c index c88ac3812a..168fa02845 100644 --- a/lib_enc/ari_hm_enc.c +++ b/lib_enc/ari_hm_enc.c @@ -44,7 +44,7 @@ #include "basop_util.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * EncodeIndex() diff --git a/lib_enc/arith_coder_enc.c b/lib_enc/arith_coder_enc.c index 553721377c..8a0c4b9ad8 100644 --- a/lib_enc/arith_coder_enc.c +++ b/lib_enc/arith_coder_enc.c @@ -46,7 +46,7 @@ #include "rom_com.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/avq_cod.c b/lib_enc/avq_cod.c index 601138ccd0..f2fe58a932 100644 --- a/lib_enc/avq_cod.c +++ b/lib_enc/avq_cod.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local prototypes diff --git a/lib_enc/bass_psfilter_enc.c b/lib_enc/bass_psfilter_enc.c index 3d9a390945..fb7d656931 100644 --- a/lib_enc/bass_psfilter_enc.c +++ b/lib_enc/bass_psfilter_enc.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_enc/bw_detect.c b/lib_enc/bw_detect.c index c2955f1f39..e64c5df8a1 100644 --- a/lib_enc/bw_detect.c +++ b/lib_enc/bw_detect.c @@ -46,7 +46,7 @@ #include "rom_com.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/cng_enc.c b/lib_enc/cng_enc.c index 20787dd3f7..cd9bd2b022 100644 --- a/lib_enc/cng_enc.c +++ b/lib_enc/cng_enc.c @@ -44,7 +44,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_enc/cod2t32.c b/lib_enc/cod2t32.c index 1efef884d4..85bc7a3a4c 100644 --- a/lib_enc/cod2t32.c +++ b/lib_enc/cod2t32.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_enc/cod4t64.c b/lib_enc/cod4t64.c index 2c9ad01e21..4b51a2d18f 100644 --- a/lib_enc/cod4t64.c +++ b/lib_enc/cod4t64.c @@ -44,7 +44,7 @@ #include "rom_enc.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/cod4t64_fast.c b/lib_enc/cod4t64_fast.c index b67248ebe2..440ed8040f 100644 --- a/lib_enc/cod4t64_fast.c +++ b/lib_enc/cod4t64_fast.c @@ -40,7 +40,7 @@ #include "prot.h" #include "ivas_prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/cod_ace.c b/lib_enc/cod_ace.c index 091146298a..6903e61bc2 100644 --- a/lib_enc/cod_ace.c +++ b/lib_enc/cod_ace.c @@ -42,7 +42,7 @@ #include "debug.h" #endif #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * coder_acelp() diff --git a/lib_enc/cod_tcx.c b/lib_enc/cod_tcx.c index f60ac1a314..fc97155742 100644 --- a/lib_enc/cod_tcx.c +++ b/lib_enc/cod_tcx.c @@ -40,7 +40,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" #include "ivas_rom_com.h" #ifdef DEBUGGING diff --git a/lib_enc/cod_uv.c b/lib_enc/cod_uv.c index 166a9685dc..5a64f93d06 100644 --- a/lib_enc/cod_uv.c +++ b/lib_enc/cod_uv.c @@ -37,7 +37,7 @@ #include #include "options.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * gauss_L2: diff --git a/lib_enc/comvad_decision.c b/lib_enc/comvad_decision.c index 4ccd0e4142..8c94c3a709 100644 --- a/lib_enc/comvad_decision.c +++ b/lib_enc/comvad_decision.c @@ -38,7 +38,7 @@ #include "options.h" #include "prot.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/cor_shif.c b/lib_enc/cor_shif.c index d27b097a43..1a5f5a3c2c 100644 --- a/lib_enc/cor_shif.c +++ b/lib_enc/cor_shif.c @@ -38,7 +38,7 @@ #include "options.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Correlation_shift diff --git a/lib_enc/core_enc_2div.c b/lib_enc/core_enc_2div.c index 65a5c78650..ed3789aed8 100644 --- a/lib_enc/core_enc_2div.c +++ b/lib_enc/core_enc_2div.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * core_encode_twodiv() diff --git a/lib_enc/core_enc_init.c b/lib_enc/core_enc_init.c index 009185cc88..d1bb1087c0 100644 --- a/lib_enc/core_enc_init.c +++ b/lib_enc/core_enc_init.c @@ -43,7 +43,7 @@ #include "prot.h" #include "ivas_prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/core_enc_ol.c b/lib_enc/core_enc_ol.c index a761893653..2a41b9ad9f 100644 --- a/lib_enc/core_enc_ol.c +++ b/lib_enc/core_enc_ol.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/core_enc_reconf.c b/lib_enc/core_enc_reconf.c index 0489d210bc..ed5b3f2fa7 100644 --- a/lib_enc/core_enc_reconf.c +++ b/lib_enc/core_enc_reconf.c @@ -42,7 +42,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Funtion core_coder_reconfig * diff --git a/lib_enc/core_enc_switch.c b/lib_enc/core_enc_switch.c index f96d0eed57..5b230295b2 100644 --- a/lib_enc/core_enc_switch.c +++ b/lib_enc/core_enc_switch.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * core_coder_mode_switch() diff --git a/lib_enc/core_enc_updt.c b/lib_enc/core_enc_updt.c index 987910bcb5..0a05cc7545 100644 --- a/lib_enc/core_enc_updt.c +++ b/lib_enc/core_enc_updt.c @@ -42,7 +42,7 @@ #include "prot.h" #include "rom_com.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * core_encode_update() diff --git a/lib_enc/core_switching_enc.c b/lib_enc/core_switching_enc.c index 6102bd5f67..4ebed1862a 100644 --- a/lib_enc/core_switching_enc.c +++ b/lib_enc/core_switching_enc.c @@ -44,7 +44,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * core_switching_pre_enc() diff --git a/lib_enc/corr_xh.c b/lib_enc/corr_xh.c index bf4d473bda..b33b312d5a 100644 --- a/lib_enc/corr_xh.c +++ b/lib_enc/corr_xh.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * corr_xh() diff --git a/lib_enc/decision_matrix_enc.c b/lib_enc/decision_matrix_enc.c index 3433bdf1b4..d236897862 100644 --- a/lib_enc/decision_matrix_enc.c +++ b/lib_enc/decision_matrix_enc.c @@ -44,7 +44,7 @@ #include "stat_enc.h" #include "stat_dec.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* diff --git a/lib_enc/detect_transient.c b/lib_enc/detect_transient.c index 3eaddbc073..2bb7c7b528 100644 --- a/lib_enc/detect_transient.c +++ b/lib_enc/detect_transient.c @@ -42,7 +42,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * hp_filter() diff --git a/lib_enc/diffcod.c b/lib_enc/diffcod.c index 3d0c47ca62..e6ec210456 100644 --- a/lib_enc/diffcod.c +++ b/lib_enc/diffcod.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------*/ /* Function diffcod() */ diff --git a/lib_enc/dtx.c b/lib_enc/dtx.c index 41a1f6af43..c7c0a37380 100644 --- a/lib_enc/dtx.c +++ b/lib_enc/dtx.c @@ -45,7 +45,7 @@ #include "prot.h" #include "ivas_prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/enc_acelp.c b/lib_enc/enc_acelp.c index 07d63fe25b..c525648d16 100644 --- a/lib_enc/enc_acelp.c +++ b/lib_enc/enc_acelp.c @@ -45,7 +45,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_enc/enc_acelp_tcx_main.c b/lib_enc/enc_acelp_tcx_main.c index f3b3076f78..869c8f7406 100644 --- a/lib_enc/enc_acelp_tcx_main.c +++ b/lib_enc/enc_acelp_tcx_main.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * enc_acelp_tcx_main() diff --git a/lib_enc/enc_acelpx.c b/lib_enc/enc_acelpx.c index 6c8e783d76..dc7a232fae 100644 --- a/lib_enc/enc_acelpx.c +++ b/lib_enc/enc_acelpx.c @@ -43,7 +43,7 @@ #endif #include "prot.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /* Iterations: nb_pos_ix*16 */ diff --git a/lib_enc/enc_amr_wb.c b/lib_enc/enc_amr_wb.c index 2e88776d8f..af1366ee6f 100644 --- a/lib_enc/enc_amr_wb.c +++ b/lib_enc/enc_amr_wb.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * encod_amr_wb() diff --git a/lib_enc/enc_gain.c b/lib_enc/enc_gain.c index a5728e1f37..5d2df71cbd 100644 --- a/lib_enc/enc_gain.c +++ b/lib_enc/enc_gain.c @@ -41,7 +41,7 @@ #include "prot.h" #include "rom_enc.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /* diff --git a/lib_enc/enc_gen_voic.c b/lib_enc/enc_gen_voic.c index dd642cd470..e2b2c96e05 100644 --- a/lib_enc/enc_gen_voic.c +++ b/lib_enc/enc_gen_voic.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * encod_gen_voic() diff --git a/lib_enc/enc_gen_voic_rf.c b/lib_enc/enc_gen_voic_rf.c index e8af6856ad..ace0f5f2ac 100644 --- a/lib_enc/enc_gen_voic_rf.c +++ b/lib_enc/enc_gen_voic_rf.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * reset_rf_indices() diff --git a/lib_enc/enc_higher_acelp.c b/lib_enc/enc_higher_acelp.c index ebda178d8b..96fd12eec9 100644 --- a/lib_enc/enc_higher_acelp.c +++ b/lib_enc/enc_higher_acelp.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/enc_nelp.c b/lib_enc/enc_nelp.c index 11ec6105b9..ba79832160 100644 --- a/lib_enc/enc_nelp.c +++ b/lib_enc/enc_nelp.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * encod_nelp() diff --git a/lib_enc/enc_pit_exc.c b/lib_enc/enc_pit_exc.c index 900d4021d0..1048ccf886 100644 --- a/lib_enc/enc_pit_exc.c +++ b/lib_enc/enc_pit_exc.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * enc_pit_exc() diff --git a/lib_enc/enc_ppp.c b/lib_enc/enc_ppp.c index b7668bfb01..230aff7481 100644 --- a/lib_enc/enc_ppp.c +++ b/lib_enc/enc_ppp.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- * encod_ppp() diff --git a/lib_enc/enc_prm.c b/lib_enc/enc_prm.c index cd606af8fb..f48bb968c2 100644 --- a/lib_enc/enc_prm.c +++ b/lib_enc/enc_prm.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/enc_tran.c b/lib_enc/enc_tran.c index ee1768067e..600466bfa1 100644 --- a/lib_enc/enc_tran.c +++ b/lib_enc/enc_tran.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * encod_tran() diff --git a/lib_enc/enc_uv.c b/lib_enc/enc_uv.c index c34419c7df..cbdc8a0d7e 100644 --- a/lib_enc/enc_uv.c +++ b/lib_enc/enc_uv.c @@ -43,7 +43,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * encod_unvoiced() diff --git a/lib_enc/energy.c b/lib_enc/energy.c index e69063b873..408964a31b 100644 --- a/lib_enc/energy.c +++ b/lib_enc/energy.c @@ -39,7 +39,7 @@ #include "prot.h" #include "cnst.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * background_update() diff --git a/lib_enc/eval_pit_contr.c b/lib_enc/eval_pit_contr.c index d7eb087e57..0e3d041f26 100644 --- a/lib_enc/eval_pit_contr.c +++ b/lib_enc/eval_pit_contr.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constantes diff --git a/lib_enc/evs_enc.c b/lib_enc/evs_enc.c index 864037f0d9..56d6e84952 100644 --- a/lib_enc/evs_enc.c +++ b/lib_enc/evs_enc.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/ext_sig_ana.c b/lib_enc/ext_sig_ana.c index 58d1e34a56..d2e33cb6bf 100644 --- a/lib_enc/ext_sig_ana.c +++ b/lib_enc/ext_sig_ana.c @@ -43,7 +43,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_PLOT #include "deb_out.h" #endif diff --git a/lib_enc/fd_cng_enc.c b/lib_enc/fd_cng_enc.c index e3a349b2ae..c0133f2366 100644 --- a/lib_enc/fd_cng_enc.c +++ b/lib_enc/fd_cng_enc.c @@ -46,7 +46,7 @@ #include "prot.h" #include "ivas_prot.h" #include "stat_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * createFdCngEnc() diff --git a/lib_enc/find_tar.c b/lib_enc/find_tar.c index b97cd8fd57..edbf873704 100644 --- a/lib_enc/find_tar.c +++ b/lib_enc/find_tar.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * find_targets() diff --git a/lib_enc/find_tilt.c b/lib_enc/find_tilt.c index 140c3b84bf..da601dd87a 100644 --- a/lib_enc/find_tilt.c +++ b/lib_enc/find_tilt.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_enc/find_uv.c b/lib_enc/find_uv.c index fcfbfaa497..e05a94e1d9 100644 --- a/lib_enc/find_uv.c +++ b/lib_enc/find_uv.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/find_wsp.c b/lib_enc/find_wsp.c index d2e2575b52..42b6b62e45 100644 --- a/lib_enc/find_wsp.c +++ b/lib_enc/find_wsp.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * find_wsp() diff --git a/lib_enc/frame_spec_dif_cor_rate.c b/lib_enc/frame_spec_dif_cor_rate.c index 9b3329c5c1..ae240e497d 100644 --- a/lib_enc/frame_spec_dif_cor_rate.c +++ b/lib_enc/frame_spec_dif_cor_rate.c @@ -38,7 +38,7 @@ #include "options.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * frame_spec_dif_cor_rate() diff --git a/lib_enc/gain_enc.c b/lib_enc/gain_enc.c index 41389a6edb..842e14a00c 100644 --- a/lib_enc/gain_enc.c +++ b/lib_enc/gain_enc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/gaus_enc.c b/lib_enc/gaus_enc.c index 080f12f707..9e931e2704 100644 --- a/lib_enc/gaus_enc.c +++ b/lib_enc/gaus_enc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/gp_clip.c b/lib_enc/gp_clip.c index 036fcd2bf7..1d61b5de21 100644 --- a/lib_enc/gp_clip.c +++ b/lib_enc/gp_clip.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/gs_enc.c b/lib_enc/gs_enc.c index cfee14b2ca..7820bb446d 100644 --- a/lib_enc/gs_enc.c +++ b/lib_enc/gs_enc.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/guided_plc_enc.c b/lib_enc/guided_plc_enc.c index 28dd46c544..1baf8bf663 100644 --- a/lib_enc/guided_plc_enc.c +++ b/lib_enc/guided_plc_enc.c @@ -39,7 +39,7 @@ #include #include "prot.h" #include "stat_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * coderLookAheadInnovation() diff --git a/lib_enc/hf_cod_amrwb.c b/lib_enc/hf_cod_amrwb.c index e731e13da9..66b6dc59f2 100644 --- a/lib_enc/hf_cod_amrwb.c +++ b/lib_enc/hf_cod_amrwb.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/hq_classifier_enc.c b/lib_enc/hq_classifier_enc.c index f604939d21..fc6eea1205 100644 --- a/lib_enc/hq_classifier_enc.c +++ b/lib_enc/hq_classifier_enc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constants diff --git a/lib_enc/hq_core_enc.c b/lib_enc/hq_core_enc.c index 29e56f5268..24b68016db 100644 --- a/lib_enc/hq_core_enc.c +++ b/lib_enc/hq_core_enc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * hq_core_enc() diff --git a/lib_enc/hq_env_enc.c b/lib_enc/hq_env_enc.c index 0ddfc2cb0e..e458a9947c 100644 --- a/lib_enc/hq_env_enc.c +++ b/lib_enc/hq_env_enc.c @@ -42,7 +42,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------------------* * encode_envelope_indices() diff --git a/lib_enc/hq_hr_enc.c b/lib_enc/hq_hr_enc.c index 569d616066..9b3ad08c37 100644 --- a/lib_enc/hq_hr_enc.c +++ b/lib_enc/hq_hr_enc.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_enc.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * hq_hr_enc() diff --git a/lib_enc/hq_lr_enc.c b/lib_enc/hq_lr_enc.c index 184dc79e6b..ab9ab86f9f 100644 --- a/lib_enc/hq_lr_enc.c +++ b/lib_enc/hq_lr_enc.c @@ -46,7 +46,7 @@ #include "prot.h" #include "stl.h" #include "basop_util.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* diff --git a/lib_enc/hvq_enc.c b/lib_enc/hvq_enc.c index d82de6f5f3..e169cb4673 100644 --- a/lib_enc/hvq_enc.c +++ b/lib_enc/hvq_enc.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_enc.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * hvq_enc() diff --git a/lib_enc/igf_enc.c b/lib_enc/igf_enc.c index e355cd2083..277d36480d 100644 --- a/lib_enc/igf_enc.c +++ b/lib_enc/igf_enc.c @@ -45,7 +45,7 @@ #include "ivas_prot.h" #include "cnst.h" #include "stat_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_PLOT #include "deb_out.h" #endif diff --git a/lib_enc/igf_scf_enc.c b/lib_enc/igf_scf_enc.c index b1a3842b8f..b391bfcaad 100644 --- a/lib_enc/igf_scf_enc.c +++ b/lib_enc/igf_scf_enc.c @@ -43,7 +43,7 @@ #include "stat_enc.h" #include "stat_com.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c index 4e4ab24369..6a2643186a 100644 --- a/lib_enc/init_enc.c +++ b/lib_enc/init_enc.c @@ -45,7 +45,7 @@ #include "prot.h" #include "ivas_prot.h" #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * init_encoder() diff --git a/lib_enc/inov_enc.c b/lib_enc/inov_enc.c index c80057f055..09e3251f37 100644 --- a/lib_enc/inov_enc.c +++ b/lib_enc/inov_enc.c @@ -43,7 +43,7 @@ #include "prot.h" #include "ivas_prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * inov_encode() diff --git a/lib_enc/isf_enc_amr_wb.c b/lib_enc/isf_enc_amr_wb.c index 441c66be9b..ec369b4681 100644 --- a/lib_enc/isf_enc_amr_wb.c +++ b/lib_enc/isf_enc_amr_wb.c @@ -43,7 +43,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constants diff --git a/lib_enc/ivas_agc_enc.c b/lib_enc/ivas_agc_enc.c index f39f2b8148..0eb287763f 100644 --- a/lib_enc/ivas_agc_enc.c +++ b/lib_enc/ivas_agc_enc.c @@ -40,7 +40,7 @@ #include "prot.h" #include #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index ff01e2bd13..3dc1b8358d 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -40,7 +40,7 @@ #include "prot.h" #include "ivas_cnst.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include #ifdef DEBUG_MODE_ACELP diff --git a/lib_enc/ivas_core_pre_proc.c b/lib_enc/ivas_core_pre_proc.c index c928e55e09..6cdfd45180 100644 --- a/lib_enc/ivas_core_pre_proc.c +++ b/lib_enc/ivas_core_pre_proc.c @@ -41,7 +41,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c index 8f5799b07f..3fe5a1118e 100644 --- a/lib_enc/ivas_core_pre_proc_front.c +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -41,7 +41,7 @@ #include "rom_com.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include diff --git a/lib_enc/ivas_corecoder_enc_reconfig.c b/lib_enc/ivas_corecoder_enc_reconfig.c index dffd53bb93..9e544da1ba 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig.c +++ b/lib_enc/ivas_corecoder_enc_reconfig.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index e2b4fe4995..32f49f936d 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_decision_matrix_enc.c b/lib_enc/ivas_decision_matrix_enc.c index de6fe8dc96..de689b3a62 100644 --- a/lib_enc/ivas_decision_matrix_enc.c +++ b/lib_enc/ivas_decision_matrix_enc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* diff --git a/lib_enc/ivas_dirac_enc.c b/lib_enc/ivas_dirac_enc.c index 98d39afcb5..f8e3d4f8bf 100644 --- a/lib_enc/ivas_dirac_enc.c +++ b/lib_enc/ivas_dirac_enc.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- * Local function prototypes diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index 8b60d95c00..e1d40d4db8 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * ivas_enc() diff --git a/lib_enc/ivas_enc_cov_handler.c b/lib_enc/ivas_enc_cov_handler.c index 933c2c5de9..b94a29bcb4 100644 --- a/lib_enc/ivas_enc_cov_handler.c +++ b/lib_enc/ivas_enc_cov_handler.c @@ -37,7 +37,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* * Local constants diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index a3714821f3..9286983f3f 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -41,7 +41,7 @@ #include "ivas_rom_com.h" #include "math.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* * Local constants diff --git a/lib_enc/ivas_front_vad.c b/lib_enc/ivas_front_vad.c index 4bc3730818..9bea3565d8 100644 --- a/lib_enc/ivas_front_vad.c +++ b/lib_enc/ivas_front_vad.c @@ -42,7 +42,7 @@ #include "prot.h" #include "ivas_prot.h" #include -#include "wmops.h" +#include "wmc_auto.h" #include diff --git a/lib_enc/ivas_init_enc.c b/lib_enc/ivas_init_enc.c index 18280a60e2..b7642f2cd4 100644 --- a/lib_enc/ivas_init_enc.c +++ b/lib_enc/ivas_init_enc.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_ism_enc.c b/lib_enc/ivas_ism_enc.c index 5a1f29fe29..4a97d45fce 100644 --- a/lib_enc/ivas_ism_enc.c +++ b/lib_enc/ivas_ism_enc.c @@ -39,7 +39,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c index 64c1c179b8..20f5be82f1 100644 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_enc/ivas_ism_param_enc.c b/lib_enc/ivas_ism_param_enc.c index 91eff650dc..c379383ea8 100644 --- a/lib_enc/ivas_ism_param_enc.c +++ b/lib_enc/ivas_ism_param_enc.c @@ -39,7 +39,7 @@ #include "cnst.h" #include "ivas_cnst.h" #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- * Local function definitions diff --git a/lib_enc/ivas_lfe_enc.c b/lib_enc/ivas_lfe_enc.c index a333995d69..d1c70cbc62 100644 --- a/lib_enc/ivas_lfe_enc.c +++ b/lib_enc/ivas_lfe_enc.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------------------------* diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index c2649adc56..270868386f 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -37,7 +37,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "ivas_stat_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" /*-----------------------------------------------------------------------* diff --git a/lib_enc/ivas_mc_param_enc.c b/lib_enc/ivas_mc_param_enc.c index 67e0c3974c..848b1afdd6 100644 --- a/lib_enc/ivas_mc_param_enc.c +++ b/lib_enc/ivas_mc_param_enc.c @@ -46,7 +46,7 @@ #ifdef DEBUG_PLOT #include "deb_out.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_enc/ivas_mcmasa_enc.c b/lib_enc/ivas_mcmasa_enc.c index 8d127e17d5..92a1950580 100644 --- a/lib_enc/ivas_mcmasa_enc.c +++ b/lib_enc/ivas_mcmasa_enc.c @@ -44,7 +44,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index a5db75de59..a9594e3cfa 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------* diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index 72bfd4efbc..b6b75bec44 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_mct_enc_mct.c b/lib_enc/ivas_mct_enc_mct.c index c506f4e431..9f90f86fd3 100755 --- a/lib_enc/ivas_mct_enc_mct.c +++ b/lib_enc/ivas_mct_enc_mct.c @@ -36,7 +36,7 @@ #include "ivas_cnst.h" #include "ivas_prot.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include #define SPAR_CORR_THRES 0.9f diff --git a/lib_enc/ivas_mdct_core_enc.c b/lib_enc/ivas_mdct_core_enc.c index 595469530a..6517a5f50b 100644 --- a/lib_enc/ivas_mdct_core_enc.c +++ b/lib_enc/ivas_mdct_core_enc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------* * Local constants diff --git a/lib_enc/ivas_pca_enc.c b/lib_enc/ivas_pca_enc.c index c6b804088e..9fb4180236 100644 --- a/lib_enc/ivas_pca_enc.c +++ b/lib_enc/ivas_pca_enc.c @@ -41,7 +41,7 @@ #include #include #include "typedef.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_enc/ivas_qmetadata_enc.c b/lib_enc/ivas_qmetadata_enc.c index c9f0bd70ff..9f8687e72b 100644 --- a/lib_enc/ivas_qmetadata_enc.c +++ b/lib_enc/ivas_qmetadata_enc.c @@ -39,7 +39,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "ivas_stat_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" diff --git a/lib_enc/ivas_qspherical_enc.c b/lib_enc/ivas_qspherical_enc.c index b8f889b472..4e2ab5049e 100644 --- a/lib_enc/ivas_qspherical_enc.c +++ b/lib_enc/ivas_qspherical_enc.c @@ -38,7 +38,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "ivas_stat_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #include "prot.h" diff --git a/lib_enc/ivas_range_uni_enc.c b/lib_enc/ivas_range_uni_enc.c index be325d47bc..aa2ab55e0b 100644 --- a/lib_enc/ivas_range_uni_enc.c +++ b/lib_enc/ivas_range_uni_enc.c @@ -39,7 +39,7 @@ #include #include "options.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUGGING #include "debug.h" #endif diff --git a/lib_enc/ivas_rom_enc.c b/lib_enc/ivas_rom_enc.c index ebc4ee6bc3..7227dbc66d 100644 --- a/lib_enc/ivas_rom_enc.c +++ b/lib_enc/ivas_rom_enc.c @@ -38,7 +38,7 @@ #include "cnst.h" #include "ivas_cnst.h" #include -#include "wmops.h" +#include "wmc_auto.h" /* clang-format off */ diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 003baa0fa0..32c229eb11 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_sce_enc.c b/lib_enc/ivas_sce_enc.c index f1ebe700b4..b1b332d2f4 100644 --- a/lib_enc/ivas_sce_enc.c +++ b/lib_enc/ivas_sce_enc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_sns_enc.c b/lib_enc/ivas_sns_enc.c index 45c04ac9ea..c55e8e6f27 100644 --- a/lib_enc/ivas_sns_enc.c +++ b/lib_enc/ivas_sns_enc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 60df797acd..9bd3732c3d 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -41,7 +41,7 @@ #include "prot.h" #include "math.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 09c766b581..775a61228e 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -40,7 +40,7 @@ #include "math.h" #include "ivas_rom_com.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_enc/ivas_stereo_adapt_GR_enc.c b/lib_enc/ivas_stereo_adapt_GR_enc.c index 8f07441920..f2a63660d7 100644 --- a/lib_enc/ivas_stereo_adapt_GR_enc.c +++ b/lib_enc/ivas_stereo_adapt_GR_enc.c @@ -36,7 +36,7 @@ #include "ivas_prot.h" #include "prot.h" #include "stat_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_rom_com.h" #ifdef DEBUGGING #include "debug.h" diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index 48b21146fa..f48437ccfd 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_stereo_cng_enc.c b/lib_enc/ivas_stereo_cng_enc.c index 31f5e7c794..d14561749b 100644 --- a/lib_enc/ivas_stereo_cng_enc.c +++ b/lib_enc/ivas_stereo_cng_enc.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------- diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c index 911baa16a9..ff49c3d789 100644 --- a/lib_enc/ivas_stereo_dft_enc.c +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -45,7 +45,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_PLOT #include "deb_out.h" #endif diff --git a/lib_enc/ivas_stereo_dft_enc_itd.c b/lib_enc/ivas_stereo_dft_enc_itd.c index 594137993e..4693c76ea6 100644 --- a/lib_enc/ivas_stereo_dft_enc_itd.c +++ b/lib_enc/ivas_stereo_dft_enc_itd.c @@ -45,7 +45,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_enc/ivas_stereo_dft_td_itd.c b/lib_enc/ivas_stereo_dft_td_itd.c index 84dfee6980..c6d792fe00 100644 --- a/lib_enc/ivas_stereo_dft_td_itd.c +++ b/lib_enc/ivas_stereo_dft_td_itd.c @@ -47,7 +47,7 @@ #ifdef DEBUG_PLOT #include "deb_out.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index a6773bc64c..8ce8cdbd09 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_enc/ivas_stereo_eclvq_enc.c b/lib_enc/ivas_stereo_eclvq_enc.c index dffdafd17a..d5d4b29414 100644 --- a/lib_enc/ivas_stereo_eclvq_enc.c +++ b/lib_enc/ivas_stereo_eclvq_enc.c @@ -39,7 +39,7 @@ #include "ivas_rom_enc.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /* used only for norm_s in the code_length_from_count function */ #include "basop32.h" diff --git a/lib_enc/ivas_stereo_ica_enc.c b/lib_enc/ivas_stereo_ica_enc.c index c178d05a91..b7152096ea 100644 --- a/lib_enc/ivas_stereo_ica_enc.c +++ b/lib_enc/ivas_stereo_ica_enc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #include "rom_com.h" #include "ivas_rom_com.h" diff --git a/lib_enc/ivas_stereo_icbwe_enc.c b/lib_enc/ivas_stereo_icbwe_enc.c index 1d1f89f656..049dd0ba76 100644 --- a/lib_enc/ivas_stereo_icbwe_enc.c +++ b/lib_enc/ivas_stereo_icbwe_enc.c @@ -37,7 +37,7 @@ #include "ivas_cnst.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include "rom_com.h" #include "ivas_rom_com.h" #ifdef DEBUGGING diff --git a/lib_enc/ivas_stereo_mdct_core_enc.c b/lib_enc/ivas_stereo_mdct_core_enc.c index c35f7670ec..1b8460cf07 100755 --- a/lib_enc/ivas_stereo_mdct_core_enc.c +++ b/lib_enc/ivas_stereo_mdct_core_enc.c @@ -41,7 +41,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * sync_tcx_mode() diff --git a/lib_enc/ivas_stereo_mdct_igf_enc.c b/lib_enc/ivas_stereo_mdct_igf_enc.c index b04fe84de2..d2c5ae38fe 100644 --- a/lib_enc/ivas_stereo_mdct_igf_enc.c +++ b/lib_enc/ivas_stereo_mdct_igf_enc.c @@ -39,7 +39,7 @@ #include "stat_enc.h" #include "ivas_stat_enc.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c index 9975b95871..28bb061548 100644 --- a/lib_enc/ivas_stereo_mdct_stereo_enc.c +++ b/lib_enc/ivas_stereo_mdct_stereo_enc.c @@ -39,7 +39,7 @@ #include "prot.h" #include "ivas_rom_com.h" #include "ivas_rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #include "stat_enc.h" #ifdef DEBUG_PLOT #include "deb_out.h" diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c index d0201784a6..c618e4a3c7 100644 --- a/lib_enc/ivas_stereo_switching_enc.c +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -40,7 +40,7 @@ #include "prot.h" #include "ivas_prot.h" #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_stereo_td_analysis.c b/lib_enc/ivas_stereo_td_analysis.c index 41de84d714..50e7a83fec 100644 --- a/lib_enc/ivas_stereo_td_analysis.c +++ b/lib_enc/ivas_stereo_td_analysis.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_stereo_td_enc.c b/lib_enc/ivas_stereo_td_enc.c index 1e7fe30bd1..4874ba47b0 100644 --- a/lib_enc/ivas_stereo_td_enc.c +++ b/lib_enc/ivas_stereo_td_enc.c @@ -41,7 +41,7 @@ #include "prot.h" #include "ivas_prot.h" #include "ivas_rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include "math.h" diff --git a/lib_enc/ivas_stereo_td_low_rate_enc.c b/lib_enc/ivas_stereo_td_low_rate_enc.c index 92abf45e9a..b1f939c432 100644 --- a/lib_enc/ivas_stereo_td_low_rate_enc.c +++ b/lib_enc/ivas_stereo_td_low_rate_enc.c @@ -42,7 +42,7 @@ #include "ivas_cnst.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/ivas_tcx_core_enc.c b/lib_enc/ivas_tcx_core_enc.c index 1e04a7ad82..4f17a3979b 100644 --- a/lib_enc/ivas_tcx_core_enc.c +++ b/lib_enc/ivas_tcx_core_enc.c @@ -41,7 +41,7 @@ #include "prot.h" #include "rom_com.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/lead_indexing.c b/lib_enc/lead_indexing.c index d97ccc6955..3faccbb2e7 100644 --- a/lib_enc/lead_indexing.c +++ b/lib_enc/lead_indexing.c @@ -41,7 +41,7 @@ #endif #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 68a465a5bc..d828335a95 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #ifdef WMOPS -#include "wmops.h" +#include "wmc_auto.h" #endif diff --git a/lib_enc/long_enr.c b/lib_enc/long_enr.c index 3dc098af61..566f18e06f 100644 --- a/lib_enc/long_enr.c +++ b/lib_enc/long_enr.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * long_enr() diff --git a/lib_enc/lp_exc_e.c b/lib_enc/lp_exc_e.c index e8078c5e0e..36011ade86 100644 --- a/lib_enc/lp_exc_e.c +++ b/lib_enc/lp_exc_e.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/lsf_enc.c b/lib_enc/lsf_enc.c index 8e561c76e8..e8bf8b51ac 100644 --- a/lib_enc/lsf_enc.c +++ b/lib_enc/lsf_enc.c @@ -49,7 +49,7 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constants diff --git a/lib_enc/lsf_msvq_ma_enc.c b/lib_enc/lsf_msvq_ma_enc.c index bf115aa671..d731845268 100644 --- a/lib_enc/lsf_msvq_ma_enc.c +++ b/lib_enc/lsf_msvq_ma_enc.c @@ -44,7 +44,7 @@ #include "rom_com.h" #include "rom_enc.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" #define kMaxC 8 diff --git a/lib_enc/ltd_stable.c b/lib_enc/ltd_stable.c index 5650f93e67..3ca14288d5 100644 --- a/lib_enc/ltd_stable.c +++ b/lib_enc/ltd_stable.c @@ -38,7 +38,7 @@ #include "options.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * ltd_stable() diff --git a/lib_enc/mdct_classifier.c b/lib_enc/mdct_classifier.c index ae7e6f7e3f..b94835b0a4 100644 --- a/lib_enc/mdct_classifier.c +++ b/lib_enc/mdct_classifier.c @@ -41,7 +41,7 @@ #endif #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include diff --git a/lib_enc/mdct_selector.c b/lib_enc/mdct_selector.c index 1f118d23d2..ee83eb3a40 100644 --- a/lib_enc/mdct_selector.c +++ b/lib_enc/mdct_selector.c @@ -44,7 +44,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constants diff --git a/lib_enc/mslvq_enc.c b/lib_enc/mslvq_enc.c index 3c910cbf06..2ca49f2629 100644 --- a/lib_enc/mslvq_enc.c +++ b/lib_enc/mslvq_enc.c @@ -40,7 +40,7 @@ #include "prot.h" #include "rom_com.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" /*-----------------------------------------------------------------* diff --git a/lib_enc/multi_harm.c b/lib_enc/multi_harm.c index 4427b3376c..cfbe05efa3 100644 --- a/lib_enc/multi_harm.c +++ b/lib_enc/multi_harm.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constants diff --git a/lib_enc/nelp_enc.c b/lib_enc/nelp_enc.c index 8f8f407749..e25983020f 100644 --- a/lib_enc/nelp_enc.c +++ b/lib_enc/nelp_enc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * quantize_uvg() diff --git a/lib_enc/nois_est.c b/lib_enc/nois_est.c index b8d551a738..1553873656 100644 --- a/lib_enc/nois_est.c +++ b/lib_enc/nois_est.c @@ -39,7 +39,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constants diff --git a/lib_enc/noise_adjust.c b/lib_enc/noise_adjust.c index 5d592d071b..7eb123b399 100644 --- a/lib_enc/noise_adjust.c +++ b/lib_enc/noise_adjust.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * noise_adjust() diff --git a/lib_enc/normalizecoefs.c b/lib_enc/normalizecoefs.c index 7e039f171e..425bde338c 100644 --- a/lib_enc/normalizecoefs.c +++ b/lib_enc/normalizecoefs.c @@ -41,7 +41,7 @@ #endif #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------- * normalizecoefs() diff --git a/lib_enc/peak_vq_enc.c b/lib_enc/peak_vq_enc.c index a77f071112..e2bc6b9c5c 100644 --- a/lib_enc/peak_vq_enc.c +++ b/lib_enc/peak_vq_enc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #include /*-------------------------------------------------------------------------- diff --git a/lib_enc/pit_enc.c b/lib_enc/pit_enc.c index 454da71966..2bbca8b8b4 100644 --- a/lib_enc/pit_enc.c +++ b/lib_enc/pit_enc.c @@ -42,7 +42,7 @@ #include "prot.h" #include "rom_enc.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * pit_encode() diff --git a/lib_enc/pitch_ol.c b/lib_enc/pitch_ol.c index 72d454fd30..32ab74cea6 100644 --- a/lib_enc/pitch_ol.c +++ b/lib_enc/pitch_ol.c @@ -41,7 +41,7 @@ #include "cnst.h" #include "rom_com.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_enc/pitch_ol2.c b/lib_enc/pitch_ol2.c index 13f5bd33de..5ea871d265 100644 --- a/lib_enc/pitch_ol2.c +++ b/lib_enc/pitch_ol2.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_enc.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local constants diff --git a/lib_enc/plc_enc_ext.c b/lib_enc/plc_enc_ext.c index 70b573c5a9..4c3685076a 100644 --- a/lib_enc/plc_enc_ext.c +++ b/lib_enc/plc_enc_ext.c @@ -41,7 +41,7 @@ #include "stat_enc.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #define NBITS_GACELP 5 diff --git a/lib_enc/ppp_enc.c b/lib_enc/ppp_enc.c index 887be74fd5..26a0c99ab1 100644 --- a/lib_enc/ppp_enc.c +++ b/lib_enc/ppp_enc.c @@ -40,7 +40,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/pre_proc.c b/lib_enc/pre_proc.c index 1afdcef5a0..f9f3fd74ee 100644 --- a/lib_enc/pre_proc.c +++ b/lib_enc/pre_proc.c @@ -43,7 +43,7 @@ #include "rom_enc.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/pvq_core_enc.c b/lib_enc/pvq_core_enc.c index 3603b950e9..5e7003e025 100644 --- a/lib_enc/pvq_core_enc.c +++ b/lib_enc/pvq_core_enc.c @@ -44,7 +44,7 @@ #include "prot.h" #include "prot.h" #include "stl.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/pvq_encode.c b/lib_enc/pvq_encode.c index acf7928a6f..159a4c2597 100644 --- a/lib_enc/pvq_encode.c +++ b/lib_enc/pvq_encode.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" static void pyramidSearch( const float *const s, const int16_t L, const int16_t Ptot, const float A, int16_t *ztak, float *stak ); diff --git a/lib_enc/q_gain2p.c b/lib_enc/q_gain2p.c index 8a3bc04b9a..949bbe0fe1 100644 --- a/lib_enc/q_gain2p.c +++ b/lib_enc/q_gain2p.c @@ -43,7 +43,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/qlpc_avq.c b/lib_enc/qlpc_avq.c index 03aeab128e..4b41c56bab 100644 --- a/lib_enc/qlpc_avq.c +++ b/lib_enc/qlpc_avq.c @@ -38,7 +38,7 @@ #include "options.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * qlpc_avq() diff --git a/lib_enc/qlpc_stoch.c b/lib_enc/qlpc_stoch.c index 403132b6e8..c42d2efeb7 100644 --- a/lib_enc/qlpc_stoch.c +++ b/lib_enc/qlpc_stoch.c @@ -46,7 +46,7 @@ #include "rom_com.h" #include "rom_enc.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * lpc_quantization() diff --git a/lib_enc/range_enc.c b/lib_enc/range_enc.c index d44ed895a4..4029ffc2f0 100644 --- a/lib_enc/range_enc.c +++ b/lib_enc/range_enc.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/re8_cod.c b/lib_enc/re8_cod.c index 30030cc394..500fa8b139 100644 --- a/lib_enc/re8_cod.c +++ b/lib_enc/re8_cod.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------ diff --git a/lib_enc/reordernorm.c b/lib_enc/reordernorm.c index 2387263aab..b086ef3ad8 100644 --- a/lib_enc/reordernorm.c +++ b/lib_enc/reordernorm.c @@ -42,7 +42,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------*/ /* Function reordernorm */ diff --git a/lib_enc/rom_enc.c b/lib_enc/rom_enc.c index cc9755ce92..72b185f613 100644 --- a/lib_enc/rom_enc.c +++ b/lib_enc/rom_enc.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /* clang-format off */ diff --git a/lib_enc/rst_enc.c b/lib_enc/rst_enc.c index ac8853c721..43f4e19d31 100644 --- a/lib_enc/rst_enc.c +++ b/lib_enc/rst_enc.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * CNG_reset_enc() diff --git a/lib_enc/set_impulse.c b/lib_enc/set_impulse.c index 493d373d1e..f2dc62d3cd 100644 --- a/lib_enc/set_impulse.c +++ b/lib_enc/set_impulse.c @@ -39,7 +39,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local constant diff --git a/lib_enc/setmodeindex.c b/lib_enc/setmodeindex.c index 67d2d9d710..0dba8cf52b 100644 --- a/lib_enc/setmodeindex.c +++ b/lib_enc/setmodeindex.c @@ -42,7 +42,7 @@ #include "prot.h" #include "cnst.h" #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------- diff --git a/lib_enc/sig_clas.c b/lib_enc/sig_clas.c index c1438b6b76..44c6ed8c03 100644 --- a/lib_enc/sig_clas.c +++ b/lib_enc/sig_clas.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local constants diff --git a/lib_enc/spec_center.c b/lib_enc/spec_center.c index f565cba7a8..45c7792dc2 100644 --- a/lib_enc/spec_center.c +++ b/lib_enc/spec_center.c @@ -39,7 +39,7 @@ #include "prot.h" #include "rom_enc.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * spec_center() diff --git a/lib_enc/spec_flatness.c b/lib_enc/spec_flatness.c index 2ef6bd3b60..ed97d959e8 100644 --- a/lib_enc/spec_flatness.c +++ b/lib_enc/spec_flatness.c @@ -39,7 +39,7 @@ #include "options.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * spec_flatness() diff --git a/lib_enc/speech_music_classif.c b/lib_enc/speech_music_classif.c index a61e42c164..e384a50cb8 100644 --- a/lib_enc/speech_music_classif.c +++ b/lib_enc/speech_music_classif.c @@ -46,7 +46,7 @@ #include "ivas_prot.h" #include "rom_enc.h" #include "rom_com.h" /* Common static table prototypes */ -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_enc/stat_noise_uv_enc.c b/lib_enc/stat_noise_uv_enc.c index 3cb876097b..1b7647d7f9 100644 --- a/lib_enc/stat_noise_uv_enc.c +++ b/lib_enc/stat_noise_uv_enc.c @@ -41,7 +41,7 @@ #endif #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * stat_noise_uv_enc() diff --git a/lib_enc/subband_fft.c b/lib_enc/subband_fft.c index 9f02fa04ae..61d40b2489 100644 --- a/lib_enc/subband_fft.c +++ b/lib_enc/subband_fft.c @@ -39,7 +39,7 @@ #include #include "prot.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/swb_bwe_enc.c b/lib_enc/swb_bwe_enc.c index 54e786d761..44609e028b 100644 --- a/lib_enc/swb_bwe_enc.c +++ b/lib_enc/swb_bwe_enc.c @@ -46,7 +46,7 @@ #include "rom_enc.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/swb_bwe_enc_hr.c b/lib_enc/swb_bwe_enc_hr.c index 63e5753650..087e0f01f9 100644 --- a/lib_enc/swb_bwe_enc_hr.c +++ b/lib_enc/swb_bwe_enc_hr.c @@ -42,7 +42,7 @@ #include #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * en_band_quant() diff --git a/lib_enc/swb_bwe_enc_lr.c b/lib_enc/swb_bwe_enc_lr.c index 7273972d7c..c7a6a99f82 100644 --- a/lib_enc/swb_bwe_enc_lr.c +++ b/lib_enc/swb_bwe_enc_lr.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "stat_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*--------------------------------------------------------------------------* * GetSubbandCorrIndex2_har() diff --git a/lib_enc/swb_pre_proc.c b/lib_enc/swb_pre_proc.c index 4d6eaf7836..6089f10350 100644 --- a/lib_enc/swb_pre_proc.c +++ b/lib_enc/swb_pre_proc.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" #include "ivas_rom_enc.h" diff --git a/lib_enc/swb_tbe_enc.c b/lib_enc/swb_tbe_enc.c index 036611efb3..8e4cf5be70 100644 --- a/lib_enc/swb_tbe_enc.c +++ b/lib_enc/swb_tbe_enc.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" /*-----------------------------------------------------------------* diff --git a/lib_enc/tcq_core_enc.c b/lib_enc/tcq_core_enc.c index 11d96e2015..c4742a9c29 100644 --- a/lib_enc/tcq_core_enc.c +++ b/lib_enc/tcq_core_enc.c @@ -44,7 +44,7 @@ #include "cnst.h" #include "basop_util.h" #include "basop_proto_func.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* * tcq_core_LR_enc() diff --git a/lib_enc/tcx_ltp_enc.c b/lib_enc/tcx_ltp_enc.c index fbac9b1640..4274fc047b 100644 --- a/lib_enc/tcx_ltp_enc.c +++ b/lib_enc/tcx_ltp_enc.c @@ -43,7 +43,7 @@ #include "prot.h" #include "rom_enc.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_PLOT #include "deb_out.h" #endif diff --git a/lib_enc/tcx_utils_enc.c b/lib_enc/tcx_utils_enc.c index 04b6f0a206..3b982a7395 100755 --- a/lib_enc/tcx_utils_enc.c +++ b/lib_enc/tcx_utils_enc.c @@ -44,7 +44,7 @@ #include "prot.h" #include "rom_com.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" /*---------------------------------------------------------------------* diff --git a/lib_enc/tfa_enc.c b/lib_enc/tfa_enc.c index dca8b62623..db875805e1 100644 --- a/lib_enc/tfa_enc.c +++ b/lib_enc/tfa_enc.c @@ -38,7 +38,7 @@ #include "options.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * tfaCalcEnv() diff --git a/lib_enc/tns_base_enc.c b/lib_enc/tns_base_enc.c index f008ed728f..dde185b345 100644 --- a/lib_enc/tns_base_enc.c +++ b/lib_enc/tns_base_enc.c @@ -37,7 +37,7 @@ #include #include #include "options.h" -#include "wmops.h" +#include "wmc_auto.h" #include "cnst.h" #include "rom_com.h" #include "prot.h" diff --git a/lib_enc/transient_detection.c b/lib_enc/transient_detection.c index 469c7c4d8d..39cb0d176f 100644 --- a/lib_enc/transient_detection.c +++ b/lib_enc/transient_detection.c @@ -44,7 +44,7 @@ #include "prot.h" #include "ivas_prot.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------* diff --git a/lib_enc/transition_enc.c b/lib_enc/transition_enc.c index ef291f23c2..52d4b19803 100644 --- a/lib_enc/transition_enc.c +++ b/lib_enc/transition_enc.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/update_decision.c b/lib_enc/update_decision.c index 05877f7a7e..655ce8d8b7 100644 --- a/lib_enc/update_decision.c +++ b/lib_enc/update_decision.c @@ -38,7 +38,7 @@ #include "options.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/updt_enc.c b/lib_enc/updt_enc.c index c6663895e0..ec9b0b78b1 100644 --- a/lib_enc/updt_enc.c +++ b/lib_enc/updt_enc.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * updt_enc() diff --git a/lib_enc/updt_tar.c b/lib_enc/updt_tar.c index 4cf7f78680..692dad3f58 100644 --- a/lib_enc/updt_tar.c +++ b/lib_enc/updt_tar.c @@ -40,7 +40,7 @@ #include "debug.h" #endif #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*----------------------------------------------------------------------------------* * procedure updt_tar() diff --git a/lib_enc/vad.c b/lib_enc/vad.c index 8d3c0beb4f..ff4d3c36bc 100644 --- a/lib_enc/vad.c +++ b/lib_enc/vad.c @@ -43,7 +43,7 @@ #include "cnst.h" #include "prot.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_prot.h" /*-----------------------------------------------------------------* diff --git a/lib_enc/vad_param_updt.c b/lib_enc/vad_param_updt.c index cbbf5c37d9..21c940510d 100644 --- a/lib_enc/vad_param_updt.c +++ b/lib_enc/vad_param_updt.c @@ -42,7 +42,7 @@ #include #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * vad_param_updt() diff --git a/lib_enc/vad_proc.c b/lib_enc/vad_proc.c index f40ca2cb5f..93f357aa07 100644 --- a/lib_enc/vad_proc.c +++ b/lib_enc/vad_proc.c @@ -39,7 +39,7 @@ #include "options.h" #include "prot.h" #include "rom_enc.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_enc/vbr_average_rate.c b/lib_enc/vbr_average_rate.c index a32091f690..77ac2a9ddb 100644 --- a/lib_enc/vbr_average_rate.c +++ b/lib_enc/vbr_average_rate.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * Local constants diff --git a/lib_enc/vlpc_1st_cod.c b/lib_enc/vlpc_1st_cod.c index 9f93167054..0ffbc85a9f 100644 --- a/lib_enc/vlpc_1st_cod.c +++ b/lib_enc/vlpc_1st_cod.c @@ -42,7 +42,7 @@ #include "cnst.h" #include "prot.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* diff --git a/lib_enc/vlpc_2st_cod.c b/lib_enc/vlpc_2st_cod.c index 86abfec1b0..7a90311d7e 100644 --- a/lib_enc/vlpc_2st_cod.c +++ b/lib_enc/vlpc_2st_cod.c @@ -38,7 +38,7 @@ #include "options.h" #include "cnst.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------* * vlpc_2st_cod() diff --git a/lib_enc/voiced_enc.c b/lib_enc/voiced_enc.c index 55ee77a476..9b0a1f4bfc 100644 --- a/lib_enc/voiced_enc.c +++ b/lib_enc/voiced_enc.c @@ -40,7 +40,7 @@ #include "prot.h" #include "cnst.h" #include "rom_com.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/waveadjust_fec_cod.c b/lib_enc/waveadjust_fec_cod.c index e0b87477be..f1d5ab6220 100644 --- a/lib_enc/waveadjust_fec_cod.c +++ b/lib_enc/waveadjust_fec_cod.c @@ -38,7 +38,7 @@ #include "options.h" #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* * SFM_Cal() diff --git a/lib_rend/ivas_allrad_dec.c b/lib_rend/ivas_allrad_dec.c index a61f543cb1..a25e708c35 100644 --- a/lib_rend/ivas_allrad_dec.c +++ b/lib_rend/ivas_allrad_dec.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUG_MODE_INFO_ALLRAD diff --git a/lib_rend/ivas_binauralRenderer.c b/lib_rend/ivas_binauralRenderer.c index b647073188..906bc22945 100644 --- a/lib_rend/ivas_binauralRenderer.c +++ b/lib_rend/ivas_binauralRenderer.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_rend/ivas_binaural_reverb.c b/lib_rend/ivas_binaural_reverb.c index b03c8c0053..9104d37f7a 100644 --- a/lib_rend/ivas_binaural_reverb.c +++ b/lib_rend/ivas_binaural_reverb.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /* The reverberator structure implemented here is described in detail in: diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 760dbcbaed..ae2240df34 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -46,7 +46,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_rend/ivas_efap.c b/lib_rend/ivas_efap.c index 8314d3117f..cb4b209488 100644 --- a/lib_rend/ivas_efap.c +++ b/lib_rend/ivas_efap.c @@ -42,7 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* * Local constants diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 7c4183b0e8..bbb4afa152 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -39,7 +39,7 @@ #include "assert.h" #include "ivas_rom_TdBinauralRenderer.h" #include "ivas_error.h" -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------* diff --git a/lib_rend/ivas_limiter.c b/lib_rend/ivas_limiter.c index fd116223c5..dc290742c5 100644 --- a/lib_rend/ivas_limiter.c +++ b/lib_rend/ivas_limiter.c @@ -36,7 +36,7 @@ #include "ivas_prot.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include #ifndef EXT_RENDERER diff --git a/lib_rend/ivas_ls_custom_dec.c b/lib_rend/ivas_ls_custom_dec.c index 4f10420363..b76b7d8da4 100644 --- a/lib_rend/ivas_ls_custom_dec.c +++ b/lib_rend/ivas_ls_custom_dec.c @@ -37,7 +37,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index 14e8154018..e59c98d167 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -35,7 +35,7 @@ #include "prot.h" #include "ivas_prot.h" #include -#include "wmops.h" +#include "wmc_auto.h" #include "ivas_rom_com.h" #ifdef EXT_RENDERER #include "lib_rend.h" diff --git a/lib_rend/ivas_objectRenderer_hrFilt.c b/lib_rend/ivas_objectRenderer_hrFilt.c index 016d5a60f9..6b0eb31970 100644 --- a/lib_rend/ivas_objectRenderer_hrFilt.c +++ b/lib_rend/ivas_objectRenderer_hrFilt.c @@ -39,7 +39,7 @@ #include "ivas_rom_rend.h" #include "ivas_cnst.h" #include "ivas_rom_TdBinauralRenderer.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index df190b91b1..9f0c0bf427 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -34,7 +34,7 @@ #include "options.h" #include "prot.h" #include "ivas_prot.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUGGING #include "debug.h" #endif diff --git a/lib_rend/ivas_objectRenderer_sfx.c b/lib_rend/ivas_objectRenderer_sfx.c index 59c37eb671..44bc695e1d 100644 --- a/lib_rend/ivas_objectRenderer_sfx.c +++ b/lib_rend/ivas_objectRenderer_sfx.c @@ -36,7 +36,7 @@ #include "ivas_prot.h" #include "ivas_rom_rend.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*---------------------------------------------------------------------* diff --git a/lib_rend/ivas_objectRenderer_sources.c b/lib_rend/ivas_objectRenderer_sources.c index a9e88602ca..364da58c7f 100644 --- a/lib_rend/ivas_objectRenderer_sources.c +++ b/lib_rend/ivas_objectRenderer_sources.c @@ -35,7 +35,7 @@ #include #include "ivas_prot.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUGGING #include "debug.h" #endif diff --git a/lib_rend/ivas_objectRenderer_vec.c b/lib_rend/ivas_objectRenderer_vec.c index 11c5d31ea8..17f5f229d1 100644 --- a/lib_rend/ivas_objectRenderer_vec.c +++ b/lib_rend/ivas_objectRenderer_vec.c @@ -35,7 +35,7 @@ #include #include "ivas_prot.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #ifdef DEBUGGING #include "debug.h" #endif diff --git a/lib_rend/ivas_orient_trk.c b/lib_rend/ivas_orient_trk.c index 4754062b56..8d4d561898 100644 --- a/lib_rend/ivas_orient_trk.c +++ b/lib_rend/ivas_orient_trk.c @@ -40,7 +40,7 @@ #endif #include #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index e5407abff4..40711b79ad 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -43,7 +43,7 @@ #include "debug.h" #include #endif -#include "wmops.h" +#include "wmc_auto.h" /*-------------------------------------------------------------------------* * audioCfg2channels() diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index 7e8caec092..8dbf05ed4a 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -39,7 +39,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 22265c03c1..ffbdd026a3 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -41,7 +41,7 @@ #include "math.h" #include "ivas_rom_rend.h" #include -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_reverb_delay_line.c b/lib_rend/ivas_reverb_delay_line.c index 9ad1a03bf9..361af732ff 100644 --- a/lib_rend/ivas_reverb_delay_line.c +++ b/lib_rend/ivas_reverb_delay_line.c @@ -37,7 +37,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_reverb_fft_filter.c b/lib_rend/ivas_reverb_fft_filter.c index 7a304aaf7c..4b8b2ec414 100644 --- a/lib_rend/ivas_reverb_fft_filter.c +++ b/lib_rend/ivas_reverb_fft_filter.c @@ -38,7 +38,7 @@ #endif #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_reverb_filter_design.c b/lib_rend/ivas_reverb_filter_design.c index 0654dbfa8a..efe8ec16dc 100644 --- a/lib_rend/ivas_reverb_filter_design.c +++ b/lib_rend/ivas_reverb_filter_design.c @@ -40,7 +40,7 @@ #include #include #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_reverb_iir_filter.c b/lib_rend/ivas_reverb_iir_filter.c index b633f8e82c..b557079db3 100644 --- a/lib_rend/ivas_reverb_iir_filter.c +++ b/lib_rend/ivas_reverb_iir_filter.c @@ -38,7 +38,7 @@ #include "debug.h" #endif #include -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_reverb_utils.c b/lib_rend/ivas_reverb_utils.c index 31a559bd2c..7d26351ee8 100644 --- a/lib_rend/ivas_reverb_utils.c +++ b/lib_rend/ivas_reverb_utils.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_rom_TdBinauralRenderer.c b/lib_rend/ivas_rom_TdBinauralRenderer.c index 34263ea8f3..a4e07a435e 100644 --- a/lib_rend/ivas_rom_TdBinauralRenderer.c +++ b/lib_rend/ivas_rom_TdBinauralRenderer.c @@ -39,7 +39,7 @@ #endif #include "cnst.h" #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------- diff --git a/lib_rend/ivas_rom_binauralRenderer.c b/lib_rend/ivas_rom_binauralRenderer.c index bfd2da9fb4..b778c72092 100644 --- a/lib_rend/ivas_rom_binauralRenderer.c +++ b/lib_rend/ivas_rom_binauralRenderer.c @@ -37,7 +37,7 @@ #endif #include "cnst.h" #include "ivas_cnst.h" -#include "wmops.h" +#include "wmc_auto.h" /* clang-format off */ diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 9774900c57..6a0c460ba5 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -43,7 +43,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #ifndef EXT_RENDERER diff --git a/lib_rend/ivas_sba_rendering.c b/lib_rend/ivas_sba_rendering.c index b7c5553671..194dffc0b9 100755 --- a/lib_rend/ivas_sba_rendering.c +++ b/lib_rend/ivas_sba_rendering.c @@ -40,7 +40,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" /*-----------------------------------------------------------------------* diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 035d0ee4cb..9f714e73b0 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -39,7 +39,7 @@ #include "ivas_rom_rend.h" #include "ivas_lib_rend_internal.h" #include "prot.h" -#include "wmops.h" +#include "wmc_auto.h" #include #include diff --git a/lib_util/audio_file_reader.c b/lib_util/audio_file_reader.c index d2c38cbb17..ded04a9f2c 100644 --- a/lib_util/audio_file_reader.c +++ b/lib_util/audio_file_reader.c @@ -34,7 +34,7 @@ #include "tinywavein_c.h" #include #include -#include "wmops.h" +#include "wmc_auto.h" struct AudioFileReader { diff --git a/lib_util/audio_file_writer.c b/lib_util/audio_file_writer.c index af9c6ee0e6..5c86161ead 100644 --- a/lib_util/audio_file_writer.c +++ b/lib_util/audio_file_writer.c @@ -34,7 +34,7 @@ #include "tinywaveout_c.h" #include #include -#include "wmops.h" +#include "wmc_auto.h" struct AudioFileWriter { diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c index 2bf19080e5..f71a878c98 100644 --- a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_prox_mix.c @@ -45,7 +45,7 @@ #include "debug.h" #endif #include "ivas_prox_mix.h" -#include "wmops.h" +#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* * PreProcessor -- GitLab From 4c9c3530ee1040e88a7f3a477307aa882caacbaa Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 10:54:52 +0100 Subject: [PATCH 006/103] replaced WMC_TOOL_MAN with WMC_TOOL_SKIP --- apps/decoder.c | 2 +- apps/encoder.c | 2 +- lib_com/ari_hm.c | 4 +++- lib_com/arith_coder.c | 5 ++++- lib_com/bitalloc.c | 5 ++++- lib_com/bitstream.c | 4 ++-- lib_com/fft.c | 4 +++- lib_com/hq2_bit_alloc.c | 4 +++- lib_com/hq2_core_com.c | 4 ++-- lib_com/index_pvq_opt.c | 5 ++--- lib_com/interpol.c | 4 ++-- lib_com/lsf_tools.c | 4 ++-- lib_com/modif_fs.c | 4 ++-- lib_com/parameter_bitmaping.c | 16 ++++++++-------- lib_com/pvq_com.c | 4 +++- lib_com/tools.c | 21 ++++++++++----------- lib_debug/segsnr.c | 4 +++- lib_dec/FEC.c | 4 ++-- lib_dec/arith_coder_dec.c | 4 ++-- lib_dec/hq_lr_dec.c | 24 ++++++++++++------------ lib_dec/pitch_extr.c | 4 ++-- lib_dec/pvq_core_dec.c | 4 ++-- lib_dec/tcq_core_dec.c | 28 ++++++++++++++-------------- lib_enc/arith_coder_enc.c | 8 ++++---- lib_enc/hq_lr_enc.c | 24 ++++++++++++------------ lib_enc/ivas_stereo_eclvq_enc.c | 4 ++-- lib_enc/lsf_msvq_ma_enc.c | 4 ++-- lib_enc/tcq_core_enc.c | 16 ++++++++-------- lib_enc/transient_detection.c | 4 ++-- 29 files changed, 119 insertions(+), 105 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index aaef6c2cd5..ca7a96278e 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -59,7 +59,7 @@ #include "render_config_reader.h" -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /*------------------------------------------------------------------------------------------* * Local constants, enums, structures diff --git a/apps/encoder.c b/apps/encoder.c index 45e292ddf8..a9ff08770b 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -53,7 +53,7 @@ #include "debug.h" #endif -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /*------------------------------------------------------------------------------------------* diff --git a/lib_com/ari_hm.c b/lib_com/ari_hm.c index d4727d6116..cbe681263e 100644 --- a/lib_com/ari_hm.c +++ b/lib_com/ari_hm.c @@ -196,7 +196,7 @@ int16_t CountIndexBits( return 8; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /*-------------------------------------------------------------------* * tcx_hm_render() @@ -301,3 +301,5 @@ void tcx_hm_modify_envelope( return; } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/arith_coder.c b/lib_com/arith_coder.c index 7a862fa5d0..b192213aff 100644 --- a/lib_com/arith_coder.c +++ b/lib_com/arith_coder.c @@ -48,7 +48,8 @@ #include "wmc_auto.h" -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP + /*-------------------------------------------------------* * expfp() * @@ -573,3 +574,5 @@ void tcx_arith_render_envelope( return; } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/bitalloc.c b/lib_com/bitalloc.c index 43b27971d3..c393bee870 100644 --- a/lib_com/bitalloc.c +++ b/lib_com/bitalloc.c @@ -221,7 +221,8 @@ void bitalloc( } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP + /*-------------------------------------------------------------------* * BitAllocF() * @@ -1020,3 +1021,5 @@ int16_t BitAllocWB( return (Word16) t_fx; } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c index 0c13dfc580..75529eeadf 100644 --- a/lib_com/bitstream.c +++ b/lib_com/bitstream.c @@ -622,7 +622,7 @@ uint16_t get_indice_1( return st->bit_stream[pos]; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /*-------------------------------------------------------------------* * reset_indices_enc() @@ -2960,4 +2960,4 @@ void dtx_read_padding_bits( st->total_brate = tmp; } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP diff --git a/lib_com/fft.c b/lib_com/fft.c index 1823f51372..d9edf0ad14 100644 --- a/lib_com/fft.c +++ b/lib_com/fft.c @@ -6393,7 +6393,7 @@ void rfft( } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP #define SCALEFACTOR8 ( 4 ) #define SCALEFACTOR64 ( 7 ) @@ -6766,3 +6766,5 @@ void BASOP_cfft( return; } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/hq2_bit_alloc.c b/lib_com/hq2_bit_alloc.c index b3fa6f3616..17aff7a017 100644 --- a/lib_com/hq2_bit_alloc.c +++ b/lib_com/hq2_bit_alloc.c @@ -47,7 +47,7 @@ #include "stl.h" #include "wmc_auto.h" -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /*------------------------------------------------------------------- * Local constants @@ -1030,3 +1030,5 @@ void hq2_bit_alloc( } return; } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/hq2_core_com.c b/lib_com/hq2_core_com.c index 062d86615e..c02380af38 100644 --- a/lib_com/hq2_core_com.c +++ b/lib_com/hq2_core_com.c @@ -306,7 +306,7 @@ void reverse_transient_frame_energies( return; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP void bit_allocation_second_fx( Word32 *Rk, Word32 *Rk_sort, @@ -415,7 +415,7 @@ void bit_allocation_second_fx( return; } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /*--------------------------------------------------------------------------* * spt_shorten_domain_pre() diff --git a/lib_com/index_pvq_opt.c b/lib_com/index_pvq_opt.c index 31010e2786..e51906f02b 100644 --- a/lib_com/index_pvq_opt.c +++ b/lib_com/index_pvq_opt.c @@ -89,8 +89,7 @@ static int16_t local_norm_l_opt( { int16_t l32res; -#define WMC_TOOL_MAN - MAC( 1 ); +#define WMC_TOOL_SKIP if ( l32var == (int32_t) MINNEG ) { @@ -115,7 +114,7 @@ static int16_t local_norm_l_opt( } } } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP return ( l32res ); } diff --git a/lib_com/interpol.c b/lib_com/interpol.c index c23f790780..1fbd14cde5 100644 --- a/lib_com/interpol.c +++ b/lib_com/interpol.c @@ -70,10 +70,10 @@ float interpolation( for ( i = 0; i < nb_coef; i++ ) { s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP c1 += up_samp; c2 += up_samp; -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } return s; diff --git a/lib_com/lsf_tools.c b/lib_com/lsf_tools.c index 88aa59c9ae..be9d2c0837 100644 --- a/lib_com/lsf_tools.c +++ b/lib_com/lsf_tools.c @@ -2079,7 +2079,7 @@ void msvq_dec( start = 0; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP v_add( uq + start, cb[i] + Idx[i] * maxn, uq + start, n ); IF( uq_ind != NULL ) @@ -2090,7 +2090,7 @@ void msvq_dec( uq_ind[start + j] = add( uq_ind[start + j], (Word16) ( cb[i][Idx[i] * maxn + j] * 2.0f * 1.28f ) ); } } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } return; diff --git a/lib_com/modif_fs.c b/lib_com/modif_fs.c index ee60cdb1f5..d2618fd36d 100644 --- a/lib_com/modif_fs.c +++ b/lib_com/modif_fs.c @@ -113,7 +113,7 @@ int16_t modify_Fs( } } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* Retrieve and/or calculate the resampling parameters */ fac_num = cfg_ptr->fac_num; fac_den = (int16_t) ( ( cfg_ptr->fin * fac_num ) / cfg_ptr->fout ); @@ -133,7 +133,7 @@ int16_t modify_Fs( signal = signal_tab + 2 * L_FILT_MAX + L_FRAME48k - mem_len - lg; signal_ana = signal; mem_len_ana = mem_len; -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } /*-------------------------------------------------------------------* diff --git a/lib_com/parameter_bitmaping.c b/lib_com/parameter_bitmaping.c index 8a273aafea..786e85e2fa 100644 --- a/lib_com/parameter_bitmaping.c +++ b/lib_com/parameter_bitmaping.c @@ -117,9 +117,9 @@ void GetParameters( { ParamBitMap const *const param = ¶msBitMap->params[iParam]; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP pSubStruct = param->GetParamValue( pParameter, index, &value ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /* If a function for encoding/decoding value is defined than it should take care of 0 */ if ( param->fZeroAllowed || ( param->EncodeValue != NULL ) ) { @@ -130,9 +130,9 @@ void GetParameters( *( *pStream )++ = value - 1; } ++*pnSize; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP *pnBits += ( param->nBits != 0 ) ? param->nBits : param->GetNumberOfBits( value, index ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) { GetParameters( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize, pnBits ); @@ -167,9 +167,9 @@ void SetParameters( /* If a function for encoding/decoding value is defined than it should take care of 0 */ value = *( *pStream )++ + ( param->fZeroAllowed || ( param->EncodeValue != NULL ) ? 0 : 1 ); -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP pSubStruct = param->SetParamValue( pParameter, index, value ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP ++*pnSize; if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) { @@ -207,9 +207,9 @@ void WriteToBitstream( TEncodeValue EncodeValue; int16_t value; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP nBits = ( param->nBits != 0 ) ? param->nBits : param->GetNumberOfBits( **pStream, index ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP fShiftValue = !param->fZeroAllowed && ( param->EncodeValue == NULL ); EncodeValue = ( param->EncodeValue == NULL ) ? &FixedWidthEncoding : param->EncodeValue; value = PutIntoBitstream( pStream, EncodeValue, index, hBstr, nBits ) + ( fShiftValue ? 1 : 0 ); diff --git a/lib_com/pvq_com.c b/lib_com/pvq_com.c index 7c6629c9e1..6aa3040e6d 100644 --- a/lib_com/pvq_com.c +++ b/lib_com/pvq_com.c @@ -814,7 +814,7 @@ Word16 atan2_fx( Word16 man, expo, reciprocal; Word16 angle, w, z; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP IF( L_sub( x, 0 ) == 0 ) { return 25736; /* EVS_PI/2 in Q14 */ @@ -973,3 +973,5 @@ Word16 atan2_fx( return angle; /* Q14 between 0 and EVS_PI/2 radian. */ } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/tools.c b/lib_com/tools.c index 8957544cb7..271dc54828 100644 --- a/lib_com/tools.c +++ b/lib_com/tools.c @@ -1446,8 +1446,7 @@ void polezero_filter( return; } -#define WMC_TOOL_MAN - +#define WMC_TOOL_SKIP static float fleft_shift( float input, const int16_t shift ) { return ( input * (float) pow( 2.0, (double) shift ) ); @@ -1457,7 +1456,7 @@ static float fright_shift( float input, const int16_t shift ) { return ( input * (float) pow( 0.5, (double) shift ) ); } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /*--------------------------------------------------------------------------------* @@ -1487,7 +1486,7 @@ float root_a( return 0.0; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* This next piece of code implements a "norm" function */ /* and returns the shift needed to scale "a" to have a */ /* 1 in the (MSB-1) position. This is equivalent to */ @@ -1506,7 +1505,7 @@ float root_a( mod_a *= 2.0; shift_a++; } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP shift_a &= 0xfffe; mod_a = fleft_shift( a, shift_a ); @@ -1554,7 +1553,7 @@ float root_a_over_b( { return 0.0; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP if ( isinf( a ) ) { return FLT_MAX; @@ -1563,12 +1562,12 @@ float root_a_over_b( { return 0.f; } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP a += 0x00000001; b += 0x00000001; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* This next piece of code implements a "norm" function */ /* and returns the shift needed to scale "a" to have a */ /* 1 in the (MSB-1) position. This is equivalent to */ @@ -1587,12 +1586,12 @@ float root_a_over_b( mod_a *= 2.0; shift_a++; } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP shift_a &= 0xfffe; mod_a = fleft_shift( a, shift_a ); -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* This next piece of code implements a "norm" function */ /* and returns the shift needed to scale "b" to have a */ /* 1 in the (MSB-1) position. This is equivalent to */ @@ -1611,7 +1610,7 @@ float root_a_over_b( mod_b *= 2.0; shift_b++; } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP shift_b &= 0xfffe; mod_b = fleft_shift( b, shift_b ); diff --git a/lib_debug/segsnr.c b/lib_debug/segsnr.c index 69a25f0e4f..51b33f57a9 100644 --- a/lib_debug/segsnr.c +++ b/lib_debug/segsnr.c @@ -39,7 +39,7 @@ #include "options.h" #include "prot.h" -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP #ifdef OUTPUT_SNR /*_____________________________________________________________________ @@ -101,3 +101,5 @@ float segsnr( float x[], float xe[], int16_t n, int16_t nseg ) return ( snr ); } #endif + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_dec/FEC.c b/lib_dec/FEC.c index 7716f3ef9d..f623c265c2 100644 --- a/lib_dec/FEC.c +++ b/lib_dec/FEC.c @@ -522,7 +522,7 @@ static void gain_dec_bfi( } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /*-------------------------------------------------------------------* * pulseRes_preCalc() * @@ -577,4 +577,4 @@ static void pulseRes_preCalc( return; } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP diff --git a/lib_dec/arith_coder_dec.c b/lib_dec/arith_coder_dec.c index 28fe250e6d..ce02943382 100644 --- a/lib_dec/arith_coder_dec.c +++ b/lib_dec/arith_coder_dec.c @@ -170,9 +170,9 @@ void tcx_arith_decode_envelope( gamma_w = 1.0f; gamma_uw = 1.0f / st->gamma; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP tcx_arith_render_envelope( A_ind, L_frame, L_spec, FL2WORD16( hTcxCfg->preemph_fac ), FL2WORD16( gamma_w ), FL2WORD16( 0.5f * gamma_uw ), env ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP if ( use_hm ) { diff --git a/lib_dec/hq_lr_dec.c b/lib_dec/hq_lr_dec.c index fd323f3bba..f0717287b2 100644 --- a/lib_dec/hq_lr_dec.c +++ b/lib_dec/hq_lr_dec.c @@ -252,7 +252,7 @@ void hq_lr_dec( return; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* Estimate number of bits per sub-band */ Q_band_energy = SWB_BWE_LR_Qbe; FOR( i = 0; i < bands; i++ ) @@ -295,7 +295,7 @@ void hq_lr_dec( Ep_tmp_fx[i] = L_shr( L_tmp, sub( 15, exp2 ) ); /*Q13 */ Ep_tmp[i] = (float) ( Ep_tmp_fx[i] / pow( 2.0, 13 ) ); } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP if ( *is_transient == 0 && inner_frame == L_FRAME8k && st->core_brate <= ACELP_13k20 ) { @@ -306,7 +306,7 @@ void hq_lr_dec( last_bitalloc_max_band[i] = get_next_indice( st, 1 ); } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP lowband = 6; move16(); trans_bit = 2; @@ -567,7 +567,7 @@ void hq_lr_dec( #endif /* BASOP_NOGLOB */ } } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP for ( i = 0; i < bands; i++ ) { @@ -578,7 +578,7 @@ void hq_lr_dec( } else if ( *is_transient == 0 && inner_frame == L_FRAME16k ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP bit_budget = sub( bit_budget, 2 ); /* bits in high bands to indicate the last 2 subbands is allocated bits or not */ /* decode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ for ( i = 0; i < 2; i++ ) @@ -839,7 +839,7 @@ void hq_lr_dec( L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ } } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP for ( i = 0; i < bands; i++ ) { @@ -1216,14 +1216,14 @@ static float band_energy_dequant( deng_bits += BITS_DE_CMODE; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* Get the reference energy */ exp_normd = norm_l( L_qint ); div_s( &rev_qint_fx, 0x4000, round_fx( L_shl( L_qint, exp_normd ) ) ); /* Q14-(29+exp_normd-16)+15 */ Qrev_qint = sub( 14 - ( 29 - 16 ) + 15, exp_normd ); bq0 = (int16_t) round_fx( L_shl( L_mult( eref_fx, rev_qint_fx ), sub( 5, Qrev_qint ) ) ); /* 16-(10+Qrev_qint+1) */ -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /* Reconstruct quantized spectrum */ bq1[0] = bq2[0] + bq0; @@ -1234,11 +1234,11 @@ static float band_energy_dequant( for ( k = 0; k < bands; k++ ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP L_band_energy[k] = L_mls( L_qint, bq1[k] ); move32(); /* 29+0-15 -> Qbe(Q14) */ band_energy[k] = (float) ( L_band_energy[k] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } if ( is_transient ) @@ -1309,7 +1309,7 @@ static void mdct_spectrum_fine_gain_dec( Word16 Qgt; Word16 temp_lo_fx, temp_hi_fx; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* Fine gain quantization on only the most significant energy bands */ /*delta = qint / gqlevs; */ exp_normn = norm_l( L_qint ); @@ -1334,7 +1334,7 @@ static void mdct_spectrum_fine_gain_dec( gain_table_fx[i] = shl( gain_table_fx[i], sub( 14, Qgt ) ); /* Qgt -> Q14 */ gain_table[i] = (float) ( gain_table_fx[i] / pow( 2.0f, 14 ) ); } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP for ( k = bands - Ngq; k < bands; k++ ) { diff --git a/lib_dec/pitch_extr.c b/lib_dec/pitch_extr.c index a1a421564d..d115275f89 100644 --- a/lib_dec/pitch_extr.c +++ b/lib_dec/pitch_extr.c @@ -151,7 +151,7 @@ void pitch_pred_linear_fit( ml_fx[i] = (int32_t) ( ml[i] / pow( 2.f, -31 + 15 ) ); /* Q16 */ } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP FOR( i = 0; i < lcor; i++ ) { pg_fx[i] = mult( mult( pg_fx[i], pg_fx[i] ), timeWeight[i] ); /*Q12 'til pg[lcor-1], Q14 'til pg[8]*/ @@ -286,7 +286,7 @@ void pitch_pred_linear_fit( pita = L_shl( L_deposit_l( a1 ), add( add( sum0_q, 16 - 10 + 1 ), sub( tmpa, a_e ) ) ) /*Q16*/; pitb = L_shl_r( L_mult( b1 /*Q15*/, add( no_subfr_pred, nb_subfr ) /*Q0*/ ), add( add( sum0_q, 16 - 12 ), sub( tmpb, b_e ) ) ); pit = L_add( pita, pitb ); /*Q16*/ -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /* convert pitch back to float precision */ T0 = (float) ( pit * pow( 2.f, -31 + 15 ) ); diff --git a/lib_dec/pvq_core_dec.c b/lib_dec/pvq_core_dec.c index c14263f163..d444a7ca91 100644 --- a/lib_dec/pvq_core_dec.c +++ b/lib_dec/pvq_core_dec.c @@ -403,7 +403,7 @@ static void densitySymbolIndexDecode( *index_phi = -1; return; } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP angle = atan2_fx( SQRT_DIM_fx[r_dim], SQRT_DIM_fx[l_dim] ); #ifndef BASOP_NOGLOB angle = shl( angle, 1 ); @@ -412,7 +412,7 @@ static void densitySymbolIndexDecode( #endif /* BASOP_NOGLOB */ angle = mult_r( angle, 20861 ); c = mult_r( res, angle ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP res_c = res - c; if ( c == 0 ) diff --git a/lib_dec/tcq_core_dec.c b/lib_dec/tcq_core_dec.c index 9089a8a512..bcc3ca4286 100644 --- a/lib_dec/tcq_core_dec.c +++ b/lib_dec/tcq_core_dec.c @@ -148,7 +148,7 @@ void tcq_core_LR_dec( } } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP bsub_fx = L_shl( L_add( tcq_arbits, lsbtcq_bits ), 16 ); IF( bsub_fx > 0 ) { @@ -173,7 +173,7 @@ void tcq_core_LR_dec( } srt_vec_ind_fx( Rk_fx, Rk_sort_fx, k_sort, BANDS ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /*read the bits*/ nb_bytes = bit_budget >> 3; @@ -248,10 +248,10 @@ void tcq_core_LR_dec( } if ( surplus_fx != 0 ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP surplus_fx = L_add( Rk_fx[k_sort[k]], surplus_fx ); surplus_fx = L_add( delta_fx, surplus_fx ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } } else @@ -283,10 +283,10 @@ void tcq_core_LR_dec( } if ( surplus_fx != 0 ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP surplus_fx = L_add( Rk_fx[k_sort[k]], surplus_fx ); surplus_fx = L_add( delta_fx, surplus_fx ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } } else @@ -315,7 +315,7 @@ void tcq_core_LR_dec( if ( Rk_fx[k_sort[k]] > 0 && surplus_fx < 0 ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP IF( nzbands <= 1 ) { divider = 0; @@ -335,7 +335,7 @@ void tcq_core_LR_dec( delta_fx = 0; } surplus_fx = L_sub( surplus_fx, delta_fx ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } else { @@ -344,13 +344,13 @@ void tcq_core_LR_dec( } } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP if ( ( L_sub( surplus_fx, 524288 ) > 0 && sub( input_frame, L_FRAME8k ) == 0 ) || ( L_sub( surplus_fx, 786432 ) > 0 && sub( input_frame, L_FRAME16k ) == 0 ) ) { bit_surplus_fx[0] = Mult_32_16( surplus_fx, 24576 ); /* Q16 */ bit_surplus_fx[1] = Mult_32_16( surplus_fx, 8192 ); /* Q16 */ } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP else { bit_surplus_fx[0] = surplus_fx; @@ -363,9 +363,9 @@ void tcq_core_LR_dec( { if ( k == k_num[j] ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP Rk_fx[k_sort[k]] = L_add( Rk_fx[k_sort[k]], bit_surplus_fx[j] ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) { /* get number of pulses */ @@ -412,9 +412,9 @@ void tcq_core_LR_dec( decode_magnitude_usq_fx( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]] ); decode_signs_fx( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP nzbands = sub( nzbands, 1 ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } else { diff --git a/lib_enc/arith_coder_enc.c b/lib_enc/arith_coder_enc.c index 8a0c4b9ad8..e292a2c881 100644 --- a/lib_enc/arith_coder_enc.c +++ b/lib_enc/arith_coder_enc.c @@ -611,9 +611,9 @@ void tcx_arith_encode_envelope( gamma_w = 1.0f; gamma_uw = 1.0f / st->gamma; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP tcx_arith_render_envelope( A_ind, L_frame, L_spec, FL2WORD16( hTcxCfg->preemph_fac ), FL2WORD16( gamma_w ), FL2WORD16( 0.5f * gamma_uw ), env ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP for ( k = 0; k < L_spec; ++k ) { @@ -649,13 +649,13 @@ void tcx_arith_encode_envelope( envelope = (Word16 *) env; tcx_arith_scale_envelope( L_spec, L_spec_core, env, target_bits, low_complexity, envelope, &envelope_e ); -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP tmp = sub( envelope_e, 1 ); FOR( k = 0; k < L_spec; k++ ) { exponents[k] = expfp( negate( envelope[k] ), tmp ); } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP scale = tcx_arith_rateloop( spectrum, L_spec, envelope, envelope_e, exponents, target_bits, deadzone, deadzone_flags, &( hTcxEnc->tcx_target_bits_fac ) ); /* Final quantization */ diff --git a/lib_enc/hq_lr_enc.c b/lib_enc/hq_lr_enc.c index ab9ab86f9f..3e6fb69eeb 100644 --- a/lib_enc/hq_lr_enc.c +++ b/lib_enc/hq_lr_enc.c @@ -326,7 +326,7 @@ void hq_lr_enc( spt_shorten_domain_set( hBstr, hHQ_core, t_audio, p2a_flags, new_band_start, new_band_end, new_band_width, bands, band_start, band_end, band_width, &bit_budget ); } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* Estimate number of bits per band */ Q_band_energy = SWB_BWE_LR_Qbe; FOR( i = 0; i < bands; i++ ) @@ -368,11 +368,11 @@ void hq_lr_enc( move32(); /*Q(31-exp2) */ Ep_tmp_fx[i] = L_shr( L_tmp, sub( 15, exp2 ) ); /*Q13 */ } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP if ( is_transient == 0 && inner_frame == L_FRAME8k && st->core_brate <= ACELP_13k20 ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP lowband = 6; move16(); trans_bit = 2; @@ -640,7 +640,7 @@ void hq_lr_enc( L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ } } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP for ( i = 0; i < bands; i++ ) { @@ -657,7 +657,7 @@ void hq_lr_enc( } else if ( is_transient == 0 && inner_frame == L_FRAME16k ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP bit_budget = sub( bit_budget, 2 ); /* bits in high bands to indicate the last 2 subbands is allocated bits or not */ FOR( i = 0; i < bands; i++ ) { @@ -909,7 +909,7 @@ void hq_lr_enc( L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ } } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP for ( i = 0; i < bands; i++ ) { @@ -1510,7 +1510,7 @@ static float band_energy_quant( for ( k = 0; k < bands; k++ ) L_band_energy[k] = (Word32) ( band_energy[k] * pow( 2.0f, SWB_BWE_LR_Qbe ) ); -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP exp_normd = norm_l( L_qint ); div_s( &rev_qint_fx, 0x4000, round_fx( L_shl( L_qint, exp_normd ) ) ); /* Q14-(29+exp_normd-16)+15 */ Qrev_qint = sub( 14 - ( 29 - 16 ) + 15, exp_normd ); @@ -1522,7 +1522,7 @@ static float band_energy_quant( L_tmp = L_mls( L_band_energy[k], rev_qint_fx ); /* Q14+Qrev_qint-15 */ bq1[k] = round_fx( L_shl( L_tmp, sub( 17, Qrev_qint ) ) ); /* 16-(14+Qrev_qint-15) */ } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP if ( is_transient ) { @@ -1604,10 +1604,10 @@ static float band_energy_quant( for ( k = 0; k < bands; k++ ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP L_band_energy[k] = L_mls( L_qint, (Word16) bq1[k] ); move32(); /* 29+0-15 -> Qbe(Q14) */ -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP band_energy[k] = (float) ( L_band_energy[k] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); } @@ -1708,7 +1708,7 @@ static void mdct_spectrum_fine_gain_enc( Word16 Qgt; Word16 temp_lo_fx, temp_hi_fx; -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP /* Fine gain quantization on only the most significant energy bands */ /*delta = qint / gqlevs; */ exp_normn = norm_l( L_qint ); @@ -1733,7 +1733,7 @@ static void mdct_spectrum_fine_gain_enc( gain_table_fx[i] = shl( gain_table_fx[i], sub( 14, Qgt ) ); /* Qgt -> Q14 */ gain_table[i] = (float) ( gain_table_fx[i] / pow( 2.0f, 14 ) ); } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP for ( k = bands - Ngq; k < bands; k++ ) { diff --git a/lib_enc/ivas_stereo_eclvq_enc.c b/lib_enc/ivas_stereo_eclvq_enc.c index d5d4b29414..ac635ca6fe 100644 --- a/lib_enc/ivas_stereo_eclvq_enc.c +++ b/lib_enc/ivas_stereo_eclvq_enc.c @@ -240,9 +240,9 @@ static int16_t code_length_from_count( assert( c <= ( 1 << 14 ) ); #endif -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP c_norm = norm_s( (int16_t) c ); /* equivalent with 14 - floor(log_base2(c)) */ -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /* compute linear approximation of log2(1 + x), for x in [0, 1], using a look-up table with 64 entries */ /* normalize to {16384, ..., 32767}, subtract MSB bit, and convert to Q6 for indexing log2_1px_table */ diff --git a/lib_enc/lsf_msvq_ma_enc.c b/lib_enc/lsf_msvq_ma_enc.c index d731845268..7e78a2b8e1 100644 --- a/lib_enc/lsf_msvq_ma_enc.c +++ b/lib_enc/lsf_msvq_ma_enc.c @@ -120,14 +120,14 @@ void msvq_enc( cb_stage = cbp; /* Set up pointers to parent and current nodes */ -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP swap( indices[0], indices[1], int16_t * ); MOVE( 3 ); swap( resid[0], resid[1], float * ); MOVE( 3 ); swap( dist[0], dist[1], float * ); MOVE( 3 ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /* p_max points to maximum distortion node (worst of best) */ p_max = 0; diff --git a/lib_enc/tcq_core_enc.c b/lib_enc/tcq_core_enc.c index c4742a9c29..c096117c67 100644 --- a/lib_enc/tcq_core_enc.c +++ b/lib_enc/tcq_core_enc.c @@ -181,7 +181,7 @@ ivas_error tcq_core_LR_enc( } } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP bsub_fx = L_shl( L_add( tcq_arbits, lsbtcq_bits ), 16 ); IF( bsub_fx > 0 ) { @@ -206,7 +206,7 @@ ivas_error tcq_core_LR_enc( } srt_vec_ind_fx( Rk_fx, Rk_sort_fx, k_sort, BANDS ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP /* Quantize spectral band shapes using TCQ */ /* Select ISC */ @@ -282,7 +282,7 @@ ivas_error tcq_core_LR_enc( if ( Rk_fx[k_sort[k]] > 0 && surplus_fx < 0 ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP IF( nzbands <= 1 ) { divider = 0; @@ -302,7 +302,7 @@ ivas_error tcq_core_LR_enc( delta_fx = 0; } surplus_fx = L_sub( surplus_fx, delta_fx ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP } else { @@ -311,13 +311,13 @@ ivas_error tcq_core_LR_enc( } } -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP if ( ( L_sub( surplus_fx, 524288 ) > 0 && sub( input_frame, L_FRAME8k ) == 0 ) || ( L_sub( surplus_fx, 786432 ) > 0 && sub( input_frame, L_FRAME16k ) == 0 ) ) { bit_surplus_fx[0] = Mult_32_16( surplus_fx, 24576 ); /* Q16 */ bit_surplus_fx[1] = Mult_32_16( surplus_fx, 8192 ); /* Q16 */ } -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP else { bit_surplus_fx[0] = surplus_fx; @@ -329,9 +329,9 @@ ivas_error tcq_core_LR_enc( { if ( k == k_num[j] ) { -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP Rk_fx[k_sort[k]] = L_add( Rk_fx[k_sort[k]], bit_surplus_fx[j] ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) /* Then have non-zero block AND WILL BE ENCODED BY TCQ */ { diff --git a/lib_enc/transient_detection.c b/lib_enc/transient_detection.c index 39cb0d176f..a49fff7234 100644 --- a/lib_enc/transient_detection.c +++ b/lib_enc/transient_detection.c @@ -609,9 +609,9 @@ static void RunTransientDetector( assert( ( pTransientDetector->CheckSubblocksForAttack != NULL ) ); /* Variable initialization */ -#define WMC_TOOL_MAN +#define WMC_TOOL_SKIP pTransientDetector->CheckSubblocksForAttack( pSubblockNrg, pAccSubblockNrg, NSUBBLOCKS + nDelay, nRelativeDelay, attackRatioThreshold, &pTransientDetector->bIsAttackPresent, &pTransientDetector->attackIndex ); -#undef WMC_TOOL_MAN +#undef WMC_TOOL_SKIP return; } -- GitLab From 3fe07f2dd1b74c8cc7ce2e89dc0555401576b32a Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 12:29:06 +0100 Subject: [PATCH 007/103] front-end and back-end (reset_mem(), print_mem()) --- apps/decoder.c | 74 +++-------------- apps/encoder.c | 71 ++-------------- apps/renderer.c | 83 ++----------------- lib_com/options.h | 1 - lib_com/prot.h | 26 +----- .../unit_tests/crend/ivas_crend_unit_test.c | 9 +- .../unit_tests/crend/ivas_crend_utest_utils.c | 5 -- 7 files changed, 34 insertions(+), 235 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index ca7a96278e..825903d0be 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -30,6 +30,9 @@ *******************************************************************************************************/ +#include +#include +#include #include "lib_dec.h" #include "cmdl_tools.h" #include "audio_file_writer.h" @@ -41,21 +44,10 @@ #include "head_rotation_file_reader.h" #include "jbm_file_writer.h" #include "evs_rtp_payload.h" -#include -#include -#ifdef WMOPS -#include "PROM_Size_lib_com.h" -#include "PROM_Size_lib_dec.h" -#include "wmc_auto.h" -#endif -#ifdef RAM_COUNTING_TOOL -#include "mem_count.h" -#else -#include -#endif #ifdef DEBUGGING #include "debug.h" #endif +#include "wmc_auto.h" #include "render_config_reader.h" @@ -142,41 +134,6 @@ static IVAS_DEC_FORCED_REND_MODE parseForcedRendModeDec( char *forcedRendModeCha #endif -#ifdef WMOPS -/*------------------------------------------------------------------------------------------* - * Function to print complexity & memory estimates at the decoder - *------------------------------------------------------------------------------------------*/ - -extern int16_t *ptr_base_stack; -extern int16_t *ptr_base_stack; -extern int16_t *ptr_max_stack; -extern int32_t wc_frame; -extern char location_max_stack[256]; -void print_stack_call_tree( void ); - -static void print_mem_dec( size_t SRAM_size ) -{ - fprintf( stdout, "\n\n --- Decoder memory usage --- \n\n" ); - - fprintf( stdout, "PROM size (decoder): %d words (or instructions)\n", PROM_Size_lib_dec ); - fprintf( stdout, "PROM size (common): %d words (or instructions)\n", PROM_Size_lib_com ); - fprintf( stdout, "Stack size (decoder): %ld words in %s() in frame #%d\n", ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) / sizeof( float ), location_max_stack, wc_frame ); - fprintf( stdout, "Table ROM size (decoder): %ld words\n", ( Const_Data_Size_rom_dec() + Const_Data_Size_ivas_rom_dec() ) / sizeof( float ) ); - fprintf( stdout, "Table ROM size (binaural renderer): %ld words\n", ( Const_Data_Size_ivas_rom_binauralRen() + Const_Data_Size_ivas_rom_TdBinauralR() + Const_Data_Size_ivas_rom_binaural_cr() ) / sizeof( float ) ); - fprintf( stdout, "Table ROM size (common): %ld words\n", ( Const_Data_Size_rom_com() + Const_Data_Size_ivas_rom_com() ) / sizeof( float ) ); -#ifdef RAM_COUNTING_TOOL - fprintf( stdout, "Static RAM size (decoder): %ld words\n\n", SRAM_size ); -#endif - print_stack_call_tree(); - - fprintf( stdout, "Note: this is an optimistic estimate of the memory consumption assuming\n" ); - fprintf( stdout, " that each variable (short, long or float) in the codec requires\n" ); - fprintf( stdout, " 32 bits of memory and may therefore be represented by 1 word.\n" ); - fprintf( stdout, " The following formula is used: sizeof('memory array')/sizeof(float)\n\n" ); -} -#endif - - /*------------------------------------------------------------------------------------------* * main() * @@ -205,20 +162,10 @@ int main( #endif #endif -#ifdef WMOPS - size_t SRAM_size = 0; - reset_stack(); - reset_wmops(); -#endif - #ifdef DEBUGGING dbgargs( &argc, argv ); #endif -#ifdef RAM_COUNTING_TOOL - mem_count_init( 0, USE_32BITS ); -#endif - /*------------------------------------------------------------------------------------------* * Parse command-line arguments *------------------------------------------------------------------------------------------*/ @@ -497,6 +444,11 @@ int main( } } +#ifdef WMOPS + reset_wmops(); + rest_mem( USE_32BITS ); +#endif + /*-----------------------------------------------------------------* * Decoding *-----------------------------------------------------------------*/ @@ -574,15 +526,9 @@ cleanup: fprintf( stderr, "\nError while closing file: %s\nContinuing...\n\n", arg.inputBitstreamFilename ); } -#ifdef RAM_COUNTING_TOOL -#ifdef WMOPS - SRAM_size = -#endif - mem_count_summary( USE_DEFAULT ); -#endif #ifdef WMOPS print_wmops(); - print_mem_dec( SRAM_size ); + print_mem(); #endif if ( !arg.quietModeEnabled ) diff --git a/apps/encoder.c b/apps/encoder.c index a9ff08770b..f1c023f8ca 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -30,6 +30,9 @@ *******************************************************************************************************/ +#include +#include +#include #include "lib_enc.h" #include "cmdl_tools.h" #include "audio_file_reader.h" @@ -37,25 +40,13 @@ #include "jbm_file_reader.h" #include "masa_file_reader.h" #include "ism_file_reader.h" -#include -#include -#ifdef WMOPS -#include "PROM_Size_lib_com.h" -#include "PROM_Size_lib_enc.h" -#include "wmc_auto.h" -#endif -#ifdef RAM_COUNTING_TOOL -#include "mem_count.h" -#else -#include -#endif #ifdef DEBUGGING #include "debug.h" #endif +#include "wmc_auto.h" #define WMC_TOOL_SKIP - /*------------------------------------------------------------------------------------------* * Local constants, enums, structures *------------------------------------------------------------------------------------------*/ @@ -154,40 +145,6 @@ static IVAS_ENC_FORCED_MODE parseForcedMode( char *forcedModeChar ); #endif -#ifdef WMOPS -/*------------------------------------------------------------------------------------------* - * Function to print complexity & memory estimates at the encoder - *------------------------------------------------------------------------------------------*/ - -extern int16_t *ptr_base_stack; -extern int16_t *ptr_base_stack; -extern int16_t *ptr_max_stack; -extern int32_t wc_frame; -extern char location_max_stack[256]; -void print_stack_call_tree( void ); - -static void print_mem_enc( size_t SRAM_size ) -{ - fprintf( stdout, "\n\n --- Encoder memory usage --- \n\n" ); - - fprintf( stdout, "PROM size (encoder): %d words (or instructions)\n", PROM_Size_lib_enc ); - fprintf( stdout, "PROM size (common): %d words (or instructions)\n", PROM_Size_lib_com ); - fprintf( stdout, "Stack size (encoder): %ld words in %s() in frame #%d\n", ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) / sizeof( float ), location_max_stack, wc_frame ); - fprintf( stdout, "Table ROM size (encoder): %ld words\n", ( Const_Data_Size_rom_enc() + Const_Data_Size_ivas_rom_enc() ) / sizeof( float ) ); - fprintf( stdout, "Table ROM size (common): %ld words\n", ( Const_Data_Size_rom_com() + Const_Data_Size_ivas_rom_com() ) / sizeof( float ) ); -#ifdef RAM_COUNTING_TOOL - fprintf( stdout, "Static RAM size (encoder): %ld words\n\n", SRAM_size ); -#endif - print_stack_call_tree(); - - fprintf( stdout, "Note: this is an optimistic estimate of the memory consumption assuming\n" ); - fprintf( stdout, " that each variable (short, long or float) in the codec requires\n" ); - fprintf( stdout, " 32 bits of memory and may therefore be represented by 1 word.\n" ); - fprintf( stdout, " The following formula is used: sizeof('memory array')/sizeof(float)\n\n" ); -} -#endif - - /*------------------------------------------------------------------------------------------* * main() * @@ -224,20 +181,10 @@ int main( #endif #endif -#ifdef WMOPS - size_t SRAM_size = 0; - reset_wmops(); - reset_stack(); -#endif - #ifdef DEBUGGING dbgargs( &argc, argv ); #endif -#ifdef RAM_COUNTING_TOOL - mem_count_init( 0, USE_32BITS ); -#endif - initArgStruct( &arg ); /*------------------------------------------------------------------------------------------* @@ -600,8 +547,8 @@ int main( } #ifdef WMOPS - reset_stack(); reset_wmops(); + reset_mem( USE_32BITS ); #endif /*------------------------------------------------------------------------------------------* @@ -829,15 +776,9 @@ cleanup: IVAS_ENC_Close( &hIvasEnc ); -#ifdef RAM_COUNTING_TOOL -#ifdef WMOPS - SRAM_size = -#endif - mem_count_summary( USE_DEFAULT ); -#endif #ifdef WMOPS print_wmops(); - print_mem_enc( SRAM_size ); + print_mem( ); #endif #ifdef DEBUGGING diff --git a/apps/renderer.c b/apps/renderer.c index 5674793bcc..225055226c 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -30,6 +30,13 @@ *******************************************************************************************************/ +#include +#include +#include +#include +#include +#include +#include #include "options.h" #include "debug.h" #include "audio_file_reader.h" @@ -45,33 +52,9 @@ #include "masa_file_reader.h" #include "prot.h" #include "render_config_reader.h" -#ifdef WMOPS -#include "PROM_Size_lib_rend.h" #include "wmc_auto.h" -#endif -#ifdef RAM_COUNTING_TOOL -#include "mem_count.h" -#endif -#include -#include -#include -#include -#include -#include -#include #ifdef EXT_RENDERER -#ifndef count_malloc -#ifdef RAM_COUNTING_TOOL -#define count_malloc( n1 ) MALLOC_FCT_CALL( n1 ) -#define count_calloc( n1, n2 ) CALLOC_FCT_CALL( n1, n2 ) -#define count_free( ptr ) FREE_FCT_CALL( ptr ) -#else -#define count_malloc( n1 ) malloc( n1 ) -#define count_calloc( n1, n2 ) calloc( n1, n2 ) -#define count_free( ptr ) free( ptr ) -#endif -#endif #ifndef min #define min( x, y ) ( ( x ) < ( y ) ? ( x ) : ( y ) ) @@ -96,37 +79,6 @@ static #define SEP_FOLDER '/' #endif -#ifdef WMOPS -void print_stack_call_tree( void ); -int Const_Data_Size_ivas_rom_rend( void ); -extern int16_t *ptr_base_stack; -extern int16_t *ptr_max_stack; -extern int32_t wc_frame; -extern char location_max_stack[256]; - -/*------------------------------------------------------------------------------------------* - * Function to print complexity & memory estimates - *------------------------------------------------------------------------------------------*/ -static void print_mem_renderer( size_t SRAM_size ) -{ - fprintf( stdout, "\n\n --- Renderer memory usage --- \n\n" ); - - fprintf( stdout, "PROM size (renderer): %d words (or instructions)\n", PROM_Size_lib_rend ); - fprintf( stdout, "Stack size: %d words in %s() in frame #%d\n", ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) / sizeof( float ), location_max_stack, wc_frame ); - fprintf( stdout, "Table ROM size(renderer): %d words\n", ( Const_Data_Size_ivas_rom_rend() ) / sizeof( float ) ); - fprintf( stdout, "Table ROM size (binaural renderer): %ld words\n", ( Const_Data_Size_ivas_rom_binauralRen() + Const_Data_Size_ivas_rom_TdBinauralR() + Const_Data_Size_ivas_rom_binaural_cr() ) / sizeof( float ) ); -#ifdef RAM_COUNTING_TOOL - fprintf( stdout, "Static RAM size: %d words\n\n", SRAM_size ); -#endif - print_stack_call_tree(); - - fprintf( stdout, "Note: this is an optimistic estimate of the memory consumption assuming\n" ); - fprintf( stdout, " that each variable (short, long or float) in the codec requires\n" ); - fprintf( stdout, " 32 bits of memory and may therefore be represented by 1 word.\n" ); - fprintf( stdout, " The following formula is used: sizeof('memory array')/sizeof(float)\n\n" ); -} -#endif - typedef struct { uint32_t frameCounter; @@ -595,18 +547,6 @@ int main( int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; -#ifdef WMOPS - size_t SRAM_size; -#endif - -#ifdef WMOPS - reset_wmops(); - reset_stack(); -#endif - -#ifdef RAM_COUNTING_TOOL - mem_count_init( 0, USE_32BITS ); -#endif for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { @@ -856,6 +796,7 @@ int main( #ifdef WMOPS reset_wmops(); + reset_mem( USE_32BITS ); #endif if ( !args.quietModeEnabled ) @@ -1107,15 +1048,9 @@ int main( IsmPositionProvider_close( positionProvider ); RenderConfigReader_close( &renderConfigReader ); -#ifdef RAM_COUNTING_TOOL -#ifdef WMOPS - SRAM_size = -#endif - mem_count_summary( USE_DEFAULT ); -#endif #ifdef WMOPS print_wmops(); - print_mem_renderer( SRAM_size ); + print_mem(); #endif return 0; diff --git a/lib_com/options.h b/lib_com/options.h index c2ef6ee92d..a831340bc0 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -41,7 +41,6 @@ /* ################### Start compiler switches ######################## */ #define SUPPORT_JBM_TRACEFILE /* support for JBM tracefile, which is needed for 3GPP objective/subjective testing, but not relevant for real-world implementations */ -#define RAM_COUNTING_TOOL /* tool to automatically count the dynamically alocated static memory consumption */ /* #################### End compiler switches ######################### */ diff --git a/lib_com/prot.h b/lib_com/prot.h index 2d6527fe59..16463ca8b5 100755 --- a/lib_com/prot.h +++ b/lib_com/prot.h @@ -37,15 +37,13 @@ #ifndef PROT_H #define PROT_H +#include +#include #include #include "options.h" #ifdef DEBUGGING #include "debug.h" #endif -#include -#ifndef RAM_COUNTING_TOOL -#include -#endif #include "typedef.h" #include "stat_enc.h" #include "stat_dec.h" @@ -55,28 +53,8 @@ #include "ivas_stat_dec.h" #include "cnst.h" #include "stl.h" -#ifdef RAM_COUNTING_TOOL -#include "mem_count.h" -#endif #include "ivas_error_utils.h" -/*----------------------------------------------------------------------------------* - * Prototypes of RAM counting tool macros - *----------------------------------------------------------------------------------*/ - -#ifdef RAM_COUNTING_TOOL -#define count_malloc( n1 ) MALLOC_FCT_CALL( n1 ) -#define count_calloc( n1, n2 ) CALLOC_FCT_CALL( n1, n2 ) -#define count_free( ptr ) FREE_FCT_CALL( ptr ) -#else -#define count_malloc( n1 ) malloc( n1 ) -#define count_calloc( n1, n2 ) calloc( n1, n2 ) -#define count_free( ptr ) free( ptr ) -#endif - -#define dynamic_malloc( n1 ) malloc( n1 ) -#define dynamic_calloc( n1, n2 ) calloc( n1, n2 ) -#define dynamic_free( n1 ) free( n1 ) /*----------------------------------------------------------------------------------* * Prototypes of global macros diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c index baa953bc7d..82d365ea26 100644 --- a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c @@ -700,6 +700,11 @@ int main( int argc, char **argv ) ivas_open_files_crend( &io_params ); } } + +#ifdef WMOPS + rest_mem( USE_32BITS ); +#endif + switch ( io_params.test ) { case CREND_ACOUSTIC_PROXIMITY: @@ -721,8 +726,8 @@ int main( int argc, char **argv ) FILES_CLOSE; -#ifdef RAM_COUNTING_TOOL - mem_count_summary( USE_DEFAULT ); +#ifdef WMOPS + print_mem(); #endif return 0; diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c index be5e483927..cc06737da4 100644 --- a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c @@ -1612,11 +1612,6 @@ ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, fl HeadRotationFileReader_close( &headRotReader ); } - -#ifdef RAM_COUNTING_TOOL - mem_count_summary( USE_DEFAULT ); -#endif - return IVAS_SUCCESS; } -- GitLab From bac3d12a2dcf228fda1cf183626e0b33eb64e63d Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 12:34:52 +0100 Subject: [PATCH 008/103] Replacment of count_malloc() with malloc() --- apps/renderer.c | 28 ++-- lib_com/cldfb.c | 12 +- lib_com/fd_cng_com.c | 4 +- lib_com/ivas_cov_smooth.c | 12 +- lib_com/ivas_fb_mixer.c | 40 ++--- lib_com/ivas_mc_param_com.c | 4 +- lib_com/ivas_qmetadata_com.c | 20 +-- lib_com/ivas_transient_det.c | 4 +- lib_com/wi.c | 14 +- lib_dec/dec_gen_voic.c | 4 +- lib_dec/fd_cng_dec.c | 4 +- lib_dec/init_dec.c | 42 ++--- lib_dec/ivas_agc_dec.c | 18 +-- lib_dec/ivas_corecoder_dec_reconfig.c | 24 +-- lib_dec/ivas_cpe_dec.c | 52 +++--- lib_dec/ivas_dirac_dec.c | 150 +++++++++--------- lib_dec/ivas_dirac_dec_binaural_functions.c | 4 +- lib_dec/ivas_dirac_decorr_dec.c | 52 +++--- lib_dec/ivas_dirac_onsets_dec.c | 4 +- lib_dec/ivas_dirac_output_synthesis_cov.c | 26 +-- lib_dec/ivas_dirac_output_synthesis_dec.c | 62 ++++---- lib_dec/ivas_init_dec.c | 68 ++++---- lib_dec/ivas_ism_metadata_dec.c | 2 +- lib_dec/ivas_ism_param_dec.c | 96 +++++------ lib_dec/ivas_ism_renderer.c | 2 +- lib_dec/ivas_lfe_dec.c | 12 +- lib_dec/ivas_masa_dec.c | 30 ++-- lib_dec/ivas_mc_param_dec.c | 64 ++++---- lib_dec/ivas_mct_dec.c | 20 +-- lib_dec/ivas_mono_dmx_renderer.c | 2 +- lib_dec/ivas_out_setup_conversion.c | 20 +-- lib_dec/ivas_sba_dec.c | 18 +-- lib_dec/ivas_sce_dec.c | 18 +-- lib_dec/ivas_spar_decoder.c | 8 +- lib_dec/ivas_spar_md_dec.c | 92 +++++------ lib_dec/ivas_stereo_dft_dec.c | 16 +- lib_dec/ivas_stereo_switching_dec.c | 112 ++++++------- lib_dec/ivas_td_decorr.c | 12 +- lib_dec/ivas_vbap.c | 26 +-- lib_dec/jbm_jb4_circularbuffer.c | 8 +- lib_dec/jbm_jb4_inputbuffer.c | 8 +- lib_dec/jbm_jb4_jmf.c | 4 +- lib_dec/jbm_jb4sb.c | 8 +- lib_dec/jbm_pcmdsp_apa.c | 4 +- lib_dec/jbm_pcmdsp_fifo.c | 8 +- lib_dec/lib_dec.c | 12 +- lib_dec/ppp_dec.c | 2 +- lib_dec/voiced_dec.c | 6 +- lib_enc/fd_cng_enc.c | 4 +- lib_enc/init_enc.c | 44 ++--- lib_enc/ivas_agc_enc.c | 18 +-- lib_enc/ivas_corecoder_enc_reconfig.c | 8 +- lib_enc/ivas_cpe_enc.c | 36 ++--- lib_enc/ivas_dirac_enc.c | 32 ++-- lib_enc/ivas_enc_cov_handler.c | 4 +- lib_enc/ivas_front_vad.c | 16 +- lib_enc/ivas_init_enc.c | 60 +++---- lib_enc/ivas_ism_metadata_enc.c | 2 +- lib_enc/ivas_ism_param_enc.c | 8 +- lib_enc/ivas_lfe_enc.c | 12 +- lib_enc/ivas_masa_enc.c | 12 +- lib_enc/ivas_mc_param_enc.c | 4 +- lib_enc/ivas_mcmasa_enc.c | 44 ++--- lib_enc/ivas_mct_enc.c | 20 +-- lib_enc/ivas_sba_enc.c | 8 +- lib_enc/ivas_sce_enc.c | 10 +- lib_enc/ivas_spar_encoder.c | 10 +- lib_enc/ivas_spar_md_enc.c | 56 +++---- lib_enc/ivas_stereo_dft_enc.c | 12 +- lib_enc/ivas_stereo_dmx_evs.c | 8 +- lib_enc/ivas_stereo_mdct_stereo_enc.c | 14 +- lib_enc/ivas_stereo_switching_enc.c | 70 ++++---- lib_enc/ivas_stereo_td_enc.c | 12 +- lib_enc/lib_enc.c | 12 +- lib_enc/ppp_enc.c | 2 +- lib_enc/voiced_enc.c | 132 +++++++-------- lib_rend/ivas_allrad_dec.c | 2 +- lib_rend/ivas_binauralRenderer.c | 64 ++++---- lib_rend/ivas_binaural_reverb.c | 32 ++-- lib_rend/ivas_crend.c | 68 ++++---- lib_rend/ivas_efap.c | 36 ++--- lib_rend/ivas_hrtf.c | 18 +-- lib_rend/ivas_limiter.c | 8 +- lib_rend/ivas_ls_custom_dec.c | 2 +- lib_rend/ivas_objectRenderer.c | 26 +-- lib_rend/ivas_objectRenderer_hrFilt.c | 108 ++++++------- lib_rend/ivas_objectRenderer_mix.c | 20 +-- lib_rend/ivas_objectRenderer_sfx.c | 28 ++-- lib_rend/ivas_objectRenderer_sources.c | 36 ++--- lib_rend/ivas_render_config.c | 4 +- lib_rend/ivas_reverb.c | 12 +- lib_rend/ivas_rotation.c | 2 +- lib_rend/lib_rend.c | 52 +++--- lib_util/hrtf_file_reader.c | 40 ++--- .../unit_tests/crend/ivas_crend_utest_utils.c | 10 +- 95 files changed, 1248 insertions(+), 1248 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index 225055226c..df04ea984d 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -781,10 +781,10 @@ int main( inBufferSize = frameSize_smpls * totalNumInChannels; outBufferSize = frameSize_smpls * numOutChannels; - inpInt16Buffer = count_malloc( inBufferSize * sizeof( int16_t ) ); - inFloatBuffer = count_malloc( inBufferSize * sizeof( float ) ); - outInt16Buffer = count_malloc( outBufferSize * sizeof( int16_t ) ); - outFloatBuffer = count_malloc( outBufferSize * sizeof( float ) ); + inpInt16Buffer = malloc( inBufferSize * sizeof( int16_t ) ); + inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); + outInt16Buffer = malloc( outBufferSize * sizeof( int16_t ) ); + outFloatBuffer = malloc( outBufferSize * sizeof( float ) ); inBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; inBuffer.config.numChannels = (int16_t) totalNumInChannels; @@ -1032,10 +1032,10 @@ int main( #endif /* === Close === */ - count_free( inpInt16Buffer ); - count_free( inFloatBuffer ); - count_free( outInt16Buffer ); - count_free( outFloatBuffer ); + free( inpInt16Buffer ); + free( inFloatBuffer ); + free( outInt16Buffer ); + free( outFloatBuffer ); for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { MasaFileReader_close( &masaReaders[i] ); @@ -1579,7 +1579,7 @@ IsmPositionProvider *IsmPositionProvider_open( IsmPositionProvider *ipp; uint16_t i; - ipp = (IsmPositionProvider *) count_malloc( sizeof( IsmPositionProvider ) ); + ipp = (IsmPositionProvider *) malloc( sizeof( IsmPositionProvider ) ); ipp->frameCounter = 0; ipp->numObjects = 0; @@ -1696,16 +1696,16 @@ void IsmPositionProvider_close( IsmPositionProvider *positionProvider ) if ( positionProvider->positions[i] != NULL ) { - count_free( positionProvider->positions[i] ); + free( positionProvider->positions[i] ); } if ( positionProvider->positionDurations[i] != NULL ) { - count_free( positionProvider->positionDurations[i] ); + free( positionProvider->positionDurations[i] ); } } - count_free( positionProvider ); + free( positionProvider ); return; } @@ -1954,8 +1954,8 @@ static void parseIsm( if ( parseUint32( line, &numberOfObjectPositionsToRead ) == 0 ) { positionProvider->numPositions[idx] = numberOfObjectPositionsToRead; - positionProvider->positions[idx] = count_malloc( numberOfObjectPositionsToRead * sizeof( IVAS_REND_AudioObjectPosition ) ); - positionProvider->positionDurations[idx] = count_malloc( numberOfObjectPositionsToRead * sizeof( uint16_t ) ); + positionProvider->positions[idx] = malloc( numberOfObjectPositionsToRead * sizeof( IVAS_REND_AudioObjectPosition ) ); + positionProvider->positionDurations[idx] = malloc( numberOfObjectPositionsToRead * sizeof( uint16_t ) ); for ( i = 0; i < numberOfObjectPositionsToRead; ++i ) { diff --git a/lib_com/cldfb.c b/lib_com/cldfb.c index 1706030a5a..40c6db15bb 100644 --- a/lib_com/cldfb.c +++ b/lib_com/cldfb.c @@ -706,7 +706,7 @@ ivas_error openCldfb( HANDLE_CLDFB_FILTER_BANK hs; int16_t buf_len; - hs = (HANDLE_CLDFB_FILTER_BANK) count_malloc( sizeof( CLDFB_FILTER_BANK ) ); + hs = (HANDLE_CLDFB_FILTER_BANK) malloc( sizeof( CLDFB_FILTER_BANK ) ); if ( hs == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); @@ -728,7 +728,7 @@ ivas_error openCldfb( buf_len = hs->p_filter_length; } - hs->cldfb_state = (float *) count_malloc( buf_len * sizeof( float ) ); + hs->cldfb_state = (float *) malloc( buf_len * sizeof( float ) ); if ( hs->cldfb_state == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); @@ -889,9 +889,9 @@ void deleteCldfb( { if ( hs->cldfb_state ) { - count_free( hs->cldfb_state ); + free( hs->cldfb_state ); } - count_free( hs ); + free( hs ); *h_cldfb = NULL; } @@ -1148,7 +1148,7 @@ ivas_error cldfb_save_memory( hs->memory_length = hs->p_filter_length; } - hs->memory = (float *) count_malloc( hs->memory_length * sizeof( float ) ); + hs->memory = (float *) malloc( hs->memory_length * sizeof( float ) ); if ( hs->memory == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB\n" ); @@ -1199,7 +1199,7 @@ void cldfb_restore_memory( } hs->memory_length = 0; - count_free( hs->memory ); + free( hs->memory ); hs->memory = NULL; return; diff --git a/lib_com/fd_cng_com.c b/lib_com/fd_cng_com.c index 655a868166..39431dca36 100644 --- a/lib_com/fd_cng_com.c +++ b/lib_com/fd_cng_com.c @@ -68,7 +68,7 @@ ivas_error createFdCngCom( HANDLE_FD_CNG_COM hs; /* Allocate memory */ - hs = (HANDLE_FD_CNG_COM) count_malloc( sizeof( FD_CNG_COM ) ); + hs = (HANDLE_FD_CNG_COM) malloc( sizeof( FD_CNG_COM ) ); if ( hs == NULL ) { @@ -162,7 +162,7 @@ void deleteFdCngCom( if ( hsCom != NULL ) { - count_free( hsCom ); + free( hsCom ); *hFdCngCom = NULL; } diff --git a/lib_com/ivas_cov_smooth.c b/lib_com/ivas_cov_smooth.c index 86e929bd1c..842c97e8ee 100644 --- a/lib_com/ivas_cov_smooth.c +++ b/lib_com/ivas_cov_smooth.c @@ -93,12 +93,12 @@ ivas_error ivas_spar_covar_smooth_enc_open( ivas_cov_smooth_state_t *hCovState; int16_t i, j; - if ( ( hCovState = (ivas_cov_smooth_state_t *) count_malloc( sizeof( ivas_cov_smooth_state_t ) ) ) == NULL ) + if ( ( hCovState = (ivas_cov_smooth_state_t *) malloc( sizeof( ivas_cov_smooth_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); } - if ( ( hCovState->pSmoothing_factor = (float *) count_malloc( sizeof( float ) * cov_smooth_cfg->max_bands ) ) == NULL ) + if ( ( hCovState->pSmoothing_factor = (float *) malloc( sizeof( float ) * cov_smooth_cfg->max_bands ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); } @@ -107,7 +107,7 @@ ivas_error ivas_spar_covar_smooth_enc_open( { for ( j = 0; j < nchan_inp; j++ ) { - if ( ( hCovState->pPrior_cov_real[i][j] = (float *) count_malloc( sizeof( float ) * cov_smooth_cfg->max_bands ) ) == NULL ) + if ( ( hCovState->pPrior_cov_real[i][j] = (float *) malloc( sizeof( float ) * cov_smooth_cfg->max_bands ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); } @@ -141,19 +141,19 @@ void ivas_spar_covar_smooth_enc_close( if ( hCovState != NULL ) { - count_free( hCovState->pSmoothing_factor ); + free( hCovState->pSmoothing_factor ); hCovState->pSmoothing_factor = NULL; for ( i = 0; i < nchan_inp; i++ ) { for ( j = 0; j < nchan_inp; j++ ) { - count_free( hCovState->pPrior_cov_real[i][j] ); + free( hCovState->pPrior_cov_real[i][j] ); hCovState->pPrior_cov_real[i][j] = NULL; } } - count_free( hCovState ); + free( hCovState ); hCovState_out = NULL; } diff --git a/lib_com/ivas_fb_mixer.c b/lib_com/ivas_fb_mixer.c index ed034787bf..f2bd9658fc 100644 --- a/lib_com/ivas_fb_mixer.c +++ b/lib_com/ivas_fb_mixer.c @@ -110,7 +110,7 @@ ivas_error ivas_fb_set_cfg( { IVAS_FB_CFG *pFb_cfg; - if ( ( pFb_cfg = (IVAS_FB_CFG *) count_malloc( sizeof( IVAS_FB_CFG ) ) ) == NULL ) + if ( ( pFb_cfg = (IVAS_FB_CFG *) malloc( sizeof( IVAS_FB_CFG ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer config" ); } @@ -187,7 +187,7 @@ ivas_error ivas_FB_mixer_open( frame_len = (int16_t) ( sampling_rate / FRAMES_PER_SEC ); - if ( ( hFbMixer = (IVAS_FB_MIXER_HANDLE) count_malloc( sizeof( IVAS_FB_MIXER_DATA ) ) ) == NULL ) + if ( ( hFbMixer = (IVAS_FB_MIXER_HANDLE) malloc( sizeof( IVAS_FB_MIXER_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); } @@ -196,7 +196,7 @@ ivas_error ivas_FB_mixer_open( if ( fb_cfg->num_out_chans > 0 ) { #endif - if ( ( hFbMixer->pFb = (ivas_filterbank_t *) count_malloc( sizeof( ivas_filterbank_t ) ) ) == NULL ) + if ( ( hFbMixer->pFb = (ivas_filterbank_t *) malloc( sizeof( ivas_filterbank_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); } @@ -231,12 +231,12 @@ ivas_error ivas_FB_mixer_open( { j = fb_cfg->remix_order[i]; - if ( ( hFbMixer->ppFilterbank_inFR_re[j] = (float *) count_malloc( sizeof( float ) * frame_len ) ) == NULL ) + if ( ( hFbMixer->ppFilterbank_inFR_re[j] = (float *) malloc( sizeof( float ) * frame_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); } - if ( ( hFbMixer->ppFilterbank_inFR_im[j] = (float *) count_malloc( sizeof( float ) * frame_len ) ) == NULL ) + if ( ( hFbMixer->ppFilterbank_inFR_im[j] = (float *) malloc( sizeof( float ) * frame_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); } @@ -253,7 +253,7 @@ ivas_error ivas_FB_mixer_open( } for ( i = 0; i < num_chs_alloc; i++ ) { - if ( ( hFbMixer->ppFilterbank_prior_input[i] = (float *) count_malloc( sizeof( float ) * fb_cfg->prior_input_length ) ) == NULL ) + if ( ( hFbMixer->ppFilterbank_prior_input[i] = (float *) malloc( sizeof( float ) * fb_cfg->prior_input_length ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); } @@ -264,7 +264,7 @@ ivas_error ivas_FB_mixer_open( { float *pTemp_mem; - if ( ( pTemp_mem = (float *) count_malloc( sizeof( float ) * fb_cfg->num_out_chans * fb_cfg->num_in_chans * IVAS_MAX_NUM_BANDS ) ) == NULL ) + if ( ( pTemp_mem = (float *) malloc( sizeof( float ) * fb_cfg->num_out_chans * fb_cfg->num_in_chans * IVAS_MAX_NUM_BANDS ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer" ); } @@ -291,7 +291,7 @@ ivas_error ivas_FB_mixer_open( { for ( i = 0; i < num_bands; i++ ) { - if ( ( hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] = (float *) count_malloc( sizeof( float ) * pActive_bins_per_band_abs[i] ) ) == NULL ) + if ( ( hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] = (float *) malloc( sizeof( float ) * pActive_bins_per_band_abs[i] ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); } @@ -309,12 +309,12 @@ ivas_error ivas_FB_mixer_open( for ( j = start_diff_band_non48k; j < num_bands; j++ ) { - if ( ( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[0][j] = (float *) count_malloc( sizeof( float ) * pActive_bins_per_band[j] ) ) == NULL ) + if ( ( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[0][j] = (float *) malloc( sizeof( float ) * pActive_bins_per_band[j] ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); } - if ( ( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[1][j] = (float *) count_malloc( sizeof( float ) * pActive_bins_per_band[j] ) ) == NULL ) + if ( ( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[1][j] = (float *) malloc( sizeof( float ) * pActive_bins_per_band[j] ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer encoder" ); } @@ -402,10 +402,10 @@ void ivas_FB_mixer_close( { j = fb_cfg->remix_order[i]; - count_free( hFbMixer->ppFilterbank_inFR_re[j] ); + free( hFbMixer->ppFilterbank_inFR_re[j] ); hFbMixer->ppFilterbank_inFR_re[j] = NULL; - count_free( hFbMixer->ppFilterbank_inFR_im[j] ); + free( hFbMixer->ppFilterbank_inFR_im[j] ); hFbMixer->ppFilterbank_inFR_im[j] = NULL; } } @@ -420,13 +420,13 @@ void ivas_FB_mixer_close( } for ( i = 0; i < num_chs_alloc; i++ ) { - count_free( hFbMixer->ppFilterbank_prior_input[i] ); + free( hFbMixer->ppFilterbank_prior_input[i] ); hFbMixer->ppFilterbank_prior_input[i] = NULL; } if ( ( fb_cfg->active_w_mixing != -1 ) && ( fb_cfg->num_out_chans > 0 ) ) { - count_free( hFbMixer->prior_mixer[0][0] ); + free( hFbMixer->prior_mixer[0][0] ); hFbMixer->prior_mixer[0][0] = NULL; } @@ -438,7 +438,7 @@ void ivas_FB_mixer_close( { for ( i = 0; i < num_bands; i++ ) { - count_free( hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] ); + free( hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] ); hFbMixer->pFb->fb_bin_to_band.pFb_bin_to_band[i] = NULL; } } @@ -450,10 +450,10 @@ void ivas_FB_mixer_close( for ( j = start_diff_band_non48k; j < num_bands; j++ ) { - count_free( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[0][j] ); + free( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[0][j] ); hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[0][j] = NULL; - count_free( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[1][j] ); + free( hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[1][j] ); hFbMixer->pFb->fb_consts.ppFilterbank_FRs_non48k[1][j] = NULL; } } @@ -461,17 +461,17 @@ void ivas_FB_mixer_close( if ( hFbMixer->pFb != NULL ) { - count_free( hFbMixer->pFb ); + free( hFbMixer->pFb ); hFbMixer->pFb = NULL; } if ( hFbMixer->fb_cfg != NULL ) { - count_free( hFbMixer->fb_cfg ); + free( hFbMixer->fb_cfg ); hFbMixer->fb_cfg = NULL; } - count_free( hFbMixer ); + free( hFbMixer ); hFbMixer = NULL; } diff --git a/lib_com/ivas_mc_param_com.c b/lib_com/ivas_mc_param_com.c index 8e198a643a..0856fb703b 100644 --- a/lib_com/ivas_mc_param_com.c +++ b/lib_com/ivas_mc_param_com.c @@ -218,7 +218,7 @@ void ivas_param_mc_metadata_close( { if ( hMetadataPMC->icc_map_full[i] ) { - count_free( hMetadataPMC->icc_map_full[i] ); + free( hMetadataPMC->icc_map_full[i] ); hMetadataPMC->icc_map_full[i] = NULL; } } @@ -276,7 +276,7 @@ void ivas_param_mc_create_full_icc_mapping( /* allocate memory for the map */ for ( i = 0; i < 2; i++ ) { - icc_map[i] = (int16_t *) count_malloc( *icc_map_size_full * sizeof( int16_t ) ); + icc_map[i] = (int16_t *) malloc( *icc_map_size_full * sizeof( int16_t ) ); } /* create map (non-LFE ICCs) */ diff --git a/lib_com/ivas_qmetadata_com.c b/lib_com/ivas_qmetadata_com.c index fa508c05ff..86b0cf7c3e 100644 --- a/lib_com/ivas_qmetadata_com.c +++ b/lib_com/ivas_qmetadata_com.c @@ -65,7 +65,7 @@ ivas_error ivas_qmetadata_open( ) { /* allocate MetaData handle */ - if ( ( *hQMetaData = (IVAS_QMETADATA_HANDLE) count_malloc( sizeof( IVAS_QMETADATA ) ) ) == NULL ) + if ( ( *hQMetaData = (IVAS_QMETADATA_HANDLE) malloc( sizeof( IVAS_QMETADATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Q MetaData" ); } @@ -126,7 +126,7 @@ ivas_error ivas_qmetadata_allocate_memory( hQMetaData->no_directions = ndirs; hQMetaData->coherence_flag = coherence_flag; - hQMetaData->q_direction = (IVAS_QDIRECTION *) count_malloc( sizeof( IVAS_QDIRECTION ) * ndirs ); + hQMetaData->q_direction = (IVAS_QDIRECTION *) malloc( sizeof( IVAS_QDIRECTION ) * ndirs ); reservationFailed = hQMetaData->q_direction == NULL; if ( !reservationFailed ) @@ -140,7 +140,7 @@ ivas_error ivas_qmetadata_allocate_memory( } else { - hQMetaData->q_direction[dir].band_data = (IVAS_QDIRECTION_BAND_DATA *) count_malloc( sizeof( IVAS_QDIRECTION_BAND_DATA ) * hQMetaData->q_direction[dir].cfg.nbands ); + hQMetaData->q_direction[dir].band_data = (IVAS_QDIRECTION_BAND_DATA *) malloc( sizeof( IVAS_QDIRECTION_BAND_DATA ) * hQMetaData->q_direction[dir].cfg.nbands ); { int16_t j; for ( j = 0; j < nbands; j++ ) @@ -156,7 +156,7 @@ ivas_error ivas_qmetadata_allocate_memory( if ( coherence_flag ) { - hQMetaData->q_direction[dir].coherence_band_data = (IVAS_QDIRECTION_BAND_COHERENCE_DATA *) count_malloc( sizeof( IVAS_QDIRECTION_BAND_COHERENCE_DATA ) * hQMetaData->q_direction[dir].cfg.nbands ); + hQMetaData->q_direction[dir].coherence_band_data = (IVAS_QDIRECTION_BAND_COHERENCE_DATA *) malloc( sizeof( IVAS_QDIRECTION_BAND_COHERENCE_DATA ) * hQMetaData->q_direction[dir].cfg.nbands ); reservationFailed |= hQMetaData->q_direction[dir].coherence_band_data == NULL; } else @@ -173,7 +173,7 @@ ivas_error ivas_qmetadata_allocate_memory( if ( coherence_flag ) { - hQMetaData->surcoh_band_data = (IVAS_SURROUND_COHERENCE_BAND_DATA *) count_malloc( sizeof( IVAS_SURROUND_COHERENCE_BAND_DATA ) * hQMetaData->q_direction[0].cfg.nbands ); + hQMetaData->surcoh_band_data = (IVAS_SURROUND_COHERENCE_BAND_DATA *) malloc( sizeof( IVAS_SURROUND_COHERENCE_BAND_DATA ) * hQMetaData->q_direction[0].cfg.nbands ); reservationFailed |= hQMetaData->surcoh_band_data == NULL; } else @@ -215,23 +215,23 @@ static void ivas_qmetadata_free_memory( { if ( hQMetaData->q_direction[dir].band_data != NULL ) { - count_free( hQMetaData->q_direction[dir].band_data ); + free( hQMetaData->q_direction[dir].band_data ); hQMetaData->q_direction[dir].band_data = NULL; } if ( hQMetaData->q_direction[dir].coherence_band_data != NULL ) { - count_free( hQMetaData->q_direction[dir].coherence_band_data ); + free( hQMetaData->q_direction[dir].coherence_band_data ); hQMetaData->q_direction[dir].coherence_band_data = NULL; } } - count_free( hQMetaData->q_direction ); + free( hQMetaData->q_direction ); hQMetaData->q_direction = NULL; } if ( hQMetaData->surcoh_band_data != NULL ) { - count_free( hQMetaData->surcoh_band_data ); + free( hQMetaData->surcoh_band_data ); hQMetaData->surcoh_band_data = NULL; } @@ -256,7 +256,7 @@ void ivas_qmetadata_close( ivas_qmetadata_free_memory( *hQMetaData ); - count_free( *hQMetaData ); + free( *hQMetaData ); *hQMetaData = NULL; return; diff --git a/lib_com/ivas_transient_det.c b/lib_com/ivas_transient_det.c index 9a02c78c41..54e42ab8ff 100644 --- a/lib_com/ivas_transient_det.c +++ b/lib_com/ivas_transient_det.c @@ -171,7 +171,7 @@ ivas_error ivas_spar_transient_det_open( { ivas_trans_det_state_t *hTranDet; - if ( ( hTranDet = (ivas_trans_det_state_t *) count_malloc( sizeof( ivas_trans_det_state_t ) ) ) == NULL ) + if ( ( hTranDet = (ivas_trans_det_state_t *) malloc( sizeof( ivas_trans_det_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR TD\n" ); } @@ -199,7 +199,7 @@ void ivas_spar_transient_det_close( return; } - count_free( *hTranDet ); + free( *hTranDet ); *hTranDet = NULL; return; diff --git a/lib_com/wi.c b/lib_com/wi.c index d4ecd7d64d..596db26f9c 100644 --- a/lib_com/wi.c +++ b/lib_com/wi.c @@ -73,7 +73,7 @@ ivas_error DTFS_new( int16_t i; DTFS_STRUCTURE *dtfs = NULL; - dtfs = (DTFS_STRUCTURE *) count_malloc( sizeof( DTFS_STRUCTURE ) ); + dtfs = (DTFS_STRUCTURE *) malloc( sizeof( DTFS_STRUCTURE ) ); if ( dtfs == NULL ) { @@ -668,9 +668,9 @@ static void DTFS_transform( out[i] = sum1; } - count_free( tmp1_dtfs ); - count_free( tmp2_dtfs ); - count_free( tmp3_dtfs ); + free( tmp1_dtfs ); + free( tmp2_dtfs ); + free( tmp3_dtfs ); return; } @@ -1643,7 +1643,7 @@ ivas_error WIsyn( error = IVAS_ERR_OK; - if ( ( phase = (float *) count_malloc( N * sizeof( float ) ) ) == NULL ) + if ( ( phase = (float *) malloc( N * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for WI structure\n" ) ); } @@ -1697,8 +1697,8 @@ ivas_error WIsyn( } *ph_offset = (float) fmod( (double) ( tmp ), PI2 ); - count_free( phase ); - count_free( CURRCW_DTFS ); + free( phase ); + free( CURRCW_DTFS ); return error; } diff --git a/lib_dec/dec_gen_voic.c b/lib_dec/dec_gen_voic.c index 65ea2826ad..e4f3ae9b4f 100644 --- a/lib_dec/dec_gen_voic.c +++ b/lib_dec/dec_gen_voic.c @@ -285,8 +285,8 @@ ivas_error decod_gen_voic( } } - count_free( PREVP ); - count_free( CURRP ); + free( PREVP ); + free( CURRP ); } } diff --git a/lib_dec/fd_cng_dec.c b/lib_dec/fd_cng_dec.c index a475387fb1..9dca4cc182 100644 --- a/lib_dec/fd_cng_dec.c +++ b/lib_dec/fd_cng_dec.c @@ -76,7 +76,7 @@ ivas_error createFdCngDec( *hFdCngDec = NULL; /* Allocate memory */ - hs = (HANDLE_FD_CNG_DEC) count_malloc( sizeof( FD_CNG_DEC ) ); + hs = (HANDLE_FD_CNG_DEC) malloc( sizeof( FD_CNG_DEC ) ); if ( hs == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for FD CNG DEC structure" ); @@ -352,7 +352,7 @@ void deleteFdCngDec( if ( hsDec != NULL ) { deleteFdCngCom( &( hsDec->hFdCngCom ) ); - count_free( hsDec ); + free( hsDec ); *hFdCngDec = NULL; } diff --git a/lib_dec/init_dec.c b/lib_dec/init_dec.c index 978248e695..d46505d453 100644 --- a/lib_dec/init_dec.c +++ b/lib_dec/init_dec.c @@ -193,7 +193,7 @@ ivas_error init_decoder( if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) { - if ( ( st->hGSCDec = (GSC_DEC_HANDLE) count_malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) + if ( ( st->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); } @@ -211,7 +211,7 @@ ivas_error init_decoder( if ( st->output_Fs == 16000 && st->element_mode == EVS_MONO ) { - if ( ( st->hWIDec = (WI_DEC_HANDLE) count_malloc( sizeof( WI_DEC_DATA ) ) ) == NULL ) + if ( ( st->hWIDec = (WI_DEC_HANDLE) malloc( sizeof( WI_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) ); } @@ -230,7 +230,7 @@ ivas_error init_decoder( if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) { - if ( ( st->hPFstat = (PFSTAT_HANDLE) count_malloc( sizeof( PFSTAT ) ) ) == NULL ) + if ( ( st->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) ); } @@ -250,7 +250,7 @@ ivas_error init_decoder( if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) { - if ( ( st->hBWE_zero = (ZERO_BWE_DEC_HANDLE) count_malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) ); } @@ -269,7 +269,7 @@ ivas_error init_decoder( if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) { - if ( ( st->hMusicPF = (MUSIC_POSTFILT_HANDLE) count_malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) + if ( ( st->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) ); } @@ -295,7 +295,7 @@ ivas_error init_decoder( if ( idchan == 0 && ( st->element_mode == EVS_MONO || st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) ) { - if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) count_malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) + if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); } @@ -324,7 +324,7 @@ ivas_error init_decoder( if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT || st->element_mode == IVAS_SCE || st->element_mode == EVS_MONO ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) { - if ( ( st->hHQ_core = (HQ_DEC_HANDLE) count_malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) + if ( ( st->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); } @@ -335,7 +335,7 @@ ivas_error init_decoder( if ( st->element_mode == EVS_MONO ) { /* HQ NB FEC initialization */ - if ( ( st->hHQ_nbfec = (HQ_NBFEC_HANDLE) count_malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL ) + if ( ( st->hHQ_nbfec = (HQ_NBFEC_HANDLE) malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) ); } @@ -359,7 +359,7 @@ ivas_error init_decoder( if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) { - if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) count_malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); } @@ -380,7 +380,7 @@ ivas_error init_decoder( if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) { - if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) count_malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); } @@ -415,7 +415,7 @@ ivas_error init_decoder( if ( st->element_mode == EVS_MONO ) { - if ( ( st->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) count_malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) ); } @@ -433,7 +433,7 @@ ivas_error init_decoder( if ( st->Opt_AMR_WB || st->element_mode == EVS_MONO ) { - if ( ( st->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) count_malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL ) + if ( ( st->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); } @@ -478,7 +478,7 @@ ivas_error init_decoder( if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) { - if ( ( st->hBPF = (BPF_DEC_HANDLE) count_malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) ); } @@ -553,7 +553,7 @@ ivas_error init_decoder( if ( st->element_mode == EVS_MONO ) { - if ( ( st->hSC_VBR = (SC_VBR_DEC_HANDLE) count_malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL ) + if ( ( st->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); } @@ -583,7 +583,7 @@ ivas_error init_decoder( /* TCX-LTP */ if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) { - if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) count_malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) + if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); } @@ -597,7 +597,7 @@ ivas_error init_decoder( // VE: reduction possible for MCT_CHAN_MODE_LFE channel - see I1-172 if ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) { - if ( ( st->hTcxDec = (TCX_DEC_HANDLE) count_malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) + if ( ( st->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) ); } @@ -615,7 +615,7 @@ ivas_error init_decoder( /* TCX config. data structure */ if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) { - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); } @@ -628,7 +628,7 @@ ivas_error init_decoder( /* Tonal MDCT concealment data structure */ if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) { - if ( ( st->hTonalMDCTConc = (TonalMDCTConcealPtr) count_malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL ) + if ( ( st->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) ); } @@ -644,7 +644,7 @@ ivas_error init_decoder( if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) { - if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) count_malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) + if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) ); } @@ -667,7 +667,7 @@ ivas_error init_decoder( if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) #endif { - if ( ( st->hPlcInfo = (T_PLCInfo_HANDLE) count_malloc( sizeof( T_PLCInfo ) ) ) == NULL ) + if ( ( st->hPlcInfo = (T_PLCInfo_HANDLE) malloc( sizeof( T_PLCInfo ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) ); } @@ -679,7 +679,7 @@ ivas_error init_decoder( if ( st->element_mode == EVS_MONO ) { - if ( ( st->hTECDec = (TEC_DEC_HANDLE) count_malloc( sizeof( TEC_DEC_DATA ) ) ) == NULL ) + if ( ( st->hTECDec = (TEC_DEC_HANDLE) malloc( sizeof( TEC_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) ); } diff --git a/lib_dec/ivas_agc_dec.c b/lib_dec/ivas_agc_dec.c index 89a3196347..d44839e155 100644 --- a/lib_dec/ivas_agc_dec.c +++ b/lib_dec/ivas_agc_dec.c @@ -104,7 +104,7 @@ ivas_error ivas_spar_agc_dec_open( int16_t output_frame; #endif - if ( ( hAgc = (ivas_agc_dec_state_t *) count_malloc( sizeof( ivas_agc_dec_state_t ) ) ) == NULL ) + if ( ( hAgc = (ivas_agc_dec_state_t *) malloc( sizeof( ivas_agc_dec_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); } @@ -115,20 +115,20 @@ ivas_error ivas_spar_agc_dec_open( #endif #ifdef FIX_AGC_WINFUNC_MEMORY - if ( ( hAgc->agc_com.winFunc = (float *) count_malloc( sizeof( float ) * ( output_frame - delay ) ) ) == NULL ) + if ( ( hAgc->agc_com.winFunc = (float *) malloc( sizeof( float ) * ( output_frame - delay ) ) ) == NULL ) #else - if ( ( hAgc->agc_com.winFunc = (float *) count_malloc( sizeof( float ) * output_frame ) ) == NULL ) + if ( ( hAgc->agc_com.winFunc = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) #endif { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); } - if ( ( hAgc->gain_state = (ivas_agc_dec_chan_state_t *) count_malloc( sizeof( ivas_agc_dec_chan_state_t ) * FOA_CHANNELS ) ) == NULL ) + if ( ( hAgc->gain_state = (ivas_agc_dec_chan_state_t *) malloc( sizeof( ivas_agc_dec_chan_state_t ) * FOA_CHANNELS ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); } - if ( ( hAgc->gain_data = (ivas_agc_chan_data_t *) count_malloc( sizeof( ivas_agc_chan_data_t ) * FOA_CHANNELS ) ) == NULL ) + if ( ( hAgc->gain_data = (ivas_agc_chan_data_t *) malloc( sizeof( ivas_agc_chan_data_t ) * FOA_CHANNELS ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); } @@ -161,16 +161,16 @@ void ivas_spar_agc_dec_close( if ( hAgc != NULL ) { - count_free( hAgc->agc_com.winFunc ); + free( hAgc->agc_com.winFunc ); hAgc->agc_com.winFunc = NULL; - count_free( hAgc->gain_state ); + free( hAgc->gain_state ); hAgc->gain_state = NULL; - count_free( hAgc->gain_data ); + free( hAgc->gain_data ); hAgc->gain_data = NULL; - count_free( hAgc ); + free( hAgc ); *hAgcDec = NULL; } diff --git a/lib_dec/ivas_corecoder_dec_reconfig.c b/lib_dec/ivas_corecoder_dec_reconfig.c index 88e5a4868a..9295c38bc9 100644 --- a/lib_dec/ivas_corecoder_dec_reconfig.c +++ b/lib_dec/ivas_corecoder_dec_reconfig.c @@ -90,10 +90,10 @@ ivas_error ivas_corecoder_dec_reconfig( if ( st_ivas->hSCE[0] != NULL ) { - count_free( st_ivas->hSCE[0]->save_synth ); + free( st_ivas->hSCE[0]->save_synth ); st_ivas->hSCE[0]->save_synth = NULL; - count_free( st_ivas->hSCE[0]->save_hb_synth ); + free( st_ivas->hSCE[0]->save_hb_synth ); st_ivas->hSCE[0]->save_hb_synth = NULL; } } @@ -152,7 +152,7 @@ ivas_error ivas_corecoder_dec_reconfig( /* special case, if we have MCT now and had a single CPE before, remove the MDCT Stereo handles from the first CPE*/ if ( st_ivas->nCPE > 1 && nCPE_old == 1 ) { - count_free( st_ivas->hCPE[0]->hStereoMdct ); + free( st_ivas->hCPE[0]->hStereoMdct ); st_ivas->hCPE[0]->hStereoMdct = NULL; } @@ -216,7 +216,7 @@ ivas_error ivas_corecoder_dec_reconfig( /* special case, if we have a single CPE and had MCT before we need to init the MDCT stereo handles here */ if ( st_ivas->nCPE == 1 && nCPE_old > 1 ) { - if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) + if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } @@ -249,7 +249,7 @@ ivas_error ivas_corecoder_dec_reconfig( if ( st_ivas->hSCE[0]->save_synth == NULL ) { - if ( ( st_ivas->hSCE[0]->save_synth = (float *) count_malloc( sizeof( float ) * output_frame ) ) == NULL ) + if ( ( st_ivas->hSCE[0]->save_synth = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo output\n" ) ); } @@ -258,7 +258,7 @@ ivas_error ivas_corecoder_dec_reconfig( if ( st_ivas->hSCE[0]->save_hb_synth == NULL ) { - if ( ( st_ivas->hSCE[0]->save_hb_synth = (float *) count_malloc( sizeof( float ) * output_frame ) ) == NULL ) + if ( ( st_ivas->hSCE[0]->save_hb_synth = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate HB memory for stereo output\n" ) ); } @@ -345,7 +345,7 @@ ivas_error ivas_hp20_dec_reconfig( old_mem_hp20_out = st_ivas->mem_hp20_out; st_ivas->mem_hp20_out = NULL; - if ( ( st_ivas->mem_hp20_out = (float **) count_malloc( nchan_hp20 * sizeof( float * ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_out = (float **) malloc( nchan_hp20 * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -358,7 +358,7 @@ ivas_error ivas_hp20_dec_reconfig( /* create additional hp20 memories */ for ( ; i < nchan_hp20; i++ ) { - if ( ( st_ivas->mem_hp20_out[i] = (float *) count_malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_out[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -366,7 +366,7 @@ ivas_error ivas_hp20_dec_reconfig( set_f( st_ivas->mem_hp20_out[i], 0.0f, L_HP20_MEM ); } - count_free( old_mem_hp20_out ); + free( old_mem_hp20_out ); old_mem_hp20_out = NULL; } else if ( nchan_hp20 < nchan_hp20_old ) @@ -375,7 +375,7 @@ ivas_error ivas_hp20_dec_reconfig( old_mem_hp20_out = st_ivas->mem_hp20_out; st_ivas->mem_hp20_out = NULL; - if ( ( st_ivas->mem_hp20_out = (float **) count_malloc( nchan_hp20 * sizeof( float * ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_out = (float **) malloc( nchan_hp20 * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -388,11 +388,11 @@ ivas_error ivas_hp20_dec_reconfig( /* remove superfluous hp20 memories */ for ( ; i < nchan_hp20_old; i++ ) { - count_free( old_mem_hp20_out[i] ); + free( old_mem_hp20_out[i] ); old_mem_hp20_out[i] = NULL; } - count_free( old_mem_hp20_out ); + free( old_mem_hp20_out ); old_mem_hp20_out = NULL; } diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index 7e6a6e70a5..bb3dd4cd69 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -550,7 +550,7 @@ ivas_error create_cpe_dec( * Allocate CPE handle *-----------------------------------------------------------------*/ - if ( ( hCPE = (CPE_DEC_HANDLE) count_malloc( sizeof( CPE_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE = (CPE_DEC_HANDLE) malloc( sizeof( CPE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); } @@ -610,13 +610,13 @@ ivas_error create_cpe_dec( if ( st_ivas->ivas_format == STEREO_FORMAT || st_ivas->ivas_format == MASA_FORMAT || ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) || st_ivas->sba_dirac_stereo_flag ) { - if ( ( hCPE->input_mem[i] = (float *) count_malloc( sizeof( float ) * NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) + if ( ( hCPE->input_mem[i] = (float *) malloc( sizeof( float ) * NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } set_zero( hCPE->input_mem[i], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - if ( ( hCPE->input_mem_LB[i] = (float *) count_malloc( sizeof( float ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) + if ( ( hCPE->input_mem_LB[i] = (float *) malloc( sizeof( float ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } @@ -624,14 +624,14 @@ ivas_error create_cpe_dec( if ( i == 0 ) { - if ( ( hCPE->input_mem_BPF[0] = (float *) count_malloc( sizeof( float ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) + if ( ( hCPE->input_mem_BPF[0] = (float *) malloc( sizeof( float ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } set_zero( hCPE->input_mem_BPF[0], STEREO_DFT32MS_OVL_16k ); } - if ( ( hCPE->output_mem[i] = (float *) count_malloc( sizeof( float ) * NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) + if ( ( hCPE->output_mem[i] = (float *) malloc( sizeof( float ) * NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } @@ -639,7 +639,7 @@ ivas_error create_cpe_dec( if ( i < hCPE->nchan_out ) { - if ( ( hCPE->prev_synth_chs[i] = (float *) count_malloc( sizeof( float ) * NS2SA( output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) + if ( ( hCPE->prev_synth_chs[i] = (float *) malloc( sizeof( float ) * NS2SA( output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } @@ -675,7 +675,7 @@ ivas_error create_cpe_dec( break; } - if ( ( st = (DEC_CORE_HANDLE) count_malloc( sizeof( Decoder_State ) ) ) == NULL ) + if ( ( st = (DEC_CORE_HANDLE) malloc( sizeof( Decoder_State ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); } @@ -715,7 +715,7 @@ ivas_error create_cpe_dec( if ( hCPE->element_mode != IVAS_CPE_MDCT && hCPE->nchan_out == 1 ) { - if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); } @@ -729,7 +729,7 @@ ivas_error create_cpe_dec( if ( ( hCPE->element_mode != IVAS_CPE_MDCT || ( st_ivas->ivas_format == STEREO_FORMAT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE ) ) && hCPE->nchan_out != 1 ) { - if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) count_malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); } @@ -743,7 +743,7 @@ ivas_error create_cpe_dec( if ( hCPE->element_mode != IVAS_CPE_MDCT && !( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 ) ) { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE\n" ) ); } @@ -757,7 +757,7 @@ ivas_error create_cpe_dec( if ( hCPE->element_mode == IVAS_CPE_TD ) { - if ( ( hCPE->hStereoTD = (STEREO_TD_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_TD_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTD = (STEREO_TD_DEC_DATA_HANDLE) malloc( sizeof( STEREO_TD_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); } @@ -771,7 +771,7 @@ ivas_error create_cpe_dec( if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->nCPE == 1 ) { - if ( ( hCPE->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo MDCT\n" ) ); } @@ -802,7 +802,7 @@ ivas_error create_cpe_dec( if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) { - if ( ( hCPE->hStereoCng = (STEREO_CNG_DEC_HANDLE) count_malloc( sizeof( STEREO_CNG_DEC ) ) ) == NULL ) + if ( ( hCPE->hStereoCng = (STEREO_CNG_DEC_HANDLE) malloc( sizeof( STEREO_CNG_DEC ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo CNG\n" ) ); } @@ -836,7 +836,7 @@ void destroy_cpe_dec( { destroy_core_dec( st ); - count_free( st ); + free( st ); st = NULL; } } @@ -849,31 +849,31 @@ void destroy_cpe_dec( if ( hCPE->hStereoDftDmx != NULL ) { - count_free( hCPE->hStereoDftDmx ); + free( hCPE->hStereoDftDmx ); hCPE->hStereoDftDmx = NULL; } if ( hCPE->hStereoTD != NULL ) { - count_free( hCPE->hStereoTD ); + free( hCPE->hStereoTD ); hCPE->hStereoTD = NULL; } if ( hCPE->hStereoMdct != NULL ) { - count_free( hCPE->hStereoMdct ); + free( hCPE->hStereoMdct ); hCPE->hStereoMdct = NULL; } if ( hCPE->hStereoTCA != NULL ) { - count_free( hCPE->hStereoTCA ); + free( hCPE->hStereoTCA ); hCPE->hStereoTCA = NULL; } if ( hCPE->hStereoICBWE != NULL ) { - count_free( hCPE->hStereoICBWE ); + free( hCPE->hStereoICBWE ); hCPE->hStereoICBWE = NULL; } @@ -881,29 +881,29 @@ void destroy_cpe_dec( { for ( n = 0; n < CPE_CHANNELS; n++ ) { - count_free( hCPE->input_mem_LB[n] ); + free( hCPE->input_mem_LB[n] ); hCPE->input_mem_LB[n] = NULL; - count_free( hCPE->input_mem[n] ); + free( hCPE->input_mem[n] ); hCPE->input_mem[n] = NULL; - count_free( hCPE->output_mem[n] ); + free( hCPE->output_mem[n] ); hCPE->output_mem[n] = NULL; if ( hCPE->prev_synth_chs[n] != NULL ) { - count_free( hCPE->prev_synth_chs[n] ); + free( hCPE->prev_synth_chs[n] ); hCPE->prev_synth_chs[n] = NULL; } } - count_free( hCPE->input_mem_BPF[0] ); + free( hCPE->input_mem_BPF[0] ); hCPE->input_mem_BPF[0] = NULL; } if ( hCPE->hStereoCng != NULL ) { - count_free( hCPE->hStereoCng ); + free( hCPE->hStereoCng ); hCPE->hStereoCng = NULL; } - count_free( hCPE ); + free( hCPE ); return; } diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 49a1dd0048..bd8c2c3a3c 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -163,12 +163,12 @@ ivas_error ivas_dirac_dec_config( * prepare library opening *-----------------------------------------------------------------*/ - if ( ( hDirAC = (DIRAC_DEC_HANDLE) count_malloc( sizeof( DIRAC_DEC_DATA ) ) ) == NULL ) + if ( ( hDirAC = (DIRAC_DEC_HANDLE) malloc( sizeof( DIRAC_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } - if ( ( hDirAC->hConfig = (DIRAC_CONFIG_DATA_HANDLE) count_malloc( sizeof( DIRAC_CONFIG_DATA ) ) ) == NULL ) + if ( ( hDirAC->hConfig = (DIRAC_CONFIG_DATA_HANDLE) malloc( sizeof( DIRAC_CONFIG_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC Config\n" ) ); } @@ -311,7 +311,7 @@ ivas_error ivas_dirac_dec_config( if ( flag_config == DIRAC_OPEN ) { hDirAC->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - hDirAC->frequency_axis = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->frequency_axis = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->frequency_axis, 0.0f, hDirAC->num_freq_bands ); ivas_dirac_dec_get_frequency_axis( hDirAC->frequency_axis, output_Fs, hDirAC->num_freq_bands ); @@ -321,7 +321,7 @@ ivas_error ivas_dirac_dec_config( { if ( ( flag_config == DIRAC_RECONFIGURE && hDirAC->masa_stereo_type_detect == NULL ) || flag_config == DIRAC_OPEN ) { - hDirAC->masa_stereo_type_detect = (MASA_STEREO_TYPE_DETECT *) count_malloc( sizeof( MASA_STEREO_TYPE_DETECT ) ); + hDirAC->masa_stereo_type_detect = (MASA_STEREO_TYPE_DETECT *) malloc( sizeof( MASA_STEREO_TYPE_DETECT ) ); } ivas_masa_init_stereotype_detection( hDirAC->masa_stereo_type_detect ); } @@ -329,7 +329,7 @@ ivas_error ivas_dirac_dec_config( { if ( flag_config == DIRAC_RECONFIGURE && hDirAC->masa_stereo_type_detect != NULL ) { - count_free( hDirAC->masa_stereo_type_detect ); + free( hDirAC->masa_stereo_type_detect ); } hDirAC->masa_stereo_type_detect = NULL; } @@ -389,22 +389,22 @@ ivas_error ivas_dirac_dec_config( if ( flag_config == DIRAC_OPEN ) { num_outputs_dir_old = hDirAC->num_outputs_dir; - hDirAC->proto_index_dir = (int16_t *) count_malloc( sizeof( int16_t ) * hDirAC->num_outputs_dir ); + hDirAC->proto_index_dir = (int16_t *) malloc( sizeof( int16_t ) * hDirAC->num_outputs_dir ); num_outputs_diff_old = hDirAC->num_outputs_diff; - hDirAC->proto_index_diff = (int16_t *) count_malloc( sizeof( int16_t ) * hDirAC->num_outputs_diff ); + hDirAC->proto_index_diff = (int16_t *) malloc( sizeof( int16_t ) * hDirAC->num_outputs_diff ); } if ( hDirAC->num_outputs_dir != num_outputs_dir_old && flag_config == DIRAC_RECONFIGURE ) { - count_free( hDirAC->proto_index_dir ); - hDirAC->proto_index_dir = (int16_t *) count_malloc( sizeof( int16_t ) * hDirAC->num_outputs_dir ); + free( hDirAC->proto_index_dir ); + hDirAC->proto_index_dir = (int16_t *) malloc( sizeof( int16_t ) * hDirAC->num_outputs_dir ); } set_s( hDirAC->proto_index_dir, 0, hDirAC->num_outputs_dir ); if ( hDirAC->num_outputs_diff != num_outputs_diff_old && flag_config == DIRAC_RECONFIGURE ) { - count_free( hDirAC->proto_index_diff ); - hDirAC->proto_index_diff = (int16_t *) count_malloc( sizeof( int16_t ) * hDirAC->num_outputs_diff ); + free( hDirAC->proto_index_diff ); + hDirAC->proto_index_diff = (int16_t *) malloc( sizeof( int16_t ) * hDirAC->num_outputs_diff ); } set_s( hDirAC->proto_index_diff, 0, hDirAC->num_outputs_diff ); @@ -524,14 +524,14 @@ ivas_error ivas_dirac_dec_config( /* direct/diffuse responses */ if ( flag_config == DIRAC_OPEN ) { - hDirAC->diffuse_response_function = (float *) count_malloc( sizeof( float ) * hDirAC->num_outputs_dir ); + hDirAC->diffuse_response_function = (float *) malloc( sizeof( float ) * hDirAC->num_outputs_dir ); } /* reallocate static memory */ else if ( flag_config == DIRAC_RECONFIGURE && hDirAC->num_outputs_dir != num_outputs_dir_old ) { - count_free( hDirAC->diffuse_response_function ); + free( hDirAC->diffuse_response_function ); hDirAC->diffuse_response_function = NULL; - hDirAC->diffuse_response_function = (float *) count_malloc( sizeof( float ) * hDirAC->num_outputs_dir ); + hDirAC->diffuse_response_function = (float *) malloc( sizeof( float ) * hDirAC->num_outputs_dir ); } if ( ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) || ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) || ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) ) @@ -549,13 +549,13 @@ ivas_error ivas_dirac_dec_config( { if ( flag_config == DIRAC_OPEN ) { - hDirAC->hoa_encoder = (float *) count_malloc( nchan_out_woLFE * hDirAC->num_outputs_diff * sizeof( float ) ); + hDirAC->hoa_encoder = (float *) malloc( nchan_out_woLFE * hDirAC->num_outputs_diff * sizeof( float ) ); } else if ( flag_config == DIRAC_RECONFIGURE && hDirAC->hoa_encoder && ( hDirAC->num_outputs_diff != num_outputs_diff_old ) ) { - count_free( hDirAC->hoa_encoder ); + free( hDirAC->hoa_encoder ); hDirAC->hoa_encoder = NULL; - hDirAC->hoa_encoder = (float *) count_malloc( nchan_out_woLFE * hDirAC->num_outputs_diff * sizeof( float ) ); + hDirAC->hoa_encoder = (float *) malloc( nchan_out_woLFE * hDirAC->num_outputs_diff * sizeof( float ) ); } set_f( hDirAC->hoa_encoder, 0.0f, nchan_out_woLFE * hDirAC->num_outputs_diff ); compute_hoa_encoder_mtx( ls_azimuth, ls_elevation, hDirAC->hoa_encoder, hDirAC->num_outputs_diff, hDirAC->hOutSetup.ambisonics_order ); @@ -564,7 +564,7 @@ ivas_error ivas_dirac_dec_config( { if ( flag_config == DIRAC_RECONFIGURE && hDirAC->hoa_encoder ) { - count_free( hDirAC->hoa_encoder ); + free( hDirAC->hoa_encoder ); } hDirAC->hoa_encoder = NULL; } @@ -609,7 +609,7 @@ ivas_error ivas_dirac_dec_config( { if ( st_ivas->hoa_dec_mtx != NULL ) { - count_free( st_ivas->hoa_dec_mtx ); + free( st_ivas->hoa_dec_mtx ); st_ivas->hoa_dec_mtx = NULL; } if ( ( error = ivas_sba_get_hoa_dec_matrix( hDirAC->hOutSetup, &st_ivas->hoa_dec_mtx, hDirAC->hOutSetup.ambisonics_order ) ) != IVAS_ERR_OK ) @@ -696,7 +696,7 @@ ivas_error ivas_dirac_dec_config( { if ( flag_config == DIRAC_RECONFIGURE && hDirAC->proto_frame_f ) { - count_free( hDirAC->proto_frame_f ); + free( hDirAC->proto_frame_f ); } hDirAC->proto_frame_f = NULL; } @@ -704,13 +704,13 @@ ivas_error ivas_dirac_dec_config( { if ( flag_config == DIRAC_OPEN || ( flag_config == DIRAC_RECONFIGURE && hDirAC->proto_frame_f == NULL ) ) { - hDirAC->proto_frame_f = (float *) count_malloc( sizeof( float ) * 2 * hDirAC->num_protos_diff * hDirAC->num_freq_bands ); + hDirAC->proto_frame_f = (float *) malloc( sizeof( float ) * 2 * hDirAC->num_protos_diff * hDirAC->num_freq_bands ); } else if ( flag_config == DIRAC_RECONFIGURE && ( hDirAC->num_protos_diff != num_protos_diff_old ) ) { proto_frame_f_old = hDirAC->proto_frame_f; - count_free( proto_frame_f_old ); - hDirAC->proto_frame_f = (float *) count_malloc( sizeof( float ) * 2 * hDirAC->num_protos_diff * hDirAC->num_freq_bands ); + free( proto_frame_f_old ); + hDirAC->proto_frame_f = (float *) malloc( sizeof( float ) * 2 * hDirAC->num_protos_diff * hDirAC->num_freq_bands ); } } @@ -722,7 +722,7 @@ ivas_error ivas_dirac_dec_config( { for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) { - hDirAC->buffer_intensity_real[i][j] = (float *) count_malloc( CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); + hDirAC->buffer_intensity_real[i][j] = (float *) malloc( CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); set_f( hDirAC->buffer_intensity_real[i][j], 0.0f, CLDFB_NO_CHANNELS_MAX ); } } @@ -737,7 +737,7 @@ ivas_error ivas_dirac_dec_config( { if ( flag_config == DIRAC_RECONFIGURE && hDirAC->buffer_intensity_real[i][j] ) { - count_free( hDirAC->buffer_intensity_real[i][j] ); + free( hDirAC->buffer_intensity_real[i][j] ); } hDirAC->buffer_intensity_real[i][j] = NULL; } @@ -790,45 +790,45 @@ ivas_error ivas_dirac_dec_config( } } - hDirAC->azimuth = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); - hDirAC->elevation = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); - hDirAC->diffuseness_vector = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); - hDirAC->energy_ratio1 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); - hDirAC->spreadCoherence = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); - hDirAC->surroundingCoherence = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->azimuth = (int16_t **) malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->elevation = (int16_t **) malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->diffuseness_vector = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->energy_ratio1 = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->spreadCoherence = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->surroundingCoherence = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) { - hDirAC->azimuth[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + hDirAC->azimuth[i] = (int16_t *) malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); set_s( hDirAC->azimuth[i], 0, hDirAC->num_freq_bands ); - hDirAC->elevation[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + hDirAC->elevation[i] = (int16_t *) malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); set_s( hDirAC->elevation[i], 0, hDirAC->num_freq_bands ); - hDirAC->diffuseness_vector[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->diffuseness_vector[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->diffuseness_vector[i], 1.0f, hDirAC->num_freq_bands ); - hDirAC->energy_ratio1[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->energy_ratio1[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->energy_ratio1[i], 0.0f, hDirAC->num_freq_bands ); - hDirAC->spreadCoherence[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->spreadCoherence[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->spreadCoherence[i], 0.0f, hDirAC->num_freq_bands ); - hDirAC->surroundingCoherence[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->surroundingCoherence[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->surroundingCoherence[i], 0.0f, hDirAC->num_freq_bands ); } if ( st_ivas->ivas_format == MASA_FORMAT ) { - hDirAC->azimuth2 = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); - hDirAC->elevation2 = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); - hDirAC->energy_ratio2 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); - hDirAC->spreadCoherence2 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->azimuth2 = (int16_t **) malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->elevation2 = (int16_t **) malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->energy_ratio2 = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->spreadCoherence2 = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) { - hDirAC->azimuth2[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + hDirAC->azimuth2[i] = (int16_t *) malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); set_s( hDirAC->azimuth2[i], 0, hDirAC->num_freq_bands ); - hDirAC->elevation2[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + hDirAC->elevation2[i] = (int16_t *) malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); set_s( hDirAC->elevation2[i], 0, hDirAC->num_freq_bands ); - hDirAC->energy_ratio2[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->energy_ratio2[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->energy_ratio2[i], 0.0f, hDirAC->num_freq_bands ); - hDirAC->spreadCoherence2[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->spreadCoherence2[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->spreadCoherence2[i], 0.0f, hDirAC->num_freq_bands ); } } @@ -867,7 +867,7 @@ void ivas_dirac_dec_close( /* Config & CLDFB */ if ( hDirAC->hConfig != NULL ) { - count_free( hDirAC->hConfig ); + free( hDirAC->hConfig ); hDirAC->hConfig = NULL; } @@ -885,32 +885,32 @@ void ivas_dirac_dec_close( /* free frequency axis buffer */ if ( hDirAC->frequency_axis != NULL ) { - count_free( hDirAC->frequency_axis ); + free( hDirAC->frequency_axis ); hDirAC->frequency_axis = NULL; } if ( hDirAC->diffuse_response_function != NULL ) { - count_free( hDirAC->diffuse_response_function ); + free( hDirAC->diffuse_response_function ); hDirAC->diffuse_response_function = NULL; } if ( hDirAC->hoa_encoder != NULL ) { - count_free( hDirAC->hoa_encoder ); + free( hDirAC->hoa_encoder ); hDirAC->hoa_encoder = NULL; } /* prototype indexing */ if ( hDirAC->proto_index_dir != NULL ) { - count_free( hDirAC->proto_index_dir ); + free( hDirAC->proto_index_dir ); hDirAC->proto_index_dir = NULL; } if ( hDirAC->proto_index_diff != NULL ) { - count_free( hDirAC->proto_index_diff ); + free( hDirAC->proto_index_diff ); hDirAC->proto_index_dir = NULL; } @@ -920,7 +920,7 @@ void ivas_dirac_dec_close( /* free prototype signal buffers */ if ( hDirAC->proto_frame_f != NULL ) { - count_free( hDirAC->proto_frame_f ); + free( hDirAC->proto_frame_f ); hDirAC->proto_frame_f = NULL; } @@ -930,7 +930,7 @@ void ivas_dirac_dec_close( { if ( hDirAC->buffer_intensity_real[i][j] != NULL ) { - count_free( hDirAC->buffer_intensity_real[i][j] ); + free( hDirAC->buffer_intensity_real[i][j] ); hDirAC->buffer_intensity_real[i][j] = NULL; } } @@ -940,34 +940,34 @@ void ivas_dirac_dec_close( { if ( hDirAC->azimuth[i] != NULL ) { - count_free( hDirAC->azimuth[i] ); + free( hDirAC->azimuth[i] ); hDirAC->azimuth[i] = NULL; } if ( hDirAC->elevation[i] != NULL ) { - count_free( hDirAC->elevation[i] ); + free( hDirAC->elevation[i] ); hDirAC->elevation[i] = NULL; } if ( hDirAC->diffuseness_vector[i] != NULL ) { - count_free( hDirAC->diffuseness_vector[i] ); + free( hDirAC->diffuseness_vector[i] ); hDirAC->diffuseness_vector[i] = NULL; } } if ( hDirAC->azimuth != NULL ) { - count_free( hDirAC->azimuth ); + free( hDirAC->azimuth ); hDirAC->azimuth = NULL; } if ( hDirAC->elevation != NULL ) { - count_free( hDirAC->elevation ); + free( hDirAC->elevation ); hDirAC->elevation = NULL; } if ( hDirAC->diffuseness_vector != NULL ) { - count_free( hDirAC->diffuseness_vector ); + free( hDirAC->diffuseness_vector ); hDirAC->diffuseness_vector = NULL; } @@ -977,11 +977,11 @@ void ivas_dirac_dec_close( { if ( hDirAC->azimuth2[i] != NULL ) { - count_free( hDirAC->azimuth2[i] ); + free( hDirAC->azimuth2[i] ); hDirAC->azimuth2[i] = NULL; } } - count_free( hDirAC->azimuth2 ); + free( hDirAC->azimuth2 ); hDirAC->azimuth2 = NULL; } @@ -991,11 +991,11 @@ void ivas_dirac_dec_close( { if ( hDirAC->elevation2[i] != NULL ) { - count_free( hDirAC->elevation2[i] ); + free( hDirAC->elevation2[i] ); hDirAC->elevation2[i] = NULL; } } - count_free( hDirAC->elevation2 ); + free( hDirAC->elevation2 ); hDirAC->elevation2 = NULL; } @@ -1005,11 +1005,11 @@ void ivas_dirac_dec_close( { if ( hDirAC->energy_ratio1[i] != NULL ) { - count_free( hDirAC->energy_ratio1[i] ); + free( hDirAC->energy_ratio1[i] ); hDirAC->energy_ratio1[i] = NULL; } } - count_free( hDirAC->energy_ratio1 ); + free( hDirAC->energy_ratio1 ); hDirAC->energy_ratio1 = NULL; } @@ -1019,11 +1019,11 @@ void ivas_dirac_dec_close( { if ( hDirAC->energy_ratio2[i] != NULL ) { - count_free( hDirAC->energy_ratio2[i] ); + free( hDirAC->energy_ratio2[i] ); hDirAC->energy_ratio2[i] = NULL; } } - count_free( hDirAC->energy_ratio2 ); + free( hDirAC->energy_ratio2 ); hDirAC->energy_ratio2 = NULL; } @@ -1033,11 +1033,11 @@ void ivas_dirac_dec_close( { if ( hDirAC->spreadCoherence[i] != NULL ) { - count_free( hDirAC->spreadCoherence[i] ); + free( hDirAC->spreadCoherence[i] ); hDirAC->spreadCoherence[i] = NULL; } } - count_free( hDirAC->spreadCoherence ); + free( hDirAC->spreadCoherence ); hDirAC->spreadCoherence = NULL; } @@ -1047,11 +1047,11 @@ void ivas_dirac_dec_close( { if ( hDirAC->spreadCoherence2[i] != NULL ) { - count_free( hDirAC->spreadCoherence2[i] ); + free( hDirAC->spreadCoherence2[i] ); hDirAC->spreadCoherence2[i] = NULL; } } - count_free( hDirAC->spreadCoherence2 ); + free( hDirAC->spreadCoherence2 ); hDirAC->spreadCoherence2 = NULL; } @@ -1061,23 +1061,23 @@ void ivas_dirac_dec_close( { if ( hDirAC->surroundingCoherence[i] != NULL ) { - count_free( hDirAC->surroundingCoherence[i] ); + free( hDirAC->surroundingCoherence[i] ); hDirAC->surroundingCoherence[i] = NULL; } } - count_free( hDirAC->surroundingCoherence ); + free( hDirAC->surroundingCoherence ); hDirAC->surroundingCoherence = NULL; } if ( hDirAC->masa_stereo_type_detect != NULL ) { - count_free( hDirAC->masa_stereo_type_detect ); + free( hDirAC->masa_stereo_type_detect ); hDirAC->masa_stereo_type_detect = NULL; } ivas_dirac_free_mem( &( hDirAC->stack_mem ) ); - count_free( hDirAC ); + free( hDirAC ); return; } diff --git a/lib_dec/ivas_dirac_dec_binaural_functions.c b/lib_dec/ivas_dirac_dec_binaural_functions.c index a9b3cea4a0..213108689f 100644 --- a/lib_dec/ivas_dirac_dec_binaural_functions.c +++ b/lib_dec/ivas_dirac_dec_binaural_functions.c @@ -98,7 +98,7 @@ ivas_error ivas_dirac_dec_init_binaural_data( float binCenterFreq, tmpFloat; ivas_error error; - if ( ( hBinaural = (DIRAC_DEC_BIN_HANDLE) count_malloc( sizeof( DIRAC_DEC_BIN_DATA ) ) ) == NULL ) + if ( ( hBinaural = (DIRAC_DEC_BIN_HANDLE) malloc( sizeof( DIRAC_DEC_BIN_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC binaural handle " ); } @@ -267,7 +267,7 @@ void ivas_dirac_dec_close_binaural_data( ivas_spar_td_decorr_dec_close( &( ( *hBinaural )->hTdDecorr ) ); - count_free( *hBinaural ); + free( *hBinaural ); *hBinaural = NULL; return; diff --git a/lib_dec/ivas_dirac_decorr_dec.c b/lib_dec/ivas_dirac_decorr_dec.c index e484042a3c..ab608bad61 100644 --- a/lib_dec/ivas_dirac_decorr_dec.c +++ b/lib_dec/ivas_dirac_decorr_dec.c @@ -101,8 +101,8 @@ void ivas_dirac_dec_decorr_open( *-----------------------------------------------------------------*/ /* allocate structs */ - freq_domain_decorr_ap_params = (DIRAC_DECORR_PARAMS *) count_malloc( sizeof( DIRAC_DECORR_PARAMS ) ); - freq_domain_decorr_ap_state = (DIRAC_DECORR_STATE *) count_malloc( sizeof( DIRAC_DECORR_STATE ) ); + freq_domain_decorr_ap_params = (DIRAC_DECORR_PARAMS *) malloc( sizeof( DIRAC_DECORR_PARAMS ) ); + freq_domain_decorr_ap_state = (DIRAC_DECORR_STATE *) malloc( sizeof( DIRAC_DECORR_STATE ) ); /*-----------------------------------------------------------------* * check input parameters @@ -215,7 +215,7 @@ void ivas_dirac_dec_decorr_open( } } - freq_domain_decorr_ap_params->split_frequency_bands = (int16_t *) count_malloc( sizeof( int16_t ) * ( freq_domain_decorr_ap_params->num_split_frequency_bands + 1 ) ); + freq_domain_decorr_ap_params->split_frequency_bands = (int16_t *) malloc( sizeof( int16_t ) * ( freq_domain_decorr_ap_params->num_split_frequency_bands + 1 ) ); mvs2s( &split_frequencies_bands[0], freq_domain_decorr_ap_params->split_frequency_bands, freq_domain_decorr_ap_params->num_split_frequency_bands + 1 ); /* calc buffer size and allocate arrays */ @@ -232,18 +232,18 @@ void ivas_dirac_dec_decorr_open( if ( num_outputs_diff > 0 ) { buffer_size_decorr = ( ap_pre_delay[split_band_index_start] + ap_filter_length[split_band_index_start] ); - freq_domain_decorr_ap_state->decorr_buffer = (float *) count_malloc( sizeof( float ) * 2 * buffer_size_decorr * num_outputs_diff * freq_domain_decorr_ap_params->max_band_decorr ); + freq_domain_decorr_ap_state->decorr_buffer = (float *) malloc( sizeof( float ) * 2 * buffer_size_decorr * num_outputs_diff * freq_domain_decorr_ap_params->max_band_decorr ); set_f( freq_domain_decorr_ap_state->decorr_buffer, 0.0f, 2 * buffer_size_decorr * num_outputs_diff * freq_domain_decorr_ap_params->max_band_decorr ); - freq_domain_decorr_ap_params->filter_coeff_num_real = (float *) count_malloc( sizeof( float ) * ( ap_filter_length[split_band_index_start] + 1 ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); - freq_domain_decorr_ap_params->filter_coeff_den_real = (float *) count_malloc( sizeof( float ) * ( ap_filter_length[split_band_index_start] + 1 ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); - freq_domain_decorr_ap_params->phase_coeff_real = (float *) count_malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); - freq_domain_decorr_ap_params->phase_coeff_imag = (float *) count_malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); - freq_domain_decorr_ap_state->direct_energy_smooth = (float *) count_malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); - freq_domain_decorr_ap_state->reverb_energy_smooth = (float *) count_malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_params->filter_coeff_num_real = (float *) malloc( sizeof( float ) * ( ap_filter_length[split_band_index_start] + 1 ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_params->filter_coeff_den_real = (float *) malloc( sizeof( float ) * ( ap_filter_length[split_band_index_start] + 1 ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_params->phase_coeff_real = (float *) malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_params->phase_coeff_imag = (float *) malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_state->direct_energy_smooth = (float *) malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); + freq_domain_decorr_ap_state->reverb_energy_smooth = (float *) malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); - freq_domain_decorr_ap_params->pre_delay = (int16_t *) count_malloc( sizeof( int16_t ) * freq_domain_decorr_ap_params->num_split_frequency_bands ); - freq_domain_decorr_ap_params->filter_length = (int16_t *) count_malloc( sizeof( int16_t ) * freq_domain_decorr_ap_params->num_split_frequency_bands ); + freq_domain_decorr_ap_params->pre_delay = (int16_t *) malloc( sizeof( int16_t ) * freq_domain_decorr_ap_params->num_split_frequency_bands ); + freq_domain_decorr_ap_params->filter_length = (int16_t *) malloc( sizeof( int16_t ) * freq_domain_decorr_ap_params->num_split_frequency_bands ); set_f( freq_domain_decorr_ap_state->direct_energy_smooth, 0.0f, freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); set_f( freq_domain_decorr_ap_state->reverb_energy_smooth, 0.0f, freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); @@ -617,13 +617,13 @@ void ivas_dirac_dec_decorr_close( if ( dirac_onset_detection_state->onset_detector_1 != NULL ) { - count_free( dirac_onset_detection_state->onset_detector_1 ); + free( dirac_onset_detection_state->onset_detector_1 ); dirac_onset_detection_state->onset_detector_1 = NULL; } if ( dirac_onset_detection_state->onset_detector_2 != NULL ) { - count_free( dirac_onset_detection_state->onset_detector_2 ); + free( dirac_onset_detection_state->onset_detector_2 ); dirac_onset_detection_state->onset_detector_2 = NULL; } @@ -634,78 +634,78 @@ void ivas_dirac_dec_decorr_close( /* free decorrelation buffer */ if ( ( *ph_freq_domain_decorr_ap_state )->decorr_buffer != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_state )->decorr_buffer ); + free( ( *ph_freq_domain_decorr_ap_state )->decorr_buffer ); ( *ph_freq_domain_decorr_ap_state )->decorr_buffer = NULL; } /* free ducker smoothed direct energy buffer */ if ( ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth ); + free( ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth ); ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth = NULL; } /* free ducker smoothed reverb energy buffer */ if ( ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth ); + free( ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth ); ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth = NULL; } /* free pre-delay param buffer */ if ( ( *ph_freq_domain_decorr_ap_params )->pre_delay != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_params )->pre_delay ); + free( ( *ph_freq_domain_decorr_ap_params )->pre_delay ); ( *ph_freq_domain_decorr_ap_params )->pre_delay = NULL; } /* free filter length param buffer */ if ( ( *ph_freq_domain_decorr_ap_params )->filter_length != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_params )->filter_length ); + free( ( *ph_freq_domain_decorr_ap_params )->filter_length ); ( *ph_freq_domain_decorr_ap_params )->filter_length = NULL; } /* free filter coeff param buffers */ if ( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real ); + free( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real ); ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real = NULL; } /* free pre-delay param buffer */ if ( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real ); + free( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real ); ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real = NULL; } /* free pre-delay param buffer */ if ( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag ); + free( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag ); ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag = NULL; } /* free pre-delay param buffer */ if ( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real ); + free( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real ); ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real = NULL; } /* free pre-delay param buffer */ if ( ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands != NULL ) { - count_free( ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands ); + free( ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands ); ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands = NULL; } /* free pointers to state and parameter structs */ - count_free( *ph_freq_domain_decorr_ap_params ); + free( *ph_freq_domain_decorr_ap_params ); *ph_freq_domain_decorr_ap_params = NULL; - count_free( *ph_freq_domain_decorr_ap_state ); + free( *ph_freq_domain_decorr_ap_state ); *ph_freq_domain_decorr_ap_state = NULL; return; diff --git a/lib_dec/ivas_dirac_onsets_dec.c b/lib_dec/ivas_dirac_onsets_dec.c index 95e6c90217..08968b84fb 100644 --- a/lib_dec/ivas_dirac_onsets_dec.c +++ b/lib_dec/ivas_dirac_onsets_dec.c @@ -69,8 +69,8 @@ void ivas_dirac_dec_onset_detection_open( dirac_onset_detection_params->max_band_decorr = max_band_decorr; /* memory allocation */ - dirac_onset_detection_state->onset_detector_1 = (float *) count_malloc( sizeof( float ) * num_protos_diff * dirac_onset_detection_params->max_band_decorr ); - dirac_onset_detection_state->onset_detector_2 = (float *) count_malloc( sizeof( float ) * num_protos_diff * dirac_onset_detection_params->max_band_decorr ); + dirac_onset_detection_state->onset_detector_1 = (float *) malloc( sizeof( float ) * num_protos_diff * dirac_onset_detection_params->max_band_decorr ); + dirac_onset_detection_state->onset_detector_2 = (float *) malloc( sizeof( float ) * num_protos_diff * dirac_onset_detection_params->max_band_decorr ); /* init to zero */ set_zero( dirac_onset_detection_state->onset_detector_1, num_protos_diff * dirac_onset_detection_params->max_band_decorr ); diff --git a/lib_dec/ivas_dirac_output_synthesis_cov.c b/lib_dec/ivas_dirac_output_synthesis_cov.c index 1176e853e1..0557cca612 100644 --- a/lib_dec/ivas_dirac_output_synthesis_cov.c +++ b/lib_dec/ivas_dirac_output_synthesis_cov.c @@ -80,15 +80,15 @@ void ivas_dirac_dec_output_synthesis_cov_open( /* buffer length and interpolator */ h_dirac_output_synthesis_params->alpha_synthesis = NULL; - h_dirac_output_synthesis_params->proto_matrix = (float *) count_malloc( nchan_out * nchan_in * sizeof( float ) ); + h_dirac_output_synthesis_params->proto_matrix = (float *) malloc( nchan_out * nchan_in * sizeof( float ) ); /* cov buffers */ for ( idx = 0; idx < num_param_bands; idx++ ) { - h_dirac_output_synthesis_state->cx_old[idx] = (float *) count_malloc( nchan_in * nchan_in * sizeof( float ) ); - h_dirac_output_synthesis_state->cy_old[idx] = (float *) count_malloc( nchan_out * nchan_out * sizeof( float ) ); - h_dirac_output_synthesis_state->mixing_matrix_old[idx] = (float *) count_malloc( nchan_out * nchan_in * sizeof( float ) ); + h_dirac_output_synthesis_state->cx_old[idx] = (float *) malloc( nchan_in * nchan_in * sizeof( float ) ); + h_dirac_output_synthesis_state->cy_old[idx] = (float *) malloc( nchan_out * nchan_out * sizeof( float ) ); + h_dirac_output_synthesis_state->mixing_matrix_old[idx] = (float *) malloc( nchan_out * nchan_in * sizeof( float ) ); set_zero( h_dirac_output_synthesis_state->cx_old[idx], nchan_in * nchan_in ); set_zero( h_dirac_output_synthesis_state->cy_old[idx], nchan_out * nchan_out ); set_zero( h_dirac_output_synthesis_state->mixing_matrix_old[idx], nchan_out * nchan_in ); @@ -101,7 +101,7 @@ void ivas_dirac_dec_output_synthesis_cov_open( } for ( idx = 0; idx < num_param_bands_residual; idx++ ) { - h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = (float *) count_malloc( nchan_out * nchan_out * sizeof( float ) ); + h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = (float *) malloc( nchan_out * nchan_out * sizeof( float ) ); set_zero( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx], nchan_out * nchan_out ); } for ( ; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) @@ -114,7 +114,7 @@ void ivas_dirac_dec_output_synthesis_cov_open( *-----------------------------------------------------------------*/ /* compute interpolator */ - h_dirac_output_synthesis_params->interpolator = (float *) count_malloc( interp_length * sizeof( float ) ); + h_dirac_output_synthesis_params->interpolator = (float *) malloc( interp_length * sizeof( float ) ); for ( idx = 1; idx <= interp_length; ++idx ) { h_dirac_output_synthesis_params->interpolator[idx - 1] = (float) idx / (float) interp_length; @@ -181,21 +181,21 @@ void ivas_dirac_dec_output_synthesis_cov_close( /* free interpolator */ if ( h_dirac_output_synthesis_params->interpolator != NULL ) { - count_free( h_dirac_output_synthesis_params->interpolator ); + free( h_dirac_output_synthesis_params->interpolator ); h_dirac_output_synthesis_params->interpolator = NULL; } /* free alpha */ if ( h_dirac_output_synthesis_params->alpha_synthesis != NULL ) { - count_free( h_dirac_output_synthesis_params->alpha_synthesis ); + free( h_dirac_output_synthesis_params->alpha_synthesis ); h_dirac_output_synthesis_params->alpha_synthesis = NULL; } /* free proto_matrix */ if ( h_dirac_output_synthesis_params->proto_matrix != NULL ) { - count_free( h_dirac_output_synthesis_params->proto_matrix ); + free( h_dirac_output_synthesis_params->proto_matrix ); h_dirac_output_synthesis_params->proto_matrix = NULL; } @@ -204,25 +204,25 @@ void ivas_dirac_dec_output_synthesis_cov_close( { if ( h_dirac_output_synthesis_state->cx_old[idx] != NULL ) { - count_free( h_dirac_output_synthesis_state->cx_old[idx] ); + free( h_dirac_output_synthesis_state->cx_old[idx] ); h_dirac_output_synthesis_state->cx_old[idx] = NULL; } if ( h_dirac_output_synthesis_state->cy_old[idx] != NULL ) { - count_free( h_dirac_output_synthesis_state->cy_old[idx] ); + free( h_dirac_output_synthesis_state->cy_old[idx] ); h_dirac_output_synthesis_state->cy_old[idx] = NULL; } if ( h_dirac_output_synthesis_state->mixing_matrix_old[idx] != NULL ) { - count_free( h_dirac_output_synthesis_state->mixing_matrix_old[idx] ); + free( h_dirac_output_synthesis_state->mixing_matrix_old[idx] ); h_dirac_output_synthesis_state->mixing_matrix_old[idx] = NULL; } if ( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] != NULL ) { - count_free( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] ); + free( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] ); h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = NULL; } } diff --git a/lib_dec/ivas_dirac_output_synthesis_dec.c b/lib_dec/ivas_dirac_output_synthesis_dec.c index a8a1e035f5..cf4dbcb071 100644 --- a/lib_dec/ivas_dirac_output_synthesis_dec.c +++ b/lib_dec/ivas_dirac_output_synthesis_dec.c @@ -126,22 +126,22 @@ void ivas_dirac_dec_output_synthesis_open( dirac_output_synthesis_state->diffuse_responses_square = NULL; if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_MONO ) { - dirac_output_synthesis_state->diffuse_responses_square = (float *) count_malloc( 2 * sizeof( float ) ); + dirac_output_synthesis_state->diffuse_responses_square = (float *) malloc( 2 * sizeof( float ) ); } else if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) { - dirac_output_synthesis_state->diffuse_responses_square = (float *) count_malloc( hDirAC->hOutSetup.nchan_out_woLFE * sizeof( float ) ); + dirac_output_synthesis_state->diffuse_responses_square = (float *) malloc( hDirAC->hOutSetup.nchan_out_woLFE * sizeof( float ) ); } /* prototype power buffers */ dirac_output_synthesis_state->proto_power_smooth_prev = NULL; if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) { - dirac_output_synthesis_state->proto_power_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_protos_dir * sizeof( float ) ); + dirac_output_synthesis_state->proto_power_smooth_prev = (float *) malloc( hDirAC->num_freq_bands * hDirAC->num_protos_dir * sizeof( float ) ); } if ( dirac_output_synthesis_params->max_band_decorr > 0 && ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_LS || hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) ) { - dirac_output_synthesis_state->proto_power_diff_smooth_prev = (float *) count_malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->hOutSetup.nchan_out_woLFE * sizeof( float ) ); + dirac_output_synthesis_state->proto_power_diff_smooth_prev = (float *) malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->hOutSetup.nchan_out_woLFE * sizeof( float ) ); } else { @@ -149,41 +149,41 @@ void ivas_dirac_dec_output_synthesis_open( } /* buffer length and interpolator */ - dirac_output_synthesis_params->interpolator = (float *) count_malloc( hDirAC->subframe_nbslots * sizeof( float ) ); + dirac_output_synthesis_params->interpolator = (float *) malloc( hDirAC->subframe_nbslots * sizeof( float ) ); /* target PSD buffers */ - dirac_output_synthesis_state->cy_cross_dir_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + dirac_output_synthesis_state->cy_cross_dir_smooth_prev = (float *) malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) { dirac_output_synthesis_state->cy_auto_dir_smooth_prev = NULL; - dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) count_malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->num_outputs_diff * sizeof( float ) ); + dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->num_outputs_diff * sizeof( float ) ); } else { - dirac_output_synthesis_state->cy_auto_dir_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + dirac_output_synthesis_state->cy_auto_dir_smooth_prev = (float *) malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) { - dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); } else { - dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_diff * sizeof( float ) ); + dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_diff * sizeof( float ) ); } } /* direct and diffuse gain buffers */ - dirac_output_synthesis_state->gains_dir_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + dirac_output_synthesis_state->gains_dir_prev = (float *) malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) { - dirac_output_synthesis_state->gains_diff_prev = (float *) count_malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->num_outputs_diff * sizeof( float ) ); + dirac_output_synthesis_state->gains_diff_prev = (float *) malloc( dirac_output_synthesis_params->max_band_decorr * hDirAC->num_outputs_diff * sizeof( float ) ); } else if ( hDirAC->synthesisConf != DIRAC_SYNTHESIS_PSD_SHD && hDirAC->synthesisConf != DIRAC_SYNTHESIS_MONO ) { - dirac_output_synthesis_state->gains_diff_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_diff * sizeof( float ) ); + dirac_output_synthesis_state->gains_diff_prev = (float *) malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_diff * sizeof( float ) ); } else { - dirac_output_synthesis_state->gains_diff_prev = (float *) count_malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); + dirac_output_synthesis_state->gains_diff_prev = (float *) malloc( hDirAC->num_freq_bands * hDirAC->num_outputs_dir * sizeof( float ) ); } /*-----------------------------------------------------------------* @@ -194,15 +194,15 @@ void ivas_dirac_dec_output_synthesis_open( if ( !( renderer_type == RENDERER_BINAURAL_PARAMETRIC || renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) ) { computeAlphaSynthesis( temp_alpha_synthesis, DIRAC_AVG_LENGTH_SYNTH_MS, DIRAC_ALPHA_MAX, &dirac_output_synthesis_params->numAlphas, hDirAC->slot_size, hDirAC->num_freq_bands, hDirAC->frequency_axis, output_Fs ); - dirac_output_synthesis_params->alpha_synthesis = (float *) count_malloc( dirac_output_synthesis_params->numAlphas * sizeof( float ) ); + dirac_output_synthesis_params->alpha_synthesis = (float *) malloc( dirac_output_synthesis_params->numAlphas * sizeof( float ) ); mvr2r( temp_alpha_synthesis, dirac_output_synthesis_params->alpha_synthesis, dirac_output_synthesis_params->numAlphas ); computeAlphaSynthesis( temp_alpha_synthesis, DIRAC_AVG_LENGTH_SYNTH_MS_FAST, DIRAC_ALPHA_MAX_FAST, &dirac_output_synthesis_params->numAlphasFast, hDirAC->slot_size, hDirAC->num_freq_bands, hDirAC->frequency_axis, output_Fs ); - dirac_output_synthesis_params->alpha_synthesis_fast = (float *) count_malloc( dirac_output_synthesis_params->numAlphasFast * sizeof( float ) ); + dirac_output_synthesis_params->alpha_synthesis_fast = (float *) malloc( dirac_output_synthesis_params->numAlphasFast * sizeof( float ) ); mvr2r( temp_alpha_synthesis, dirac_output_synthesis_params->alpha_synthesis_fast, dirac_output_synthesis_params->numAlphasFast ); - dirac_output_synthesis_state->reference_power_smooth_prev = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); - dirac_output_synthesis_state->direction_smoothness_prev = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + dirac_output_synthesis_state->reference_power_smooth_prev = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); + dirac_output_synthesis_state->direction_smoothness_prev = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_zero( dirac_output_synthesis_state->reference_power_smooth_prev, hDirAC->num_freq_bands ); set_zero( dirac_output_synthesis_state->direction_smoothness_prev, hDirAC->num_freq_bands ); } @@ -367,79 +367,79 @@ void ivas_dirac_dec_output_synthesis_close( /* free interpolator */ if ( ( dirac_output_synthesis_params )->interpolator != NULL ) { - count_free( ( dirac_output_synthesis_params )->interpolator ); + free( ( dirac_output_synthesis_params )->interpolator ); ( dirac_output_synthesis_params )->interpolator = NULL; } /* free alpha */ if ( ( dirac_output_synthesis_params )->alpha_synthesis != NULL ) { - count_free( ( dirac_output_synthesis_params )->alpha_synthesis ); + free( ( dirac_output_synthesis_params )->alpha_synthesis ); ( dirac_output_synthesis_params )->alpha_synthesis = NULL; } if ( ( dirac_output_synthesis_params )->alpha_synthesis_fast != NULL ) { - count_free( ( dirac_output_synthesis_params )->alpha_synthesis_fast ); + free( ( dirac_output_synthesis_params )->alpha_synthesis_fast ); ( dirac_output_synthesis_params )->alpha_synthesis_fast = NULL; } if ( ( dirac_output_synthesis_state )->reference_power_smooth_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->reference_power_smooth_prev ); + free( ( dirac_output_synthesis_state )->reference_power_smooth_prev ); ( dirac_output_synthesis_state )->reference_power_smooth_prev = NULL; } if ( ( dirac_output_synthesis_state )->direction_smoothness_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->direction_smoothness_prev ); + free( ( dirac_output_synthesis_state )->direction_smoothness_prev ); ( dirac_output_synthesis_state )->direction_smoothness_prev = NULL; } if ( ( dirac_output_synthesis_state )->diffuse_responses_square != NULL ) { - count_free( ( dirac_output_synthesis_state )->diffuse_responses_square ); + free( ( dirac_output_synthesis_state )->diffuse_responses_square ); ( dirac_output_synthesis_state )->diffuse_responses_square = NULL; } /* free power buffers */ if ( ( dirac_output_synthesis_state )->proto_power_smooth_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->proto_power_smooth_prev ); + free( ( dirac_output_synthesis_state )->proto_power_smooth_prev ); ( dirac_output_synthesis_state )->proto_power_smooth_prev = NULL; } if ( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev ); + free( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev ); ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev = NULL; } /* free target power buffers */ if ( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev ); + free( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev ); ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev = NULL; } if ( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev ); + free( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev ); ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev = NULL; } if ( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev ); + free( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev ); ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev = NULL; } /* free gain buffers */ if ( ( dirac_output_synthesis_state )->gains_dir_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->gains_dir_prev ); + free( ( dirac_output_synthesis_state )->gains_dir_prev ); ( dirac_output_synthesis_state )->gains_dir_prev = NULL; } if ( ( dirac_output_synthesis_state )->gains_diff_prev != NULL ) { - count_free( ( dirac_output_synthesis_state )->gains_diff_prev ); + free( ( dirac_output_synthesis_state )->gains_diff_prev ); ( dirac_output_synthesis_state )->gains_diff_prev = NULL; } diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 3d244cb4a7..601efc3b7d 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1126,7 +1126,7 @@ ivas_error ivas_init_decoder( if ( n > 0 ) { - if ( ( st_ivas->mem_hp20_out = (float **) count_malloc( n * sizeof( float * ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_out = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -1138,7 +1138,7 @@ ivas_error ivas_init_decoder( for ( i = 0; i < n; i++ ) { - if ( ( st_ivas->mem_hp20_out[i] = (float *) count_malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_out[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -1174,7 +1174,7 @@ ivas_error ivas_init_decoder( if ( st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) { - if ( ( st_ivas->hCrend = (CREND_HANDLE) count_malloc( sizeof( CREND_DATA ) ) ) == NULL ) + if ( ( st_ivas->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR Crend\n" ); } @@ -1299,127 +1299,127 @@ void destroy_core_dec( if ( hCoreCoder->hGSCDec != NULL ) { - count_free( hCoreCoder->hGSCDec ); + free( hCoreCoder->hGSCDec ); hCoreCoder->hGSCDec = NULL; } if ( hCoreCoder->hPFstat != NULL ) { - count_free( hCoreCoder->hPFstat ); + free( hCoreCoder->hPFstat ); hCoreCoder->hPFstat = NULL; } if ( hCoreCoder->hMusicPF != NULL ) { - count_free( hCoreCoder->hMusicPF ); + free( hCoreCoder->hMusicPF ); hCoreCoder->hMusicPF = NULL; } if ( hCoreCoder->hBPF != NULL ) { - count_free( hCoreCoder->hBPF ); + free( hCoreCoder->hBPF ); hCoreCoder->hBPF = NULL; } if ( hCoreCoder->hBWE_zero != NULL ) { - count_free( hCoreCoder->hBWE_zero ); + free( hCoreCoder->hBWE_zero ); hCoreCoder->hBWE_zero = NULL; } if ( hCoreCoder->hTdCngDec != NULL ) { - count_free( hCoreCoder->hTdCngDec ); + free( hCoreCoder->hTdCngDec ); hCoreCoder->hTdCngDec = NULL; } if ( hCoreCoder->hSC_VBR != NULL ) { - count_free( hCoreCoder->hSC_VBR ); + free( hCoreCoder->hSC_VBR ); hCoreCoder->hSC_VBR = NULL; } if ( hCoreCoder->hAmrwb_IO != NULL ) { - count_free( hCoreCoder->hAmrwb_IO ); + free( hCoreCoder->hAmrwb_IO ); hCoreCoder->hAmrwb_IO = NULL; } if ( hCoreCoder->hBWE_TD != NULL ) { - count_free( hCoreCoder->hBWE_TD ); + free( hCoreCoder->hBWE_TD ); hCoreCoder->hBWE_TD = NULL; } if ( hCoreCoder->hBWE_FD != NULL ) { - count_free( hCoreCoder->hBWE_FD ); + free( hCoreCoder->hBWE_FD ); hCoreCoder->hBWE_FD = NULL; } if ( hCoreCoder->hBWE_FD_HR != NULL ) { - count_free( hCoreCoder->hBWE_FD_HR ); + free( hCoreCoder->hBWE_FD_HR ); hCoreCoder->hBWE_FD_HR = NULL; } if ( hCoreCoder->hWIDec != NULL ) { - count_free( hCoreCoder->hWIDec ); + free( hCoreCoder->hWIDec ); hCoreCoder->hWIDec = NULL; } if ( hCoreCoder->hTECDec != NULL ) { - count_free( hCoreCoder->hTECDec ); + free( hCoreCoder->hTECDec ); hCoreCoder->hTECDec = NULL; } if ( hCoreCoder->hTcxLtpDec != NULL ) { - count_free( hCoreCoder->hTcxLtpDec ); + free( hCoreCoder->hTcxLtpDec ); hCoreCoder->hTcxLtpDec = NULL; } if ( hCoreCoder->hTcxDec != NULL ) { - count_free( hCoreCoder->hTcxDec ); + free( hCoreCoder->hTcxDec ); hCoreCoder->hTcxDec = NULL; } if ( hCoreCoder->hTcxCfg != NULL && hCoreCoder->mct_chan_mode != MCT_CHAN_MODE_LFE ) { - count_free( hCoreCoder->hTcxCfg ); + free( hCoreCoder->hTcxCfg ); hCoreCoder->hTcxCfg = NULL; } if ( hCoreCoder->hTonalMDCTConc != NULL ) { - count_free( hCoreCoder->hTonalMDCTConc ); + free( hCoreCoder->hTonalMDCTConc ); hCoreCoder->hTonalMDCTConc = NULL; } if ( hCoreCoder->hIGFDec != NULL ) { - count_free( hCoreCoder->hIGFDec ); + free( hCoreCoder->hIGFDec ); hCoreCoder->hIGFDec = NULL; } if ( hCoreCoder->hPlcInfo != NULL ) { - count_free( hCoreCoder->hPlcInfo ); + free( hCoreCoder->hPlcInfo ); hCoreCoder->hPlcInfo = NULL; } if ( hCoreCoder->hHQ_core != NULL ) { - count_free( hCoreCoder->hHQ_core ); + free( hCoreCoder->hHQ_core ); hCoreCoder->hHQ_core = NULL; } if ( hCoreCoder->hHQ_nbfec != NULL ) { - count_free( hCoreCoder->hHQ_nbfec ); + free( hCoreCoder->hHQ_nbfec ); hCoreCoder->hHQ_nbfec = NULL; } @@ -1571,10 +1571,10 @@ void ivas_destroy_dec( { for ( i = 0; i < getNumChanSynthesis( st_ivas ); i++ ) { - count_free( st_ivas->mem_hp20_out[i] ); + free( st_ivas->mem_hp20_out[i] ); st_ivas->mem_hp20_out[i] = NULL; } - count_free( st_ivas->mem_hp20_out ); + free( st_ivas->mem_hp20_out ); st_ivas->mem_hp20_out = NULL; } @@ -1583,7 +1583,7 @@ void ivas_destroy_dec( { if ( st_ivas->hIsmMetaData[n] != NULL ) { - count_free( st_ivas->hIsmMetaData[n] ); + free( st_ivas->hIsmMetaData[n] ); st_ivas->hIsmMetaData[n] = NULL; } } @@ -1591,7 +1591,7 @@ void ivas_destroy_dec( /* ISm renderer handle */ if ( st_ivas->hIsmRendererData != NULL ) { - count_free( st_ivas->hIsmRendererData ); + free( st_ivas->hIsmRendererData ); st_ivas->hIsmRendererData = NULL; } @@ -1619,7 +1619,7 @@ void ivas_destroy_dec( /* HOA decoder matrix */ if ( st_ivas->hoa_dec_mtx != NULL ) { - count_free( st_ivas->hoa_dec_mtx ); + free( st_ivas->hoa_dec_mtx ); st_ivas->hoa_dec_mtx = NULL; } @@ -1653,7 +1653,7 @@ void ivas_destroy_dec( /* Custom LS configuration handle */ if ( st_ivas->hLsSetupCustom != NULL ) { - count_free( st_ivas->hLsSetupCustom ); + free( st_ivas->hLsSetupCustom ); st_ivas->hLsSetupCustom = NULL; } @@ -1667,14 +1667,14 @@ void ivas_destroy_dec( /* Downmix structure */ if ( st_ivas->hMonoDmxRenderer != NULL ) { - count_free( st_ivas->hMonoDmxRenderer ); + free( st_ivas->hMonoDmxRenderer ); st_ivas->hMonoDmxRenderer = NULL; } /* Head track data handle */ if ( st_ivas->hHeadTrackData != NULL ) { - count_free( st_ivas->hHeadTrackData ); + free( st_ivas->hHeadTrackData ); st_ivas->hHeadTrackData = NULL; } @@ -1704,12 +1704,12 @@ void ivas_destroy_dec( if ( st_ivas->hDecoderConfig != NULL ) { - count_free( st_ivas->hDecoderConfig ); + free( st_ivas->hDecoderConfig ); st_ivas->hDecoderConfig = NULL; } /* main IVAS handle */ - count_free( st_ivas ); + free( st_ivas ); return; } diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index 50f5cbb2a2..7a5731a286 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -522,7 +522,7 @@ ivas_error create_ism_metadata_dec( /* allocate ISm metadata handles */ for ( ch = 0; ch < MAX_NUM_OBJECTS; ch++ ) { - if ( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) count_malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) + if ( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISm MetaData\n" ) ); } diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 81ebf28a73..c9e8135375 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -326,11 +326,11 @@ static ivas_error ivas_param_ism_rendering_init( } /* memory allocation for proto matrix and interpolator */ - if ( ( hParamIsmRendering->proto_matrix = (float *) count_malloc( hOutSetup.nchan_out_woLFE * nchan_transport * sizeof( float ) ) ) == NULL ) + if ( ( hParamIsmRendering->proto_matrix = (float *) malloc( hOutSetup.nchan_out_woLFE * nchan_transport * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for proto matrix\n" ) ); } - if ( ( hParamIsmRendering->interpolator = (float *) count_malloc( subframe_nbslots * sizeof( float ) ) ) == NULL ) + if ( ( hParamIsmRendering->interpolator = (float *) malloc( subframe_nbslots * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for interpolator\n" ) ); } @@ -404,18 +404,18 @@ ivas_error ivas_param_ism_dec_open( * prepare library opening *-----------------------------------------------------------------*/ - if ( ( hDirAC = (DIRAC_DEC_HANDLE) count_malloc( sizeof( DIRAC_DEC_DATA ) ) ) == NULL ) + if ( ( hDirAC = (DIRAC_DEC_HANDLE) malloc( sizeof( DIRAC_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } /* Assign memory to Param Object handle */ - if ( ( hDirAC->hParamIsm = (PARAM_ISM_CONFIG_HANDLE) count_malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL ) + if ( ( hDirAC->hParamIsm = (PARAM_ISM_CONFIG_HANDLE) malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM\n" ) ); } - if ( ( hDirAC->hParamIsmRendering = (PARAM_ISM_RENDERING_HANDLE) count_malloc( sizeof( PARAM_ISM_RENDERING_DATA ) ) ) == NULL ) + if ( ( hDirAC->hParamIsmRendering = (PARAM_ISM_RENDERING_HANDLE) malloc( sizeof( PARAM_ISM_RENDERING_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM Rendering handle\n" ) ); } @@ -500,34 +500,34 @@ ivas_error ivas_param_ism_dec_open( if ( ( output_config == AUDIO_CONFIG_BINAURAL || output_config == AUDIO_CONFIG_BINAURAL_ROOM ) ) { hDirAC->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES; - hDirAC->azimuth = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); - hDirAC->elevation = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); - hDirAC->azimuth2 = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); - hDirAC->elevation2 = (int16_t **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); - hDirAC->energy_ratio1 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); - hDirAC->spreadCoherence = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); - hDirAC->energy_ratio2 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); - hDirAC->spreadCoherence2 = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); - hDirAC->surroundingCoherence = (float **) count_malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->azimuth = (int16_t **) malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->elevation = (int16_t **) malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->azimuth2 = (int16_t **) malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->elevation2 = (int16_t **) malloc( hDirAC->dirac_md_buffer_length * sizeof( int16_t * ) ); + hDirAC->energy_ratio1 = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->spreadCoherence = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->energy_ratio2 = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->spreadCoherence2 = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); + hDirAC->surroundingCoherence = (float **) malloc( hDirAC->dirac_md_buffer_length * sizeof( float * ) ); for ( i = 0; i < hDirAC->dirac_md_buffer_length; i++ ) { - hDirAC->azimuth[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + hDirAC->azimuth[i] = (int16_t *) malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); set_s( hDirAC->azimuth[i], 0, hDirAC->num_freq_bands ); - hDirAC->elevation[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + hDirAC->elevation[i] = (int16_t *) malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); set_s( hDirAC->elevation[i], 0, hDirAC->num_freq_bands ); - hDirAC->azimuth2[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + hDirAC->azimuth2[i] = (int16_t *) malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); set_s( hDirAC->azimuth2[i], 0, hDirAC->num_freq_bands ); - hDirAC->elevation2[i] = (int16_t *) count_malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); + hDirAC->elevation2[i] = (int16_t *) malloc( hDirAC->num_freq_bands * sizeof( int16_t ) ); set_s( hDirAC->elevation2[i], 0, hDirAC->num_freq_bands ); - hDirAC->energy_ratio1[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->energy_ratio1[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->energy_ratio1[i], 0.0f, hDirAC->num_freq_bands ); - hDirAC->spreadCoherence[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->spreadCoherence[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->spreadCoherence[i], 0.0f, hDirAC->num_freq_bands ); - hDirAC->energy_ratio2[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->energy_ratio2[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->energy_ratio2[i], 0.0f, hDirAC->num_freq_bands ); - hDirAC->spreadCoherence2[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->spreadCoherence2[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->spreadCoherence2[i], 0.0f, hDirAC->num_freq_bands ); - hDirAC->surroundingCoherence[i] = (float *) count_malloc( hDirAC->num_freq_bands * sizeof( float ) ); + hDirAC->surroundingCoherence[i] = (float *) malloc( hDirAC->num_freq_bands * sizeof( float ) ); set_f( hDirAC->surroundingCoherence[i], 0.0f, hDirAC->num_freq_bands ); } } @@ -555,7 +555,7 @@ void ivas_param_ism_dec_close( /* Config & CLDFB */ if ( hDirAC->hParamIsm != NULL ) { - count_free( hDirAC->hParamIsm ); + free( hDirAC->hParamIsm ); hDirAC->hParamIsm = NULL; } @@ -565,25 +565,25 @@ void ivas_param_ism_dec_close( { if ( hDirAC->azimuth[i] != NULL ) { - count_free( hDirAC->azimuth[i] ); + free( hDirAC->azimuth[i] ); hDirAC->azimuth[i] = NULL; } if ( hDirAC->elevation[i] != NULL ) { - count_free( hDirAC->elevation[i] ); + free( hDirAC->elevation[i] ); hDirAC->elevation[i] = NULL; } } if ( hDirAC->azimuth != NULL ) { - count_free( hDirAC->azimuth ); + free( hDirAC->azimuth ); hDirAC->azimuth = NULL; } if ( hDirAC->elevation != NULL ) { - count_free( hDirAC->elevation ); + free( hDirAC->elevation ); hDirAC->elevation = NULL; } @@ -593,11 +593,11 @@ void ivas_param_ism_dec_close( { if ( hDirAC->azimuth2[i] != NULL ) { - count_free( hDirAC->azimuth2[i] ); + free( hDirAC->azimuth2[i] ); hDirAC->azimuth2[i] = NULL; } } - count_free( hDirAC->azimuth2 ); + free( hDirAC->azimuth2 ); hDirAC->azimuth2 = NULL; } @@ -607,11 +607,11 @@ void ivas_param_ism_dec_close( { if ( hDirAC->elevation2[i] != NULL ) { - count_free( hDirAC->elevation2[i] ); + free( hDirAC->elevation2[i] ); hDirAC->elevation2[i] = NULL; } } - count_free( hDirAC->elevation2 ); + free( hDirAC->elevation2 ); hDirAC->elevation2 = NULL; } @@ -621,11 +621,11 @@ void ivas_param_ism_dec_close( { if ( hDirAC->energy_ratio1[i] != NULL ) { - count_free( hDirAC->energy_ratio1[i] ); + free( hDirAC->energy_ratio1[i] ); hDirAC->energy_ratio1[i] = NULL; } } - count_free( hDirAC->energy_ratio1 ); + free( hDirAC->energy_ratio1 ); hDirAC->energy_ratio1 = NULL; } @@ -635,11 +635,11 @@ void ivas_param_ism_dec_close( { if ( hDirAC->energy_ratio2[i] != NULL ) { - count_free( hDirAC->energy_ratio2[i] ); + free( hDirAC->energy_ratio2[i] ); hDirAC->energy_ratio2[i] = NULL; } } - count_free( hDirAC->energy_ratio2 ); + free( hDirAC->energy_ratio2 ); hDirAC->energy_ratio2 = NULL; } @@ -649,11 +649,11 @@ void ivas_param_ism_dec_close( { if ( hDirAC->spreadCoherence[i] != NULL ) { - count_free( hDirAC->spreadCoherence[i] ); + free( hDirAC->spreadCoherence[i] ); hDirAC->spreadCoherence[i] = NULL; } } - count_free( hDirAC->spreadCoherence ); + free( hDirAC->spreadCoherence ); hDirAC->spreadCoherence = NULL; } @@ -663,11 +663,11 @@ void ivas_param_ism_dec_close( { if ( hDirAC->spreadCoherence2[i] != NULL ) { - count_free( hDirAC->spreadCoherence2[i] ); + free( hDirAC->spreadCoherence2[i] ); hDirAC->spreadCoherence2[i] = NULL; } } - count_free( hDirAC->spreadCoherence2 ); + free( hDirAC->spreadCoherence2 ); hDirAC->spreadCoherence2 = NULL; } @@ -677,11 +677,11 @@ void ivas_param_ism_dec_close( { if ( hDirAC->surroundingCoherence[i] != NULL ) { - count_free( hDirAC->surroundingCoherence[i] ); + free( hDirAC->surroundingCoherence[i] ); hDirAC->surroundingCoherence[i] = NULL; } } - count_free( hDirAC->surroundingCoherence ); + free( hDirAC->surroundingCoherence ); hDirAC->surroundingCoherence = NULL; } } @@ -691,23 +691,23 @@ void ivas_param_ism_dec_close( /* Param ISM Rendering */ if ( hDirAC->hParamIsmRendering->interpolator != NULL ) { - count_free( hDirAC->hParamIsmRendering->interpolator ); + free( hDirAC->hParamIsmRendering->interpolator ); hDirAC->hParamIsmRendering->interpolator = NULL; } if ( hDirAC->hParamIsmRendering->proto_matrix != NULL ) { - count_free( hDirAC->hParamIsmRendering->proto_matrix ); + free( hDirAC->hParamIsmRendering->proto_matrix ); hDirAC->hParamIsmRendering->proto_matrix = NULL; } } if ( hDirAC->hParamIsmRendering != NULL ) { - count_free( hDirAC->hParamIsmRendering ); + free( hDirAC->hParamIsmRendering ); hDirAC->hParamIsmRendering = NULL; } - count_free( hDirAC ); + free( hDirAC ); return; } @@ -1069,7 +1069,7 @@ static ivas_error ivas_ism_bitrate_switching( /* close the ISM renderer and reinitialize */ if ( st_ivas->hIsmRendererData != NULL ) { - count_free( st_ivas->hIsmRendererData ); + free( st_ivas->hIsmRendererData ); st_ivas->hIsmRendererData = NULL; } ivas_ism_renderer_open( st_ivas ); @@ -1113,7 +1113,7 @@ static ivas_error ivas_ism_bitrate_switching( /* Close the ISM renderer */ if ( st_ivas->hIsmRendererData != NULL ) { - count_free( st_ivas->hIsmRendererData ); + free( st_ivas->hIsmRendererData ); st_ivas->hIsmRendererData = NULL; } } diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index c671c7fd3e..d0b4297846 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -61,7 +61,7 @@ ivas_error ivas_ism_renderer_open( error = IVAS_ERR_OK; - if ( ( st_ivas->hIsmRendererData = (ISM_RENDERER_HANDLE) count_malloc( sizeof( ISM_RENDERER_DATA ) ) ) == NULL ) + if ( ( st_ivas->hIsmRendererData = (ISM_RENDERER_HANDLE) malloc( sizeof( ISM_RENDERER_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM renderer\n" ) ); } diff --git a/lib_dec/ivas_lfe_dec.c b/lib_dec/ivas_lfe_dec.c index 066cd968f1..688fb0da9a 100644 --- a/lib_dec/ivas_lfe_dec.c +++ b/lib_dec/ivas_lfe_dec.c @@ -371,7 +371,7 @@ ivas_error ivas_create_lfe_dec( * Allocate LFE handle *-----------------------------------------------------------------*/ - if ( ( hLFE = (LFE_DEC_HANDLE) count_malloc( sizeof( LFE_DEC_DATA ) ) ) == NULL ) + if ( ( hLFE = (LFE_DEC_HANDLE) malloc( sizeof( LFE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE\n" ) ); } @@ -380,7 +380,7 @@ ivas_error ivas_create_lfe_dec( * LFE Window: allocate and initialize *-----------------------------------------------------------------*/ - if ( ( hLFE->pWindow_state = (LFE_WINDOW_HANDLE) count_malloc( sizeof( LFE_WINDOW_DATA ) ) ) == NULL ) + if ( ( hLFE->pWindow_state = (LFE_WINDOW_HANDLE) malloc( sizeof( LFE_WINDOW_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE window structure\n" ) ); } @@ -441,7 +441,7 @@ ivas_error ivas_create_lfe_dec( if ( hLFE->lfe_addl_delay > 0 ) { - if ( ( hLFE->lfe_delay_buf = (float *) count_malloc( hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) + if ( ( hLFE->lfe_delay_buf = (float *) malloc( hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE additional delay buffer\n" ) ); } @@ -478,16 +478,16 @@ void ivas_lfe_dec_close( LFE_DEC_HANDLE hLFE /* i/o: LFE decoder handle */ ) { - count_free( hLFE->pWindow_state ); + free( hLFE->pWindow_state ); hLFE->pWindow_state = NULL; if ( hLFE->lfe_delay_buf != NULL ) { - count_free( hLFE->lfe_delay_buf ); + free( hLFE->lfe_delay_buf ); hLFE->lfe_delay_buf = NULL; } - count_free( hLFE ); + free( hLFE ); return; } diff --git a/lib_dec/ivas_masa_dec.c b/lib_dec/ivas_masa_dec.c index 5e263a91d1..d04505baef 100644 --- a/lib_dec/ivas_masa_dec.c +++ b/lib_dec/ivas_masa_dec.c @@ -322,7 +322,7 @@ ivas_error ivas_masa_dec_open( { MASA_DECODER_HANDLE hMasa; - if ( ( hMasa = (MASA_DECODER_HANDLE) count_malloc( sizeof( MASA_DECODER ) ) ) == NULL ) + if ( ( hMasa = (MASA_DECODER_HANDLE) malloc( sizeof( MASA_DECODER ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); } @@ -337,7 +337,7 @@ ivas_error ivas_masa_dec_open( /* Create spherical grid only for external output */ if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) { - hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) count_malloc( sizeof( SPHERICAL_GRID_DATA ) ); + hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ); generate_gridEq( hMasa->data.sph_grid16 ); } else @@ -373,7 +373,7 @@ void ivas_masa_dec_close( /* Free spherical grid memory if in use */ if ( hMasa->data.sph_grid16 != NULL ) { - count_free( hMasa->data.sph_grid16 ); + free( hMasa->data.sph_grid16 ); hMasa->data.sph_grid16 = NULL; } @@ -381,29 +381,29 @@ void ivas_masa_dec_close( { if ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer != NULL ) { - count_free( hMasa->hMasaLfeSynth->lfeSynthRingBuffer ); + free( hMasa->hMasaLfeSynth->lfeSynthRingBuffer ); hMasa->hMasaLfeSynth->lfeSynthRingBuffer = NULL; } if ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 != NULL ) { - count_free( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 ); + free( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 ); hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = NULL; } if ( hMasa->hMasaLfeSynth->delayBuffer_syncLp != NULL ) { - count_free( hMasa->hMasaLfeSynth->delayBuffer_syncLp ); + free( hMasa->hMasaLfeSynth->delayBuffer_syncLp ); hMasa->hMasaLfeSynth->delayBuffer_syncLp = NULL; } if ( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC != NULL ) { - count_free( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC ); + free( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC ); hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = NULL; } - count_free( hMasa->hMasaLfeSynth ); + free( hMasa->hMasaLfeSynth ); hMasa->hMasaLfeSynth = NULL; } - count_free( hMasa ); + free( hMasa ); hMasa = NULL; return; @@ -803,7 +803,7 @@ static void init_lfe_synth_data( output_Fs = st_ivas->hDecoderConfig->output_Fs; output_config = st_ivas->hDecoderConfig->output_config; - hMasa->hMasaLfeSynth = (MCMASA_LFE_SYNTH_DATA_HANDLE) count_malloc( sizeof( MCMASA_LFE_SYNTH_DATA ) ); + hMasa->hMasaLfeSynth = (MCMASA_LFE_SYNTH_DATA_HANDLE) malloc( sizeof( MCMASA_LFE_SYNTH_DATA ) ); hMasa->hMasaLfeSynth->transportEneSmooth = 0.0f; hMasa->hMasaLfeSynth->protoLfeEneSmooth = 0.0f; @@ -827,7 +827,7 @@ static void init_lfe_synth_data( /* Ring buffer for the filterbank of the LFE synthesis. * The filterbank is using moving average lowpass filter with the crossover of 120 Hz. */ bufferSize = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES ); - hMasa->hMasaLfeSynth->lfeSynthRingBuffer = (float *) count_malloc( bufferSize * sizeof( float ) ); + hMasa->hMasaLfeSynth->lfeSynthRingBuffer = (float *) malloc( bufferSize * sizeof( float ) ); set_zero( hMasa->hMasaLfeSynth->lfeSynthRingBuffer, bufferSize ); hMasa->hMasaLfeSynth->ringBufferLoPointer = 0; hMasa->hMasaLfeSynth->ringBufferHiPointer = bufferSize / 2; @@ -837,7 +837,7 @@ static void init_lfe_synth_data( /* Ring buffer for additional lowpass filter for the LFE signal. * Moving average lowpass filter with the crossover of 240 Hz. */ bufferSize /= 2; - hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = (float *) count_malloc( bufferSize * sizeof( float ) ); + hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = (float *) malloc( bufferSize * sizeof( float ) ); set_zero( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2, bufferSize ); hMasa->hMasaLfeSynth->ringBufferLoPointer2 = 0; hMasa->hMasaLfeSynth->lowpassSum2 = 0.0f; @@ -845,13 +845,13 @@ static void init_lfe_synth_data( /* Delay buffer for matching the delay of the lowpass filter */ bufferSize /= 2; /* The delay of the moving average lowpass filter is bufferSize / 2 */ - hMasa->hMasaLfeSynth->delayBuffer_syncLp = (float *) count_malloc( bufferSize * sizeof( float ) ); + hMasa->hMasaLfeSynth->delayBuffer_syncLp = (float *) malloc( bufferSize * sizeof( float ) ); set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncLp, bufferSize ); hMasa->hMasaLfeSynth->delayBuffer_syncLp_size = bufferSize; /* Delay buffer for syncing with DirAC rendering */ bufferSize = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ) - hMasa->hMasaLfeSynth->ringBufferSize / 2 - hMasa->hMasaLfeSynth->ringBufferSize2 / 2; - hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) count_malloc( bufferSize * sizeof( float ) ); + hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) malloc( bufferSize * sizeof( float ) ); set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, bufferSize ); hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size = bufferSize; @@ -870,7 +870,7 @@ static void init_lfe_synth_data( /* Delay buffer for syncing with DirAC rendering */ bufferSize = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ); - hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) count_malloc( bufferSize * sizeof( float ) ); + hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) malloc( bufferSize * sizeof( float ) ); set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, bufferSize ); hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size = bufferSize; diff --git a/lib_dec/ivas_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c index 0d426078e9..5e0055a5cd 100644 --- a/lib_dec/ivas_mc_param_dec.c +++ b/lib_dec/ivas_mc_param_dec.c @@ -120,12 +120,12 @@ ivas_error ivas_param_mc_dec_open( * prepare library opening *-----------------------------------------------------------------*/ - if ( ( hParamMC = (PARAM_MC_DEC_HANDLE) count_malloc( sizeof( PARAM_MC_DEC_DATA ) ) ) == NULL ) + if ( ( hParamMC = (PARAM_MC_DEC_HANDLE) malloc( sizeof( PARAM_MC_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); } - if ( ( hParamMC->hMetadataPMC = (HANDLE_IVAS_PARAM_MC_METADATA) count_malloc( sizeof( IVAS_PARAM_MC_METADATA ) ) ) == NULL ) + if ( ( hParamMC->hMetadataPMC = (HANDLE_IVAS_PARAM_MC_METADATA) malloc( sizeof( IVAS_PARAM_MC_METADATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC metadata \n" ) ); } @@ -216,8 +216,8 @@ ivas_error ivas_param_mc_dec_open( ivas_param_mc_metadata_open( mc_ls_setup, hTransportSetup.index_lfe[0], ivas_total_brate, hParamMC->hMetadataPMC ); /* init arrays for quantized parameters */ - hParamMC->icc_q = (float *) count_malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe * sizeof( float ) ); - hParamMC->icld_q = (float *) count_malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe * sizeof( float ) ); + hParamMC->icc_q = (float *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe * sizeof( float ) ); + hParamMC->icld_q = (float *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe * sizeof( float ) ); set_f( hParamMC->icld_q, PARAM_MC_DEFAULT_MIN_ILD, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe ); set_f( hParamMC->icc_q, 0.0f, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe ); @@ -266,7 +266,7 @@ ivas_error ivas_param_mc_dec_open( /* convert the ls conv dmx matrix into column order matrix format (nchan_out_cldfb x nchan_out) */ if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) { - hParamMC->ls_conv_dmx_matrix = (float *) count_malloc( nchan_out_transport * nchan_out_cov * sizeof( float ) ); + hParamMC->ls_conv_dmx_matrix = (float *) malloc( nchan_out_transport * nchan_out_cov * sizeof( float ) ); for ( k = 0; k < nchan_out_transport; k++ ) { mvr2r( st_ivas->hLsSetUpConversion->dmxMtx[k], &hParamMC->ls_conv_dmx_matrix[k * nchan_out_cov], nchan_out_cov ); @@ -288,7 +288,7 @@ ivas_error ivas_param_mc_dec_open( } } - hParamMC->proto_matrix_int = (float *) count_malloc( nchan_out_transport * nchan_transport * sizeof( float ) ); + hParamMC->proto_matrix_int = (float *) malloc( nchan_out_transport * nchan_transport * sizeof( float ) ); mvr2r( ivas_param_mc_conf[config_index].dmx_fac, hParamMC->proto_matrix_int, nchan_transport * nchan_out_transport ); if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) @@ -333,7 +333,7 @@ ivas_error ivas_param_mc_dec_open( else { hParamMC->num_outputs_diff = nchan_out_cov; - hParamMC->diff_proto_info = (PARAM_MC_DIFF_PROTO_INFO *) count_malloc( sizeof( PARAM_MC_DIFF_PROTO_INFO ) ); + hParamMC->diff_proto_info = (PARAM_MC_DIFF_PROTO_INFO *) malloc( sizeof( PARAM_MC_DIFF_PROTO_INFO ) ); param_mc_get_diff_proto_info( proto_matrix, nchan_transport, nchan_out_cov, hParamMC->diff_proto_info ); @@ -384,7 +384,7 @@ ivas_error ivas_param_mc_dec_open( /* Head rotation */ if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && st_ivas->hDecoderConfig->Opt_Headrotation ) { - hParamMC->hoa_encoder = (float *) count_malloc( st_ivas->hTransSetup.nchan_out_woLFE * MAX_INTERN_CHANNELS * sizeof( float ) ); + hParamMC->hoa_encoder = (float *) malloc( st_ivas->hTransSetup.nchan_out_woLFE * MAX_INTERN_CHANNELS * sizeof( float ) ); compute_hoa_encoder_mtx( st_ivas->hTransSetup.ls_azimuth, st_ivas->hTransSetup.ls_elevation, hParamMC->hoa_encoder, st_ivas->hTransSetup.nchan_out_woLFE, HEAD_ROTATION_HOA_ORDER ); } @@ -394,8 +394,8 @@ ivas_error ivas_param_mc_dec_open( if ( hParamMC->max_band_decorr > 0 ) { - hParamMC->proto_frame_f = (float *) count_malloc( 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands * sizeof( float ) ); - hParamMC->proto_frame_dec_f = (float *) count_malloc( 2 * nchan_out_cov * hParamMC->num_freq_bands * sizeof( float ) ); + hParamMC->proto_frame_f = (float *) malloc( 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands * sizeof( float ) ); + hParamMC->proto_frame_dec_f = (float *) malloc( 2 * nchan_out_cov * hParamMC->num_freq_bands * sizeof( float ) ); } else { @@ -487,19 +487,19 @@ void ivas_param_mc_dec_close( { ivas_param_mc_metadata_close( hParamMC->hMetadataPMC ); - count_free( hParamMC->hMetadataPMC ); + free( hParamMC->hMetadataPMC ); hParamMC->hMetadataPMC = NULL; } if ( hParamMC->icc_q != NULL ) { - count_free( hParamMC->icc_q ); + free( hParamMC->icc_q ); hParamMC->icc_q = NULL; } if ( hParamMC->icld_q != NULL ) { - count_free( hParamMC->icld_q ); + free( hParamMC->icld_q ); hParamMC->icld_q = NULL; } @@ -508,26 +508,26 @@ void ivas_param_mc_dec_close( { for ( i = 0; i < hParamMC->diff_proto_info->num_protos_diff; i++ ) { - count_free( hParamMC->diff_proto_info->source_chan_idx[i] ); + free( hParamMC->diff_proto_info->source_chan_idx[i] ); hParamMC->diff_proto_info->source_chan_idx[i] = NULL; - count_free( hParamMC->diff_proto_info->proto_fac[i] ); + free( hParamMC->diff_proto_info->proto_fac[i] ); hParamMC->diff_proto_info->proto_fac[i] = NULL; } - count_free( hParamMC->diff_proto_info->source_chan_idx ); + free( hParamMC->diff_proto_info->source_chan_idx ); hParamMC->diff_proto_info->source_chan_idx = NULL; - count_free( hParamMC->diff_proto_info->proto_fac ); + free( hParamMC->diff_proto_info->proto_fac ); hParamMC->diff_proto_info->proto_fac = NULL; - count_free( hParamMC->diff_proto_info->proto_index_diff ); + free( hParamMC->diff_proto_info->proto_index_diff ); hParamMC->diff_proto_info->proto_index_diff = NULL; - count_free( hParamMC->diff_proto_info->num_source_chan_diff ); + free( hParamMC->diff_proto_info->num_source_chan_diff ); hParamMC->diff_proto_info->num_source_chan_diff = NULL; - count_free( hParamMC->diff_proto_info ); + free( hParamMC->diff_proto_info ); hParamMC->diff_proto_info = NULL; } @@ -536,35 +536,35 @@ void ivas_param_mc_dec_close( /* free prototype signal buffers */ if ( hParamMC->proto_frame_f != NULL ) { - count_free( hParamMC->proto_frame_f ); + free( hParamMC->proto_frame_f ); hParamMC->proto_frame_f = NULL; } if ( hParamMC->proto_frame_dec_f != NULL ) { - count_free( hParamMC->proto_frame_dec_f ); + free( hParamMC->proto_frame_dec_f ); hParamMC->proto_frame_dec_f = NULL; } if ( hParamMC->ls_conv_dmx_matrix != NULL ) { - count_free( hParamMC->ls_conv_dmx_matrix ); + free( hParamMC->ls_conv_dmx_matrix ); hParamMC->ls_conv_dmx_matrix = NULL; } if ( hParamMC->proto_matrix_int != NULL ) { - count_free( hParamMC->proto_matrix_int ); + free( hParamMC->proto_matrix_int ); hParamMC->proto_matrix_int = NULL; } if ( hParamMC->hoa_encoder != NULL ) { - count_free( hParamMC->hoa_encoder ); + free( hParamMC->hoa_encoder ); hParamMC->hoa_encoder = NULL; } - count_free( hParamMC ); + free( hParamMC ); hParamMC = NULL; return; @@ -2073,9 +2073,9 @@ static void param_mc_get_diff_proto_info( /* Initializations */ max_num_src_chan = 0; set_zero( proto_fac, MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS ); - p_diff_proto_info->proto_index_diff = (int16_t *) count_malloc( nchan_out_cov * sizeof( int16_t ) ); + p_diff_proto_info->proto_index_diff = (int16_t *) malloc( nchan_out_cov * sizeof( int16_t ) ); set_s( p_diff_proto_info->proto_index_diff, 0, nchan_out_cov ); - p_diff_proto_info->num_source_chan_diff = (int16_t *) count_malloc( nchan_out_cov * sizeof( int16_t ) ); + p_diff_proto_info->num_source_chan_diff = (int16_t *) malloc( nchan_out_cov * sizeof( int16_t ) ); set_s( p_diff_proto_info->num_source_chan_diff, 0, nchan_out_cov ); /* we have at least one prototype, copy the first one */ @@ -2136,15 +2136,15 @@ static void param_mc_get_diff_proto_info( /* set up the prototype info struct */ - p_diff_proto_info->source_chan_idx = (int16_t **) count_malloc( p_diff_proto_info->num_protos_diff * sizeof( int16_t * ) ); - p_diff_proto_info->proto_fac = (float **) count_malloc( p_diff_proto_info->num_protos_diff * sizeof( float * ) ); + p_diff_proto_info->source_chan_idx = (int16_t **) malloc( p_diff_proto_info->num_protos_diff * sizeof( int16_t * ) ); + p_diff_proto_info->proto_fac = (float **) malloc( p_diff_proto_info->num_protos_diff * sizeof( float * ) ); for ( cur_diff_proto = 0; cur_diff_proto < p_diff_proto_info->num_protos_diff; cur_diff_proto++ ) { float *proto_fac_ptr; - p_diff_proto_info->source_chan_idx[cur_diff_proto] = (int16_t *) count_malloc( max_num_src_chan * sizeof( int16_t ) ); - p_diff_proto_info->proto_fac[cur_diff_proto] = (float *) count_malloc( max_num_src_chan * sizeof( float ) ); + p_diff_proto_info->source_chan_idx[cur_diff_proto] = (int16_t *) malloc( max_num_src_chan * sizeof( int16_t ) ); + p_diff_proto_info->proto_fac[cur_diff_proto] = (float *) malloc( max_num_src_chan * sizeof( float ) ); proto_fac_ptr = proto_fac + cur_diff_proto; for ( cur_transport_ch = 0; cur_transport_ch < nchan_transport; cur_transport_ch++ ) diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index c034b54dad..13b4b74f15 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -288,7 +288,7 @@ ivas_error create_mct_dec( * Allocate MCT handle *-----------------------------------------------------------------*/ - if ( ( hMCT = (MCT_DEC_HANDLE) count_malloc( sizeof( MCT_DEC_DATA ) ) ) == NULL ) + if ( ( hMCT = (MCT_DEC_HANDLE) malloc( sizeof( MCT_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); } @@ -343,7 +343,7 @@ ivas_error create_mct_dec( for ( n = 0; n < max_blocks; n++ ) { - if ( ( hMCT->hBlockData[n] = (MCT_DEC_BLOCK_DATA_HANDLE) count_malloc( sizeof( MCT_DEC_BLOCK_DATA ) ) ) == NULL ) + if ( ( hMCT->hBlockData[n] = (MCT_DEC_BLOCK_DATA_HANDLE) malloc( sizeof( MCT_DEC_BLOCK_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); } @@ -356,7 +356,7 @@ ivas_error create_mct_dec( * MDCT stereo initialization *-----------------------------------------------------------------*/ - if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) + if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } @@ -485,7 +485,7 @@ ivas_error mct_dec_reconfigure( { if ( hMCT->hBlockData[n] == NULL ) { - if ( ( hMCT->hBlockData[n] = (MCT_DEC_BLOCK_DATA_HANDLE) count_malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) + if ( ( hMCT->hBlockData[n] = (MCT_DEC_BLOCK_DATA_HANDLE) malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); } @@ -495,7 +495,7 @@ ivas_error mct_dec_reconfigure( hMCT->hBlockData[n]->ch2 = 0; /* MDCT stereo initialization */ - if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } @@ -512,11 +512,11 @@ ivas_error mct_dec_reconfigure( { if ( hMCT->hBlockData[n]->hStereoMdct != NULL ) { - count_free( hMCT->hBlockData[n]->hStereoMdct ); + free( hMCT->hBlockData[n]->hStereoMdct ); hMCT->hBlockData[n]->hStereoMdct = NULL; } - count_free( hMCT->hBlockData[n] ); + free( hMCT->hBlockData[n] ); hMCT->hBlockData[n] = NULL; } } @@ -565,16 +565,16 @@ void ivas_mct_dec_close( { if ( ( *hMCT )->hBlockData[n]->hStereoMdct != NULL ) { - count_free( ( *hMCT )->hBlockData[n]->hStereoMdct ); + free( ( *hMCT )->hBlockData[n]->hStereoMdct ); ( *hMCT )->hBlockData[n]->hStereoMdct = NULL; } - count_free( ( *hMCT )->hBlockData[n] ); + free( ( *hMCT )->hBlockData[n] ); ( *hMCT )->hBlockData[n] = NULL; } } - count_free( *hMCT ); + free( *hMCT ); *hMCT = NULL; return; diff --git a/lib_dec/ivas_mono_dmx_renderer.c b/lib_dec/ivas_mono_dmx_renderer.c index f086831491..0e40c0fe3d 100644 --- a/lib_dec/ivas_mono_dmx_renderer.c +++ b/lib_dec/ivas_mono_dmx_renderer.c @@ -63,7 +63,7 @@ ivas_error ivas_mono_dmx_renderer_open( { MONO_DOWNMIX_RENDERER_HANDLE hDownmix; - if ( ( hDownmix = (MONO_DOWNMIX_RENDERER_HANDLE) count_malloc( sizeof( MONO_DOWNMIX_RENDERER_STRUCT ) ) ) == NULL ) + if ( ( hDownmix = (MONO_DOWNMIX_RENDERER_HANDLE) malloc( sizeof( MONO_DOWNMIX_RENDERER_STRUCT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for downmixing\n" ) ); } diff --git a/lib_dec/ivas_out_setup_conversion.c b/lib_dec/ivas_out_setup_conversion.c index e3be5b4f34..6b5734fff6 100644 --- a/lib_dec/ivas_out_setup_conversion.c +++ b/lib_dec/ivas_out_setup_conversion.c @@ -317,7 +317,7 @@ ivas_error ivas_ls_setup_conversion_open( output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); /* Allocate memory to the handle */ - if ( ( hLsSetUpConversion = (LSSETUP_CONVERSION_HANDLE) count_malloc( sizeof( LSSETUP_CONVERSION_STRUCT ) ) ) == NULL ) + if ( ( hLsSetUpConversion = (LSSETUP_CONVERSION_HANDLE) malloc( sizeof( LSSETUP_CONVERSION_STRUCT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LS configuration Conversion Handle \n" ) ); } @@ -331,8 +331,8 @@ ivas_error ivas_ls_setup_conversion_open( hLsSetUpConversion->sfbCnt = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); for ( chIdx = 0; chIdx < outChannels; chIdx++ ) { - hLsSetUpConversion->targetEnergyPrev[chIdx] = (float *) count_malloc( ( hLsSetUpConversion->sfbCnt ) * sizeof( float ) ); - hLsSetUpConversion->dmxEnergyPrev[chIdx] = (float *) count_malloc( ( hLsSetUpConversion->sfbCnt ) * sizeof( float ) ); + hLsSetUpConversion->targetEnergyPrev[chIdx] = (float *) malloc( ( hLsSetUpConversion->sfbCnt ) * sizeof( float ) ); + hLsSetUpConversion->dmxEnergyPrev[chIdx] = (float *) malloc( ( hLsSetUpConversion->sfbCnt ) * sizeof( float ) ); set_f( hLsSetUpConversion->targetEnergyPrev[chIdx], 0.0f, hLsSetUpConversion->sfbCnt ); set_f( hLsSetUpConversion->dmxEnergyPrev[chIdx], 0.0f, hLsSetUpConversion->sfbCnt ); } @@ -347,8 +347,8 @@ ivas_error ivas_ls_setup_conversion_open( inChannels = st_ivas->nchan_transport; /*Initialization of MDCT bands with TCX20 resolution */ ivas_lssetupconversion_mdct_init_bands( output_frame, TCX_20_CORE, &hLsSetUpConversion->sfbOffset[0], &hLsSetUpConversion->sfbCnt ); - hLsSetUpConversion->targetEnergyPrev[0] = (float *) count_malloc( ( MAX_SFB + 2 ) * sizeof( float ) ); - hLsSetUpConversion->dmxEnergyPrev[0] = (float *) count_malloc( ( MAX_SFB + 2 ) * sizeof( float ) ); + hLsSetUpConversion->targetEnergyPrev[0] = (float *) malloc( ( MAX_SFB + 2 ) * sizeof( float ) ); + hLsSetUpConversion->dmxEnergyPrev[0] = (float *) malloc( ( MAX_SFB + 2 ) * sizeof( float ) ); for ( chIdx = 1; chIdx < MAX_CICP_CHANNELS; chIdx++ ) { hLsSetUpConversion->targetEnergyPrev[chIdx] = NULL; @@ -363,7 +363,7 @@ ivas_error ivas_ls_setup_conversion_open( for ( chIdx = 0; chIdx < inChannels; chIdx++ ) { /* Allocate memory depending on the number of output channels */ - if ( ( hLsSetUpConversion->dmxMtx[chIdx] = (float *) count_malloc( outChannels * sizeof( float ) ) ) == NULL ) + if ( ( hLsSetUpConversion->dmxMtx[chIdx] = (float *) malloc( outChannels * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for temp dmx matrix \n" ) ); } @@ -418,24 +418,24 @@ void ivas_ls_setup_conversion_close( { if ( ( *hLsSetUpConversion )->dmxMtx[idx] != NULL ) { - count_free( ( *hLsSetUpConversion )->dmxMtx[idx] ); + free( ( *hLsSetUpConversion )->dmxMtx[idx] ); ( *hLsSetUpConversion )->dmxMtx[idx] = NULL; } if ( ( *hLsSetUpConversion )->targetEnergyPrev[idx] != NULL ) { - count_free( ( *hLsSetUpConversion )->targetEnergyPrev[idx] ); + free( ( *hLsSetUpConversion )->targetEnergyPrev[idx] ); ( *hLsSetUpConversion )->targetEnergyPrev[idx] = NULL; } if ( ( *hLsSetUpConversion )->dmxEnergyPrev[idx] != NULL ) { - count_free( ( *hLsSetUpConversion )->dmxEnergyPrev[idx] ); + free( ( *hLsSetUpConversion )->dmxEnergyPrev[idx] ); ( *hLsSetUpConversion )->dmxEnergyPrev[idx] = NULL; } } - count_free( *hLsSetUpConversion ); + free( *hLsSetUpConversion ); *hLsSetUpConversion = NULL; return; diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 3adf4e39cd..55094f0432 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -134,17 +134,17 @@ ivas_error ivas_sba_dec_reinit( { for ( i = 0; i < getNumChanSynthesis( st_ivas ); i++ ) { - count_free( st_ivas->mem_hp20_out[i] ); + free( st_ivas->mem_hp20_out[i] ); st_ivas->mem_hp20_out[i] = NULL; } - count_free( st_ivas->mem_hp20_out ); + free( st_ivas->mem_hp20_out ); st_ivas->mem_hp20_out = NULL; } /* HOA decoder matrix */ if ( st_ivas->hoa_dec_mtx != NULL ) { - count_free( st_ivas->hoa_dec_mtx ); + free( st_ivas->hoa_dec_mtx ); st_ivas->hoa_dec_mtx = NULL; } @@ -172,7 +172,7 @@ ivas_error ivas_sba_dec_reinit( /* Custom LS configuration handle */ if ( st_ivas->hLsSetupCustom != NULL ) { - count_free( st_ivas->hLsSetupCustom ); + free( st_ivas->hLsSetupCustom ); st_ivas->hLsSetupCustom = NULL; } @@ -186,14 +186,14 @@ ivas_error ivas_sba_dec_reinit( /* Downmix structure */ if ( st_ivas->hMonoDmxRenderer != NULL ) { - count_free( st_ivas->hMonoDmxRenderer ); + free( st_ivas->hMonoDmxRenderer ); st_ivas->hMonoDmxRenderer = NULL; } /* Head track data handle */ if ( st_ivas->hHeadTrackData != NULL ) { - count_free( st_ivas->hHeadTrackData ); + free( st_ivas->hHeadTrackData ); st_ivas->hHeadTrackData = NULL; } @@ -424,7 +424,7 @@ ivas_error ivas_sba_dec_reinit( if ( n > 0 ) { - if ( ( st_ivas->mem_hp20_out = (float **) count_malloc( n * sizeof( float * ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_out = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -436,7 +436,7 @@ ivas_error ivas_sba_dec_reinit( for ( i = 0; i < n; i++ ) { - if ( ( st_ivas->mem_hp20_out[i] = (float *) count_malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_out[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -477,7 +477,7 @@ ivas_error ivas_sba_dec_reinit( if ( st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) { - if ( ( st_ivas->hCrend = (CREND_HANDLE) count_malloc( sizeof( CREND_DATA ) ) ) == NULL ) + if ( ( st_ivas->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR Crend\n" ); } diff --git a/lib_dec/ivas_sce_dec.c b/lib_dec/ivas_sce_dec.c index e93f06bcce..29ac68d0bc 100644 --- a/lib_dec/ivas_sce_dec.c +++ b/lib_dec/ivas_sce_dec.c @@ -314,7 +314,7 @@ ivas_error create_sce_dec( * Allocate SCE handle *-----------------------------------------------------------------*/ - if ( ( hSCE = (SCE_DEC_HANDLE) count_malloc( sizeof( SCE_DEC_DATA ) ) ) == NULL ) + if ( ( hSCE = (SCE_DEC_HANDLE) malloc( sizeof( SCE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SCE\n" ) ); } @@ -332,7 +332,7 @@ ivas_error create_sce_dec( * Core Coder, 1 instance: allocate and initialize *-----------------------------------------------------------------*/ - if ( ( st = (DEC_CORE_HANDLE) count_malloc( sizeof( Decoder_State ) ) ) == NULL ) + if ( ( st = (DEC_CORE_HANDLE) malloc( sizeof( Decoder_State ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); } @@ -362,7 +362,7 @@ ivas_error create_sce_dec( /* allocate and initialize "hTdCngDec" - needed in DTX */ if ( sce_id == 0 && st->hTdCngDec == NULL ) { - if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) count_malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) + if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); } @@ -376,13 +376,13 @@ ivas_error create_sce_dec( if ( st_ivas->sba_dirac_stereo_flag ) { - if ( ( hSCE->save_synth = (float *) count_malloc( sizeof( float ) * output_frame ) ) == NULL ) + if ( ( hSCE->save_synth = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo output\n" ) ); } set_zero( hSCE->save_synth, output_frame ); - if ( ( hSCE->save_hb_synth = (float *) count_malloc( sizeof( float ) * output_frame ) ) == NULL ) + if ( ( hSCE->save_hb_synth = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate HB memory for stereo output\n" ) ); } @@ -419,22 +419,22 @@ void destroy_sce_dec( { destroy_core_dec( st ); - count_free( st ); + free( st ); st = NULL; } if ( hSCE->save_synth != NULL ) { - count_free( hSCE->save_synth ); + free( hSCE->save_synth ); hSCE->save_synth = NULL; } if ( hSCE->save_hb_synth != NULL ) { - count_free( hSCE->save_hb_synth ); + free( hSCE->save_hb_synth ); hSCE->save_hb_synth = NULL; } - count_free( hSCE ); + free( hSCE ); return; } diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 9a05f6352d..15b58155d0 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -75,7 +75,7 @@ ivas_error ivas_spar_dec_open( num_channels_internal = ivas_sba_get_nchan_metadata( sba_order_internal ); /* SPAR decoder handle */ - if ( ( hSpar = (SPAR_DEC_HANDLE) count_malloc( sizeof( SPAR_DEC_DATA ) ) ) == NULL ) + if ( ( hSpar = (SPAR_DEC_HANDLE) malloc( sizeof( SPAR_DEC_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR decoder" ); } @@ -121,7 +121,7 @@ ivas_error ivas_spar_dec_open( hSpar->hPCA = NULL; if ( st_ivas->hDecoderConfig->ivas_total_brate == PCA_BRATE && sba_order_internal == 1 ) { - if ( ( hSpar->hPCA = (PCA_DEC_STATE *) count_malloc( sizeof( PCA_DEC_STATE ) ) ) == NULL ) + if ( ( hSpar->hPCA = (PCA_DEC_STATE *) malloc( sizeof( PCA_DEC_STATE ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PCA decoder" ); } @@ -201,11 +201,11 @@ void ivas_spar_dec_close( /* PCA */ if ( hSpar->hPCA != NULL ) { - count_free( hSpar->hPCA ); + free( hSpar->hPCA ); hSpar->hPCA = NULL; } - count_free( hSpar ); + free( hSpar ); hSpar = NULL; } diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index 969096c381..c6532e42f2 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -101,137 +101,137 @@ static ivas_error ivas_spar_md_dec_matrix_open( { int16_t i, j; - if ( ( hMdDec->spar_md.band_coeffs = (ivas_band_coeffs_t *) count_malloc( IVAS_MAX_NUM_BANDS * MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) + if ( ( hMdDec->spar_md.band_coeffs = (ivas_band_coeffs_t *) malloc( IVAS_MAX_NUM_BANDS * MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for band_coeffs in SPAR MD" ); } - if ( ( hMdDec->mixer_mat = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdDec->mixer_mat = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdDec->mixer_mat[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdDec->mixer_mat[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdDec->mixer_mat[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdDec->mixer_mat[i][j] = (float *) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } } } - if ( ( hMdDec->spar_coeffs.C_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdDec->spar_coeffs.C_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdDec->spar_coeffs.C_re[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs.C_re[i][j] = (float *) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } } } - if ( ( hMdDec->spar_coeffs.P_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdDec->spar_coeffs.P_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdDec->spar_coeffs.P_re[i][j] = (float *) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs.P_re[i][j] = (float *) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } } } - if ( ( hMdDec->spar_coeffs_prev.C_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_prev.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdDec->spar_coeffs_prev.C_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_prev.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdDec->spar_coeffs_prev.C_re[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_prev.C_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } } } - if ( ( hMdDec->spar_coeffs_prev.P_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_prev.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdDec->spar_coeffs_prev.P_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_prev.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdDec->spar_coeffs_prev.P_re[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_prev.P_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } } } - if ( ( hMdDec->spar_coeffs_tar.C_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_tar.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdDec->spar_coeffs_tar.C_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_tar.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdDec->spar_coeffs_tar.C_re[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_tar.C_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } } } - if ( ( hMdDec->spar_coeffs_tar.P_re = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_tar.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdDec->spar_coeffs_tar.P_re[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_tar.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdDec->spar_coeffs_tar.P_re[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdDec->spar_coeffs_tar.P_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } @@ -260,7 +260,7 @@ ivas_error ivas_spar_md_dec_open( error = IVAS_ERR_OK; - if ( ( hMdDec = (ivas_spar_md_dec_state_t *) count_malloc( sizeof( ivas_spar_md_dec_state_t ) ) ) == NULL ) + if ( ( hMdDec = (ivas_spar_md_dec_state_t *) malloc( sizeof( ivas_spar_md_dec_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD decoder" ); } @@ -298,7 +298,7 @@ static void ivas_spar_md_dec_matrix_close( if ( hMdDecoder->spar_md.band_coeffs != NULL ) { - count_free( hMdDecoder->spar_md.band_coeffs ); + free( hMdDecoder->spar_md.band_coeffs ); hMdDecoder->spar_md.band_coeffs = NULL; } if ( hMdDecoder->mixer_mat != NULL ) @@ -307,11 +307,11 @@ static void ivas_spar_md_dec_matrix_close( { for ( j = 0; j < num_channels; j++ ) { - count_free( hMdDecoder->mixer_mat[i][j] ); + free( hMdDecoder->mixer_mat[i][j] ); } - count_free( hMdDecoder->mixer_mat[i] ); + free( hMdDecoder->mixer_mat[i] ); } - count_free( hMdDecoder->mixer_mat ); + free( hMdDecoder->mixer_mat ); } if ( hMdDecoder->spar_coeffs.C_re != NULL ) @@ -320,11 +320,11 @@ static void ivas_spar_md_dec_matrix_close( { for ( j = 0; j < num_channels; j++ ) { - count_free( hMdDecoder->spar_coeffs.C_re[i][j] ); + free( hMdDecoder->spar_coeffs.C_re[i][j] ); } - count_free( hMdDecoder->spar_coeffs.C_re[i] ); + free( hMdDecoder->spar_coeffs.C_re[i] ); } - count_free( hMdDecoder->spar_coeffs.C_re ); + free( hMdDecoder->spar_coeffs.C_re ); } if ( hMdDecoder->spar_coeffs.P_re != NULL ) @@ -333,11 +333,11 @@ static void ivas_spar_md_dec_matrix_close( { for ( j = 0; j < num_channels; j++ ) { - count_free( hMdDecoder->spar_coeffs.P_re[i][j] ); + free( hMdDecoder->spar_coeffs.P_re[i][j] ); } - count_free( hMdDecoder->spar_coeffs.P_re[i] ); + free( hMdDecoder->spar_coeffs.P_re[i] ); } - count_free( hMdDecoder->spar_coeffs.P_re ); + free( hMdDecoder->spar_coeffs.P_re ); } if ( hMdDecoder->spar_coeffs_prev.C_re != NULL ) @@ -346,11 +346,11 @@ static void ivas_spar_md_dec_matrix_close( { for ( j = 0; j < num_channels; j++ ) { - count_free( hMdDecoder->spar_coeffs_prev.C_re[i][j] ); + free( hMdDecoder->spar_coeffs_prev.C_re[i][j] ); } - count_free( hMdDecoder->spar_coeffs_prev.C_re[i] ); + free( hMdDecoder->spar_coeffs_prev.C_re[i] ); } - count_free( hMdDecoder->spar_coeffs_prev.C_re ); + free( hMdDecoder->spar_coeffs_prev.C_re ); } if ( hMdDecoder->spar_coeffs_prev.P_re != NULL ) @@ -359,11 +359,11 @@ static void ivas_spar_md_dec_matrix_close( { for ( j = 0; j < num_channels; j++ ) { - count_free( hMdDecoder->spar_coeffs_prev.P_re[i][j] ); + free( hMdDecoder->spar_coeffs_prev.P_re[i][j] ); } - count_free( hMdDecoder->spar_coeffs_prev.P_re[i] ); + free( hMdDecoder->spar_coeffs_prev.P_re[i] ); } - count_free( hMdDecoder->spar_coeffs_prev.P_re ); + free( hMdDecoder->spar_coeffs_prev.P_re ); } if ( hMdDecoder->spar_coeffs_tar.C_re != NULL ) @@ -372,11 +372,11 @@ static void ivas_spar_md_dec_matrix_close( { for ( j = 0; j < num_channels; j++ ) { - count_free( hMdDecoder->spar_coeffs_tar.C_re[i][j] ); + free( hMdDecoder->spar_coeffs_tar.C_re[i][j] ); } - count_free( hMdDecoder->spar_coeffs_tar.C_re[i] ); + free( hMdDecoder->spar_coeffs_tar.C_re[i] ); } - count_free( hMdDecoder->spar_coeffs_tar.C_re ); + free( hMdDecoder->spar_coeffs_tar.C_re ); } if ( hMdDecoder->spar_coeffs_tar.P_re != NULL ) @@ -385,11 +385,11 @@ static void ivas_spar_md_dec_matrix_close( { for ( j = 0; j < num_channels; j++ ) { - count_free( hMdDecoder->spar_coeffs_tar.P_re[i][j] ); + free( hMdDecoder->spar_coeffs_tar.P_re[i][j] ); } - count_free( hMdDecoder->spar_coeffs_tar.P_re[i] ); + free( hMdDecoder->spar_coeffs_tar.P_re[i] ); } - count_free( hMdDecoder->spar_coeffs_tar.P_re ); + free( hMdDecoder->spar_coeffs_tar.P_re ); } return; @@ -416,7 +416,7 @@ void ivas_spar_md_dec_close( if ( *hMdDec != NULL ) { - count_free( *hMdDec ); + free( *hMdDec ); *hMdDec = NULL; } diff --git a/lib_dec/ivas_stereo_dft_dec.c b/lib_dec/ivas_stereo_dft_dec.c index d5a4bb495b..70f2c3ae06 100644 --- a/lib_dec/ivas_stereo_dft_dec.c +++ b/lib_dec/ivas_stereo_dft_dec.c @@ -262,22 +262,22 @@ ivas_error stereo_dft_dec_create( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: DFT Stereo memory already allocated\n" ); } - if ( ( hStereoDft_loc = (STEREO_DFT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_DEC_DATA ) ) ) == NULL ) + if ( ( hStereoDft_loc = (STEREO_DFT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_DFT_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo\n" ) ); } - if ( ( hStereoDft_loc->hConfig = (STEREO_DFT_CONFIG_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_CONFIG_DATA ) ) ) == NULL ) + if ( ( hStereoDft_loc->hConfig = (STEREO_DFT_CONFIG_DATA_HANDLE) malloc( sizeof( STEREO_DFT_CONFIG_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo Config\n" ) ); } - if ( ( hStereoDft_loc->hBpf = (BPF_DEC_HANDLE) count_malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) + if ( ( hStereoDft_loc->hBpf = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF handle\n" ) ); } - if ( ( hStereoDft_loc->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) count_malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) + if ( ( hStereoDft_loc->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); } @@ -580,23 +580,23 @@ void stereo_dft_dec_destroy( if ( hStereoDft->hConfig != NULL ) { - count_free( hStereoDft->hConfig ); + free( hStereoDft->hConfig ); hStereoDft->hConfig = NULL; } if ( hStereoDft->hBpf != NULL ) { - count_free( hStereoDft->hBpf ); + free( hStereoDft->hBpf ); hStereoDft->hBpf = NULL; } if ( hStereoDft->hTcxLtpDec != NULL ) { - count_free( hStereoDft->hTcxLtpDec ); + free( hStereoDft->hTcxLtpDec ); hStereoDft->hTcxLtpDec = NULL; } - count_free( hStereoDft ); + free( hStereoDft ); hStereoDft = NULL; return; diff --git a/lib_dec/ivas_stereo_switching_dec.c b/lib_dec/ivas_stereo_switching_dec.c index ac0e91da34..aa28994dd4 100644 --- a/lib_dec/ivas_stereo_switching_dec.c +++ b/lib_dec/ivas_stereo_switching_dec.c @@ -56,7 +56,7 @@ static ivas_error allocate_CoreCoder_TCX( { if ( st->hTcxDec == NULL ) { - if ( ( st->hTcxDec = (TCX_DEC_HANDLE) count_malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) + if ( ( st->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for hTcxDec" ) ); } @@ -70,7 +70,7 @@ static ivas_error allocate_CoreCoder_TCX( if ( st->hTcxCfg == NULL ) { - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for hTcxCfg" ) ); } @@ -79,7 +79,7 @@ static ivas_error allocate_CoreCoder_TCX( /* allocated TCX-LTP structure for second channel */ if ( st->hTcxLtpDec == NULL ) { - if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) count_malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) + if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for TCX-LTP handle\n" ) ); } @@ -90,7 +90,7 @@ static ivas_error allocate_CoreCoder_TCX( /* allocate HQ structure */ if ( st->hHQ_core == NULL ) { - if ( ( st->hHQ_core = (HQ_DEC_HANDLE) count_malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) + if ( ( st->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for HQ core\n" ) ); } @@ -100,7 +100,7 @@ static ivas_error allocate_CoreCoder_TCX( if ( st->hIGFDec == NULL ) { - if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) count_malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) + if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IGF\n" ) ); } @@ -111,7 +111,7 @@ static ivas_error allocate_CoreCoder_TCX( if ( st->hTonalMDCTConc == NULL ) { - if ( ( st->hTonalMDCTConc = (TonalMDCTConcealPtr) count_malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL ) + if ( ( st->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for TonalMDCTConcealment\n" ) ); } @@ -140,7 +140,7 @@ static ivas_error allocate_CoreCoder( if ( st->hGSCDec == NULL ) { - if ( ( st->hGSCDec = (GSC_DEC_HANDLE) count_malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) + if ( ( st->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); } @@ -150,7 +150,7 @@ static ivas_error allocate_CoreCoder( if ( st->hPFstat == NULL ) { - if ( ( st->hPFstat = (PFSTAT_HANDLE) count_malloc( sizeof( PFSTAT ) ) ) == NULL ) + if ( ( st->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) ); } @@ -161,7 +161,7 @@ static ivas_error allocate_CoreCoder( if ( st->hMusicPF == NULL ) { - if ( ( st->hMusicPF = (MUSIC_POSTFILT_HANDLE) count_malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) + if ( ( st->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) ); } @@ -171,7 +171,7 @@ static ivas_error allocate_CoreCoder( if ( st->hBPF == NULL ) { - if ( ( st->hBPF = (BPF_DEC_HANDLE) count_malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) ); } @@ -181,7 +181,7 @@ static ivas_error allocate_CoreCoder( if ( st->hBWE_zero == NULL ) { - if ( ( st->hBWE_zero = (ZERO_BWE_DEC_HANDLE) count_malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) ); } @@ -223,25 +223,25 @@ static void deallocate_CoreCoder_TCX( { if ( st->hTcxDec != NULL ) { - count_free( st->hTcxDec ); + free( st->hTcxDec ); st->hTcxDec = NULL; } if ( st->hTcxCfg != NULL ) { - count_free( st->hTcxCfg ); + free( st->hTcxCfg ); st->hTcxCfg = NULL; } if ( st->hIGFDec != NULL ) { - count_free( st->hIGFDec ); + free( st->hIGFDec ); st->hIGFDec = NULL; } if ( st->hTonalMDCTConc != NULL ) { - count_free( st->hTonalMDCTConc ); + free( st->hTonalMDCTConc ); st->hTonalMDCTConc = NULL; } @@ -261,31 +261,31 @@ static void deallocate_CoreCoder( { if ( st->hGSCDec != NULL ) { - count_free( st->hGSCDec ); + free( st->hGSCDec ); st->hGSCDec = NULL; } if ( st->hPFstat != NULL ) { - count_free( st->hPFstat ); + free( st->hPFstat ); st->hPFstat = NULL; } if ( st->hMusicPF != NULL ) { - count_free( st->hMusicPF ); + free( st->hMusicPF ); st->hMusicPF = NULL; } if ( st->hBPF != NULL ) { - count_free( st->hBPF ); + free( st->hBPF ); st->hBPF = NULL; } if ( st->hBWE_zero != NULL ) { - count_free( st->hBWE_zero ); + free( st->hBWE_zero ); st->hBWE_zero = NULL; } @@ -402,13 +402,13 @@ ivas_error stereo_memory_dec( /* deallocate data structure of the previous CPE mode */ if ( hCPE->hStereoTD != NULL ) { - count_free( hCPE->hStereoTD ); + free( hCPE->hStereoTD ); hCPE->hStereoTD = NULL; } if ( hCPE->hStereoMdct != NULL ) { - count_free( hCPE->hStereoMdct ); + free( hCPE->hStereoMdct ); hCPE->hStereoMdct = NULL; } @@ -433,7 +433,7 @@ ivas_error stereo_memory_dec( /* allocate ICBWE structure */ if ( hCPE->hStereoICBWE == NULL ) { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } @@ -445,7 +445,7 @@ ivas_error stereo_memory_dec( st = hCPE->hCoreCoder[0]; if ( st->hHQ_core == NULL ) { - if ( ( st->hHQ_core = (HQ_DEC_HANDLE) count_malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) + if ( ( st->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); } @@ -456,7 +456,7 @@ ivas_error stereo_memory_dec( /* allocate TD CNG handle */ if ( st->idchan == 0 && st->hTdCngDec == NULL ) { - if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) count_malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) + if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); } @@ -480,7 +480,7 @@ ivas_error stereo_memory_dec( if ( hCPE->hStereoMdct != NULL ) { - count_free( hCPE->hStereoMdct ); + free( hCPE->hStereoMdct ); hCPE->hStereoMdct = NULL; } @@ -498,7 +498,7 @@ ivas_error stereo_memory_dec( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TD Stereo memory already allocated\n" ); } - if ( ( hCPE->hStereoTD = (STEREO_TD_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_TD_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTD = (STEREO_TD_DEC_DATA_HANDLE) malloc( sizeof( STEREO_TD_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); } @@ -522,7 +522,7 @@ ivas_error stereo_memory_dec( st = hCPE->hCoreCoder[1]; if ( st->hTcxLtpDec != 0 ) { - count_free( st->hTcxLtpDec ); + free( st->hTcxLtpDec ); st->hTcxLtpDec = NULL; } @@ -538,14 +538,14 @@ ivas_error stereo_memory_dec( /* deallocated HQ-core for second channel */ if ( st->hHQ_core != 0 ) { - count_free( st->hHQ_core ); + free( st->hHQ_core ); st->hHQ_core = NULL; } /* allocate DFT stereo mono DMX data structure */ if ( hCPE->nchan_out == 1 && hCPE->hStereoDftDmx == NULL ) { - if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); } @@ -555,7 +555,7 @@ ivas_error stereo_memory_dec( /* allocate TCA data structure */ if ( hCPE->nchan_out != 1 && hCPE->hStereoTCA == NULL ) { - if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) count_malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); } @@ -574,14 +574,14 @@ ivas_error stereo_memory_dec( /* allocate BWEs for primary channel */ if ( st->hBWE_TD == NULL ) { - if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) count_malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); } td_bwe_dec_init( st->hBWE_TD, -1, st->output_Fs ); - if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) count_malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); } @@ -604,7 +604,7 @@ ivas_error stereo_memory_dec( /* allocate stereo CNG structure */ if ( hCPE->hStereoCng == NULL ) { - if ( ( hCPE->hStereoCng = (STEREO_CNG_DEC_HANDLE) count_malloc( sizeof( STEREO_CNG_DEC ) ) ) == NULL ) + if ( ( hCPE->hStereoCng = (STEREO_CNG_DEC_HANDLE) malloc( sizeof( STEREO_CNG_DEC ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo CNG\n" ) ); } @@ -640,26 +640,26 @@ ivas_error stereo_memory_dec( if ( hCPE->hStereoTD != NULL ) { - count_free( hCPE->hStereoTD ); + free( hCPE->hStereoTD ); hCPE->hStereoTD = NULL; } if ( hCPE->hStereoDftDmx != NULL ) { - count_free( hCPE->hStereoDftDmx ); + free( hCPE->hStereoDftDmx ); hCPE->hStereoDftDmx = NULL; } if ( hCPE->hStereoICBWE != NULL ) { - count_free( hCPE->hStereoICBWE ); + free( hCPE->hStereoICBWE ); hCPE->hStereoICBWE = NULL; } /* de-allocate stereo CNG structure */ if ( hCPE->hStereoCng != NULL ) { - count_free( hCPE->hStereoCng ); + free( hCPE->hStereoCng ); hCPE->hStereoCng = NULL; } @@ -729,7 +729,7 @@ ivas_error stereo_memory_dec( st->hTcxDec->prev_good_synth = st->hTcxDec->old_synthFB + NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ); /* allocate and initialize MDCT stereo structure */ - if ( ( hCPE->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } @@ -762,21 +762,21 @@ ivas_error stereo_memory_dec( /* deallocate ICBWE structure */ if ( hCPE->hStereoICBWE != NULL ) { - count_free( hCPE->hStereoICBWE ); + free( hCPE->hStereoICBWE ); hCPE->hStereoICBWE = NULL; } /* allocate BWEs for secondary channel */ if ( st->hBWE_TD == NULL ) { - if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) count_malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); } td_bwe_dec_init( st->hBWE_TD, -1, st->output_Fs ); - if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) count_malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); } @@ -791,13 +791,13 @@ ivas_error stereo_memory_dec( { if ( st->hBWE_TD != NULL ) { - count_free( st->hBWE_TD ); + free( st->hBWE_TD ); st->hBWE_TD = NULL; } if ( st->hBWE_FD != NULL ) { - count_free( st->hBWE_FD ); + free( st->hBWE_FD ); st->hBWE_FD = NULL; } } @@ -805,7 +805,7 @@ ivas_error stereo_memory_dec( /* allocate ICBWE structure */ if ( hCPE->hStereoICBWE == NULL ) { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } @@ -829,7 +829,7 @@ ivas_error stereo_memory_dec( if ( hCPE->hStereoTCA == NULL ) { /* allocate TCA data structure */ - if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) count_malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); } @@ -844,7 +844,7 @@ ivas_error stereo_memory_dec( /* de-allocate TCA data structure */ if ( hCPE->hStereoMdct->use_itd == 1 && ivas_total_brate > IVAS_SID_5k2 && hCPE->hStereoTCA != NULL ) { - count_free( hCPE->hStereoTCA ); + free( hCPE->hStereoTCA ); hCPE->hStereoTCA = NULL; hCPE->hStereoMdct->use_itd = 0; } @@ -869,7 +869,7 @@ ivas_error stereo_memory_dec( { if ( hCPE->hStereoDftDmx == NULL ) { - if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); } @@ -878,13 +878,13 @@ ivas_error stereo_memory_dec( if ( hCPE->prev_synth_chs[1] != NULL ) { - count_free( hCPE->prev_synth_chs[1] ); + free( hCPE->prev_synth_chs[1] ); hCPE->prev_synth_chs[1] = NULL; } if ( hCPE->hStereoTCA != NULL ) { - count_free( hCPE->hStereoTCA ); + free( hCPE->hStereoTCA ); hCPE->hStereoTCA = NULL; } } @@ -892,14 +892,14 @@ ivas_error stereo_memory_dec( { if ( hCPE->hStereoDftDmx != NULL ) { - count_free( hCPE->hStereoDftDmx ); + free( hCPE->hStereoDftDmx ); hCPE->hStereoDftDmx = NULL; } if ( hCPE->prev_synth_chs[1] == NULL ) { st = hCPE->hCoreCoder[1]; - if ( ( hCPE->prev_synth_chs[1] = (float *) count_malloc( sizeof( float ) * NS2SA( st->output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) + if ( ( hCPE->prev_synth_chs[1] = (float *) malloc( sizeof( float ) * NS2SA( st->output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } @@ -908,7 +908,7 @@ ivas_error stereo_memory_dec( if ( hCPE->hStereoICBWE == NULL && hCPE->element_mode == IVAS_CPE_DFT ) { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } @@ -918,7 +918,7 @@ ivas_error stereo_memory_dec( if ( hCPE->hStereoTCA == NULL && ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) ) { - if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) count_malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); } @@ -931,13 +931,13 @@ ivas_error stereo_memory_dec( if ( hCPE->hStereoTCA != NULL ) { /* note: in MASA, hCPE->hStereoMdct->itd = 0 */ - count_free( hCPE->hStereoTCA ); + free( hCPE->hStereoTCA ); hCPE->hStereoTCA = NULL; } if ( hCPE->hStereoICBWE != NULL ) { - count_free( hCPE->hStereoICBWE ); + free( hCPE->hStereoICBWE ); hCPE->hStereoICBWE = NULL; } } diff --git a/lib_dec/ivas_td_decorr.c b/lib_dec/ivas_td_decorr.c index 1fdc60380d..7622676a3c 100644 --- a/lib_dec/ivas_td_decorr.c +++ b/lib_dec/ivas_td_decorr.c @@ -117,12 +117,12 @@ ivas_error ivas_spar_td_decorr_dec_open( error = IVAS_ERR_OK; - if ( ( hCovState = (ivas_td_decorr_state_t *) count_malloc( sizeof( ivas_td_decorr_state_t ) ) ) == NULL ) + if ( ( hCovState = (ivas_td_decorr_state_t *) malloc( sizeof( ivas_td_decorr_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); } - if ( ( hCovState->look_ahead_buf = (float *) count_malloc( sizeof( float ) * (int16_t) ( output_Fs * IVAS_DECORR_PARM_LOOKAHEAD_TAU ) ) ) == NULL ) + if ( ( hCovState->look_ahead_buf = (float *) malloc( sizeof( float ) * (int16_t) ( output_Fs * IVAS_DECORR_PARM_LOOKAHEAD_TAU ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); } @@ -136,7 +136,7 @@ ivas_error ivas_spar_td_decorr_dec_open( { len = hCovState->APD_filt_state[0].order[i]; - if ( ( hCovState->APD_filt_state[j].state[i] = (float *) count_malloc( sizeof( float ) * len ) ) == NULL ) + if ( ( hCovState->APD_filt_state[j].state[i] = (float *) malloc( sizeof( float ) * len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); } @@ -182,14 +182,14 @@ void ivas_spar_td_decorr_dec_close( return; } - count_free( ( *hTdDecorr )->look_ahead_buf ); + free( ( *hTdDecorr )->look_ahead_buf ); ( *hTdDecorr )->look_ahead_buf = NULL; for ( j = 0; j < ( *hTdDecorr )->num_apd_outputs; j++ ) { for ( i = 0; i < ( *hTdDecorr )->num_apd_sections; i++ ) { - count_free( ( *hTdDecorr )->APD_filt_state[j].state[i] ); + free( ( *hTdDecorr )->APD_filt_state[j].state[i] ); ( *hTdDecorr )->APD_filt_state[j].state[i] = NULL; } } @@ -199,7 +199,7 @@ void ivas_spar_td_decorr_dec_close( ivas_spar_transient_det_close( &( *hTdDecorr )->pTrans_det ); } - count_free( ( *hTdDecorr ) ); + free( ( *hTdDecorr ) ); ( *hTdDecorr ) = NULL; return; diff --git a/lib_dec/ivas_vbap.c b/lib_dec/ivas_vbap.c index c059f57658..2842e49738 100644 --- a/lib_dec/ivas_vbap.c +++ b/lib_dec/ivas_vbap.c @@ -171,7 +171,7 @@ ivas_error vbap_init_data( } /* Allocate VBAP structure */ - if ( ( vbap = (VBAP_HANDLE) count_malloc( sizeof( VBAP_DATA ) ) ) == NULL ) + if ( ( vbap = (VBAP_HANDLE) malloc( sizeof( VBAP_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); } @@ -263,12 +263,12 @@ ivas_error vbap_init_data( break; } } - vbap->search_struct[0].triplets = (VBAP_VS_TRIPLET *) count_malloc( ( ( speaker_nodes_group1_internal - 2 ) * 2 - ( max( 0, ( speaker_nodes_horiz_internal - 2 ) ) ) ) * sizeof( VBAP_VS_TRIPLET ) ); + vbap->search_struct[0].triplets = (VBAP_VS_TRIPLET *) malloc( ( ( speaker_nodes_group1_internal - 2 ) * 2 - ( max( 0, ( speaker_nodes_horiz_internal - 2 ) ) ) ) * sizeof( VBAP_VS_TRIPLET ) ); is_success &= vbap->search_struct[0].triplets != NULL; if ( speaker_nodes_group2_internal > 0 ) { vbap->num_search_structs = 2; - vbap->search_struct[1].triplets = (VBAP_VS_TRIPLET *) count_malloc( ( ( speaker_nodes_group2_internal - 2 ) * 2 - ( max( 0, ( speaker_nodes_horiz_internal - 2 ) ) ) ) * sizeof( VBAP_VS_TRIPLET ) ); + vbap->search_struct[1].triplets = (VBAP_VS_TRIPLET *) malloc( ( ( speaker_nodes_group2_internal - 2 ) * 2 - ( max( 0, ( speaker_nodes_horiz_internal - 2 ) ) ) ) * sizeof( VBAP_VS_TRIPLET ) ); is_success &= vbap->search_struct[1].triplets != NULL; } else @@ -335,26 +335,26 @@ void vbap_free_data( if ( ( *hVBAPdata )->bottom_virtual_speaker_node_division_gains != NULL ) { - count_free( ( *hVBAPdata )->bottom_virtual_speaker_node_division_gains ); + free( ( *hVBAPdata )->bottom_virtual_speaker_node_division_gains ); } if ( ( *hVBAPdata )->top_virtual_speaker_node_division_gains != NULL ) { - count_free( ( *hVBAPdata )->top_virtual_speaker_node_division_gains ); + free( ( *hVBAPdata )->top_virtual_speaker_node_division_gains ); } if ( ( *hVBAPdata )->back_virtual_speaker_node_division_gains != NULL ) { - count_free( ( *hVBAPdata )->back_virtual_speaker_node_division_gains ); + free( ( *hVBAPdata )->back_virtual_speaker_node_division_gains ); } if ( ( *hVBAPdata )->search_struct[0].triplets != NULL ) { - count_free( ( *hVBAPdata )->search_struct[0].triplets ); + free( ( *hVBAPdata )->search_struct[0].triplets ); } if ( ( *hVBAPdata )->num_search_structs == 2 && ( *hVBAPdata )->search_struct[1].triplets != NULL ) { - count_free( ( *hVBAPdata )->search_struct[1].triplets ); + free( ( *hVBAPdata )->search_struct[1].triplets ); } - count_free( *hVBAPdata ); + free( *hVBAPdata ); *hVBAPdata = NULL; return; @@ -1450,7 +1450,7 @@ static void get_half_sphere_connection_options( } /* Init memory for connection options */ - c_options = (ConnectionOption *) count_malloc( sizeof( ConnectionOption ) * max_num_connection_options ); + c_options = (ConnectionOption *) malloc( sizeof( ConnectionOption ) * max_num_connection_options ); for ( c = 0; c < max_num_connection_options; c++ ) { c_options[c].chA = -1; @@ -1505,7 +1505,7 @@ static void get_half_sphere_connection_options( /* Init memory for reordered connection options and order by arc_weighted, * which informs of the preference order of the connections in case they cross */ - c_options_reorder = (ConnectionOption *) count_malloc( sizeof( ConnectionOption ) * ( *num_connection_options ) ); + c_options_reorder = (ConnectionOption *) malloc( sizeof( ConnectionOption ) * ( *num_connection_options ) ); for ( c = 0; c < *num_connection_options; c++ ) { float min_arc_weighted; @@ -1530,7 +1530,7 @@ static void get_half_sphere_connection_options( /* Set reordered connections as output and free temporary data */ *connection_options_pr = c_options_reorder; - count_free( c_options ); + free( c_options ); return; } @@ -1676,7 +1676,7 @@ static void formulate_half_sphere_connections( } c_opt++; } - count_free( connection_options ); + free( connection_options ); return; } diff --git a/lib_dec/jbm_jb4_circularbuffer.c b/lib_dec/jbm_jb4_circularbuffer.c index 410e907f13..0ef0793bc7 100644 --- a/lib_dec/jbm_jb4_circularbuffer.c +++ b/lib_dec/jbm_jb4_circularbuffer.c @@ -72,7 +72,7 @@ struct JB4_CIRCULARBUFFER /* Creates a circular buffer (FIFO) */ int16_t JB4_CIRCULARBUFFER_Create( JB4_CIRCULARBUFFER_HANDLE *ph ) { - JB4_CIRCULARBUFFER_HANDLE h = count_malloc( sizeof( struct JB4_CIRCULARBUFFER ) ); + JB4_CIRCULARBUFFER_HANDLE h = malloc( sizeof( struct JB4_CIRCULARBUFFER ) ); h->data = NULL; h->capacity = 0; @@ -103,9 +103,9 @@ void JB4_CIRCULARBUFFER_Destroy( if ( h->data ) { - count_free( h->data ); + free( h->data ); } - count_free( h ); + free( h ); *ph = NULL; return; @@ -119,7 +119,7 @@ int16_t JB4_CIRCULARBUFFER_Init( { /* keep one element free to be able to decide between full/empty buffer */ ++capacity; - h->data = count_malloc( capacity * sizeof( JB4_CIRCULARBUFFER_ELEMENT ) ); + h->data = malloc( capacity * sizeof( JB4_CIRCULARBUFFER_ELEMENT ) ); h->capacity = capacity; h->writePos = 0; diff --git a/lib_dec/jbm_jb4_inputbuffer.c b/lib_dec/jbm_jb4_inputbuffer.c index 8eaf547838..bcd965de57 100644 --- a/lib_dec/jbm_jb4_inputbuffer.c +++ b/lib_dec/jbm_jb4_inputbuffer.c @@ -70,7 +70,7 @@ struct JB4_INPUTBUFFER int16_t JB4_INPUTBUFFER_Create( JB4_INPUTBUFFER_HANDLE *ph ) { - JB4_INPUTBUFFER_HANDLE h = count_malloc( sizeof( struct JB4_INPUTBUFFER ) ); + JB4_INPUTBUFFER_HANDLE h = malloc( sizeof( struct JB4_INPUTBUFFER ) ); h->data = NULL; h->capacity = 0; @@ -100,8 +100,8 @@ void JB4_INPUTBUFFER_Destroy( return; } if ( h->data ) - count_free( h->data ); - count_free( h ); + free( h->data ); + free( h ); *ph = NULL; return; @@ -117,7 +117,7 @@ int16_t JB4_INPUTBUFFER_Init( /* keep one element free to be able to decide between full/empty buffer */ ++capacity; - h->data = count_malloc( capacity * sizeof( JB4_INPUTBUFFER_ELEMENT ) ); + h->data = malloc( capacity * sizeof( JB4_INPUTBUFFER_ELEMENT ) ); h->capacity = capacity; h->writePos = 0; h->readPos = 0; diff --git a/lib_dec/jbm_jb4_jmf.c b/lib_dec/jbm_jb4_jmf.c index 2095049373..945f9abcf0 100644 --- a/lib_dec/jbm_jb4_jmf.c +++ b/lib_dec/jbm_jb4_jmf.c @@ -92,7 +92,7 @@ static void JB4_JMF_popFront( JB4_JMF_HANDLE h ); int16_t JB4_JMF_Create( JB4_JMF_HANDLE *ph ) { - JB4_JMF_HANDLE h = count_malloc( sizeof( struct JB4_JMF ) ); + JB4_JMF_HANDLE h = malloc( sizeof( struct JB4_JMF ) ); JB4_CIRCULARBUFFER_Create( &h->fifo ); JB4_CIRCULARBUFFER_Create( &h->offsetFifo ); @@ -131,7 +131,7 @@ void JB4_JMF_Destroy( JB4_CIRCULARBUFFER_Destroy( &h->offsetFifo ); JB4_CIRCULARBUFFER_Destroy( &h->timeStampFifo ); - count_free( h ); + free( h ); *ph = NULL; return; diff --git a/lib_dec/jbm_jb4sb.c b/lib_dec/jbm_jb4sb.c index 806ed99487..e23de4aa04 100644 --- a/lib_dec/jbm_jb4sb.c +++ b/lib_dec/jbm_jb4sb.c @@ -208,7 +208,7 @@ ivas_error JB4_Create( int16_t iter; JB4_HANDLE h; - if ( ( h = count_malloc( sizeof( struct JB4 ) ) ) == NULL ) + if ( ( h = malloc( sizeof( struct JB4 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JB4 structure\n" ) ); } @@ -270,7 +270,7 @@ ivas_error JB4_Create( /* allocate memory for data units */ for ( iter = 0; iter < MAX_JBM_SLOTS; ++iter ) { - h->memorySlots[iter].data = count_malloc( MAX_AU_SIZE ); + h->memorySlots[iter].data = malloc( MAX_AU_SIZE ); h->freeMemorySlots[iter] = &h->memorySlots[iter]; } h->nFreeMemorySlots = MAX_JBM_SLOTS; @@ -304,10 +304,10 @@ void JB4_Destroy( for ( i = 0; i < MAX_JBM_SLOTS; ++i ) { - count_free( h->memorySlots[i].data ); + free( h->memorySlots[i].data ); } - count_free( h ); + free( h ); *ph = NULL; return; diff --git a/lib_dec/jbm_pcmdsp_apa.c b/lib_dec/jbm_pcmdsp_apa.c index 3fb6065c06..de0f2b22ec 100644 --- a/lib_dec/jbm_pcmdsp_apa.c +++ b/lib_dec/jbm_pcmdsp_apa.c @@ -150,7 +150,7 @@ uint8_t apa_init( } /* allocate state struct */ - ps = (apa_state_t *) count_malloc( sizeof( apa_state_t ) ); + ps = (apa_state_t *) malloc( sizeof( apa_state_t ) ); if ( !ps ) { return 2; @@ -402,7 +402,7 @@ bool apa_exit( } /* deallocate state struct */ - count_free( *pps ); + free( *pps ); /* set pointer to NULL */ *pps = NULL; diff --git a/lib_dec/jbm_pcmdsp_fifo.c b/lib_dec/jbm_pcmdsp_fifo.c index 6219098d4f..1a5aa340dd 100644 --- a/lib_dec/jbm_pcmdsp_fifo.c +++ b/lib_dec/jbm_pcmdsp_fifo.c @@ -51,7 +51,7 @@ int16_t pcmdsp_fifo_create( PCMDSP_FIFO_HANDLE *ph ) { - PCMDSP_FIFO_HANDLE h = count_malloc( sizeof( struct PCMDSP_FIFO ) ); + PCMDSP_FIFO_HANDLE h = malloc( sizeof( struct PCMDSP_FIFO ) ); h->size = 0; h->capacity = 0; @@ -85,10 +85,10 @@ void pcmdsp_fifo_destroy( if ( h->dataBegin ) { - count_free( h->dataBegin ); + free( h->dataBegin ); } - count_free( h ); + free( h ); *ph = NULL; return; @@ -106,7 +106,7 @@ int16_t pcmdsp_fifo_init( h->capacity = nSamples; h->nBytesPerSampleSet = nChannels * nBytesPerSample; nDataBytes = nSamples * h->nBytesPerSampleSet; - h->dataBegin = count_malloc( nDataBytes ); + h->dataBegin = malloc( nDataBytes ); h->dataEnd = h->dataBegin + nDataBytes; h->dataWriteIterator = h->dataBegin; h->dataReadIterator = h->dataBegin; diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 5a81f77346..792aafe180 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -121,7 +121,7 @@ ivas_error IVAS_DEC_Open( * Allocate and initialize IVAS application decoder handle *-----------------------------------------------------------------*/ - if ( ( *phIvasDec = (IVAS_DEC_HANDLE) count_malloc( sizeof( struct IVAS_DEC ) ) ) == NULL ) + if ( ( *phIvasDec = (IVAS_DEC_HANDLE) malloc( sizeof( struct IVAS_DEC ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IVAS decoder handle" ); } @@ -143,12 +143,12 @@ ivas_error IVAS_DEC_Open( * Initialize IVAS-codec decoder state *-----------------------------------------------------------------*/ - if ( ( hIvasDec->st_ivas = (Decoder_Struct *) count_malloc( sizeof( Decoder_Struct ) ) ) == NULL ) + if ( ( hIvasDec->st_ivas = (Decoder_Struct *) malloc( sizeof( Decoder_Struct ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IVAS decoder structure" ); } - if ( ( hIvasDec->st_ivas->hDecoderConfig = (DECODER_CONFIG_HANDLE) count_malloc( sizeof( DECODER_CONFIG ) ) ) == NULL ) + if ( ( hIvasDec->st_ivas->hDecoderConfig = (DECODER_CONFIG_HANDLE) malloc( sizeof( DECODER_CONFIG ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Decoder config structure" ); } @@ -259,7 +259,7 @@ void IVAS_DEC_Close( ( *phIvasDec )->st_ivas = NULL; } - count_free( *phIvasDec ); + free( *phIvasDec ); *phIvasDec = NULL; phIvasDec = NULL; @@ -506,7 +506,7 @@ ivas_error IVAS_DEC_EnableVoIP( { return error; } - hIvasDec->hVoIP = count_malloc( sizeof( IVAS_DEC_VOIP ) ); + hIvasDec->hVoIP = malloc( sizeof( IVAS_DEC_VOIP ) ); hIvasDec->hVoIP->lastDecodedWasActive = 0; hIvasDec->hVoIP->nSamplesFrame = (uint16_t) ( hDecoderConfig->output_Fs / FRAMES_PER_SEC ); @@ -1464,7 +1464,7 @@ static void IVAS_DEC_Close_VoIP( pcmdsp_fifo_destroy( &hVoIP->hFifoAfterTimeScaler ); - count_free( hVoIP ); + free( hVoIP ); return; } diff --git a/lib_dec/ppp_dec.c b/lib_dec/ppp_dec.c index 5fd442f810..adea4ea6a9 100644 --- a/lib_dec/ppp_dec.c +++ b/lib_dec/ppp_dec.c @@ -177,7 +177,7 @@ ivas_error ppp_quarter_decoder( tmp = (float) get_next_indice( st, 3 ); DTFS_phaseShift( CURRCW_Q_DTFS, (float) ( PI2 * ( tmp - 3 ) / CURRCW_Q_DTFS->lag ) ); - count_free( PREVDTFS ); + free( PREVDTFS ); return error; } diff --git a/lib_dec/voiced_dec.c b/lib_dec/voiced_dec.c index 68e2b67818..2771224ac0 100644 --- a/lib_dec/voiced_dec.c +++ b/lib_dec/voiced_dec.c @@ -233,9 +233,9 @@ ivas_error ppp_voiced_decoder( mvr2r( dtfs_temp->a, hSC_VBR->dtfs_dec_a, MAXLAG_WI ); mvr2r( dtfs_temp->b, hSC_VBR->dtfs_dec_b, MAXLAG_WI ); - count_free( TMPDTFS ); - count_free( CURRP_Q_D ); - count_free( dtfs_temp ); + free( TMPDTFS ); + free( CURRP_Q_D ); + free( dtfs_temp ); return error; } diff --git a/lib_enc/fd_cng_enc.c b/lib_enc/fd_cng_enc.c index c0133f2366..016847877c 100644 --- a/lib_enc/fd_cng_enc.c +++ b/lib_enc/fd_cng_enc.c @@ -66,7 +66,7 @@ ivas_error createFdCngEnc( *hFdCngEnc = NULL; /* Allocate memory */ - hs = (HANDLE_FD_CNG_ENC) count_malloc( sizeof( FD_CNG_ENC ) ); + hs = (HANDLE_FD_CNG_ENC) malloc( sizeof( FD_CNG_ENC ) ); if ( hs == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for FD CNG ENC structure" ); @@ -282,7 +282,7 @@ void deleteFdCngEnc( if ( hsEnc != NULL ) { deleteFdCngCom( &( hsEnc->hFdCngCom ) ); - count_free( hsEnc ); + free( hsEnc ); *hFdCngEnc = NULL; } diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c index 6a2643186a..722e4bfe12 100644 --- a/lib_enc/init_enc.c +++ b/lib_enc/init_enc.c @@ -107,7 +107,7 @@ ivas_error init_encoder( if ( !vad_only_flag ) { - if ( ( st->hBstr = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + if ( ( st->hBstr = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) ); } @@ -256,7 +256,7 @@ ivas_error init_encoder( if ( !vad_only_flag ) { - if ( ( st->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) count_malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL ) + if ( ( st->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Signal buffers\n" ) ); } @@ -311,7 +311,7 @@ ivas_error init_encoder( if ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) { - if ( ( st->hNoiseEst = (NOISE_EST_HANDLE) count_malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) + if ( ( st->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ); } @@ -332,7 +332,7 @@ ivas_error init_encoder( if ( ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) && ( !vad_only_flag ) ) { - if ( ( st->hVAD = (VAD_HANDLE) count_malloc( sizeof( VAD_DATA ) ) ) == NULL ) + if ( ( st->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); } @@ -348,7 +348,7 @@ ivas_error init_encoder( /* CLDFB-based VAD */ if ( st->element_mode == EVS_MONO ) { - if ( ( st->hVAD_CLDFB = (VAD_CLDFB_HANDLE) count_malloc( sizeof( T_CldfbVadState ) ) ) == NULL ) + if ( ( st->hVAD_CLDFB = (VAD_CLDFB_HANDLE) malloc( sizeof( T_CldfbVadState ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB VAD\n" ) ); } @@ -366,7 +366,7 @@ ivas_error init_encoder( if ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) { - if ( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) count_malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) + if ( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); } @@ -414,7 +414,7 @@ ivas_error init_encoder( if ( ( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO ) || ( st->element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) { - if ( ( st->hDtxEnc = (DTX_ENC_HANDLE) count_malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) + if ( ( st->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) ); } @@ -464,7 +464,7 @@ ivas_error init_encoder( if ( ( ( idchan == 0 && st->Opt_DTX_ON && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO ) ) { - if ( ( st->hTdCngEnc = (TD_CNG_ENC_HANDLE) count_malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) + if ( ( st->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); } @@ -500,7 +500,7 @@ ivas_error init_encoder( if ( st->Opt_SC_VBR || st->element_mode == EVS_MONO ) { - if ( ( st->hSC_VBR = (SC_VBR_ENC_HANDLE) count_malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL ) + if ( ( st->hSC_VBR = (SC_VBR_ENC_HANDLE) malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); } @@ -521,7 +521,7 @@ ivas_error init_encoder( if ( st->Opt_AMR_WB || st->element_mode == EVS_MONO ) { - if ( ( st->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) count_malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL ) + if ( ( st->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); } @@ -539,7 +539,7 @@ ivas_error init_encoder( if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) { - if ( ( st->hLPDmem = (LPD_state_HANDLE) count_malloc( sizeof( LPD_state ) ) ) == NULL ) + if ( ( st->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) ); } @@ -560,7 +560,7 @@ ivas_error init_encoder( if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) { - if ( ( st->hGSCEnc = (GSC_ENC_HANDLE) count_malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) + if ( ( st->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); } @@ -578,7 +578,7 @@ ivas_error init_encoder( if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) { - if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) count_malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); } @@ -603,7 +603,7 @@ ivas_error init_encoder( if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) { - if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) count_malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); } @@ -621,7 +621,7 @@ ivas_error init_encoder( if ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_MDCT && idchan == 0 ) { - if ( ( st->hHQ_core = (HQ_ENC_HANDLE) count_malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) + if ( ( st->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); } @@ -657,7 +657,7 @@ ivas_error init_encoder( if ( st->Opt_RF_ON || st->element_mode == EVS_MONO ) { - if ( ( st->hRF = (RF_ENC_HANDLE) count_malloc( sizeof( RF_ENC_DATA ) ) ) == NULL ) + if ( ( st->hRF = (RF_ENC_HANDLE) malloc( sizeof( RF_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for RF\n" ) ); } @@ -676,7 +676,7 @@ ivas_error init_encoder( if ( st->element_mode == EVS_MONO ) { - if ( ( st->hTECEnc = (TEC_ENC_HANDLE) count_malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL ) + if ( ( st->hTECEnc = (TEC_ENC_HANDLE) malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) ); } @@ -694,7 +694,7 @@ ivas_error init_encoder( // VE: reduction possible for MCT_CHAN_MODE_LFE channel - see I1-172 if ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) { - if ( ( st->hTcxEnc = (TCX_ENC_HANDLE) count_malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) + if ( ( st->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) ); } @@ -711,7 +711,7 @@ ivas_error init_encoder( /* MDCT classifier */ MDCT_classifier_reset( st->hTcxEnc ); - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); } @@ -728,7 +728,7 @@ ivas_error init_encoder( if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && st->mct_chan_mode != MCT_CHAN_MODE_LFE ) { - if ( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) count_malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) + if ( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); } @@ -756,7 +756,7 @@ ivas_error init_encoder( /* PLC encoder */ if ( st->element_mode == EVS_MONO ) { - if ( ( st->hPlcExt = (PLC_ENC_EVS_HANDLE) count_malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL ) + if ( ( st->hPlcExt = (PLC_ENC_EVS_HANDLE) malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hPlcExt\n" ) ); } @@ -803,7 +803,7 @@ ivas_error init_encoder( if ( st->mct_chan_mode != MCT_CHAN_MODE_LFE ) { - if ( ( st->hTranDet = (TRAN_DET_HANDLE) count_malloc( sizeof( TRAN_DET_DATA ) ) ) == NULL ) + if ( ( st->hTranDet = (TRAN_DET_HANDLE) malloc( sizeof( TRAN_DET_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Transient Detection\n" ) ); } diff --git a/lib_enc/ivas_agc_enc.c b/lib_enc/ivas_agc_enc.c index 0eb287763f..25415fe203 100644 --- a/lib_enc/ivas_agc_enc.c +++ b/lib_enc/ivas_agc_enc.c @@ -157,7 +157,7 @@ ivas_error ivas_spar_agc_enc_open( int16_t input_frame; #endif - if ( ( hAgc = (ivas_agc_enc_state_t *) count_malloc( sizeof( ivas_agc_enc_state_t ) ) ) == NULL ) + if ( ( hAgc = (ivas_agc_enc_state_t *) malloc( sizeof( ivas_agc_enc_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); } @@ -168,20 +168,20 @@ ivas_error ivas_spar_agc_enc_open( #endif #ifdef FIX_AGC_WINFUNC_MEMORY - if ( ( hAgc->agc_com.winFunc = (float *) count_malloc( sizeof( float ) * ( input_frame - delay ) ) ) == NULL ) + if ( ( hAgc->agc_com.winFunc = (float *) malloc( sizeof( float ) * ( input_frame - delay ) ) ) == NULL ) #else - if ( ( hAgc->agc_com.winFunc = (float *) count_malloc( sizeof( float ) * input_frame ) ) == NULL ) + if ( ( hAgc->agc_com.winFunc = (float *) malloc( sizeof( float ) * input_frame ) ) == NULL ) #endif { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); } - if ( ( hAgc->gain_state = (ivas_agc_enc_chan_state_t *) count_malloc( sizeof( ivas_agc_enc_chan_state_t ) * nchan_inp ) ) == NULL ) + if ( ( hAgc->gain_state = (ivas_agc_enc_chan_state_t *) malloc( sizeof( ivas_agc_enc_chan_state_t ) * nchan_inp ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); } - if ( ( hAgc->gain_data = (ivas_agc_chan_data_t *) count_malloc( sizeof( ivas_agc_chan_data_t ) * nchan_inp ) ) == NULL ) + if ( ( hAgc->gain_data = (ivas_agc_chan_data_t *) malloc( sizeof( ivas_agc_chan_data_t ) * nchan_inp ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); } @@ -214,16 +214,16 @@ void ivas_spar_agc_enc_close( if ( hAgc != NULL ) { - count_free( hAgc->agc_com.winFunc ); + free( hAgc->agc_com.winFunc ); hAgc->agc_com.winFunc = NULL; - count_free( hAgc->gain_state ); + free( hAgc->gain_state ); hAgc->gain_state = NULL; - count_free( hAgc->gain_data ); + free( hAgc->gain_data ); hAgc->gain_data = NULL; - count_free( hAgc ); + free( hAgc ); hAgc = NULL; } diff --git a/lib_enc/ivas_corecoder_enc_reconfig.c b/lib_enc/ivas_corecoder_enc_reconfig.c index 9e544da1ba..391b3678d7 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig.c +++ b/lib_enc/ivas_corecoder_enc_reconfig.c @@ -184,7 +184,7 @@ ivas_error ivas_corecoder_enc_reconfig( /* special case, if we have MCT now and had a single CPE before, remove the MDCT Stereo handles */ if ( st_ivas->nCPE > 1 && nCPE_old == 1 ) { - count_free( st_ivas->hCPE[0]->hStereoMdct ); + free( st_ivas->hCPE[0]->hStereoMdct ); st_ivas->hCPE[0]->hStereoMdct = NULL; } @@ -333,7 +333,7 @@ ivas_error ivas_corecoder_enc_reconfig( { if ( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData == NULL ) { - if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MetaData structure\n" ) ); } @@ -346,7 +346,7 @@ ivas_error ivas_corecoder_enc_reconfig( { if ( st_ivas->hCPE[cpe_id]->hMetaData != NULL ) { - count_free( st_ivas->hCPE[cpe_id]->hMetaData ); + free( st_ivas->hCPE[cpe_id]->hMetaData ); st_ivas->hCPE[cpe_id]->hMetaData = NULL; } } @@ -355,7 +355,7 @@ ivas_error ivas_corecoder_enc_reconfig( /* special case, if we have a single CPE and had MCT before we need to init the MDCT stereo handles here */ if ( st_ivas->nCPE == 1 && nCPE_old > 1 ) { - if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index 32f49f936d..7d033f7806 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -725,7 +725,7 @@ ivas_error create_cpe_enc( * Allocate CPE handle *-----------------------------------------------------------------*/ - if ( ( hCPE = (CPE_ENC_HANDLE) count_malloc( sizeof( CPE_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE = (CPE_ENC_HANDLE) malloc( sizeof( CPE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); } @@ -759,7 +759,7 @@ ivas_error create_cpe_enc( { if ( ivas_format == STEREO_FORMAT || ivas_format == MASA_FORMAT || ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) { - if ( ( hCPE->input_mem[n] = (float *) count_malloc( sizeof( float ) * NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ) ) == NULL ) + if ( ( hCPE->input_mem[n] = (float *) malloc( sizeof( float ) * NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } @@ -776,7 +776,7 @@ ivas_error create_cpe_enc( * stereo classifier: allocate and initialize *-----------------------------------------------------------------*/ - if ( ( hCPE->hStereoClassif = (STEREO_CLASSIF_HANDLE) count_malloc( sizeof( STEREO_CLASSIF_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoClassif = (STEREO_CLASSIF_HANDLE) malloc( sizeof( STEREO_CLASSIF_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo classifier structure\n" ) ); } @@ -789,7 +789,7 @@ ivas_error create_cpe_enc( if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ) && ( cpe_id == ( st_ivas->nCPE - 1 ) ) ) { - if ( ( hCPE->hMetaData = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hMetaData = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MetaData structure\n" ) ); } @@ -801,7 +801,7 @@ ivas_error create_cpe_enc( for ( n = 0; n < CPE_CHANNELS; n++ ) { - if ( ( st = (ENC_CORE_HANDLE) count_malloc( sizeof( Encoder_State ) ) ) == NULL ) + if ( ( st = (ENC_CORE_HANDLE) malloc( sizeof( Encoder_State ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); } @@ -835,7 +835,7 @@ ivas_error create_cpe_enc( { if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) { - if ( ( hCPE->hStereoCng = (STEREO_CNG_ENC_HANDLE) count_malloc( sizeof( STEREO_CNG_ENC ) ) ) == NULL ) + if ( ( hCPE->hStereoCng = (STEREO_CNG_ENC_HANDLE) malloc( sizeof( STEREO_CNG_ENC ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo Cng for Unified/TD \n" ) ); } @@ -888,7 +888,7 @@ ivas_error create_cpe_enc( if ( hCPE->element_mode != IVAS_CPE_MDCT ) { - if ( ( hCPE->hStereoTCA = (STEREO_TCA_ENC_HANDLE) count_malloc( sizeof( STEREO_TCA_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTCA = (STEREO_TCA_ENC_HANDLE) malloc( sizeof( STEREO_TCA_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); } @@ -902,7 +902,7 @@ ivas_error create_cpe_enc( if ( hCPE->element_mode != IVAS_CPE_MDCT ) { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } @@ -916,7 +916,7 @@ ivas_error create_cpe_enc( if ( hCPE->element_mode == IVAS_CPE_TD ) { - if ( ( hCPE->hStereoTD = (STEREO_TD_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_TD_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTD = (STEREO_TD_ENC_DATA_HANDLE) malloc( sizeof( STEREO_TD_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); } @@ -930,7 +930,7 @@ ivas_error create_cpe_enc( if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->nCPE == 1 ) { - if ( ( hCPE->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } @@ -971,7 +971,7 @@ void destroy_cpe_enc( if ( hCPE->hStereoClassif != NULL ) { - count_free( hCPE->hStereoClassif ); + free( hCPE->hStereoClassif ); hCPE->hStereoClassif = NULL; } @@ -979,14 +979,14 @@ void destroy_cpe_enc( { if ( hCPE->input_mem[n] != NULL ) { - count_free( hCPE->input_mem[n] ); + free( hCPE->input_mem[n] ); hCPE->input_mem[n] = NULL; } } if ( hCPE->hMetaData != NULL ) { - count_free( hCPE->hMetaData ); + free( hCPE->hMetaData ); hCPE->hMetaData = NULL; } @@ -1009,7 +1009,7 @@ void destroy_cpe_enc( if ( hCPE->hStereoTD != NULL ) { - count_free( hCPE->hStereoTD ); + free( hCPE->hStereoTD ); hCPE->hStereoTD = NULL; } @@ -1021,19 +1021,19 @@ void destroy_cpe_enc( if ( hCPE->hStereoTCA != NULL ) { - count_free( hCPE->hStereoTCA ); + free( hCPE->hStereoTCA ); hCPE->hStereoTCA = NULL; } if ( hCPE->hStereoICBWE != NULL ) { - count_free( hCPE->hStereoICBWE ); + free( hCPE->hStereoICBWE ); hCPE->hStereoICBWE = NULL; } if ( hCPE->hStereoCng != NULL ) { - count_free( hCPE->hStereoCng ); + free( hCPE->hStereoCng ); hCPE->hStereoCng = NULL; } @@ -1046,7 +1046,7 @@ void destroy_cpe_enc( } } - count_free( hCPE ); + free( hCPE ); return; } diff --git a/lib_enc/ivas_dirac_enc.c b/lib_enc/ivas_dirac_enc.c index f8e3d4f8bf..4566d07751 100644 --- a/lib_enc/ivas_dirac_enc.c +++ b/lib_enc/ivas_dirac_enc.c @@ -70,12 +70,12 @@ ivas_error ivas_dirac_enc_open( error = IVAS_ERR_OK; - if ( ( hDirAC = (DIRAC_ENC_HANDLE) count_malloc( sizeof( DIRAC_ENC_DATA ) ) ) == NULL ) + if ( ( hDirAC = (DIRAC_ENC_HANDLE) malloc( sizeof( DIRAC_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } - if ( ( hDirAC->hConfig = (DIRAC_CONFIG_DATA_HANDLE) count_malloc( sizeof( DIRAC_CONFIG_DATA ) ) ) == NULL ) + if ( ( hDirAC->hConfig = (DIRAC_CONFIG_DATA_HANDLE) malloc( sizeof( DIRAC_CONFIG_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC Config\n" ) ); } @@ -125,7 +125,7 @@ ivas_error ivas_dirac_enc_open( for ( i = 0; i < DIRAC_MAX_ANA_CHANS; i++ ) { - hDirAC->sba_synchro_buffer[i] = (float *) count_malloc( hDirAC->num_samples_synchro_delay * sizeof( float ) ); + hDirAC->sba_synchro_buffer[i] = (float *) malloc( hDirAC->num_samples_synchro_delay * sizeof( float ) ); set_zero( hDirAC->sba_synchro_buffer[i], hDirAC->num_samples_synchro_delay ); } } @@ -140,11 +140,11 @@ ivas_error ivas_dirac_enc_open( /* intensity 3-dim */ for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) { - hDirAC->direction_vector_m[i] = (float **) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ); + hDirAC->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ); for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) { - hDirAC->direction_vector_m[i][j] = (float *) count_malloc( DIRAC_MAX_NBANDS * sizeof( float ) ); + hDirAC->direction_vector_m[i][j] = (float *) malloc( DIRAC_MAX_NBANDS * sizeof( float ) ); set_f( hDirAC->direction_vector_m[i][j], 0.0f, DIRAC_MAX_NBANDS ); } } @@ -152,14 +152,14 @@ ivas_error ivas_dirac_enc_open( hDirAC->no_col_avg_diff = (int16_t) ( DIRAC_NO_COL_AVG_DIFF_NS / dirac_slot_ns ); for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) { - hDirAC->buffer_intensity_real[i] = (float **) count_malloc( hDirAC->no_col_avg_diff * sizeof( float * ) ); + hDirAC->buffer_intensity_real[i] = (float **) malloc( hDirAC->no_col_avg_diff * sizeof( float * ) ); for ( j = 0; j < hDirAC->no_col_avg_diff; j++ ) { - hDirAC->buffer_intensity_real[i][j] = (float *) count_malloc( DIRAC_MAX_NBANDS * sizeof( float ) ); + hDirAC->buffer_intensity_real[i][j] = (float *) malloc( DIRAC_MAX_NBANDS * sizeof( float ) ); set_f( hDirAC->buffer_intensity_real[i][j], 0.0f, DIRAC_MAX_NBANDS ); } } - hDirAC->buffer_energy = (float *) count_malloc( DIRAC_MAX_NBANDS * hDirAC->no_col_avg_diff * sizeof( float ) ); + hDirAC->buffer_energy = (float *) malloc( DIRAC_MAX_NBANDS * hDirAC->no_col_avg_diff * sizeof( float ) ); set_f( hDirAC->buffer_energy, 0.0f, DIRAC_MAX_NBANDS * hDirAC->no_col_avg_diff ); if ( st_ivas->hQMetaData->useLowerRes ) @@ -243,7 +243,7 @@ void ivas_dirac_enc_close( { if ( hDirAC->sba_synchro_buffer[i] != NULL ) { - count_free( hDirAC->sba_synchro_buffer[i] ); + free( hDirAC->sba_synchro_buffer[i] ); hDirAC->sba_synchro_buffer[i] = NULL; } } @@ -253,7 +253,7 @@ void ivas_dirac_enc_close( { for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) { - count_free( hDirAC->direction_vector_m[i][j] ); + free( hDirAC->direction_vector_m[i][j] ); hDirAC->direction_vector_m[i][j] = NULL; } @@ -261,28 +261,28 @@ void ivas_dirac_enc_close( { if ( hDirAC->buffer_intensity_real[i][j] != 0 ) { - count_free( hDirAC->buffer_intensity_real[i][j] ); + free( hDirAC->buffer_intensity_real[i][j] ); hDirAC->buffer_intensity_real[i][j] = NULL; } } - count_free( hDirAC->buffer_intensity_real[i] ); + free( hDirAC->buffer_intensity_real[i] ); hDirAC->buffer_intensity_real[i] = NULL; - count_free( hDirAC->direction_vector_m[i] ); + free( hDirAC->direction_vector_m[i] ); hDirAC->direction_vector_m[i] = NULL; } - count_free( hDirAC->buffer_energy ); + free( hDirAC->buffer_energy ); hDirAC->buffer_energy = NULL; if ( hDirAC->hConfig != NULL ) { - count_free( hDirAC->hConfig ); + free( hDirAC->hConfig ); hDirAC->hConfig = NULL; } - count_free( hDirAC ); + free( hDirAC ); return; } diff --git a/lib_enc/ivas_enc_cov_handler.c b/lib_enc/ivas_enc_cov_handler.c index b94a29bcb4..02d34abb52 100644 --- a/lib_enc/ivas_enc_cov_handler.c +++ b/lib_enc/ivas_enc_cov_handler.c @@ -74,7 +74,7 @@ ivas_error ivas_spar_covar_enc_open( error = IVAS_ERR_OK; - if ( ( hCovState = (ivas_enc_cov_handler_state_t *) count_malloc( sizeof( ivas_enc_cov_handler_state_t ) ) ) == NULL ) + if ( ( hCovState = (ivas_enc_cov_handler_state_t *) malloc( sizeof( ivas_enc_cov_handler_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); } @@ -125,7 +125,7 @@ void ivas_spar_covar_enc_close( ivas_spar_covar_smooth_enc_close( &hCovState->pCov_dtx_state, nchan_inp ); - count_free( hCovState ); + free( hCovState ); hCovState = NULL; } diff --git a/lib_enc/ivas_front_vad.c b/lib_enc/ivas_front_vad.c index 9bea3565d8..c4b69473de 100644 --- a/lib_enc/ivas_front_vad.c +++ b/lib_enc/ivas_front_vad.c @@ -266,18 +266,18 @@ ivas_error front_vad_create( { FRONT_VAD_ENC_HANDLE hFrontVad; - if ( ( hFrontVad = (FRONT_VAD_ENC_HANDLE) count_malloc( sizeof( FRONT_VAD_ENC ) ) ) == NULL ) + if ( ( hFrontVad = (FRONT_VAD_ENC_HANDLE) malloc( sizeof( FRONT_VAD_ENC ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for front-VAD structure \n" ) ); } - if ( ( hFrontVad->hNoiseEst = (NOISE_EST_HANDLE) count_malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) + if ( ( hFrontVad->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ) ); } noise_est_init( hFrontVad->hNoiseEst ); - if ( ( hFrontVad->hVAD = (VAD_HANDLE) count_malloc( sizeof( VAD_DATA ) ) ) == NULL ) + if ( ( hFrontVad->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); } @@ -296,7 +296,7 @@ ivas_error front_vad_create( hFrontVad->delay_buf = NULL; if ( hFrontVad->delay_samples > 0 ) { - if ( ( hFrontVad->delay_buf = (float *) count_malloc( hFrontVad->delay_samples * sizeof( float ) ) ) == NULL ) + if ( ( hFrontVad->delay_buf = (float *) malloc( hFrontVad->delay_samples * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD delay buffer\n" ) ); } @@ -322,19 +322,19 @@ void front_vad_destroy( { if ( *hFrontVad != NULL ) { - count_free( ( *hFrontVad )->hNoiseEst ); + free( ( *hFrontVad )->hNoiseEst ); ( *hFrontVad )->hNoiseEst = NULL; - count_free( ( *hFrontVad )->hVAD ); + free( ( *hFrontVad )->hVAD ); ( *hFrontVad )->hVAD = NULL; if ( ( *hFrontVad )->delay_buf != NULL ) { - count_free( ( *hFrontVad )->delay_buf ); + free( ( *hFrontVad )->delay_buf ); ( *hFrontVad )->delay_buf = NULL; } - count_free( *hFrontVad ); + free( *hFrontVad ); *hFrontVad = NULL; } diff --git a/lib_enc/ivas_init_enc.c b/lib_enc/ivas_init_enc.c index b7642f2cd4..d47dc3322f 100644 --- a/lib_enc/ivas_init_enc.c +++ b/lib_enc/ivas_init_enc.c @@ -692,7 +692,7 @@ ivas_error ivas_init_encoder( if ( n > 0 ) { - if ( ( st_ivas->mem_hp20_in = (float **) count_malloc( n * sizeof( float * ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -704,7 +704,7 @@ ivas_error ivas_init_encoder( for ( i = 0; i < n; i++ ) { - if ( ( st_ivas->mem_hp20_in[i] = (float *) count_malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_in[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -730,137 +730,137 @@ void destroy_core_enc( if ( hCoreCoder->hSignalBuf != NULL ) { - count_free( hCoreCoder->hSignalBuf ); + free( hCoreCoder->hSignalBuf ); hCoreCoder->hSignalBuf = NULL; } if ( hCoreCoder->hBstr != NULL ) { - count_free( hCoreCoder->hBstr ); + free( hCoreCoder->hBstr ); hCoreCoder->hBstr = NULL; } if ( hCoreCoder->hLPDmem != NULL ) { - count_free( hCoreCoder->hLPDmem ); + free( hCoreCoder->hLPDmem ); hCoreCoder->hLPDmem = NULL; } if ( hCoreCoder->hTranDet != NULL ) { - count_free( hCoreCoder->hTranDet ); + free( hCoreCoder->hTranDet ); hCoreCoder->hTranDet = NULL; } if ( hCoreCoder->hNoiseEst != NULL ) { - count_free( hCoreCoder->hNoiseEst ); + free( hCoreCoder->hNoiseEst ); hCoreCoder->hNoiseEst = NULL; } if ( hCoreCoder->hVAD != NULL ) { - count_free( hCoreCoder->hVAD ); + free( hCoreCoder->hVAD ); hCoreCoder->hVAD = NULL; } if ( hCoreCoder->hVAD_CLDFB != NULL ) { - count_free( hCoreCoder->hVAD_CLDFB ); + free( hCoreCoder->hVAD_CLDFB ); hCoreCoder->hVAD_CLDFB = NULL; } if ( hCoreCoder->hTdCngEnc != NULL ) { - count_free( hCoreCoder->hTdCngEnc ); + free( hCoreCoder->hTdCngEnc ); hCoreCoder->hTdCngEnc = NULL; } if ( hCoreCoder->hDtxEnc != NULL ) { - count_free( hCoreCoder->hDtxEnc ); + free( hCoreCoder->hDtxEnc ); hCoreCoder->hDtxEnc = NULL; } if ( hCoreCoder->hSpMusClas != NULL ) { - count_free( hCoreCoder->hSpMusClas ); + free( hCoreCoder->hSpMusClas ); hCoreCoder->hSpMusClas = NULL; } if ( hCoreCoder->hGSCEnc != NULL ) { - count_free( hCoreCoder->hGSCEnc ); + free( hCoreCoder->hGSCEnc ); hCoreCoder->hGSCEnc = NULL; } if ( hCoreCoder->hSC_VBR != NULL ) { - count_free( hCoreCoder->hSC_VBR ); + free( hCoreCoder->hSC_VBR ); hCoreCoder->hSC_VBR = NULL; } if ( hCoreCoder->hAmrwb_IO != NULL ) { - count_free( hCoreCoder->hAmrwb_IO ); + free( hCoreCoder->hAmrwb_IO ); hCoreCoder->hAmrwb_IO = NULL; } if ( hCoreCoder->hBWE_TD != NULL ) { - count_free( hCoreCoder->hBWE_TD ); + free( hCoreCoder->hBWE_TD ); hCoreCoder->hBWE_TD = NULL; } if ( hCoreCoder->hBWE_FD != NULL ) { - count_free( hCoreCoder->hBWE_FD ); + free( hCoreCoder->hBWE_FD ); hCoreCoder->hBWE_FD = NULL; } if ( hCoreCoder->hRF != NULL ) { - count_free( hCoreCoder->hRF ); + free( hCoreCoder->hRF ); hCoreCoder->hRF = NULL; } if ( hCoreCoder->hTECEnc != NULL ) { - count_free( hCoreCoder->hTECEnc ); + free( hCoreCoder->hTECEnc ); hCoreCoder->hTECEnc = NULL; } if ( hCoreCoder->hTcxEnc != NULL ) { - count_free( hCoreCoder->hTcxEnc ); + free( hCoreCoder->hTcxEnc ); hCoreCoder->hTcxEnc = NULL; } if ( hCoreCoder->hTcxCfg != NULL ) { - count_free( hCoreCoder->hTcxCfg ); + free( hCoreCoder->hTcxCfg ); hCoreCoder->hTcxCfg = NULL; } if ( hCoreCoder->hIGFEnc != NULL ) { - count_free( hCoreCoder->hIGFEnc ); + free( hCoreCoder->hIGFEnc ); hCoreCoder->hIGFEnc = NULL; } if ( hCoreCoder->hPlcExt != NULL ) { - count_free( hCoreCoder->hPlcExt ); + free( hCoreCoder->hPlcExt ); hCoreCoder->hPlcExt = NULL; } if ( hCoreCoder->hHQ_core != NULL ) { - count_free( hCoreCoder->hHQ_core ); + free( hCoreCoder->hHQ_core ); hCoreCoder->hHQ_core = NULL; } - count_free( hCoreCoder ); + free( hCoreCoder ); return; } @@ -909,10 +909,10 @@ void ivas_destroy_enc( for ( i = 0; i < n; i++ ) { - count_free( st_ivas->mem_hp20_in[i] ); + free( st_ivas->mem_hp20_in[i] ); st_ivas->mem_hp20_in[i] = NULL; } - count_free( st_ivas->mem_hp20_in ); + free( st_ivas->mem_hp20_in ); st_ivas->mem_hp20_in = NULL; } @@ -921,7 +921,7 @@ void ivas_destroy_enc( { if ( st_ivas->hIsmMetaData[n] != NULL ) { - count_free( st_ivas->hIsmMetaData[n] ); + free( st_ivas->hIsmMetaData[n] ); st_ivas->hIsmMetaData[n] = NULL; } } @@ -995,12 +995,12 @@ void ivas_destroy_enc( /* Encoder configuration handle */ if ( st_ivas->hEncoderConfig != NULL ) { - count_free( st_ivas->hEncoderConfig ); + free( st_ivas->hEncoderConfig ); st_ivas->hEncoderConfig = NULL; } /* main IVAS handle */ - count_free( st_ivas ); + free( st_ivas ); return; } diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c index 20f5be82f1..6efaf666cb 100644 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -740,7 +740,7 @@ ivas_error create_ism_metadata_enc( /* allocate ISm metadata handles */ for ( ch = 0; ch < n_ISms; ch++ ) { - if ( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) count_malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) + if ( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISm MetaData\n" ) ); } diff --git a/lib_enc/ivas_ism_param_enc.c b/lib_enc/ivas_ism_param_enc.c index c379383ea8..7a2131d88f 100644 --- a/lib_enc/ivas_ism_param_enc.c +++ b/lib_enc/ivas_ism_param_enc.c @@ -258,13 +258,13 @@ ivas_error ivas_param_ism_enc_open( error = IVAS_ERR_OK; /* Assign memory to DirAC handle */ - if ( ( hDirAC = (DIRAC_ENC_HANDLE) count_malloc( sizeof( DIRAC_ENC_DATA ) ) ) == NULL ) + if ( ( hDirAC = (DIRAC_ENC_HANDLE) malloc( sizeof( DIRAC_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } /* Assign memory to Param Object handle */ - if ( ( hDirAC->hParamIsm = (PARAM_ISM_CONFIG_HANDLE) count_malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL ) + if ( ( hDirAC->hParamIsm = (PARAM_ISM_CONFIG_HANDLE) malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM\n" ) ); } @@ -326,11 +326,11 @@ void ivas_param_ism_enc_close( if ( hDirAC->hParamIsm != NULL ) { - count_free( hDirAC->hParamIsm ); + free( hDirAC->hParamIsm ); hDirAC->hParamIsm = NULL; } - count_free( hDirAC ); + free( hDirAC ); return; } diff --git a/lib_enc/ivas_lfe_enc.c b/lib_enc/ivas_lfe_enc.c index d1c70cbc62..c34b77e9de 100644 --- a/lib_enc/ivas_lfe_enc.c +++ b/lib_enc/ivas_lfe_enc.c @@ -391,7 +391,7 @@ ivas_error ivas_create_lfe_enc( * Allocate LFE handle *-----------------------------------------------------------------*/ - if ( ( hLFE = (LFE_ENC_HANDLE) count_malloc( sizeof( LFE_ENC_DATA ) ) ) == NULL ) + if ( ( hLFE = (LFE_ENC_HANDLE) malloc( sizeof( LFE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE\n" ) ); } @@ -406,7 +406,7 @@ ivas_error ivas_create_lfe_enc( * Input memory buffer: allocate and initialize *-----------------------------------------------------------------*/ - if ( ( hLFE->old_wtda_audio = (float *) count_malloc( sizeof( float ) * NS2SA( input_Fs, IVAS_LFE_FADE_NS ) ) ) == NULL ) + if ( ( hLFE->old_wtda_audio = (float *) malloc( sizeof( float ) * NS2SA( input_Fs, IVAS_LFE_FADE_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE memory\n" ) ); } @@ -417,7 +417,7 @@ ivas_error ivas_create_lfe_enc( * LFE Window: allocate and initialize *-----------------------------------------------------------------*/ - if ( ( hLFE->pWindow_state = (LFE_WINDOW_HANDLE) count_malloc( sizeof( LFE_WINDOW_DATA ) ) ) == NULL ) + if ( ( hLFE->pWindow_state = (LFE_WINDOW_HANDLE) malloc( sizeof( LFE_WINDOW_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE window structure\n" ) ); } @@ -465,16 +465,16 @@ void ivas_lfe_enc_close( { if ( hLFE->old_wtda_audio != NULL ) { - count_free( hLFE->old_wtda_audio ); + free( hLFE->old_wtda_audio ); hLFE->old_wtda_audio = NULL; } if ( hLFE->pWindow_state ) { - count_free( hLFE->pWindow_state ); + free( hLFE->pWindow_state ); hLFE->pWindow_state = NULL; } - count_free( hLFE ); + free( hLFE ); return; } diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index 270868386f..e1eb467aef 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -88,7 +88,7 @@ ivas_error ivas_masa_enc_open( error = IVAS_ERR_OK; - if ( ( hMasa = (MASA_ENCODER_HANDLE) count_malloc( sizeof( MASA_ENCODER ) ) ) == NULL ) + if ( ( hMasa = (MASA_ENCODER_HANDLE) malloc( sizeof( MASA_ENCODER ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA encoder\n" ) ); } @@ -123,7 +123,7 @@ ivas_error ivas_masa_enc_open( { for ( i = 0; i < st_ivas->nchan_transport; i++ ) { - hMasa->data.delay_buffer[i] = (float *) count_malloc( MASA_ENC_DELAY_SLOTS * CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); + hMasa->data.delay_buffer[i] = (float *) malloc( MASA_ENC_DELAY_SLOTS * CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); set_f( hMasa->data.delay_buffer[i], 0.0f, MASA_ENC_DELAY_SLOTS * CLDFB_NO_CHANNELS_MAX ); } } @@ -163,12 +163,12 @@ void ivas_masa_enc_close( { for ( i = 0; i < nchan_transport; i++ ) { - count_free( hMasa->data.delay_buffer[i] ); + free( hMasa->data.delay_buffer[i] ); hMasa->data.delay_buffer[i] = NULL; } } - count_free( hMasa ); + free( hMasa ); return; } @@ -219,7 +219,7 @@ void ivas_masa_encode( if ( Opt_DTX_ON ) { - h_orig_metadata = (MASA_DIRECTIONAL_SPATIAL_META *) count_malloc( MASA_MAXIMUM_DIRECTIONS * sizeof( MASA_DIRECTIONAL_SPATIAL_META ) ); + h_orig_metadata = (MASA_DIRECTIONAL_SPATIAL_META *) malloc( MASA_MAXIMUM_DIRECTIONS * sizeof( MASA_DIRECTIONAL_SPATIAL_META ) ); for ( i = 0; i < MASA_MAXIMUM_DIRECTIONS; i++ ) { for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) @@ -348,7 +348,7 @@ void ivas_masa_encode( } } - count_free( h_orig_metadata ); + free( h_orig_metadata ); ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, masa_sid_descriptor, ivas_format, SBA_MODE_NONE ); diff --git a/lib_enc/ivas_mc_param_enc.c b/lib_enc/ivas_mc_param_enc.c index 848b1afdd6..6599456ca9 100644 --- a/lib_enc/ivas_mc_param_enc.c +++ b/lib_enc/ivas_mc_param_enc.c @@ -97,7 +97,7 @@ ivas_error ivas_param_mc_enc_open( error = IVAS_ERR_OK; /* Sanity Checks */ - if ( ( hParamMC = (PARAM_MC_ENC_HANDLE) count_malloc( sizeof( PARAM_MC_ENC_DATA ) ) ) == NULL ) + if ( ( hParamMC = (PARAM_MC_ENC_HANDLE) malloc( sizeof( PARAM_MC_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Paramtric MC\n" ) ); } @@ -233,7 +233,7 @@ void ivas_param_mc_enc_close( ivas_FB_mixer_close( &hParamMC->hFbMixer, sampling_rate ); - count_free( hParamMC ); + free( hParamMC ); return; } diff --git a/lib_enc/ivas_mcmasa_enc.c b/lib_enc/ivas_mcmasa_enc.c index 92a1950580..c3f50b11c8 100644 --- a/lib_enc/ivas_mcmasa_enc.c +++ b/lib_enc/ivas_mcmasa_enc.c @@ -111,7 +111,7 @@ ivas_error ivas_mcmasa_enc_open( assert( st_ivas->hMasa != NULL && "MASA encoder handle is not present" ); hMasa = st_ivas->hMasa; - if ( NULL == ( hMcMasa = (MCMASA_ENC_HANDLE) count_malloc( sizeof( MCMASA_ENC_DATA ) ) ) ) + if ( NULL == ( hMcMasa = (MCMASA_ENC_HANDLE) malloc( sizeof( MCMASA_ENC_DATA ) ) ) ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); } @@ -204,9 +204,9 @@ ivas_error ivas_mcmasa_enc_open( if ( hMcMasa->separateChannelEnabled ) { /* TD Energy calculation with LP */ - hMcMasa->delay_buffer_lfe[0] = (float *) count_malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ); + hMcMasa->delay_buffer_lfe[0] = (float *) malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ); set_zero( hMcMasa->delay_buffer_lfe[0], NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) ); - hMcMasa->delay_buffer_lfe[1] = (float *) count_malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ); + hMcMasa->delay_buffer_lfe[1] = (float *) malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ); set_zero( hMcMasa->delay_buffer_lfe[1], NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) ); hMcMasa->hFbMixerLfe = NULL; } @@ -236,7 +236,7 @@ ivas_error ivas_mcmasa_enc_open( bufferSize = (int16_t) ( ( input_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES ); for ( i = 0; i < 2; i++ ) { - hMcMasa->lfeAnaRingBuffer[i] = (float *) count_malloc( bufferSize * sizeof( float ) ); + hMcMasa->lfeAnaRingBuffer[i] = (float *) malloc( bufferSize * sizeof( float ) ); set_zero( hMcMasa->lfeAnaRingBuffer[i], bufferSize ); hMcMasa->lowpassSum[i] = 0.0f; } @@ -250,33 +250,33 @@ ivas_error ivas_mcmasa_enc_open( /* intensity 3-dim */ for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) { - hMcMasa->direction_vector_m[i] = (float **) count_malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ); + hMcMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ); for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) { - hMcMasa->direction_vector_m[i][j] = (float *) count_malloc( hMcMasa->nbands * sizeof( float ) ); + hMcMasa->direction_vector_m[i][j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ); } } hMcMasa->no_col_avg_diff = (int8_t) ( DIRAC_NO_COL_AVG_DIFF_NS / dirac_slot_ns ); for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) { - hMcMasa->buffer_intensity_real[i] = (float **) count_malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ); + hMcMasa->buffer_intensity_real[i] = (float **) malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ); for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) { - hMcMasa->buffer_intensity_real[i][j] = (float *) count_malloc( hMcMasa->nbands * sizeof( float ) ); + hMcMasa->buffer_intensity_real[i][j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ); set_zero( hMcMasa->buffer_intensity_real[i][j], hMcMasa->nbands ); } } - hMcMasa->buffer_intensity_real_vert = (float **) count_malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ); + hMcMasa->buffer_intensity_real_vert = (float **) malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ); for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) { - hMcMasa->buffer_intensity_real_vert[j] = (float *) count_malloc( hMcMasa->nbands * sizeof( float ) ); + hMcMasa->buffer_intensity_real_vert[j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ); set_zero( hMcMasa->buffer_intensity_real_vert[j], hMcMasa->nbands ); } - hMcMasa->buffer_energy = (float *) count_malloc( hMcMasa->nbands * hMcMasa->no_col_avg_diff * sizeof( float ) ); + hMcMasa->buffer_energy = (float *) malloc( hMcMasa->nbands * hMcMasa->no_col_avg_diff * sizeof( float ) ); set_zero( hMcMasa->buffer_energy, hMcMasa->nbands * hMcMasa->no_col_avg_diff ); if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1 ) @@ -411,14 +411,14 @@ void ivas_mcmasa_enc_close( if ( hMcMasa->separateChannelEnabled ) { - count_free( hMcMasa->delay_buffer_lfe[0] ); - count_free( hMcMasa->delay_buffer_lfe[1] ); + free( hMcMasa->delay_buffer_lfe[0] ); + free( hMcMasa->delay_buffer_lfe[1] ); } if ( hMcMasa->separateChannelEnabled ) { for ( i = 0; i < 2; i++ ) { - count_free( hMcMasa->lfeAnaRingBuffer[i] ); + free( hMcMasa->lfeAnaRingBuffer[i] ); } } @@ -434,35 +434,35 @@ void ivas_mcmasa_enc_close( { for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) { - count_free( hMcMasa->direction_vector_m[i][j] ); + free( hMcMasa->direction_vector_m[i][j] ); hMcMasa->direction_vector_m[i][j] = NULL; } for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) { - count_free( hMcMasa->buffer_intensity_real[i][j] ); + free( hMcMasa->buffer_intensity_real[i][j] ); hMcMasa->buffer_intensity_real[i][j] = NULL; } - count_free( hMcMasa->buffer_intensity_real[i] ); + free( hMcMasa->buffer_intensity_real[i] ); hMcMasa->buffer_intensity_real[i] = NULL; - count_free( hMcMasa->direction_vector_m[i] ); + free( hMcMasa->direction_vector_m[i] ); hMcMasa->direction_vector_m[i] = NULL; } for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) { - count_free( hMcMasa->buffer_intensity_real_vert[j] ); + free( hMcMasa->buffer_intensity_real_vert[j] ); hMcMasa->buffer_intensity_real_vert[j] = NULL; } - count_free( hMcMasa->buffer_intensity_real_vert ); + free( hMcMasa->buffer_intensity_real_vert ); hMcMasa->buffer_intensity_real_vert = NULL; - count_free( hMcMasa->buffer_energy ); + free( hMcMasa->buffer_energy ); hMcMasa->buffer_energy = NULL; - count_free( hMcMasa ); + free( hMcMasa ); return; } diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index b6b75bec44..414d525ebd 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -178,7 +178,7 @@ ivas_error create_mct_enc( * Allocate MCT handle *-----------------------------------------------------------------*/ - if ( ( hMCT = (MCT_ENC_HANDLE) count_malloc( sizeof( MCT_ENC_DATA ) ) ) == NULL ) + if ( ( hMCT = (MCT_ENC_HANDLE) malloc( sizeof( MCT_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT\n" ) ); } @@ -242,7 +242,7 @@ ivas_error create_mct_enc( { assert( st_ivas->hEncoderConfig->element_mode_init == IVAS_CPE_MDCT && "MCT is not supported for other stereo modes" ); - if ( ( hMCT->hBlockData[n] = (MCT_BLOCK_DATA_HANDLE) count_malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) + if ( ( hMCT->hBlockData[n] = (MCT_BLOCK_DATA_HANDLE) malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); } @@ -256,7 +256,7 @@ ivas_error create_mct_enc( * MDCT stereo initialization *-----------------------------------------------------------------*/ - if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } @@ -407,7 +407,7 @@ ivas_error mct_enc_reconfigure( if ( hMCT->hBlockData[n] == NULL ) { mem_init = 1; - if ( ( hMCT->hBlockData[n] = (MCT_BLOCK_DATA_HANDLE) count_malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) + if ( ( hMCT->hBlockData[n] = (MCT_BLOCK_DATA_HANDLE) malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); } @@ -421,7 +421,7 @@ ivas_error mct_enc_reconfigure( * MDCT stereo initialization *-----------------------------------------------------------------*/ - if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } @@ -441,11 +441,11 @@ ivas_error mct_enc_reconfigure( { if ( hMCT->hBlockData[n]->hStereoMdct != NULL ) { - count_free( hMCT->hBlockData[n]->hStereoMdct ); + free( hMCT->hBlockData[n]->hStereoMdct ); hMCT->hBlockData[n]->hStereoMdct = NULL; } - count_free( hMCT->hBlockData[n] ); + free( hMCT->hBlockData[n] ); hMCT->hBlockData[n] = NULL; } } @@ -492,16 +492,16 @@ void ivas_mct_enc_close( { if ( hMCT->hBlockData[n]->hStereoMdct != NULL ) { - count_free( hMCT->hBlockData[n]->hStereoMdct ); + free( hMCT->hBlockData[n]->hStereoMdct ); hMCT->hBlockData[n]->hStereoMdct = NULL; } - count_free( hMCT->hBlockData[n] ); + free( hMCT->hBlockData[n] ); hMCT->hBlockData[n] = NULL; } } - count_free( hMCT ); + free( hMCT ); return; } diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 32c229eb11..87d3c670f9 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -200,10 +200,10 @@ ivas_error ivas_sba_enc_reinit( for ( i = 0; i < n; i++ ) { - count_free( st_ivas->mem_hp20_in[i] ); + free( st_ivas->mem_hp20_in[i] ); st_ivas->mem_hp20_in[i] = NULL; } - count_free( st_ivas->mem_hp20_in ); + free( st_ivas->mem_hp20_in ); st_ivas->mem_hp20_in = NULL; } @@ -291,7 +291,7 @@ ivas_error ivas_sba_enc_reinit( if ( n > 0 ) { - if ( ( st_ivas->mem_hp20_in = (float **) count_malloc( n * sizeof( float * ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } @@ -303,7 +303,7 @@ ivas_error ivas_sba_enc_reinit( for ( i = 0; i < n; i++ ) { - if ( ( st_ivas->mem_hp20_in[i] = (float *) count_malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + if ( ( st_ivas->mem_hp20_in[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } diff --git a/lib_enc/ivas_sce_enc.c b/lib_enc/ivas_sce_enc.c index b1b332d2f4..6b8a7de67b 100644 --- a/lib_enc/ivas_sce_enc.c +++ b/lib_enc/ivas_sce_enc.c @@ -286,7 +286,7 @@ ivas_error create_sce_enc( * Allocate SCE handle *-----------------------------------------------------------------*/ - if ( ( hSCE = (SCE_ENC_HANDLE) count_malloc( sizeof( SCE_ENC_DATA ) ) ) == NULL ) + if ( ( hSCE = (SCE_ENC_HANDLE) malloc( sizeof( SCE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SCE\n" ) ); } @@ -305,7 +305,7 @@ ivas_error create_sce_enc( if ( st_ivas->hEncoderConfig->ivas_format != MONO_FORMAT ) { - if ( ( hSCE->hMetaData = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + if ( ( hSCE->hMetaData = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MetaData structure\n" ) ); } @@ -319,7 +319,7 @@ ivas_error create_sce_enc( * Core Coder, 1 instance: allocate and initialize *-----------------------------------------------------------------*/ - if ( ( st = (ENC_CORE_HANDLE) count_malloc( sizeof( Encoder_State ) ) ) == NULL ) + if ( ( st = (ENC_CORE_HANDLE) malloc( sizeof( Encoder_State ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); } @@ -364,11 +364,11 @@ void destroy_sce_enc( if ( hSCE->hMetaData != NULL ) { - count_free( hSCE->hMetaData ); + free( hSCE->hMetaData ); hSCE->hMetaData = NULL; } - count_free( hSCE ); + free( hSCE ); return; } diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 9bd3732c3d..1d43d8eeb9 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -73,7 +73,7 @@ ivas_error ivas_spar_enc_open( error = IVAS_ERR_OK; /* SPAR encoder handle */ - if ( ( hSpar = (SPAR_ENC_HANDLE) count_malloc( sizeof( SPAR_ENC_DATA ) ) ) == NULL ) + if ( ( hSpar = (SPAR_ENC_HANDLE) malloc( sizeof( SPAR_ENC_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR encoder" ); } @@ -138,7 +138,7 @@ ivas_error ivas_spar_enc_open( hSpar->hPCA = NULL; if ( hEncoderConfig->Opt_PCA_ON ) { - if ( ( hSpar->hPCA = (PCA_ENC_STATE *) count_malloc( sizeof( PCA_ENC_STATE ) ) ) == NULL ) + if ( ( hSpar->hPCA = (PCA_ENC_STATE *) malloc( sizeof( PCA_ENC_STATE ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR PCA encoder" ); } @@ -179,7 +179,7 @@ ivas_error ivas_spar_enc_open( return error; } - if ( ( hSpar->hCoreCoderVAD = (ENC_CORE_HANDLE) count_malloc( sizeof( Encoder_State ) ) ) == NULL ) + if ( ( hSpar->hCoreCoderVAD = (ENC_CORE_HANDLE) malloc( sizeof( Encoder_State ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); } @@ -260,11 +260,11 @@ void ivas_spar_enc_close( /* PCA */ if ( hSpar->hPCA != NULL ) { - count_free( hSpar->hPCA ); + free( hSpar->hPCA ); hSpar->hPCA = NULL; } - count_free( hSpar ); + free( hSpar ); hSpar = NULL; } diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 775a61228e..9faf183682 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -117,87 +117,87 @@ ivas_error ivas_spar_md_enc_open( error = IVAS_ERR_OK; - if ( ( hMdEnc = (ivas_spar_md_enc_state_t *) count_malloc( sizeof( ivas_spar_md_enc_state_t ) ) ) == NULL ) + if ( ( hMdEnc = (ivas_spar_md_enc_state_t *) malloc( sizeof( ivas_spar_md_enc_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD encoder" ); } num_channels = ivas_sba_get_nchan_metadata( sba_order ); - if ( ( hMdEnc->spar_md.band_coeffs = (ivas_band_coeffs_t *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) + if ( ( hMdEnc->spar_md.band_coeffs = (ivas_band_coeffs_t *) malloc( IVAS_MAX_NUM_BANDS * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for band_coeffs in SPAR MD" ); } - if ( ( hMdEnc->mixer_mat = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdEnc->mixer_mat = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdEnc->mixer_mat[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdEnc->mixer_mat[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdEnc->mixer_mat[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdEnc->mixer_mat[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } } } - if ( ( hMdEnc->cov_real = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdEnc->cov_real = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdEnc->cov_real[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdEnc->cov_real[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdEnc->cov_real[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdEnc->cov_real[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); } } } - if ( ( hMdEnc->cov_dtx_real = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdEnc->cov_dtx_real = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdEnc->cov_dtx_real[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdEnc->cov_dtx_real[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdEnc->cov_dtx_real[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdEnc->cov_dtx_real[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); } } } - if ( ( hMdEnc->mixer_mat_local = (float ***) count_malloc( num_channels * sizeof( float ** ) ) ) == NULL ) + if ( ( hMdEnc->mixer_mat_local = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( i = 0; i < num_channels; i++ ) { - if ( ( hMdEnc->mixer_mat_local[i] = (float **) count_malloc( num_channels * sizeof( float * ) ) ) == NULL ) + if ( ( hMdEnc->mixer_mat_local[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } for ( j = 0; j < num_channels; j++ ) { - if ( ( hMdEnc->mixer_mat_local[i][j] = (float *) count_malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) + if ( ( hMdEnc->mixer_mat_local[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); } @@ -233,7 +233,7 @@ void ivas_spar_md_enc_close( if ( hMdEnc->spar_md.band_coeffs != NULL ) { - count_free( hMdEnc->spar_md.band_coeffs ); + free( hMdEnc->spar_md.band_coeffs ); hMdEnc->spar_md.band_coeffs = NULL; } if ( hMdEnc->mixer_mat != NULL ) @@ -242,11 +242,11 @@ void ivas_spar_md_enc_close( { for ( j = 0; j < num_channels; j++ ) { - count_free( hMdEnc->mixer_mat[i][j] ); + free( hMdEnc->mixer_mat[i][j] ); } - count_free( hMdEnc->mixer_mat[i] ); + free( hMdEnc->mixer_mat[i] ); } - count_free( hMdEnc->mixer_mat ); + free( hMdEnc->mixer_mat ); } if ( hMdEnc->cov_real != NULL ) @@ -256,11 +256,11 @@ void ivas_spar_md_enc_close( for ( j = 0; j < num_channels; j++ ) { - count_free( hMdEnc->cov_real[i][j] ); + free( hMdEnc->cov_real[i][j] ); } - count_free( hMdEnc->cov_real[i] ); + free( hMdEnc->cov_real[i] ); } - count_free( hMdEnc->cov_real ); + free( hMdEnc->cov_real ); } if ( hMdEnc->cov_dtx_real != NULL ) @@ -270,11 +270,11 @@ void ivas_spar_md_enc_close( for ( j = 0; j < num_channels; j++ ) { - count_free( hMdEnc->cov_dtx_real[i][j] ); + free( hMdEnc->cov_dtx_real[i][j] ); } - count_free( hMdEnc->cov_dtx_real[i] ); + free( hMdEnc->cov_dtx_real[i] ); } - count_free( hMdEnc->cov_dtx_real ); + free( hMdEnc->cov_dtx_real ); } if ( hMdEnc->mixer_mat_local != NULL ) @@ -284,16 +284,16 @@ void ivas_spar_md_enc_close( for ( j = 0; j < num_channels; j++ ) { - count_free( hMdEnc->mixer_mat_local[i][j] ); + free( hMdEnc->mixer_mat_local[i][j] ); } - count_free( hMdEnc->mixer_mat_local[i] ); + free( hMdEnc->mixer_mat_local[i] ); } - count_free( hMdEnc->mixer_mat_local ); + free( hMdEnc->mixer_mat_local ); } if ( hMdEnc != NULL ) { - count_free( hMdEnc ); + free( hMdEnc ); hMdEnc = NULL; } diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c index ff49c3d789..ea83d6e3f7 100644 --- a/lib_enc/ivas_stereo_dft_enc.c +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -269,17 +269,17 @@ ivas_error stereo_dft_enc_create( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: DFT Stereo memory already allocated\n" ); } - if ( ( hStereoDft_loc = (STEREO_DFT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_ENC_DATA ) ) ) == NULL ) + if ( ( hStereoDft_loc = (STEREO_DFT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_DFT_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo\n" ) ); } - if ( ( hStereoDft_loc->hConfig = (STEREO_DFT_CONFIG_DATA_HANDLE) count_malloc( sizeof( STEREO_DFT_CONFIG_DATA ) ) ) == NULL ) + if ( ( hStereoDft_loc->hConfig = (STEREO_DFT_CONFIG_DATA_HANDLE) malloc( sizeof( STEREO_DFT_CONFIG_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo Config\n" ) ); } - if ( ( hStereoDft_loc->hItd = (ITD_DATA_HANDLE) count_malloc( sizeof( ITD_DATA ) ) ) == NULL ) + if ( ( hStereoDft_loc->hItd = (ITD_DATA_HANDLE) malloc( sizeof( ITD_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); } @@ -695,17 +695,17 @@ void stereo_dft_enc_destroy( { if ( ( *hStereoDft )->hConfig != NULL ) { - count_free( ( *hStereoDft )->hConfig ); + free( ( *hStereoDft )->hConfig ); ( *hStereoDft )->hConfig = NULL; } if ( ( *hStereoDft )->hItd != NULL ) { - count_free( ( *hStereoDft )->hItd ); + free( ( *hStereoDft )->hItd ); ( *hStereoDft )->hItd = NULL; } - count_free( *hStereoDft ); + free( *hStereoDft ); *hStereoDft = NULL; return; diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index 8ce8cdbd09..c1aee73883 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -755,7 +755,7 @@ ivas_error stereo_dmx_evs_init_encoder( input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); hStereoDmxEVS = NULL; - if ( ( hStereoDmxEVS = (STEREO_DMX_EVS_ENC_HANDLE) count_malloc( sizeof( STEREO_DMX_EVS_ENC_DATA ) ) ) == NULL ) + if ( ( hStereoDmxEVS = (STEREO_DMX_EVS_ENC_HANDLE) malloc( sizeof( STEREO_DMX_EVS_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_ENC_DATA\n" ) ); } @@ -789,7 +789,7 @@ ivas_error stereo_dmx_evs_init_encoder( } hStereoDmxEVS->hPOC = NULL; - if ( ( hStereoDmxEVS->hPOC = (STEREO_DMX_EVS_POC_HANDLE) count_malloc( sizeof( STEREO_DMX_EVS_POC_DATA ) ) ) == NULL ) + if ( ( hStereoDmxEVS->hPOC = (STEREO_DMX_EVS_POC_HANDLE) malloc( sizeof( STEREO_DMX_EVS_POC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_POC_DATA\n" ) ); } @@ -859,11 +859,11 @@ void stereo_dmx_evs_close_encoder( { if ( hStereoDmxEVS->hPOC != NULL ) { - count_free( hStereoDmxEVS->hPOC ); + free( hStereoDmxEVS->hPOC ); hStereoDmxEVS->hPOC = NULL; } - count_free( hStereoDmxEVS ); + free( hStereoDmxEVS ); return; } diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c index 28bb061548..a8bcc5e50a 100644 --- a/lib_enc/ivas_stereo_mdct_stereo_enc.c +++ b/lib_enc/ivas_stereo_mdct_stereo_enc.c @@ -1161,13 +1161,13 @@ void initMdctStereoEncData( { if ( hStereoMdct->hDft_ana != NULL ) { - count_free( hStereoMdct->hDft_ana ); + free( hStereoMdct->hDft_ana ); hStereoMdct->hDft_ana = NULL; } if ( hStereoMdct->hItd != NULL ) { - count_free( hStereoMdct->hItd ); + free( hStereoMdct->hItd ); hStereoMdct->hItd = NULL; } } @@ -1188,7 +1188,7 @@ ivas_error initMdctItdHandling( { if ( hStereoMdct->hItd == NULL ) { - if ( ( hStereoMdct->hItd = (ITD_DATA_HANDLE) count_malloc( sizeof( ITD_DATA ) ) ) == NULL ) + if ( ( hStereoMdct->hItd = (ITD_DATA_HANDLE) malloc( sizeof( ITD_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); } @@ -1196,7 +1196,7 @@ ivas_error initMdctItdHandling( if ( hStereoMdct->hDft_ana == NULL ) { - if ( ( hStereoMdct->hDft_ana = (DFT_ANA_HANDLE) count_malloc( sizeof( DFT_ANA ) ) ) == NULL ) + if ( ( hStereoMdct->hDft_ana = (DFT_ANA_HANDLE) malloc( sizeof( DFT_ANA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); } @@ -1223,17 +1223,17 @@ void stereo_mdct_enc_destroy( { if ( ( *hStereoMdct )->hDft_ana != NULL ) { - count_free( ( *hStereoMdct )->hDft_ana ); + free( ( *hStereoMdct )->hDft_ana ); ( *hStereoMdct )->hDft_ana = NULL; } if ( ( *hStereoMdct )->hItd != NULL ) { - count_free( ( *hStereoMdct )->hItd ); + free( ( *hStereoMdct )->hItd ); ( *hStereoMdct )->hItd = NULL; } - count_free( *hStereoMdct ); + free( *hStereoMdct ); *hStereoMdct = NULL; return; diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c index c618e4a3c7..c7b31d247b 100644 --- a/lib_enc/ivas_stereo_switching_enc.c +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -55,7 +55,7 @@ static ivas_error allocate_CoreCoder_enc( { if ( st->hLPDmem == NULL && st->element_mode != IVAS_CPE_MDCT ) { - if ( ( st->hLPDmem = (LPD_state_HANDLE) count_malloc( sizeof( LPD_state ) ) ) == NULL ) + if ( ( st->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) ); } @@ -64,7 +64,7 @@ static ivas_error allocate_CoreCoder_enc( if ( st->hGSCEnc == NULL && st->element_mode != IVAS_CPE_MDCT ) { - if ( ( st->hGSCEnc = (GSC_ENC_HANDLE) count_malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) + if ( ( st->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); } @@ -73,7 +73,7 @@ static ivas_error allocate_CoreCoder_enc( if ( st->hNoiseEst == NULL ) { - if ( ( st->hNoiseEst = (NOISE_EST_HANDLE) count_malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) + if ( ( st->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ) ); } @@ -82,7 +82,7 @@ static ivas_error allocate_CoreCoder_enc( if ( st->hVAD == NULL ) { - if ( ( st->hVAD = (VAD_HANDLE) count_malloc( sizeof( VAD_DATA ) ) ) == NULL ) + if ( ( st->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); } @@ -91,7 +91,7 @@ static ivas_error allocate_CoreCoder_enc( if ( st->hSpMusClas == NULL ) { - if ( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) count_malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) + if ( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); } @@ -114,25 +114,25 @@ static void deallocate_CoreCoder_TCX_enc( { if ( st->hTcxEnc != NULL ) { - count_free( st->hTcxEnc ); + free( st->hTcxEnc ); st->hTcxEnc = NULL; } if ( st->hTcxCfg != NULL ) { - count_free( st->hTcxCfg ); + free( st->hTcxCfg ); st->hTcxCfg = NULL; } if ( st->hIGFEnc != NULL ) { - count_free( st->hIGFEnc ); + free( st->hIGFEnc ); st->hIGFEnc = NULL; } if ( st->hHQ_core != NULL ) { - count_free( st->hHQ_core ); + free( st->hHQ_core ); st->hHQ_core = NULL; } @@ -152,31 +152,31 @@ static void deallocate_CoreCoder_enc( { if ( st->hLPDmem != NULL ) { - count_free( st->hLPDmem ); + free( st->hLPDmem ); st->hLPDmem = NULL; } if ( st->hGSCEnc != NULL ) { - count_free( st->hGSCEnc ); + free( st->hGSCEnc ); st->hGSCEnc = NULL; } if ( st->hNoiseEst != NULL && st->element_mode != IVAS_CPE_MDCT ) { - count_free( st->hNoiseEst ); + free( st->hNoiseEst ); st->hNoiseEst = NULL; } if ( st->hVAD != NULL && st->element_mode != IVAS_CPE_MDCT ) { - count_free( st->hVAD ); + free( st->hVAD ); st->hVAD = NULL; } if ( st->hSpMusClas != NULL && st->element_mode != IVAS_CPE_MDCT ) { - count_free( st->hSpMusClas ); + free( st->hSpMusClas ); st->hSpMusClas = NULL; } @@ -187,7 +187,7 @@ static void deallocate_CoreCoder_enc( if ( st->hBWE_TD != NULL ) { - count_free( st->hBWE_TD ); + free( st->hBWE_TD ); st->hBWE_TD = NULL; } @@ -198,7 +198,7 @@ static void deallocate_CoreCoder_enc( if ( st->hBWE_FD != NULL ) { - count_free( st->hBWE_FD ); + free( st->hBWE_FD ); st->hBWE_FD = NULL; } @@ -261,7 +261,7 @@ ivas_error stereo_memory_enc( /* deallocate data structure of the previous CPE mode */ if ( hCPE->hStereoTD != NULL ) { - count_free( hCPE->hStereoTD ); + free( hCPE->hStereoTD ); hCPE->hStereoTD = NULL; } @@ -283,7 +283,7 @@ ivas_error stereo_memory_enc( /* allocate ICBWE structure */ if ( hCPE->hStereoICBWE == NULL ) { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } @@ -295,7 +295,7 @@ ivas_error stereo_memory_enc( st = hCPE->hCoreCoder[0]; if ( st->hHQ_core == NULL ) { - if ( ( st->hHQ_core = (HQ_ENC_HANDLE) count_malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) + if ( ( st->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); } @@ -332,7 +332,7 @@ ivas_error stereo_memory_enc( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TD Stereo memory already allocated\n" ); } - if ( ( hCPE->hStereoTD = (STEREO_TD_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_TD_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTD = (STEREO_TD_ENC_DATA_HANDLE) malloc( sizeof( STEREO_TD_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); } @@ -360,7 +360,7 @@ ivas_error stereo_memory_enc( { if ( hCPE->hCoreCoder[1]->hDtxEnc != NULL ) { - count_free( hCPE->hCoreCoder[1]->hDtxEnc ); + free( hCPE->hCoreCoder[1]->hDtxEnc ); hCPE->hCoreCoder[1]->hDtxEnc = NULL; } @@ -372,7 +372,7 @@ ivas_error stereo_memory_enc( if ( hCPE->hCoreCoder[0]->Opt_DTX_ON && hCPE->hCoreCoder[0]->hTdCngEnc == NULL ) { - if ( ( hCPE->hCoreCoder[0]->hTdCngEnc = (TD_CNG_ENC_HANDLE) count_malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hCoreCoder[0]->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); } @@ -386,7 +386,7 @@ ivas_error stereo_memory_enc( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TCA Stereo memory already allocated\n" ); } - if ( ( hCPE->hStereoTCA = (STEREO_TCA_ENC_HANDLE) count_malloc( sizeof( STEREO_TCA_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoTCA = (STEREO_TCA_ENC_HANDLE) malloc( sizeof( STEREO_TCA_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); } @@ -413,7 +413,7 @@ ivas_error stereo_memory_enc( /* allocate BWEs for primary channel */ if ( st->hBWE_TD == NULL ) { - if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) count_malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); } @@ -429,7 +429,7 @@ ivas_error stereo_memory_enc( InitSWBencBuffer( st->hBWE_TD ); ResetSHBbuffer_Enc( st->hBWE_TD ); - if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) count_malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); } @@ -440,7 +440,7 @@ ivas_error stereo_memory_enc( /* allocate stereo CNG structure */ if ( hCPE->hStereoCng == NULL ) { - if ( ( hCPE->hStereoCng = (STEREO_CNG_ENC_HANDLE) count_malloc( sizeof( STEREO_CNG_ENC ) ) ) == NULL ) + if ( ( hCPE->hStereoCng = (STEREO_CNG_ENC_HANDLE) malloc( sizeof( STEREO_CNG_ENC ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo Cng for Unified/TD\n" ) ); } @@ -466,19 +466,19 @@ ivas_error stereo_memory_enc( if ( hCPE->hStereoTD != NULL ) { - count_free( hCPE->hStereoTD ); + free( hCPE->hStereoTD ); hCPE->hStereoTD = NULL; } if ( hCPE->hStereoTCA != NULL ) { - count_free( hCPE->hStereoTCA ); + free( hCPE->hStereoTCA ); hCPE->hStereoTCA = NULL; } if ( hCPE->hStereoICBWE != NULL ) { - count_free( hCPE->hStereoICBWE ); + free( hCPE->hStereoICBWE ); hCPE->hStereoICBWE = NULL; } @@ -500,7 +500,7 @@ ivas_error stereo_memory_enc( /* allocate TCX/IGF structures for second channel */ st = hCPE->hCoreCoder[1]; - if ( ( st->hTcxEnc = (TCX_ENC_HANDLE) count_malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) + if ( ( st->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) ); } @@ -515,19 +515,19 @@ ivas_error stereo_memory_enc( st->last_core = ACELP_CORE; /* needed to set-up TCX core in SetTCXModeInfo() */ } - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); } - if ( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) count_malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) + if ( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); } st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode, st->mct_chan_mode ); /* allocate and initialize MDCT stereo structure */ - if ( ( hCPE->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) count_malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); } @@ -562,7 +562,7 @@ ivas_error stereo_memory_enc( if ( st->hDtxEnc == NULL ) { - if ( ( st->hDtxEnc = (DTX_ENC_HANDLE) count_malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) + if ( ( st->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) ); } @@ -571,7 +571,7 @@ ivas_error stereo_memory_enc( if ( st->hTdCngEnc != NULL ) { - count_free( st->hTdCngEnc ); + free( st->hTdCngEnc ); st->hTdCngEnc = NULL; } diff --git a/lib_enc/ivas_stereo_td_enc.c b/lib_enc/ivas_stereo_td_enc.c index 4874ba47b0..afd22f8c6c 100644 --- a/lib_enc/ivas_stereo_td_enc.c +++ b/lib_enc/ivas_stereo_td_enc.c @@ -190,7 +190,7 @@ ivas_error stereo_set_tdm( { if ( st->hBWE_TD != NULL ) { - count_free( st->hBWE_TD ); + free( st->hBWE_TD ); st->hBWE_TD = NULL; } @@ -198,7 +198,7 @@ ivas_error stereo_set_tdm( if ( st->hBWE_FD != NULL ) { - count_free( st->hBWE_FD ); + free( st->hBWE_FD ); st->hBWE_FD = NULL; } } @@ -206,7 +206,7 @@ ivas_error stereo_set_tdm( /* allocate ICBWE structure */ if ( hCPE->hStereoICBWE == NULL ) { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) count_malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) + if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } @@ -222,7 +222,7 @@ ivas_error stereo_set_tdm( /* deallocate ICBWE structure */ if ( hCPE->hStereoICBWE != NULL ) { - count_free( hCPE->hStereoICBWE ); + free( hCPE->hStereoICBWE ); hCPE->hStereoICBWE = NULL; } @@ -238,7 +238,7 @@ ivas_error stereo_set_tdm( /* allocate BWEs for secondary channel */ if ( st->hBWE_TD == NULL ) { - if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) count_malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); } @@ -251,7 +251,7 @@ ivas_error stereo_set_tdm( InitSWBencBuffer( st->hBWE_TD ); ResetSHBbuffer_Enc( st->hBWE_TD ); - if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) count_malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) + if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); } diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index d828335a95..44e69a9f86 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -116,7 +116,7 @@ ivas_error IVAS_ENC_Open( #ifdef BITSTREAM_INDICES_MEMORY if ( ( *phIvasEnc = (IVAS_ENC_HANDLE) dynamic_malloc( sizeof( struct IVAS_ENC ) ) ) == NULL ) #else - if ( ( *phIvasEnc = (IVAS_ENC_HANDLE) count_malloc( sizeof( struct IVAS_ENC ) ) ) == NULL ) + if ( ( *phIvasEnc = (IVAS_ENC_HANDLE) malloc( sizeof( struct IVAS_ENC ) ) ) == NULL ) #endif { return IVAS_ERR_FAILED_ALLOC; @@ -157,12 +157,12 @@ ivas_error IVAS_ENC_Open( * Allocate IVAS-codec encoder state *-----------------------------------------------------------------*/ - if ( ( ( *phIvasEnc )->st_ivas = (Encoder_Struct *) count_malloc( sizeof( Encoder_Struct ) ) ) == NULL ) + if ( ( ( *phIvasEnc )->st_ivas = (Encoder_Struct *) malloc( sizeof( Encoder_Struct ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IVAS encoder structure" ); } - if ( ( ( *phIvasEnc )->st_ivas->hEncoderConfig = (ENCODER_CONFIG_HANDLE) count_malloc( sizeof( ENCODER_CONFIG ) ) ) == NULL ) + if ( ( ( *phIvasEnc )->st_ivas->hEncoderConfig = (ENCODER_CONFIG_HANDLE) malloc( sizeof( ENCODER_CONFIG ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Encoder config structure" ); } @@ -213,10 +213,10 @@ void IVAS_ENC_Close( { if ( ( *phIvasEnc )->st_ivas->hEncoderConfig ) { - count_free( ( *phIvasEnc )->st_ivas->hEncoderConfig ); + free( ( *phIvasEnc )->st_ivas->hEncoderConfig ); ( *phIvasEnc )->st_ivas->hEncoderConfig = NULL; } - count_free( ( *phIvasEnc )->st_ivas ); + free( ( *phIvasEnc )->st_ivas ); } ( *phIvasEnc )->st_ivas = NULL; @@ -224,7 +224,7 @@ void IVAS_ENC_Close( #ifdef BITSTREAM_INDICES_MEMORY dynamic_free( *phIvasEnc ); #else - count_free( *phIvasEnc ); + free( *phIvasEnc ); #endif *phIvasEnc = NULL; diff --git a/lib_enc/ppp_enc.c b/lib_enc/ppp_enc.c index 26a0c99ab1..0ce8ecacf3 100644 --- a/lib_enc/ppp_enc.c +++ b/lib_enc/ppp_enc.c @@ -355,7 +355,7 @@ ivas_error ppp_quarter_encoder( push_indice( hBstr, IND_GLOBAL_ALIGNMENT, (int16_t) ( tmp + 3 ), 3 ); - count_free( PREVDTFS ); + free( PREVDTFS ); return error; } diff --git a/lib_enc/voiced_enc.c b/lib_enc/voiced_enc.c index 9b0a1f4bfc..d128b17001 100644 --- a/lib_enc/voiced_enc.c +++ b/lib_enc/voiced_enc.c @@ -554,12 +554,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -580,12 +580,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -607,12 +607,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -748,12 +748,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -779,12 +779,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -800,12 +800,12 @@ ivas_error ppp_voiced_encoder( if ( hSC_VBR->bump_up == 1 ) { - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -815,12 +815,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -834,12 +834,12 @@ ivas_error ppp_voiced_encoder( { if ( ( error = ppp_quarter_encoder( &flag, hBstr, CURRP_Q_E, TMPDTFS, dtfs_temp->lag, *CURRP_NQ, lpc2, &( hSC_VBR->lastLgainE ), &( hSC_VBR->lastHgainE ), &( hSC_VBR->lasterbE[0] ), *dtfs_temp ) ) != IVAS_ERR_OK ) { - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } } @@ -1025,12 +1025,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -1045,12 +1045,12 @@ ivas_error ppp_voiced_encoder( PPP_MODE_E = 'B'; hSC_VBR->bump_up = 1; - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } @@ -1082,12 +1082,12 @@ ivas_error ppp_voiced_encoder( mvr2r( dtfs_temp->a, hSC_VBR->dtfs_enc_a, MAXLAG_WI ); mvr2r( dtfs_temp->b, hSC_VBR->dtfs_enc_b, MAXLAG_WI ); - count_free( CURRP_NQ ); - count_free( TMPDTFS ); - count_free( TMPDTFS2 ); - count_free( TMPDTFS3 ); - count_free( CURRP_Q_E ); - count_free( dtfs_temp ); + free( CURRP_NQ ); + free( TMPDTFS ); + free( TMPDTFS2 ); + free( TMPDTFS3 ); + free( CURRP_Q_E ); + free( dtfs_temp ); return error; } diff --git a/lib_rend/ivas_allrad_dec.c b/lib_rend/ivas_allrad_dec.c index a25e708c35..b304208441 100644 --- a/lib_rend/ivas_allrad_dec.c +++ b/lib_rend/ivas_allrad_dec.c @@ -108,7 +108,7 @@ ivas_error ivas_sba_get_hoa_dec_matrix( /* Allocate memory */ assert( *hoa_dec_mtx == NULL && "hoa_dec_mtx != NULL" ); - if ( ( *hoa_dec_mtx = (float *) count_malloc( SBA_NHARM_HOA3 * ( hOutSetup.nchan_out_woLFE ) * sizeof( float ) ) ) == NULL ) + if ( ( *hoa_dec_mtx = (float *) malloc( SBA_NHARM_HOA3 * ( hOutSetup.nchan_out_woLFE ) * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "ALLRAD: Cannot allocate memory!" ) ); } diff --git a/lib_rend/ivas_binauralRenderer.c b/lib_rend/ivas_binauralRenderer.c index 906bc22945..a3b79c79e0 100644 --- a/lib_rend/ivas_binauralRenderer.c +++ b/lib_rend/ivas_binauralRenderer.c @@ -133,7 +133,7 @@ static ivas_error ivas_binRenderer_convModuleOpen( * prepare library opening *-----------------------------------------------------------------*/ - if ( ( hBinRenConvModule = (BINRENDERER_CONV_MODULE_HANDLE) count_malloc( sizeof( BINRENDERER_CONV_MODULE ) ) ) == NULL ) + if ( ( hBinRenConvModule = (BINRENDERER_CONV_MODULE_HANDLE) malloc( sizeof( BINRENDERER_CONV_MODULE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } @@ -187,79 +187,79 @@ static ivas_error ivas_binRenderer_convModuleOpen( } /* allocate memory for filter states */ - if ( ( hBinRenConvModule->filterTapsLeftReal = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterTapsLeftReal = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - if ( ( hBinRenConvModule->filterTapsLeftImag = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterTapsLeftImag = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - if ( ( hBinRenConvModule->filterTapsRightReal = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterTapsRightReal = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - if ( ( hBinRenConvModule->filterTapsRightImag = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterTapsRightImag = (float ***) 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->filterTapsLeftReal[bandIdx] = (float **) count_malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterTapsLeftReal[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - if ( ( hBinRenConvModule->filterTapsLeftImag[bandIdx] = (float **) count_malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterTapsLeftImag[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - if ( ( hBinRenConvModule->filterTapsRightReal[bandIdx] = (float **) count_malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterTapsRightReal[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - if ( ( hBinRenConvModule->filterTapsRightImag[bandIdx] = (float **) count_malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterTapsRightImag[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } } - if ( ( hBinRenConvModule->filterStatesLeftReal = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterStatesLeftReal = (float ***) 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 = (float ***) count_malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterStatesLeftImag = (float ***) 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[bandIdx] = (float **) count_malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterStatesLeftReal[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } - if ( ( hBinRenConvModule->filterStatesLeftImag[bandIdx] = (float **) count_malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterStatesLeftImag[bandIdx] = (float **) 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[bandIdx][chIdx] = (float *) count_malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( float ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx] = (float *) 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[bandIdx][chIdx] = (float *) count_malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( float ) ) ) == NULL ) + if ( ( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx] = (float *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } @@ -495,7 +495,7 @@ ivas_error ivas_binRenderer_open( * prepare library opening *-----------------------------------------------------------------*/ - if ( ( hBinRenderer = (BINAURAL_RENDERER_HANDLE) count_malloc( sizeof( BINAURAL_RENDERER ) ) ) == NULL ) + if ( ( hBinRenderer = (BINAURAL_RENDERER_HANDLE) malloc( sizeof( BINAURAL_RENDERER ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Renderer\n" ) ); } @@ -651,29 +651,29 @@ static void ivas_binRenderer_convModuleClose( for ( bandIdx = 0; bandIdx < ( *hBinRenderer )->conv_band; bandIdx++ ) { - count_free( hBinRenConvModule->filterTapsLeftReal[bandIdx] ); + free( hBinRenConvModule->filterTapsLeftReal[bandIdx] ); hBinRenConvModule->filterTapsLeftReal[bandIdx] = NULL; - count_free( hBinRenConvModule->filterTapsLeftImag[bandIdx] ); + free( hBinRenConvModule->filterTapsLeftImag[bandIdx] ); hBinRenConvModule->filterTapsLeftImag[bandIdx] = NULL; - count_free( hBinRenConvModule->filterTapsRightReal[bandIdx] ); + free( hBinRenConvModule->filterTapsRightReal[bandIdx] ); hBinRenConvModule->filterTapsRightReal[bandIdx] = NULL; - count_free( hBinRenConvModule->filterTapsRightImag[bandIdx] ); + free( hBinRenConvModule->filterTapsRightImag[bandIdx] ); hBinRenConvModule->filterTapsRightImag[bandIdx] = NULL; } - count_free( hBinRenConvModule->filterTapsLeftReal ); + free( hBinRenConvModule->filterTapsLeftReal ); hBinRenConvModule->filterTapsLeftReal = NULL; - count_free( hBinRenConvModule->filterTapsLeftImag ); + free( hBinRenConvModule->filterTapsLeftImag ); hBinRenConvModule->filterTapsLeftImag = NULL; - count_free( hBinRenConvModule->filterTapsRightReal ); + free( hBinRenConvModule->filterTapsRightReal ); hBinRenConvModule->filterTapsRightReal = NULL; - count_free( hBinRenConvModule->filterTapsRightImag ); + free( hBinRenConvModule->filterTapsRightImag ); hBinRenConvModule->filterTapsRightImag = NULL; @@ -681,28 +681,28 @@ static void ivas_binRenderer_convModuleClose( { for ( chIdx = 0; chIdx < ( *hBinRenderer )->nInChannels; chIdx++ ) { - count_free( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx] ); + free( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx] ); hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx] = NULL; - count_free( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx] ); + free( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx] ); hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx] = NULL; } - count_free( hBinRenConvModule->filterStatesLeftReal[bandIdx] ); + free( hBinRenConvModule->filterStatesLeftReal[bandIdx] ); hBinRenConvModule->filterStatesLeftReal[bandIdx] = NULL; - count_free( hBinRenConvModule->filterStatesLeftImag[bandIdx] ); + free( hBinRenConvModule->filterStatesLeftImag[bandIdx] ); hBinRenConvModule->filterStatesLeftImag[bandIdx] = NULL; } - count_free( hBinRenConvModule->filterStatesLeftReal ); + free( hBinRenConvModule->filterStatesLeftReal ); hBinRenConvModule->filterStatesLeftReal = NULL; - count_free( hBinRenConvModule->filterStatesLeftImag ); + free( hBinRenConvModule->filterStatesLeftImag ); hBinRenConvModule->filterStatesLeftImag = NULL; - count_free( ( *hBinRenderer )->hBinRenConvModule ); + free( ( *hBinRenderer )->hBinRenConvModule ); ( *hBinRenderer )->hBinRenConvModule = NULL; return; @@ -734,7 +734,7 @@ void ivas_binRenderer_close( ivas_binaural_reverb_close( &( ( *hBinRenderer )->hReverb ) ); } - count_free( *hBinRenderer ); + free( *hBinRenderer ); *hBinRenderer = NULL; return; diff --git a/lib_rend/ivas_binaural_reverb.c b/lib_rend/ivas_binaural_reverb.c index 9104d37f7a..6c236d8e50 100644 --- a/lib_rend/ivas_binaural_reverb.c +++ b/lib_rend/ivas_binaural_reverb.c @@ -384,7 +384,7 @@ ivas_error ivas_binaural_reverb_open( float t60[CLDFB_NO_CHANNELS_MAX]; float ene[CLDFB_NO_CHANNELS_MAX]; - if ( ( *hReverbPr = (REVERB_STRUCT_HANDLE) count_malloc( sizeof( REVERB_STRUCT ) ) ) == NULL ) + if ( ( *hReverbPr = (REVERB_STRUCT_HANDLE) malloc( sizeof( REVERB_STRUCT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); } @@ -426,12 +426,12 @@ ivas_error ivas_binaural_reverb_open( hReverb->loopBufLengthMax[bin] = (int16_t) ( 500 / ( 1 + bin ) + ( CLDFB_NO_CHANNELS_MAX - bin ) ); len = hReverb->loopBufLengthMax[bin] + hReverb->blockSize; - if ( ( hReverb->loopBufReal[bin] = (float *) count_malloc( len * sizeof( float ) ) ) == NULL ) + if ( ( hReverb->loopBufReal[bin] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); } - if ( ( hReverb->loopBufImag[bin] = (float *) count_malloc( len * sizeof( float ) ) ) == NULL ) + if ( ( hReverb->loopBufImag[bin] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); } @@ -450,29 +450,29 @@ ivas_error ivas_binaural_reverb_open( { len = hReverb->loopBufLength[bin]; - if ( ( hReverb->tapPhaseShiftType[bin][chIdx] = (int16_t *) count_malloc( len * sizeof( int16_t ) ) ) == NULL ) + if ( ( hReverb->tapPhaseShiftType[bin][chIdx] = (int16_t *) malloc( len * sizeof( int16_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); } set_s( hReverb->tapPhaseShiftType[bin][chIdx], 0, len ); - if ( ( hReverb->tapPointersReal[bin][chIdx] = (float **) count_malloc( len * sizeof( float * ) ) ) == NULL ) + if ( ( hReverb->tapPointersReal[bin][chIdx] = (float **) malloc( len * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); } - if ( ( hReverb->tapPointersImag[bin][chIdx] = (float **) count_malloc( len * sizeof( float * ) ) ) == NULL ) + if ( ( hReverb->tapPointersImag[bin][chIdx] = (float **) malloc( len * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); } len = hReverb->blockSize; - if ( ( hReverb->outputBufferReal[bin][chIdx] = (float *) count_malloc( len * sizeof( float ) ) ) == NULL ) + if ( ( hReverb->outputBufferReal[bin][chIdx] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); } - if ( ( hReverb->outputBufferImag[bin][chIdx] = (float *) count_malloc( len * sizeof( float ) ) ) == NULL ) + if ( ( hReverb->outputBufferImag[bin][chIdx] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); } @@ -527,17 +527,17 @@ void ivas_binaural_reverb_close( { for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) { - count_free( ( *hReverb )->tapPhaseShiftType[bin][chIdx] ); - count_free( ( *hReverb )->tapPointersReal[bin][chIdx] ); - count_free( ( *hReverb )->tapPointersImag[bin][chIdx] ); - count_free( ( *hReverb )->outputBufferReal[bin][chIdx] ); - count_free( ( *hReverb )->outputBufferImag[bin][chIdx] ); + free( ( *hReverb )->tapPhaseShiftType[bin][chIdx] ); + free( ( *hReverb )->tapPointersReal[bin][chIdx] ); + free( ( *hReverb )->tapPointersImag[bin][chIdx] ); + free( ( *hReverb )->outputBufferReal[bin][chIdx] ); + free( ( *hReverb )->outputBufferImag[bin][chIdx] ); } - count_free( ( *hReverb )->loopBufReal[bin] ); - count_free( ( *hReverb )->loopBufImag[bin] ); + free( ( *hReverb )->loopBufReal[bin] ); + free( ( *hReverb )->loopBufImag[bin] ); } - count_free( ( *hReverb ) ); + free( ( *hReverb ) ); return; } diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index ae2240df34..7c62138119 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -110,7 +110,7 @@ static ivas_error ivas_hrtf_open( if ( *hHrtf_out == NULL ) { - if ( ( hHrtf = (HRTFS_HANDLE) count_malloc( sizeof( HRTFS_DATA ) ) ) == NULL ) + if ( ( hHrtf = (HRTFS_HANDLE) malloc( sizeof( HRTFS_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR decoder\n" ); } @@ -143,7 +143,7 @@ static ivas_error ivas_hrtf_close( return IVAS_ERR_WRONG_PARAMS; } - count_free( *hHrtf ); + free( *hHrtf ); *hHrtf = NULL; return IVAS_ERR_OK; @@ -670,7 +670,7 @@ ivas_error ivas_crend_open( } } - if ( ( hCrend = (CREND_HANDLE) count_malloc( sizeof( CREND_DATA ) ) ) == NULL ) + if ( ( hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer handle" ); } @@ -706,13 +706,13 @@ ivas_error ivas_crend_open( for ( i = 0; i < hHrtf->max_num_ir; i++ ) { - if ( ( hCrend->freq_buffer_re[i] = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->freq_buffer_re[i] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } set_f( hCrend->freq_buffer_re[i], 0, max_total_ir_len ); - if ( ( hCrend->freq_buffer_im[i] = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->freq_buffer_im[i] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } @@ -721,7 +721,7 @@ ivas_error ivas_crend_open( for ( i = 0; i < BINAURAL_CHANNELS; i++ ) { - if ( ( hCrend->prev_out_buffer[i] = (float *) count_malloc( sizeof( float ) * subframe_length ) ) == NULL ) + if ( ( hCrend->prev_out_buffer[i] = (float *) malloc( sizeof( float ) * subframe_length ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } @@ -732,13 +732,13 @@ ivas_error ivas_crend_open( if ( max_total_ir_len > 0 ) { - if ( ( hCrend->freq_buffer_re_diffuse = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->freq_buffer_re_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } set_f( hCrend->freq_buffer_re_diffuse, 0, max_total_ir_len ); - if ( ( hCrend->freq_buffer_im_diffuse = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->freq_buffer_im_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } @@ -753,7 +753,7 @@ ivas_error ivas_crend_open( max_total_ir_len = (int16_t) ( hHrtf->latency_s * st_ivas->hDecoderConfig->output_Fs + 0.5f ) + subframe_length; if ( max_total_ir_len > 0 ) { - if ( ( hCrend->lfe_delay_line = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->lfe_delay_line = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } @@ -766,7 +766,7 @@ ivas_error ivas_crend_open( if ( st_ivas->hDecoderConfig->Opt_Headrotation ) { - if ( ( hCrend->hTrack = (ivas_orient_trk_state_t *) count_malloc( sizeof( ivas_orient_trk_state_t ) ) ) == NULL ) + if ( ( hCrend->hTrack = (ivas_orient_trk_state_t *) malloc( sizeof( ivas_orient_trk_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking" ); } @@ -832,12 +832,12 @@ ivas_error ivas_crend_close( { if ( st_ivas->hCrend->freq_buffer_re[i] != NULL ) { - count_free( st_ivas->hCrend->freq_buffer_re[i] ); + free( st_ivas->hCrend->freq_buffer_re[i] ); st_ivas->hCrend->freq_buffer_re[i] = NULL; } if ( st_ivas->hCrend->freq_buffer_im[i] != NULL ) { - count_free( st_ivas->hCrend->freq_buffer_im[i] ); + free( st_ivas->hCrend->freq_buffer_im[i] ); st_ivas->hCrend->freq_buffer_im[i] = NULL; } } @@ -846,39 +846,39 @@ ivas_error ivas_crend_close( { if ( st_ivas->hCrend->prev_out_buffer[i] != NULL ) { - count_free( st_ivas->hCrend->prev_out_buffer[i] ); + free( st_ivas->hCrend->prev_out_buffer[i] ); st_ivas->hCrend->prev_out_buffer[i] = NULL; } } if ( st_ivas->hCrend->lfe_delay_line != NULL ) { - count_free( st_ivas->hCrend->lfe_delay_line ); + free( st_ivas->hCrend->lfe_delay_line ); st_ivas->hCrend->lfe_delay_line = NULL; } if ( st_ivas->hCrend->freq_buffer_re_diffuse != NULL ) { - count_free( st_ivas->hCrend->freq_buffer_re_diffuse ); + free( st_ivas->hCrend->freq_buffer_re_diffuse ); st_ivas->hCrend->freq_buffer_re_diffuse = NULL; } if ( st_ivas->hCrend->freq_buffer_im_diffuse != NULL ) { - count_free( st_ivas->hCrend->freq_buffer_im_diffuse ); + free( st_ivas->hCrend->freq_buffer_im_diffuse ); st_ivas->hCrend->freq_buffer_im_diffuse = NULL; } if ( st_ivas->hCrend->hTrack != NULL ) { - count_free( st_ivas->hCrend->hTrack ); + free( st_ivas->hCrend->hTrack ); st_ivas->hCrend->hTrack = NULL; } } ivas_reverb_close( &st_ivas->hCrend->hReverb ); - count_free( st_ivas->hCrend ); + free( st_ivas->hCrend ); st_ivas->hCrend = NULL; } @@ -1169,7 +1169,7 @@ ivas_error ivas_rend_openCrend( } } - if ( ( hCrend = (CREND_HANDLE) count_malloc( sizeof( CREND_DATA ) ) ) == NULL ) + if ( ( hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer handle" ); } @@ -1205,13 +1205,13 @@ ivas_error ivas_rend_openCrend( for ( i = 0; i < hHrtf->max_num_ir; i++ ) { - if ( ( hCrend->freq_buffer_re[i] = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->freq_buffer_re[i] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } set_zero( hCrend->freq_buffer_re[i], max_total_ir_len ); - if ( ( hCrend->freq_buffer_im[i] = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->freq_buffer_im[i] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } @@ -1220,7 +1220,7 @@ ivas_error ivas_rend_openCrend( for ( i = 0; i < BINAURAL_CHANNELS; i++ ) { - if ( ( hCrend->prev_out_buffer[i] = (float *) count_malloc( sizeof( float ) * subframe_length ) ) == NULL ) + if ( ( hCrend->prev_out_buffer[i] = (float *) malloc( sizeof( float ) * subframe_length ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } @@ -1231,13 +1231,13 @@ ivas_error ivas_rend_openCrend( if ( max_total_ir_len > 0 ) { - if ( ( hCrend->freq_buffer_re_diffuse = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->freq_buffer_re_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } set_zero( hCrend->freq_buffer_re_diffuse, max_total_ir_len ); - if ( ( hCrend->freq_buffer_im_diffuse = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->freq_buffer_im_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } @@ -1252,7 +1252,7 @@ ivas_error ivas_rend_openCrend( max_total_ir_len = (int16_t) ( hHrtf->latency_s * output_Fs + 0.5f ) + subframe_length; if ( max_total_ir_len > 0 ) { - if ( ( hCrend->lfe_delay_line = (float *) count_malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) + if ( ( hCrend->lfe_delay_line = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } @@ -1265,7 +1265,7 @@ ivas_error ivas_rend_openCrend( if ( false ) /* TODO tmu : check renderer headrotation flag */ { - if ( ( hCrend->hTrack = (ivas_orient_trk_state_t *) count_malloc( sizeof( ivas_orient_trk_state_t ) ) ) == NULL ) + if ( ( hCrend->hTrack = (ivas_orient_trk_state_t *) malloc( sizeof( ivas_orient_trk_state_t ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking" ); } @@ -1710,12 +1710,12 @@ ivas_error ivas_rend_closeCrend( { if ( pCrend->hCrend->freq_buffer_re[i] != NULL ) { - count_free( pCrend->hCrend->freq_buffer_re[i] ); + free( pCrend->hCrend->freq_buffer_re[i] ); pCrend->hCrend->freq_buffer_re[i] = NULL; } if ( pCrend->hCrend->freq_buffer_im[i] != NULL ) { - count_free( pCrend->hCrend->freq_buffer_im[i] ); + free( pCrend->hCrend->freq_buffer_im[i] ); pCrend->hCrend->freq_buffer_im[i] = NULL; } } @@ -1724,38 +1724,38 @@ ivas_error ivas_rend_closeCrend( { if ( pCrend->hCrend->prev_out_buffer[i] != NULL ) { - count_free( pCrend->hCrend->prev_out_buffer[i] ); + free( pCrend->hCrend->prev_out_buffer[i] ); pCrend->hCrend->prev_out_buffer[i] = NULL; } } if ( pCrend->hCrend->lfe_delay_line != NULL ) { - count_free( pCrend->hCrend->lfe_delay_line ); + free( pCrend->hCrend->lfe_delay_line ); pCrend->hCrend->lfe_delay_line = NULL; } if ( pCrend->hCrend->freq_buffer_re_diffuse != NULL ) { - count_free( pCrend->hCrend->freq_buffer_re_diffuse ); + free( pCrend->hCrend->freq_buffer_re_diffuse ); pCrend->hCrend->freq_buffer_re_diffuse = NULL; } if ( pCrend->hCrend->freq_buffer_im_diffuse != NULL ) { - count_free( pCrend->hCrend->freq_buffer_im_diffuse ); + free( pCrend->hCrend->freq_buffer_im_diffuse ); pCrend->hCrend->freq_buffer_im_diffuse = NULL; } if ( pCrend->hCrend->hTrack != NULL ) { - count_free( pCrend->hCrend->hTrack ); + free( pCrend->hCrend->hTrack ); pCrend->hCrend->hTrack = NULL; } ivas_reverb_close( &pCrend->hCrend->hReverb ); - count_free( pCrend->hCrend ); + free( pCrend->hCrend ); pCrend->hCrend = NULL; } diff --git a/lib_rend/ivas_efap.c b/lib_rend/ivas_efap.c index cb4b209488..860a2adf04 100644 --- a/lib_rend/ivas_efap.c +++ b/lib_rend/ivas_efap.c @@ -168,29 +168,29 @@ ivas_error efap_init_data( *-----------------------------------------------------------------*/ /* Memory Allocations for efap */ - if ( ( efap = (EFAP *) count_malloc( sizeof( EFAP ) ) ) == NULL ) + if ( ( efap = (EFAP *) malloc( sizeof( EFAP ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP handle\n" ) ); } /* Memory Allocation and update for aziSpk & eleSpk arrays*/ - if ( ( efap->aziSpk = (float *) count_malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + if ( ( efap->aziSpk = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP speaker azimuths\n" ) ); } - if ( ( efap->eleSpk = (float *) count_malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + if ( ( efap->eleSpk = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP speaker elevations\n" ) ); } /* Memory Allocation for vertexArray */ - if ( ( efap->vtxData.vertexArray = (EFAP_VERTEX *) count_malloc( ( num_speaker_nodes + EFAP_MAX_GHOST_LS ) * sizeof( EFAP_VERTEX ) ) ) == NULL ) + if ( ( efap->vtxData.vertexArray = (EFAP_VERTEX *) malloc( ( num_speaker_nodes + EFAP_MAX_GHOST_LS ) * sizeof( EFAP_VERTEX ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP Vertex Array\n" ) ); } /* Memory allocation for the tmp buffer short */ - if ( ( efap->bufferShort = (float *) count_malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) + if ( ( efap->bufferShort = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP bufferS\n" ) ); } @@ -219,7 +219,7 @@ ivas_error efap_init_data( /* Memory allocation for the tmp buffer long */ - if ( ( efap->bufferLong = (float *) count_malloc( efap->vtxData.numVtx * sizeof( float ) ) ) == NULL ) + if ( ( efap->bufferLong = (float *) malloc( efap->vtxData.numVtx * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP bufferL\n" ) ); } @@ -327,33 +327,33 @@ void efap_free_data( dim1 = ( *hEFAPdata )->numTot; /* instance buffer members */ - count_free( ( *hEFAPdata )->aziSpk ); + free( ( *hEFAPdata )->aziSpk ); ( *hEFAPdata )->aziSpk = NULL; - count_free( ( *hEFAPdata )->eleSpk ); + free( ( *hEFAPdata )->eleSpk ); ( *hEFAPdata )->eleSpk = NULL; - count_free( ( *hEFAPdata )->vtxData.vertexArray ); + free( ( *hEFAPdata )->vtxData.vertexArray ); ( *hEFAPdata )->vtxData.vertexArray = NULL; - count_free( ( *hEFAPdata )->vtxData.vtxOrder ); + free( ( *hEFAPdata )->vtxData.vtxOrder ); ( *hEFAPdata )->vtxData.vtxOrder = NULL; - count_free( ( *hEFAPdata )->bufferLong ); + free( ( *hEFAPdata )->bufferLong ); ( *hEFAPdata )->bufferLong = NULL; - count_free( ( *hEFAPdata )->bufferShort ); + free( ( *hEFAPdata )->bufferShort ); ( *hEFAPdata )->bufferShort = NULL; p_dmTranspose = (void **) ( *hEFAPdata )->dmTranspose; for ( i = 0; i < dim1; i++ ) { - count_free( p_dmTranspose[i] ); + free( p_dmTranspose[i] ); } - count_free( p_dmTranspose ); + free( p_dmTranspose ); /* instance */ - count_free( *hEFAPdata ); + free( *hEFAPdata ); *hEFAPdata = NULL; return; @@ -538,7 +538,7 @@ static ivas_error sphere_triangulation( add_ghost_speakers( vtxData->vertexArray, &vtxData->numVtx, efip_flag ); /* Sort the vertices according to their index */ - if ( ( vtxData->vtxOrder = (int16_t *) count_malloc( vtxData->numVtx * sizeof( int16_t ) ) ) == NULL ) + if ( ( vtxData->vtxOrder = (int16_t *) malloc( vtxData->numVtx * sizeof( int16_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP Vertex Order\n" ) ); } @@ -557,7 +557,7 @@ static ivas_error sphere_triangulation( assert( polyData->numTri != 0 && "EFAP: failed to construct convex hull!" ); /* Allocate the DM matrix transpose */ - if ( ( p_dmTranspose = count_malloc( vtxData->numVtx * sizeof( float * ) ) ) == NULL ) + if ( ( p_dmTranspose = malloc( vtxData->numVtx * sizeof( float * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "EFAP: can not allocate memory for dmTranspose\n" ) ); } @@ -567,7 +567,7 @@ static ivas_error sphere_triangulation( for ( i = 0; i < vtxData->numVtx; i++ ) { - if ( ( p_dmTranspose[i] = count_malloc( numSpk * sizeof( float ) ) ) == NULL ) + if ( ( p_dmTranspose[i] = malloc( numSpk * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "EFAP: can not allocate memory for dmTranspose\n" ) ); } diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index bbb4afa152..347a060e98 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -61,8 +61,8 @@ void BSplineModelEvalAlloc( ModelEval_t *modelEval /* i/o: Model evaluation structure */ ) { - modelEval->hrfModL = (float *) count_malloc( model->K * sizeof( float ) ); - modelEval->hrfModR = (float *) count_malloc( model->K * sizeof( float ) ); + modelEval->hrfModL = (float *) malloc( model->K * sizeof( float ) ); + modelEval->hrfModR = (float *) malloc( model->K * sizeof( float ) ); return; } @@ -118,11 +118,11 @@ void DefaultBSplineModel( model->elevKSeq = (const float *) orange53_rom_elevKSeq; model->elevBsShape = (const float *) orange53_rom_elevBsShape; - model->azimBsShape = (const float **) count_malloc( model->num_unique_azim_splines * sizeof( float * ) ); + model->azimBsShape = (const float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ); model->azimBsShape[0] = (const float *) orange53_rom_azimBsShape; - model->azimKSeq = (float **) count_malloc( 18 * sizeof( float * ) ); - model->azimKSeq[0] = (float *) count_malloc( 2 * sizeof( float * ) ); - model->azimKSeq[17] = (float *) count_malloc( 2 * sizeof( float * ) ); + model->azimKSeq = (float **) malloc( 18 * sizeof( float * ) ); + model->azimKSeq[0] = (float *) malloc( 2 * sizeof( float * ) ); + model->azimKSeq[17] = (float *) malloc( 2 * sizeof( float * ) ); model->azimKSeq[0][0] = 0.0f; model->azimKSeq[17][0] = 0.0f; model->azimKSeq[0][1] = 360.0f; @@ -130,7 +130,7 @@ void DefaultBSplineModel( for ( i = 1; i < 17; i++ ) { - model->azimKSeq[i] = (float *) count_malloc( model->azimDim2[i] * sizeof( float * ) ); /* azimDim2[i] = 91, i=2..15 */ + model->azimKSeq[i] = (float *) malloc( model->azimDim2[i] * sizeof( float * ) ); /* azimDim2[i] = 91, i=2..15 */ for ( j = 0; j < model->azimDim2[i]; j++ ) { model->azimKSeq[i][j] = (float) orange53_rom_azimSegSamples[0] * j; @@ -229,7 +229,7 @@ ivas_error ivas_HRTF_binary_open( TDREND_HRFILT_FiltSet_t **hHrtfTD ) { /* Allocate HR filter set for headphones configuration */ - *hHrtfTD = (TDREND_HRFILT_FiltSet_t *) count_malloc( sizeof( TDREND_HRFILT_FiltSet_t ) ); + *hHrtfTD = (TDREND_HRFILT_FiltSet_t *) malloc( sizeof( TDREND_HRFILT_FiltSet_t ) ); if ( *hHrtfTD == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF binary!" ); @@ -253,7 +253,7 @@ void ivas_HRTF_binary_close( return; } - count_free( *hHrtfTD ); + free( *hHrtfTD ); *hHrtfTD = NULL; return; diff --git a/lib_rend/ivas_limiter.c b/lib_rend/ivas_limiter.c index dc290742c5..cd1bb65eb6 100644 --- a/lib_rend/ivas_limiter.c +++ b/lib_rend/ivas_limiter.c @@ -132,11 +132,11 @@ IVAS_LIMITER_HANDLE ivas_limiter_open( return NULL; } - hLimiter = count_malloc( sizeof( IVAS_LIMITER ) ); + hLimiter = malloc( sizeof( IVAS_LIMITER ) ); hLimiter->max_num_channels = max_num_channels; hLimiter->num_channels = max_num_channels; - hLimiter->channel_ptrs = count_malloc( max_num_channels * sizeof( float * ) ); + hLimiter->channel_ptrs = malloc( max_num_channels * sizeof( float * ) ); hLimiter->sampling_rate = sampling_rate; hLimiter->gain = 1.f; hLimiter->release_heuristic = 0.f; @@ -174,8 +174,8 @@ void ivas_limiter_close( return; } - count_free( ( *phLimiter )->channel_ptrs ); - count_free( *phLimiter ); + free( ( *phLimiter )->channel_ptrs ); + free( *phLimiter ); *phLimiter = NULL; return; diff --git a/lib_rend/ivas_ls_custom_dec.c b/lib_rend/ivas_ls_custom_dec.c index b76b7d8da4..6c3f2eaec7 100644 --- a/lib_rend/ivas_ls_custom_dec.c +++ b/lib_rend/ivas_ls_custom_dec.c @@ -51,7 +51,7 @@ ivas_error ivas_ls_custom_open( ) { /* Allocate handle */ - if ( ( *hLsSetupCustom = (LSSETUP_CUSTOM_HANDLE) count_malloc( sizeof( LSSETUP_CUSTOM_STRUCT ) ) ) == NULL ) + if ( ( *hLsSetupCustom = (LSSETUP_CUSTOM_HANDLE) malloc( sizeof( LSSETUP_CUSTOM_STRUCT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Custom LS layout memory\n" ) ); } diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index e59c98d167..da579df4b3 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -94,19 +94,19 @@ ivas_error ivas_td_binaural_open( error = IVAS_ERR_OK; - if ( ( hBinRendererTd = count_malloc( sizeof( BINAURAL_TD_OBJECT_RENDERER ) ) ) == NULL ) + if ( ( hBinRendererTd = malloc( sizeof( BINAURAL_TD_OBJECT_RENDERER ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); } - if ( ( hBinRendererTd->TdRend_MixSpatSpec_p = count_malloc( sizeof( TDREND_MixSpatSpec_t ) ) ) == NULL ) + if ( ( hBinRendererTd->TdRend_MixSpatSpec_p = malloc( sizeof( TDREND_MixSpatSpec_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); } - if ( ( hBinRendererTd->DirAtten_p = count_malloc( sizeof( TDREND_DirAtten_t ) ) ) == NULL ) + if ( ( hBinRendererTd->DirAtten_p = malloc( sizeof( TDREND_DirAtten_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); } - if ( ( hBinRendererTd->Listener_p = count_malloc( sizeof( TDREND_MIX_Listener_t ) ) ) == NULL ) + if ( ( hBinRendererTd->Listener_p = malloc( sizeof( TDREND_MIX_Listener_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); } @@ -222,12 +222,12 @@ void ivas_td_binaural_close( return; } - count_free( ( *hBinRendererTd )->TdRend_MixSpatSpec_p ); - count_free( ( *hBinRendererTd )->DirAtten_p ); + free( ( *hBinRendererTd )->TdRend_MixSpatSpec_p ); + free( ( *hBinRendererTd )->DirAtten_p ); TDREND_MIX_Dealloc( *hBinRendererTd ); - count_free( *hBinRendererTd ); + free( *hBinRendererTd ); *hBinRendererTd = NULL; return; @@ -533,19 +533,19 @@ ivas_error ivas_rend_TDObjRendOpen( error = IVAS_ERR_OK; - if ( ( hBinRendererTd = count_malloc( sizeof( BINAURAL_TD_OBJECT_RENDERER ) ) ) == NULL ) + if ( ( hBinRendererTd = malloc( sizeof( BINAURAL_TD_OBJECT_RENDERER ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); } - if ( ( hBinRendererTd->TdRend_MixSpatSpec_p = count_malloc( sizeof( TDREND_MixSpatSpec_t ) ) ) == NULL ) + if ( ( hBinRendererTd->TdRend_MixSpatSpec_p = malloc( sizeof( TDREND_MixSpatSpec_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); } - if ( ( hBinRendererTd->DirAtten_p = count_malloc( sizeof( TDREND_DirAtten_t ) ) ) == NULL ) + if ( ( hBinRendererTd->DirAtten_p = malloc( sizeof( TDREND_DirAtten_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); } - if ( ( hBinRendererTd->Listener_p = count_malloc( sizeof( TDREND_MIX_Listener_t ) ) ) == NULL ) + if ( ( hBinRendererTd->Listener_p = malloc( sizeof( TDREND_MIX_Listener_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); } @@ -700,7 +700,7 @@ ivas_error ivas_rend_TDObjRenderFrame( { ivas_format = ISM_FORMAT; num_src = 1; - hIsmMetaData[0] = count_malloc( sizeof( ISM_METADATA_FRAME ) ); + hIsmMetaData[0] = malloc( sizeof( ISM_METADATA_FRAME ) ); hIsmMetaData[0]->azimuth = currentPos->azimuth; hIsmMetaData[0]->elevation = currentPos->elevation; } @@ -722,7 +722,7 @@ ivas_error ivas_rend_TDObjRenderFrame( /* TODO tmu : needs a refactor / better approach */ if ( ivas_format == ISM_FORMAT ) { - count_free( hIsmMetaData[0] ); + free( hIsmMetaData[0] ); } for ( subframe_idx = 0; subframe_idx < MAX_PARAM_SPATIAL_SUBFRAMES; subframe_idx++ ) diff --git a/lib_rend/ivas_objectRenderer_hrFilt.c b/lib_rend/ivas_objectRenderer_hrFilt.c index 6b0eb31970..75376435e0 100644 --- a/lib_rend/ivas_objectRenderer_hrFilt.c +++ b/lib_rend/ivas_objectRenderer_hrFilt.c @@ -132,8 +132,8 @@ void TDREND_HRFILT_SetFiltSet( HrFiltSet_p->NumElev = (int16_t) temp; /* Elevation angles */ - HrFiltSet_p->Elev_p = (float *) count_malloc( HrFiltSet_p->NumElev * sizeof( float ) ); - buffer_p = (double *) count_malloc( HrFiltSet_p->NumElev * sizeof( double ) ); + HrFiltSet_p->Elev_p = (float *) malloc( HrFiltSet_p->NumElev * sizeof( float ) ); + buffer_p = (double *) malloc( HrFiltSet_p->NumElev * sizeof( double ) ); num_to_read = HrFiltSet_p->NumElev; fread( (void *) buffer_p, num_bytes, num_to_read, f_hrtf ); temp_p = buffer_p; @@ -149,20 +149,20 @@ void TDREND_HRFILT_SetFiltSet( assert( 0 && "Error: HR Filter elevation values had irregular spacing." ); } } - count_free( buffer_p ); + free( buffer_p ); /* Number of azimuth values, one per elevation */ - HrFiltSet_p->NumAzim_p = (int16_t *) count_malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); - buffer_p = (double *) count_malloc( HrFiltSet_p->NumElev * sizeof( double ) ); + HrFiltSet_p->NumAzim_p = (int16_t *) malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); + buffer_p = (double *) malloc( HrFiltSet_p->NumElev * sizeof( double ) ); fread( (void *) buffer_p, num_bytes, HrFiltSet_p->NumElev, f_hrtf ); for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) { HrFiltSet_p->NumAzim_p[n] = (int16_t) buffer_p[n]; } - count_free( buffer_p ); + free( buffer_p ); /* Indices to the first azimuth value, one per elevation */ - HrFiltSet_p->AzimStartIdx_p = (int16_t *) count_malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); + HrFiltSet_p->AzimStartIdx_p = (int16_t *) malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); count = 0; for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) { @@ -178,9 +178,9 @@ void TDREND_HRFILT_SetFiltSet( } /* Azimuth values, one set per elevation, i.e. one per measurement point */ - HrFiltSet_p->Azim_p = (float *) count_malloc( HrFiltSet_p->NumPos * sizeof( float ) ); - buffer_p = (double *) count_malloc( HrFiltSet_p->NumPos * sizeof( double ) ); - HrFiltSet_p->ElevFull_p = (float *) count_malloc( HrFiltSet_p->NumPos * sizeof( float ) ); + HrFiltSet_p->Azim_p = (float *) malloc( HrFiltSet_p->NumPos * sizeof( float ) ); + buffer_p = (double *) malloc( HrFiltSet_p->NumPos * sizeof( double ) ); + HrFiltSet_p->ElevFull_p = (float *) malloc( HrFiltSet_p->NumPos * sizeof( float ) ); fread( (void *) buffer_p, num_bytes, HrFiltSet_p->NumPos, f_hrtf ); i = 0; for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) @@ -197,7 +197,7 @@ void TDREND_HRFILT_SetFiltSet( i++; } } - count_free( buffer_p ); + free( buffer_p ); } if ( HrFiltSet_p->FilterMethod == TDREND_HRFILT_Method_Table_S ) { @@ -206,8 +206,8 @@ void TDREND_HRFILT_SetFiltSet( HrFiltSet_p->NumElev = (int16_t) temp; /* Elevation angles */ - HrFiltSet_p->Elev_p = (float *) count_malloc( HrFiltSet_p->NumElev * sizeof( float ) ); - buffer_p = (double *) count_malloc( HrFiltSet_p->NumElev * sizeof( double ) ); + HrFiltSet_p->Elev_p = (float *) malloc( HrFiltSet_p->NumElev * sizeof( float ) ); + buffer_p = (double *) malloc( HrFiltSet_p->NumElev * sizeof( double ) ); num_to_read = HrFiltSet_p->NumElev; fread( (void *) buffer_p, num_bytes, num_to_read, f_hrtf ); temp_p = buffer_p; @@ -215,20 +215,20 @@ void TDREND_HRFILT_SetFiltSet( { HrFiltSet_p->Elev_p[n] = (float) *temp_p++; } - count_free( buffer_p ); + free( buffer_p ); /* Number of azimuth values, one per elevation */ - HrFiltSet_p->NumAzim_p = (int16_t *) count_malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); - buffer_p = (double *) count_malloc( HrFiltSet_p->NumElev * sizeof( double ) ); + HrFiltSet_p->NumAzim_p = (int16_t *) malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); + buffer_p = (double *) malloc( HrFiltSet_p->NumElev * sizeof( double ) ); fread( (void *) buffer_p, num_bytes, HrFiltSet_p->NumElev, f_hrtf ); for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) { HrFiltSet_p->NumAzim_p[n] = (int16_t) buffer_p[n]; } - count_free( buffer_p ); + free( buffer_p ); /* Indices to the first azimuth value, one per elevation */ - HrFiltSet_p->AzimStartIdx_p = (int16_t *) count_malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); + HrFiltSet_p->AzimStartIdx_p = (int16_t *) malloc( HrFiltSet_p->NumElev * sizeof( int16_t ) ); count = 0; for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) { @@ -244,9 +244,9 @@ void TDREND_HRFILT_SetFiltSet( } /* Azimuth values, one set per elevation, i.e. one per measurement point */ - HrFiltSet_p->Azim_p = (float *) count_malloc( HrFiltSet_p->NumPos * sizeof( float ) ); - buffer_p = (double *) count_malloc( HrFiltSet_p->NumPos * sizeof( double ) ); - HrFiltSet_p->ElevFull_p = (float *) count_malloc( HrFiltSet_p->NumPos * sizeof( float ) ); + HrFiltSet_p->Azim_p = (float *) malloc( HrFiltSet_p->NumPos * sizeof( float ) ); + buffer_p = (double *) malloc( HrFiltSet_p->NumPos * sizeof( double ) ); + HrFiltSet_p->ElevFull_p = (float *) malloc( HrFiltSet_p->NumPos * sizeof( float ) ); fread( (void *) buffer_p, num_bytes, HrFiltSet_p->NumPos, f_hrtf ); i = 0; for ( n = 0; n < HrFiltSet_p->NumElev; n++ ) @@ -263,14 +263,14 @@ void TDREND_HRFILT_SetFiltSet( i++; } } - count_free( buffer_p ); + free( buffer_p ); } /* allocate memory to LeftFilt and RightFilt */ mem_size = ( HrFiltSet_p->NumPos * HrFiltSet_p->FiltLength * sizeof( double ) ); - FiltSetIntRight_p = (double *) count_malloc( mem_size ); - FiltSetIntLeft_p = (double *) count_malloc( mem_size ); + FiltSetIntRight_p = (double *) malloc( mem_size ); + FiltSetIntLeft_p = (double *) malloc( mem_size ); RightFilt_p = FiltSetIntRight_p; LeftFilt_p = FiltSetIntLeft_p; @@ -301,8 +301,8 @@ void TDREND_HRFILT_SetFiltSet( /* Copy, and reverse the filter sets */ mem_size = ( HrFiltSet_p->NumPos * HrFiltSet_p->FiltLength * sizeof( float ) ); - RightFiltFlp_p = (float *) count_malloc( mem_size ); - LeftFiltFlp_p = (float *) count_malloc( mem_size ); + RightFiltFlp_p = (float *) malloc( mem_size ); + LeftFiltFlp_p = (float *) malloc( mem_size ); HrFiltSet_p->RightFiltSet_p = RightFiltFlp_p; HrFiltSet_p->LeftFiltSet_p = LeftFiltFlp_p; @@ -328,8 +328,8 @@ void TDREND_HRFILT_SetFiltSet( FiltIntLeft0_p += HrFiltSet_p->FiltLength; } - count_free( FiltSetIntLeft_p ); - count_free( FiltSetIntRight_p ); + free( FiltSetIntLeft_p ); + free( FiltSetIntRight_p ); return; } @@ -1117,8 +1117,8 @@ void HRTF_model_precalc( AlphaN = model->AlphaN; /* Precalculated energies for each section and each row of the alpha matrices */ - model->EL_dyn = (float *) count_malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( float ) ); - model->ER_dyn = (float *) count_malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( float ) ); + model->EL_dyn = (float *) malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( float ) ); + model->ER_dyn = (float *) malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( float ) ); pEL = model->EL_dyn; pER = model->ER_dyn; for ( i = 0; i < HRTF_MODEL_N_SECTIONS; i++ ) @@ -1169,37 +1169,37 @@ void BSplineModelEvalDealloc( if ( !model->modelROM ) { - count_free( model->elevKSeq_dyn ); - count_free( model->azim_start_idx_dyn ); - count_free( model->azimDim2_dyn ); - count_free( model->azimDim3_dyn ); - count_free( model->AlphaL_dyn ); - count_free( model->AlphaR_dyn ); - count_free( model->azimSegSamples_dyn ); + free( model->elevKSeq_dyn ); + free( model->azim_start_idx_dyn ); + free( model->azimDim2_dyn ); + free( model->azimDim3_dyn ); + free( model->AlphaL_dyn ); + free( model->AlphaR_dyn ); + free( model->azimSegSamples_dyn ); - count_free( model->azimShapeIdx_dyn ); - count_free( model->azimShapeSampFactor_dyn ); - count_free( model->elevBsShape_dyn ); + free( model->azimShapeIdx_dyn ); + free( model->azimShapeSampFactor_dyn ); + free( model->elevBsShape_dyn ); - count_free( model->EL_dyn ); - count_free( model->ER_dyn ); + free( model->EL_dyn ); + free( model->ER_dyn ); for ( i = 0; i < model->num_unique_azim_splines; i++ ) { - count_free( model->azimBsShape_dyn[i] ); + free( model->azimBsShape_dyn[i] ); } - count_free( model->azimBsShape_dyn ); + free( model->azimBsShape_dyn ); } - count_free( (void *) model->azimBsShape ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */ + free( (void *) model->azimBsShape ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */ for ( i = 0; i < model->elevDim3; i++ ) { - count_free( model->azimKSeq[i] ); + free( model->azimKSeq[i] ); } - count_free( model->azimKSeq ); + free( model->azimKSeq ); if ( modelEval != NULL ) { - count_free( modelEval->hrfModL ); - count_free( modelEval->hrfModR ); + free( modelEval->hrfModL ); + free( modelEval->hrfModR ); } return; @@ -1216,11 +1216,11 @@ void BSplineModelEvalITDDealloc( ModelParamsITD_t *model /* i : Model parameters */ ) { - count_free( model->elevKSeq_dyn ); - count_free( model->azimKSeq_dyn ); - count_free( model->W_dyn ); - count_free( model->azimBsShape_dyn ); - count_free( model->elevBsShape_dyn ); + free( model->elevKSeq_dyn ); + free( model->azimKSeq_dyn ); + free( model->W_dyn ); + free( model->azimBsShape_dyn ); + free( model->elevBsShape_dyn ); return; } diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index 9f0c0bf427..a050aad8cb 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -122,7 +122,7 @@ void TDREND_MIX_Dealloc( /* Deallocate Listener and RendListener */ if ( hBinRendererTd->Listener_p != NULL ) { - count_free( hBinRendererTd->Listener_p ); + free( hBinRendererTd->Listener_p ); hBinRendererTd->Listener_p = NULL; } /* Dealloc HR filter set */ @@ -140,44 +140,44 @@ void TDREND_MIX_Dealloc( { if ( hBinRendererTd->HrFiltSet_p->Elev_p != NULL ) { - count_free( hBinRendererTd->HrFiltSet_p->Elev_p ); + free( hBinRendererTd->HrFiltSet_p->Elev_p ); hBinRendererTd->HrFiltSet_p->Elev_p = NULL; } if ( hBinRendererTd->HrFiltSet_p->Azim_p != NULL ) { - count_free( hBinRendererTd->HrFiltSet_p->Azim_p ); + free( hBinRendererTd->HrFiltSet_p->Azim_p ); hBinRendererTd->HrFiltSet_p->Azim_p = NULL; } if ( hBinRendererTd->HrFiltSet_p->LeftFiltSet_p != NULL ) { - count_free( hBinRendererTd->HrFiltSet_p->LeftFiltSet_p ); + free( hBinRendererTd->HrFiltSet_p->LeftFiltSet_p ); hBinRendererTd->HrFiltSet_p->LeftFiltSet_p = NULL; } if ( hBinRendererTd->HrFiltSet_p->RightFiltSet_p != NULL ) { - count_free( hBinRendererTd->HrFiltSet_p->RightFiltSet_p ); + free( hBinRendererTd->HrFiltSet_p->RightFiltSet_p ); hBinRendererTd->HrFiltSet_p->RightFiltSet_p = NULL; } #ifdef TDREND_HRTF_TABLE_METHODS if ( hBinRendererTd->HrFiltSet_p->NumAzim_p != NULL ) { - count_free( hBinRendererTd->HrFiltSet_p->NumAzim_p ); + free( hBinRendererTd->HrFiltSet_p->NumAzim_p ); hBinRendererTd->HrFiltSet_p->NumAzim_p = NULL; } if ( hBinRendererTd->HrFiltSet_p->AzimStartIdx_p != NULL ) { - count_free( hBinRendererTd->HrFiltSet_p->AzimStartIdx_p ); + free( hBinRendererTd->HrFiltSet_p->AzimStartIdx_p ); hBinRendererTd->HrFiltSet_p->AzimStartIdx_p = NULL; } if ( hBinRendererTd->HrFiltSet_p->ElevFull_p != NULL ) { - count_free( hBinRendererTd->HrFiltSet_p->ElevFull_p ); + free( hBinRendererTd->HrFiltSet_p->ElevFull_p ); hBinRendererTd->HrFiltSet_p->ElevFull_p = NULL; } #endif } - count_free( hBinRendererTd->HrFiltSet_p ); + free( hBinRendererTd->HrFiltSet_p ); hBinRendererTd->HrFiltSet_p = NULL; } @@ -225,7 +225,7 @@ ivas_error TDREND_MIX_Init( /* Init HR filter set */ if ( *hHrtfTD == NULL ) { - if ( ( hBinRendererTd->HrFiltSet_p = (TDREND_HRFILT_FiltSet_t *) count_malloc( sizeof( TDREND_HRFILT_FiltSet_t ) ) ) == NULL ) + if ( ( hBinRendererTd->HrFiltSet_p = (TDREND_HRFILT_FiltSet_t *) malloc( sizeof( TDREND_HRFILT_FiltSet_t ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); } diff --git a/lib_rend/ivas_objectRenderer_sfx.c b/lib_rend/ivas_objectRenderer_sfx.c index 44bc695e1d..85fc8caf4a 100644 --- a/lib_rend/ivas_objectRenderer_sfx.c +++ b/lib_rend/ivas_objectRenderer_sfx.c @@ -429,10 +429,10 @@ static void TDREND_SFX_SpatBin_SetParamsInitializeOn( SfxSpatBin_p->FilterLength = NewParam_p->FilterLength; mem_size = (int16_t) SfxSpatBin_p->FilterLength * sizeof( float ); - LeftFilter_p = (float *) count_malloc( mem_size ); - RightFilter_p = (float *) count_malloc( mem_size ); - LeftFilterIncr_p = (float *) count_malloc( mem_size ); - RightFilterIncr_p = (float *) count_malloc( mem_size ); + LeftFilter_p = (float *) malloc( mem_size ); + RightFilter_p = (float *) malloc( mem_size ); + LeftFilterIncr_p = (float *) malloc( mem_size ); + RightFilterIncr_p = (float *) malloc( mem_size ); SfxSpatBin_p->LeftFilter_p = LeftFilter_p; SfxSpatBin_p->RightFilter_p = RightFilter_p; @@ -510,10 +510,10 @@ static void TDREND_SFX_SpatBin_SetParamsInitializeOff( SfxSpatBin_p->FilterLength = NewParam_p->FilterLength; mem_size = (int16_t) SfxSpatBin_p->FilterLength * sizeof( float ); - LeftFilter_p = (float *) count_malloc( mem_size ); - RightFilter_p = (float *) count_malloc( mem_size ); - LeftFilterIncr_p = (float *) count_malloc( mem_size ); - RightFilterIncr_p = (float *) count_malloc( mem_size ); + LeftFilter_p = (float *) malloc( mem_size ); + RightFilter_p = (float *) malloc( mem_size ); + LeftFilterIncr_p = (float *) malloc( mem_size ); + RightFilterIncr_p = (float *) malloc( mem_size ); SfxSpatBin_p->LeftFilter_p = LeftFilter_p; SfxSpatBin_p->RightFilter_p = RightFilter_p; @@ -1218,8 +1218,8 @@ ivas_error TDREND_SFX_SpatBin_Initialize( case 16000: SfxSpatBin_p->MaxTargetTime = TDREND_SRC_REND_MaxTargetTimes[0]; SfxSpatBin_p->MaxBlockLength = TDREND_SRC_REND_MaxBlockLengths[0]; - SfxSpatBin_p->LeftOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[0] ) * sizeof( float ) ); - SfxSpatBin_p->RightOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[0] ) * sizeof( float ) ); + SfxSpatBin_p->LeftOldBuffer = malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[0] ) * sizeof( float ) ); + SfxSpatBin_p->RightOldBuffer = malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[0] ) * sizeof( float ) ); /* Fill old buffers with zeros */ for ( i = 0; i < SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[0]; i++ ) { @@ -1230,8 +1230,8 @@ ivas_error TDREND_SFX_SpatBin_Initialize( case 32000: SfxSpatBin_p->MaxTargetTime = TDREND_SRC_REND_MaxTargetTimes[1]; SfxSpatBin_p->MaxBlockLength = TDREND_SRC_REND_MaxBlockLengths[1]; - SfxSpatBin_p->LeftOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[1] ) * sizeof( float ) ); - SfxSpatBin_p->RightOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[1] ) * sizeof( float ) ); + SfxSpatBin_p->LeftOldBuffer = malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[1] ) * sizeof( float ) ); + SfxSpatBin_p->RightOldBuffer = malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[1] ) * sizeof( float ) ); /* Fill old buffers with zeros */ for ( i = 0; i < SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[1]; i++ ) { @@ -1242,8 +1242,8 @@ ivas_error TDREND_SFX_SpatBin_Initialize( case 48000: SfxSpatBin_p->MaxTargetTime = TDREND_SRC_REND_MaxTargetTimes[2]; SfxSpatBin_p->MaxBlockLength = TDREND_SRC_REND_MaxBlockLengths[2]; - SfxSpatBin_p->LeftOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[2] ) * sizeof( float ) ); - SfxSpatBin_p->RightOldBuffer = count_malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[2] ) * sizeof( float ) ); + SfxSpatBin_p->LeftOldBuffer = malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[2] ) * sizeof( float ) ); + SfxSpatBin_p->RightOldBuffer = malloc( ( SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[2] ) * sizeof( float ) ); /* Fill old buffers with zeros */ for ( i = 0; i < SFX_SPAT_BIN_SINC_M * 4 + 2 * TDREND_MaxITD[2]; i++ ) { diff --git a/lib_rend/ivas_objectRenderer_sources.c b/lib_rend/ivas_objectRenderer_sources.c index 364da58c7f..f0cc254120 100644 --- a/lib_rend/ivas_objectRenderer_sources.c +++ b/lib_rend/ivas_objectRenderer_sources.c @@ -187,14 +187,14 @@ static ivas_error TDREND_SRC_REND_Alloc( *SrcRend_pp = NULL; /* Allocate the TDREND_SRC_REND_t variable */ - SrcRend_p = (TDREND_SRC_REND_t *) count_malloc( sizeof( TDREND_SRC_REND_t ) ); + SrcRend_p = (TDREND_SRC_REND_t *) malloc( sizeof( TDREND_SRC_REND_t ) ); if ( SrcRend_p == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "SrcRend_p allocation error\n" ) ); } /* Allocate the HR filtering structures */ - SrcRend_p->SfxSpatBin_p = (SFX_SpatBin_t *) count_malloc( SPAT_BIN_MAX_INPUT_CHANNELS * sizeof( SFX_SpatBin_t ) ); + SrcRend_p->SfxSpatBin_p = (SFX_SpatBin_t *) malloc( SPAT_BIN_MAX_INPUT_CHANNELS * sizeof( SFX_SpatBin_t ) ); if ( SrcRend_p->SfxSpatBin_p == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "SrcRend_p->SfxSpatBin_p allocation error\n" ) ); @@ -222,35 +222,35 @@ static void TDREND_SRC_REND_Dealloc( } if ( SrcRend_p->SfxSpatBin_p->LeftOldBuffer != NULL ) { - count_free( SrcRend_p->SfxSpatBin_p->LeftOldBuffer ); + free( SrcRend_p->SfxSpatBin_p->LeftOldBuffer ); } if ( SrcRend_p->SfxSpatBin_p->RightOldBuffer != NULL ) { - count_free( SrcRend_p->SfxSpatBin_p->RightOldBuffer ); + free( SrcRend_p->SfxSpatBin_p->RightOldBuffer ); } if ( SrcRend_p->SfxSpatBin_p->LeftFilter_p != NULL ) { - count_free( SrcRend_p->SfxSpatBin_p->LeftFilter_p ); + free( SrcRend_p->SfxSpatBin_p->LeftFilter_p ); } if ( SrcRend_p->SfxSpatBin_p->LeftFilterIncr_p != NULL ) { - count_free( SrcRend_p->SfxSpatBin_p->LeftFilterIncr_p ); + free( SrcRend_p->SfxSpatBin_p->LeftFilterIncr_p ); } if ( SrcRend_p->SfxSpatBin_p->RightFilter_p != NULL ) { - count_free( SrcRend_p->SfxSpatBin_p->RightFilter_p ); + free( SrcRend_p->SfxSpatBin_p->RightFilter_p ); } if ( SrcRend_p->SfxSpatBin_p->RightFilterIncr_p != NULL ) { - count_free( SrcRend_p->SfxSpatBin_p->RightFilterIncr_p ); + free( SrcRend_p->SfxSpatBin_p->RightFilterIncr_p ); } if ( SrcRend_p->SfxSpatBin_p != NULL ) { - count_free( SrcRend_p->SfxSpatBin_p ); + free( SrcRend_p->SfxSpatBin_p ); } /* Free the SrcRend_p variable */ - count_free( SrcRend_p ); + free( SrcRend_p ); SrcRend_p = NULL; return; @@ -340,8 +340,8 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( SfxSpatBinParams.Reset = FALSE; SfxSpatBinParams.FilterLength = HrFiltSet_p->FiltLength; - SfxSpatBinParams.LeftFilter_p = (float *) count_malloc( mem_size ); - SfxSpatBinParams.RightFilter_p = (float *) count_malloc( mem_size ); + SfxSpatBinParams.LeftFilter_p = (float *) malloc( mem_size ); + SfxSpatBinParams.RightFilter_p = (float *) malloc( mem_size ); /* 1. Map source pos to the coordinate system of the listener */ switch ( SrcSpatial_p->PosType ) @@ -419,12 +419,12 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( if ( SfxSpatBinParams.LeftFilter_p != NULL ) { - count_free( SfxSpatBinParams.LeftFilter_p ); + free( SfxSpatBinParams.LeftFilter_p ); } if ( SfxSpatBinParams.RightFilter_p != NULL ) { - count_free( SfxSpatBinParams.RightFilter_p ); + free( SfxSpatBinParams.RightFilter_p ); } return; @@ -446,7 +446,7 @@ static ivas_error TDREND_SRC_SPATIAL_Alloc( *SrcSpatial_pp = NULL; /* Allocate the TDREND_SRC_t variable */ - SrcSpatial_p = (TDREND_SRC_SPATIAL_t *) count_malloc( sizeof( TDREND_SRC_SPATIAL_t ) ); + SrcSpatial_p = (TDREND_SRC_SPATIAL_t *) malloc( sizeof( TDREND_SRC_SPATIAL_t ) ); if ( SrcSpatial_p == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "TDREND_SRC_SPATIAL_t allocation error\n" ) ); @@ -473,7 +473,7 @@ static void TDREND_SRC_SPATIAL_Dealloc( return; } /* Free the SrcSpatial_p variable */ - count_free( SrcSpatial_p ); + free( SrcSpatial_p ); SrcSpatial_p = NULL; return; @@ -658,7 +658,7 @@ ivas_error TDREND_SRC_Alloc( *Src_pp = NULL; /* Allocate the TDREND_SRC_t variable */ - Src_p = (TDREND_SRC_t *) count_malloc( sizeof( TDREND_SRC_t ) ); + Src_p = (TDREND_SRC_t *) malloc( sizeof( TDREND_SRC_t ) ); if ( Src_p == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, " TDREND_SRC_Alloc: Allocation error\n" ) ); @@ -703,7 +703,7 @@ void TDREND_SRC_Dealloc( TDREND_SRC_REND_Dealloc( Src_p->SrcRend_p ); /* Free the Src_p variable */ - count_free( Src_p ); + free( Src_p ); Src_p = NULL; return; diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index 8dbf05ed4a..ea63940ce4 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -53,7 +53,7 @@ ivas_error ivas_render_config_open( ) { /* Allocate HR filter set for headphones configuration */ - *hRenderConfig = (RENDER_CONFIG_HANDLE) count_malloc( sizeof( RENDER_CONFIG_DATA ) ); + *hRenderConfig = (RENDER_CONFIG_HANDLE) malloc( sizeof( RENDER_CONFIG_DATA ) ); if ( *hRenderConfig == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer configuration!" ); @@ -78,7 +78,7 @@ void ivas_render_config_close( return; } - count_free( *hRenderConfig ); + free( *hRenderConfig ); *hRenderConfig = NULL; return; diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index ffbdd026a3..a6cc8d50ea 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -965,7 +965,7 @@ ivas_error ivas_reverb_open( nr_fc_input = hRenderConfig->roomAcoustics.nBands; /* Allocate main reverb. handle */ - if ( ( pState = (REVERB_HANDLE) count_malloc( sizeof( REVERB_DATA ) ) ) == NULL ) + if ( ( pState = (REVERB_HANDLE) malloc( sizeof( REVERB_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Reverberator " ); } @@ -978,14 +978,14 @@ ivas_error ivas_reverb_open( /* Allocate memory for feedback delay lines */ for ( loop_idx = 0; loop_idx < IVAS_REV_MAX_NR_BRANCHES; loop_idx++ ) { - if ( ( pState->loop_delay_buffer[loop_idx] = (float *) count_malloc( params.pLoop_delays[loop_idx] * sizeof( float ) ) ) == NULL ) + if ( ( pState->loop_delay_buffer[loop_idx] = (float *) malloc( params.pLoop_delays[loop_idx] * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CREND Reverberator" ); } } /* Allocate memory for the pre-delay delay line */ - if ( ( pState->pPredelay_buffer = (float *) count_malloc( output_frame * sizeof( float ) ) ) == NULL ) + if ( ( pState->pPredelay_buffer = (float *) malloc( output_frame * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CREND Reverberator" ); } @@ -1120,15 +1120,15 @@ void ivas_reverb_close( { if ( hReverb->loop_delay_buffer[loop_idx] != NULL ) { - count_free( hReverb->loop_delay_buffer[loop_idx] ); + free( hReverb->loop_delay_buffer[loop_idx] ); hReverb->loop_delay_buffer[loop_idx] = NULL; } } - count_free( hReverb->pPredelay_buffer ); + free( hReverb->pPredelay_buffer ); hReverb->pPredelay_buffer = NULL; - count_free( hReverb ); + free( hReverb ); hReverb = NULL; } diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 6a0c460ba5..c11511ef3d 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -77,7 +77,7 @@ ivas_error ivas_headTrack_open( int16_t i; /* Allocate Head-Tracking handle */ - if ( ( *hHeadTrackData = (HEAD_TRACK_DATA_HANDLE) count_malloc( sizeof( HEAD_TRACK_DATA ) ) ) == NULL ) + if ( ( *hHeadTrackData = (HEAD_TRACK_DATA_HANDLE) malloc( sizeof( HEAD_TRACK_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for head-tracking memory\n" ) ); } diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 9f714e73b0..a134992047 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -1747,7 +1747,7 @@ static ivas_error initSbaPanGainsForMcOut( } } - count_free( tmpDecMtx ); + free( tmpDecMtx ); return IVAS_ERR_OK; } @@ -2120,8 +2120,8 @@ static DecoderDummy *initDecoderDummy( int32_t sampleRate, int16_t numTransChann assert( error == IVAS_ERR_OK ); } - decDummy = count_malloc( sizeof( DecoderDummy ) ); - decDummy->hDecoderConfig = count_malloc( sizeof( DECODER_CONFIG ) ); + decDummy = malloc( sizeof( DecoderDummy ) ); + decDummy->hDecoderConfig = malloc( sizeof( DECODER_CONFIG ) ); decDummy->hDecoderConfig->output_Fs = sampleRate; decDummy->hDecoderConfig->nchan_out = (int16_t) numOutChannels; decDummy->hDecoderConfig->Opt_Headrotation = 0; @@ -2141,7 +2141,7 @@ static DecoderDummy *initDecoderDummy( int32_t sampleRate, int16_t numTransChann if ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM || outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) { - decDummy->hHeadTrackData = count_malloc( sizeof( HEAD_TRACK_DATA ) ); + decDummy->hHeadTrackData = malloc( sizeof( HEAD_TRACK_DATA ) ); /* Initialise Rmat_prev to I, Rmat will be computed later */ for ( i = 0; i < 3; i++ ) { @@ -2222,11 +2222,11 @@ static void freeDecoderDummy( DecoderDummy **ppDecDummy ) if ( pDecDummy->hDecoderConfig != NULL ) { - count_free( pDecDummy->hDecoderConfig ); + free( pDecDummy->hDecoderConfig ); } if ( pDecDummy->hHeadTrackData != NULL ) { - count_free( pDecDummy->hHeadTrackData ); + free( pDecDummy->hHeadTrackData ); } ivas_render_config_close( &pDecDummy->hRenderConfig ); @@ -2266,7 +2266,7 @@ static void freeDecoderDummy( DecoderDummy **ppDecDummy ) /* HOA decoder matrix */ if ( pDecDummy->hoa_dec_mtx != NULL ) { - count_free( pDecDummy->hoa_dec_mtx ); + free( pDecDummy->hoa_dec_mtx ); pDecDummy->hoa_dec_mtx = NULL; } @@ -2274,7 +2274,7 @@ static void freeDecoderDummy( DecoderDummy **ppDecDummy ) ivas_dirac_dec_close_binaural_data( &pDecDummy->hDiracDecBin ); #endif - count_free( pDecDummy ); + free( pDecDummy ); pDecDummy = NULL; } @@ -2316,7 +2316,7 @@ ivas_error IVAS_REND_Open( return error; } - *phIvasRend = (IVAS_REND_HANDLE) count_malloc( sizeof( struct IVAS_REND ) ); + *phIvasRend = (IVAS_REND_HANDLE) malloc( sizeof( struct IVAS_REND ) ); if ( *phIvasRend == NULL ) { return IVAS_ERR_FAILED_ALLOC; @@ -3756,7 +3756,7 @@ static ivas_error renderIsmToBinauralRoom( tmpMcBuffer = ismInput->base.inputBuffer; getAudioConfigNumChannels( IVAS_REND_AUDIO_CONFIG_7_1_4, &tmp ); tmpMcBuffer.config.numChannels = tmp; - tmpMcBuffer.data = count_malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); + tmpMcBuffer.data = malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); set_zero( tmpMcBuffer.data, tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels ); renderBufferChannelLerp( ismInput->base.inputBuffer, 0, currentPanGains, previousPanGains, tmpMcBuffer ); @@ -3767,7 +3767,7 @@ static ivas_error renderIsmToBinauralRoom( accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); - count_free( tmpMcBuffer.data ); + free( tmpMcBuffer.data ); pop_wmops(); @@ -4014,7 +4014,7 @@ static ivas_error renderMcToBinaural( if ( headRotEnabled ) { tmpRotBuffer = mcInput->base.inputBuffer; - tmpRotBuffer.data = count_malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); + tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); set_zero( tmpRotBuffer.data, tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels ); rotateFrameMc( mcInput->base.inputBuffer, @@ -4026,7 +4026,7 @@ static ivas_error renderMcToBinaural( tmpRotBuffer ); copyBufferTo2dArray( tmpRotBuffer, tmpRendBuffer ); - count_free( tmpRotBuffer.data ); + free( tmpRotBuffer.data ); } else { @@ -4066,7 +4066,7 @@ static ivas_error renderMcToBinauralRoom( if ( mcInput->base.ctx.pHeadRotData->headRotEnabled ) { tmpRotBuffer = mcInput->base.inputBuffer; - tmpRotBuffer.data = count_malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); + tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); set_zero( tmpRotBuffer.data, tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels ); rotateFrameMc( mcInput->base.inputBuffer, @@ -4078,7 +4078,7 @@ static ivas_error renderMcToBinauralRoom( tmpRotBuffer ); copyBufferTo2dArray( tmpRotBuffer, tmpCrendBuffer ); - count_free( tmpRotBuffer.data ); + free( tmpRotBuffer.data ); } else { @@ -4126,7 +4126,7 @@ static ivas_error renderMcCustomLsToBinauralRoom( if ( headRotEnabled ) { tmpRotBuffer = mcInput->base.inputBuffer; - tmpRotBuffer.data = count_malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); + tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); set_zero( tmpRotBuffer.data, tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels ); rotateFrameMc( mcInput->base.inputBuffer, @@ -4142,7 +4142,7 @@ static ivas_error renderMcCustomLsToBinauralRoom( tmpMcBuffer = mcInput->base.inputBuffer; getAudioConfigNumChannels( IVAS_REND_AUDIO_CONFIG_7_1_4, &tmp ); tmpMcBuffer.config.numChannels = (int16_t) tmp; - tmpMcBuffer.data = count_malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); + tmpMcBuffer.data = malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); set_zero( tmpMcBuffer.data, tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels ); tmpBufPtr = ( headRotEnabled ) ? &tmpRotBuffer : &mcInput->base.inputBuffer; @@ -4165,9 +4165,9 @@ static ivas_error renderMcCustomLsToBinauralRoom( if ( headRotEnabled ) { - count_free( tmpRotBuffer.data ); + free( tmpRotBuffer.data ); } - count_free( tmpMcBuffer.data ); + free( tmpMcBuffer.data ); pop_wmops(); @@ -4361,7 +4361,7 @@ static ivas_error renderSbaToBinaural( if ( sbaInput->base.ctx.pHeadRotData->headRotEnabled ) { tmpRotBuffer = sbaInput->base.inputBuffer; - tmpRotBuffer.data = count_malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); + tmpRotBuffer.data = 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 ); @@ -4373,7 +4373,7 @@ static ivas_error renderSbaToBinaural( tmpRotBuffer ); copyBufferTo2dArray( tmpRotBuffer, tmpCrendBuffer ); - count_free( tmpRotBuffer.data ); + free( tmpRotBuffer.data ); } else { @@ -4418,7 +4418,7 @@ static ivas_error renderSbaToBinauralRoom( if ( headRotEnabled ) { tmpRotBuffer = sbaInput->base.inputBuffer; - tmpRotBuffer.data = count_malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); + tmpRotBuffer.data = 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 ); @@ -4429,7 +4429,7 @@ static ivas_error renderSbaToBinauralRoom( tmpMcBuffer = sbaInput->base.inputBuffer; getAudioConfigNumChannels( IVAS_REND_AUDIO_CONFIG_7_1_4, &tmp ); tmpMcBuffer.config.numChannels = (int16_t) tmp; - tmpMcBuffer.data = count_malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); + tmpMcBuffer.data = malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); set_zero( tmpMcBuffer.data, tmpMcBuffer.config.numChannels * tmpMcBuffer.config.numSamplesPerChannel ); tmpBufPtr = ( headRotEnabled ) ? &tmpRotBuffer : &sbaInput->base.inputBuffer; @@ -4450,9 +4450,9 @@ static ivas_error renderSbaToBinauralRoom( if ( headRotEnabled ) { - count_free( tmpRotBuffer.data ); + free( tmpRotBuffer.data ); } - count_free( tmpMcBuffer.data ); + free( tmpMcBuffer.data ); pop_wmops(); @@ -4826,7 +4826,7 @@ void IVAS_REND_Close( ivas_limiter_close( &hIvasRend->hLimiter ); - count_free( hIvasRend ); + free( hIvasRend ); *phIvasRend = NULL; return; diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 92b0058436..a4ea39b298 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -126,16 +126,16 @@ static void LoadBSplineBinaryITD( fread( &modelITD->N, sizeof( int16_t ), 1, f_hrtf ); fread( &modelITD->elevDim2, sizeof( int16_t ), 1, f_hrtf ); fread( &modelITD->elevDim3, sizeof( int16_t ), 1, f_hrtf ); - modelITD->elevKSeq_dyn = (float *) count_malloc( ( modelITD->elevDim3 - 2 ) * sizeof( float ) ); + modelITD->elevKSeq_dyn = (float *) malloc( ( modelITD->elevDim3 - 2 ) * sizeof( float ) ); fread( modelITD->elevKSeq_dyn, sizeof( float ), modelITD->elevDim3 - 2, f_hrtf ); fread( &modelITD->azimDim2, sizeof( int16_t ), 1, f_hrtf ); fread( &modelITD->azimDim3, sizeof( int16_t ), 1, f_hrtf ); - modelITD->azimKSeq_dyn = (float *) count_malloc( ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ) * sizeof( float ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */ + modelITD->azimKSeq_dyn = (float *) malloc( ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ) * sizeof( float ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */ fread( modelITD->azimKSeq_dyn, sizeof( float ), ( modelITD->azimDim3 + 1 ) / 2 - 2, f_hrtf ); fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); - modelITD->W_dyn = (float *) count_malloc( tmp * sizeof( float ) ); + modelITD->W_dyn = (float *) malloc( tmp * sizeof( float ) ); fread( modelITD->W_dyn, sizeof( float ), tmp, f_hrtf ); /* azimuth */ @@ -144,7 +144,7 @@ static void LoadBSplineBinaryITD( fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); - modelITD->azimBsShape_dyn = (float *) count_malloc( tmp * sizeof( float ) ); + modelITD->azimBsShape_dyn = (float *) malloc( tmp * sizeof( float ) ); fread( modelITD->azimBsShape_dyn, sizeof( float ), tmp, f_hrtf ); fread( &modelITD->azimSegSamples, sizeof( int16_t ), 1, f_hrtf ); @@ -155,7 +155,7 @@ static void LoadBSplineBinaryITD( fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); - modelITD->elevBsShape_dyn = (float *) count_malloc( tmp * sizeof( float ) ); + modelITD->elevBsShape_dyn = (float *) malloc( tmp * sizeof( float ) ); fread( modelITD->elevBsShape_dyn, sizeof( float ), tmp, f_hrtf ); fread( &modelITD->elevSegSamples, sizeof( int16_t ), 1, f_hrtf ); @@ -224,51 +224,51 @@ static ivas_error LoadBSplineBinary( fread( &model->elevDim2, sizeof( int16_t ), 1, f_hrtf ); fread( &model->elevDim3, sizeof( int16_t ), 1, f_hrtf ); - model->elevKSeq_dyn = (float *) count_malloc( ( model->elevDim3 - 2 ) * sizeof( float ) ); + model->elevKSeq_dyn = (float *) malloc( ( model->elevDim3 - 2 ) * sizeof( float ) ); fread( model->elevKSeq_dyn, sizeof( float ), model->elevDim3 - 2, f_hrtf ); - model->azimDim2_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); - model->azimDim3_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); - model->azim_start_idx_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); - model->azimKSeq = (float **) count_malloc( model->elevDim3 * sizeof( float * ) ); + model->azimDim2_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); + model->azimDim3_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); + model->azim_start_idx_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); + model->azimKSeq = (float **) malloc( model->elevDim3 * sizeof( float * ) ); for ( i = 0; i < model->elevDim3; i++ ) { fread( &model->azimDim2_dyn[i], sizeof( int16_t ), 1, f_hrtf ); fread( &model->azimDim3_dyn[i], sizeof( int16_t ), 1, f_hrtf ); fread( &model->azim_start_idx_dyn[i], sizeof( int16_t ), 1, f_hrtf ); - model->azimKSeq[i] = (float *) count_malloc( ( model->azimDim3_dyn[i] + 1 ) * sizeof( float ) ); + model->azimKSeq[i] = (float *) malloc( ( model->azimDim3_dyn[i] + 1 ) * sizeof( float ) ); fread( model->azimKSeq[i], sizeof( float ), ( model->azimDim3_dyn[i] + 1 ), f_hrtf ); } fread( &model->AlphaN, sizeof( int16_t ), 1, f_hrtf ); - model->AlphaL_dyn = (float *) count_malloc( model->AlphaN * model->K * sizeof( float ) ); + model->AlphaL_dyn = (float *) malloc( model->AlphaN * model->K * sizeof( float ) ); fread( model->AlphaL_dyn, sizeof( float ), model->AlphaN * model->K, f_hrtf ); - model->AlphaR_dyn = (float *) count_malloc( model->AlphaN * model->K * sizeof( float ) ); + model->AlphaR_dyn = (float *) malloc( model->AlphaN * model->K * sizeof( float ) ); fread( model->AlphaR_dyn, sizeof( float ), model->AlphaN * model->K, f_hrtf ); /* azimuth */ fread( &model->num_unique_azim_splines, sizeof( int16_t ), 1, f_hrtf ); - model->azimBsShape = (const float **) count_malloc( model->num_unique_azim_splines * sizeof( float * ) ); - model->azimBsShape_dyn = (float **) count_malloc( model->num_unique_azim_splines * sizeof( float * ) ); - model->azimSegSamples_dyn = (int16_t *) count_malloc( model->num_unique_azim_splines * sizeof( int16_t ) ); + model->azimBsShape = (const float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ); + model->azimBsShape_dyn = (float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ); + model->azimSegSamples_dyn = (int16_t *) malloc( model->num_unique_azim_splines * sizeof( int16_t ) ); for ( i = 0; i < model->num_unique_azim_splines; i++ ) { fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); - model->azimBsShape_dyn[i] = (float *) count_malloc( tmp * sizeof( float ) ); + model->azimBsShape_dyn[i] = (float *) malloc( tmp * sizeof( float ) ); fread( model->azimBsShape_dyn[i], sizeof( float ), tmp, f_hrtf ); fread( &model->azimSegSamples_dyn[i], sizeof( int16_t ), 1, f_hrtf ); } - model->azimShapeIdx_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); + model->azimShapeIdx_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); fread( model->azimShapeIdx_dyn, sizeof( int16_t ), model->elevDim3, f_hrtf ); - model->azimShapeSampFactor_dyn = (int16_t *) count_malloc( model->elevDim3 * sizeof( int16_t ) ); + model->azimShapeSampFactor_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); fread( model->azimShapeSampFactor_dyn, sizeof( int16_t ), model->elevDim3, f_hrtf ); /* elevation */ fread( model->elevBsLen, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); fread( model->elevBsStart, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); - model->elevBsShape_dyn = (float *) count_malloc( tmp * sizeof( float ) ); + model->elevBsShape_dyn = (float *) malloc( tmp * sizeof( float ) ); fread( model->elevBsShape_dyn, sizeof( float ), tmp, f_hrtf ); fread( &model->elevSegSamples, sizeof( int16_t ), 1, f_hrtf ); diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c index cc06737da4..69f5f99556 100644 --- a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c @@ -1317,7 +1317,7 @@ ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, fl { if ( st_ivas.hLFE->lfe_delay_buf != NULL ) { - count_free( st_ivas.hLFE->lfe_delay_buf ); + free( st_ivas.hLFE->lfe_delay_buf ); st_ivas.hLFE->lfe_delay_buf = NULL; } if ( pIo_params->latency_s > 0 ) @@ -1325,7 +1325,7 @@ ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, fl st_ivas.hLFE->lfe_addl_delay = (int16_t) roundf( pIo_params->latency_s * dec_io_params.out_sample_rate ); if ( st_ivas.hLFE->lfe_addl_delay > 0 ) { - if ( ( st_ivas.hLFE->lfe_delay_buf = (float *) count_malloc( st_ivas.hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) + if ( ( st_ivas.hLFE->lfe_delay_buf = (float *) malloc( st_ivas.hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) { fprintf( stderr, "Can not allocate memory for LFE additional delay buffer\n" ); return IVAS_FAILED; @@ -1344,7 +1344,7 @@ ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, fl delay_lp = (int16_t) ( ivas_lfe_lpf_delay[1] * (float) pIo_params->sample_rate ); for ( i = 0; i < in_ch - st_ivas.hIntSetup.num_lfe; i++ ) { - if ( ( ppDelay_lines[i] = (float *) count_malloc( delay_lp * sizeof( float ) ) ) == NULL ) + if ( ( ppDelay_lines[i] = (float *) malloc( delay_lp * sizeof( float ) ) ) == NULL ) { fprintf( stderr, "Can not allocate memory for LFE additional delay buffer\n" ); return IVAS_FAILED; @@ -1592,7 +1592,7 @@ ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, fl { for ( i = 0; i < in_ch - st_ivas.hIntSetup.num_lfe; i++ ) { - count_free( ppDelay_lines[i] ); + free( ppDelay_lines[i] ); } } if ( st_ivas.hRenderConfig != NULL ) @@ -1603,7 +1603,7 @@ ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, fl /* Head track data handle */ if ( st_ivas.hHeadTrackData != NULL ) { - count_free( st_ivas.hHeadTrackData ); + free( st_ivas.hHeadTrackData ); st_ivas.hHeadTrackData = NULL; } -- GitLab From ad634cbea73ad4fe58d6fcc469d6cb5ad1071b46 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 12:37:11 +0100 Subject: [PATCH 009/103] removal of dynamic_malloc --- lib_enc/lib_enc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 44e69a9f86..8c92a96ca4 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -114,7 +114,9 @@ ivas_error IVAS_ENC_Open( *-----------------------------------------------------------------*/ #ifdef BITSTREAM_INDICES_MEMORY - if ( ( *phIvasEnc = (IVAS_ENC_HANDLE) dynamic_malloc( sizeof( struct IVAS_ENC ) ) ) == NULL ) +#define WMC_TOOL_SKIP + if ( ( *phIvasEnc = (IVAS_ENC_HANDLE) malloc( sizeof( struct IVAS_ENC ) ) ) == NULL ) +#undef WMC_TOOL_SKIP #else if ( ( *phIvasEnc = (IVAS_ENC_HANDLE) malloc( sizeof( struct IVAS_ENC ) ) ) == NULL ) #endif -- GitLab From ad76ed1893b16a885bb41bec28515c69e04c84a8 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 12:38:09 +0100 Subject: [PATCH 010/103] removal of dynamic_free --- lib_enc/lib_enc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 8c92a96ca4..2ab737e4ec 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -224,7 +224,9 @@ void IVAS_ENC_Close( ( *phIvasEnc )->st_ivas = NULL; #ifdef BITSTREAM_INDICES_MEMORY - dynamic_free( *phIvasEnc ); +#ifdef WMC_TOOL_SKIP + free( *phIvasEnc ); +#undef WMC_TOOL_SKIP #else free( *phIvasEnc ); #endif -- GitLab From f0b9192add41bd7320d7955cfae099ded24091f4 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 12:39:19 +0100 Subject: [PATCH 011/103] removal of dynamic_malloc - cont. --- lib_dec/lib_dec.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 792aafe180..4bdc40eb65 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -1825,10 +1825,11 @@ void IVAS_DEC_PrintConfigWithBitstream( { Decoder_Struct *st_ivas; +#define WMC_TOOL_WKIP /* Create a copy of decoder struct that will be modified by preview_indices(), * leaving the original decoder struct unchanged. The additional memory used here * should not be counted towards memory footprint of the decoder. */ - st_ivas = dynamic_malloc( sizeof( Decoder_Struct ) ); + st_ivas = malloc( sizeof( Decoder_Struct ) ); memcpy( st_ivas, hIvasDec->st_ivas, sizeof( Decoder_Struct ) ); preview_indices( st_ivas, bit_stream, num_bits ); @@ -1836,7 +1837,8 @@ void IVAS_DEC_PrintConfigWithBitstream( /* Print config from modified decoder struct */ printConfigInfo_dec( st_ivas, hIvasDec->bitstreamformat, hIvasDec->Opt_VOIP, quietModeEnabled ); - dynamic_free( st_ivas ); + free( st_ivas ); +#undef WMC_TOOL_SKIP return; } -- GitLab From 54c17c82296deeed6bf0ef2b7245313d148ca863 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 12:44:25 +0100 Subject: [PATCH 012/103] replacement of count_calloc() with calloc() --- apps/renderer.c | 5 ++--- lib_dec/ivas_vbap.c | 6 +++--- lib_enc/lib_enc.c | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index df04ea984d..8dc3eb6332 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -437,7 +437,7 @@ static int16_t getTotalNumInChannels( } #ifdef NOKIA_MASA_EXTERNAL_RENDERER - for ( int32_t i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) + for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { if ( masaIds[i] == 0 ) { @@ -924,7 +924,6 @@ int main( #ifdef NOKIA_MASA_EXTERNAL_RENDERER for ( i = 0; i < args.inConfig.numMasaBuses; ++i ) { - int16_t numChannels; if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, masaIds[i], &numChannels ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); @@ -1325,7 +1324,7 @@ static IVAS_REND_AudioConfig parseAudioConfig( case '1': fprintf( stderr, "1TC MASA support is not functional and is pending on DirAC renderer refactoring.\n" ); exit( EXIT_FAILURE ); - return IVAS_REND_AUDIO_CONFIG_MASA1; + //return IVAS_REND_AUDIO_CONFIG_MASA1; case '2': return IVAS_REND_AUDIO_CONFIG_MASA2; default: diff --git a/lib_dec/ivas_vbap.c b/lib_dec/ivas_vbap.c index 2842e49738..e651646bbf 100644 --- a/lib_dec/ivas_vbap.c +++ b/lib_dec/ivas_vbap.c @@ -200,7 +200,7 @@ ivas_error vbap_init_data( if ( is_success && virtual_bottom_type != NO_VIRTUAL_SPEAKER_NODE ) { - vbap->bottom_virtual_speaker_node_division_gains = (float *) count_calloc( num_speaker_nodes, sizeof( float ) ); + vbap->bottom_virtual_speaker_node_division_gains = (float *) calloc( num_speaker_nodes, sizeof( float ) ); is_success &= vbap->bottom_virtual_speaker_node_division_gains != NULL; speaker_node_azi_deg_internal[vbap->bottom_virtual_speaker_node_index] = 0.0f; speaker_node_ele_deg_internal[vbap->bottom_virtual_speaker_node_index] = -90.0f; @@ -208,7 +208,7 @@ ivas_error vbap_init_data( if ( is_success && virtual_top_type != NO_VIRTUAL_SPEAKER_NODE ) { - vbap->top_virtual_speaker_node_division_gains = (float *) count_calloc( num_speaker_nodes, sizeof( float ) ); + vbap->top_virtual_speaker_node_division_gains = (float *) calloc( num_speaker_nodes, sizeof( float ) ); is_success &= vbap->top_virtual_speaker_node_division_gains != NULL; speaker_node_azi_deg_internal[vbap->top_virtual_speaker_node_index] = 0.0f; speaker_node_ele_deg_internal[vbap->top_virtual_speaker_node_index] = 90.0f; @@ -216,7 +216,7 @@ ivas_error vbap_init_data( if ( is_success && virtual_back_type != NO_VIRTUAL_SPEAKER_NODE ) { - vbap->back_virtual_speaker_node_division_gains = (float *) count_calloc( num_speaker_nodes, sizeof( float ) ); + vbap->back_virtual_speaker_node_division_gains = (float *) calloc( num_speaker_nodes, sizeof( float ) ); is_success &= vbap->back_virtual_speaker_node_division_gains != NULL; speaker_node_azi_deg_internal[vbap->back_virtual_speaker_node_index] = 180.0f; speaker_node_ele_deg_internal[vbap->back_virtual_speaker_node_index] = 0.0f; diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 2ab737e4ec..af8424b3e8 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -224,7 +224,7 @@ void IVAS_ENC_Close( ( *phIvasEnc )->st_ivas = NULL; #ifdef BITSTREAM_INDICES_MEMORY -#ifdef WMC_TOOL_SKIP +#define WMC_TOOL_SKIP free( *phIvasEnc ); #undef WMC_TOOL_SKIP #else -- GitLab From b792f76e9a811c134fdd025675667092a12db6a3 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 12:46:17 +0100 Subject: [PATCH 013/103] bug fixes --- apps/decoder.c | 4 ++-- apps/encoder.c | 2 +- apps/renderer.c | 2 +- lib_com/options.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 825903d0be..012833761a 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -446,7 +446,7 @@ int main( #ifdef WMOPS reset_wmops(); - rest_mem( USE_32BITS ); + reset_mem( USE_32BITS ); #endif /*-----------------------------------------------------------------* @@ -528,7 +528,7 @@ cleanup: #ifdef WMOPS print_wmops(); - print_mem(); + print_mem( NULL ); #endif if ( !arg.quietModeEnabled ) diff --git a/apps/encoder.c b/apps/encoder.c index f1c023f8ca..87cc319ec4 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -778,7 +778,7 @@ cleanup: #ifdef WMOPS print_wmops(); - print_mem( ); + print_mem( NULL ); #endif #ifdef DEBUGGING diff --git a/apps/renderer.c b/apps/renderer.c index 8dc3eb6332..1ddc3e8690 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1049,7 +1049,7 @@ int main( #ifdef WMOPS print_wmops(); - print_mem(); + print_mem( NULL ); #endif return 0; diff --git a/lib_com/options.h b/lib_com/options.h index a831340bc0..b3261333e3 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -50,7 +50,7 @@ #ifndef RELEASE #define DEBUGGING /* Activate debugging part of the code */ #endif -/*#define WMOPS*/ /* Activate complexity and memory counters (! the codec must be already instrumented with the WMC Tool (use /ic and /op options) !) */ +#define WMOPS /* Activate complexity and memory counters (! the codec must be already instrumented with the WMC Tool (use /ic and /op options) !) */ /*#define WMOPS_PER_FRAME*/ /* Output complexity in WMOPS per frame to the file "res/wmops" (one float value per frame) */ /*#define WMOPS_DETAIL*/ /* Activate complexity detail printout for every function. Increases runtime overhead */ /*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output WMOPS analysis for worst case frame */ -- GitLab From 0ad2254d5ab3eee71b9ac59e2bd08cd97971a2bb Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 13:09:38 +0100 Subject: [PATCH 014/103] replacement of WMC_TOOL_SKIP_FILE with WMC_TOOL_SKIP --- lib_com/basop32.c | 4 +++- lib_com/basop_com_lpc.c | 6 ++++-- lib_com/basop_lsf_tools.c | 5 ++++- lib_com/basop_mpy.c | 5 ++++- lib_com/basop_tcx_utils.c | 5 ++++- lib_com/basop_util.c | 5 ++++- lib_com/disclaimer.c | 3 ++- lib_com/enh1632.c | 5 +++-- lib_com/enh40.c | 5 ++++- lib_com/options.h | 2 +- lib_com/window.c | 7 +++++-- 11 files changed, 38 insertions(+), 14 deletions(-) diff --git a/lib_com/basop32.c b/lib_com/basop32.c index b12e336e9c..af94bfaca6 100644 --- a/lib_com/basop32.c +++ b/lib_com/basop32.c @@ -30,7 +30,6 @@ *******************************************************************************************************/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ /* v.2.3 - 30.Nov.2009 ============================================================================= @@ -167,6 +166,8 @@ HISTORY: #include "ivas_error.h" #include "ivas_error_utils.h" +#define WMC_TOOL_SKIP + #ifdef _MSC_VER #pragma warning( disable : 4310 ) #endif @@ -3203,4 +3204,5 @@ Word32 L_msu0( Word32 L_var3, Word16 var1, Word16 var2 ) #endif /* ! BASOP_NOGLOB */ +#undef WMC_TOOL_SKIP /* end of file */ diff --git a/lib_com/basop_com_lpc.c b/lib_com/basop_com_lpc.c index a24c100d54..3b02560719 100644 --- a/lib_com/basop_com_lpc.c +++ b/lib_com/basop_com_lpc.c @@ -33,7 +33,6 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ #include #include @@ -41,10 +40,11 @@ #include "typedef.h" #include "basop_proto_func.h" #include "cnst.h" - #include "basop_util.h" #include "stl.h" +#define WMC_TOOL_SKIP + #define UNROLL_CHEBYSHEV_INNER_LOOP #define NC_MAX 8 #define GUESS_TBL_SZ 256 @@ -259,3 +259,5 @@ void basop_lsf2lsp( const Word16 lsf[], Word16 lsp[] ) return; } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/basop_lsf_tools.c b/lib_com/basop_lsf_tools.c index 7a7e655f81..72d5383c2f 100644 --- a/lib_com/basop_lsf_tools.c +++ b/lib_com/basop_lsf_tools.c @@ -33,7 +33,6 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ #include #include @@ -42,6 +41,8 @@ #include "control.h" #include "basop_util.h" +#define WMC_TOOL_SKIP + #define NC_MAX 8 static Word16 E_LPC_f_lsp_pol_get( const Word16 lsp[], Word32 f[], const Word16 n, const Word16 past_Ovf, const Word16 isMODE1 ); @@ -309,3 +310,5 @@ static Word16 E_LPC_f_lsp_pol_get( } return Ovf; } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/basop_mpy.c b/lib_com/basop_mpy.c index 478dff4cfe..4641af2211 100644 --- a/lib_com/basop_mpy.c +++ b/lib_com/basop_mpy.c @@ -33,7 +33,6 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ #include "basop_mpy.h" #include @@ -42,6 +41,8 @@ #include "debug.h" #endif +#define WMC_TOOL_SKIP + Word32 Mpy_32_16_1( Word32 x, Word16 y ) { Word32 mh; @@ -87,3 +88,5 @@ Word32 Mpy_32_32( Word32 x, Word32 y ) return ( mh ); } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/basop_tcx_utils.c b/lib_com/basop_tcx_utils.c index ea306d34b2..84b6ffca9b 100644 --- a/lib_com/basop_tcx_utils.c +++ b/lib_com/basop_tcx_utils.c @@ -33,7 +33,6 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ #include #include @@ -47,6 +46,8 @@ #include "prot.h" #include "rom_com.h" +#define WMC_TOOL_SKIP + /* compare two positive normalized 16 bit mantissa/exponent values */ /* return value: positive if first value greater, negative if second value greater, zero if equal */ static Word16 compMantExp16Unorm( Word16 m1, Word16 e1, Word16 m2, Word16 e2 ) @@ -436,3 +437,5 @@ void basop_PsychAdaptLowFreqDeemph( Word32 x[], const Word16 lpcGains[], const W } } } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/basop_util.c b/lib_com/basop_util.c index 71feed1276..0006971a23 100644 --- a/lib_com/basop_util.c +++ b/lib_com/basop_util.c @@ -33,7 +33,6 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ #include #include @@ -48,6 +47,8 @@ #include "control.h" #include "cnst.h" +#define WMC_TOOL_SKIP + extern const Word32 SqrtTable[32]; extern const Word16 SqrtDiffTable[32]; @@ -1107,3 +1108,5 @@ Word32 Sqrt_l( return ( L_y ); } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_com/disclaimer.c b/lib_com/disclaimer.c index 749f9fcce2..8e55138dd8 100644 --- a/lib_com/disclaimer.c +++ b/lib_com/disclaimer.c @@ -33,7 +33,6 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ #include #include "options.h" @@ -42,6 +41,8 @@ #endif #include "prot.h" +#define WMC_TOOL_SKIP + int16_t print_disclaimer( FILE *fPtr ) { diff --git a/lib_com/enh1632.c b/lib_com/enh1632.c index 985398eec9..402d4a62c9 100644 --- a/lib_com/enh1632.c +++ b/lib_com/enh1632.c @@ -30,7 +30,6 @@ *******************************************************************************************************/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ /* =========================================================================== File: ENH1632.C v.2.3 - 30.Nov.2009 @@ -90,6 +89,8 @@ #include #include "stl.h" +#define WMC_TOOL_SKIP + /***************************************************************************** * * Constants and Globals @@ -629,5 +630,5 @@ Word32 L_rotl( Word32 L_var1, Word16 var2, Word16 *var3 ) return ( L_var_out ); } - +#undef WMC_TOOL_SKIP /* end of file */ diff --git a/lib_com/enh40.c b/lib_com/enh40.c index 777bfffd8f..645a220803 100644 --- a/lib_com/enh40.c +++ b/lib_com/enh40.c @@ -30,7 +30,6 @@ *******************************************************************************************************/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ /* =========================================================================== File: ENH40.C v.2.3 - 30.Nov.2009 @@ -93,6 +92,7 @@ * Include-Files * *****************************************************************************/ + #include #include #include "stl.h" @@ -100,6 +100,8 @@ #include #endif /* BASOP_NOGLOB */ +#define WMC_TOOL_SKIP + #ifdef _MSC_VER #pragma warning( disable : 4310 ) #endif @@ -1308,4 +1310,5 @@ Word40 L40_shl_r( Word40 L40_var1, Word16 var2 ) } +#undef WMC_TOOL_SKIP /* end of file */ diff --git a/lib_com/options.h b/lib_com/options.h index b3261333e3..949a5d2ec7 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -57,7 +57,7 @@ #ifdef DEBUGGING -/*#define MEM_COUNT_DETAILS*/ /* RAM counting tool: print per sub-structure details */ +#define MEM_COUNT_DETAILS /* RAM counting tool: print per sub-structure details */ /*#define DEBUG_MODE_INFO*/ /* output most important parameters to the subdirectory "res/" */ #ifdef DEBUG_MODE_INFO diff --git a/lib_com/window.c b/lib_com/window.c index a3bf82ac7e..80797869e0 100644 --- a/lib_com/window.c +++ b/lib_com/window.c @@ -33,16 +33,17 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ #include +#include #include "options.h" #ifdef DEBUGGING #include "debug.h" #endif -#include #include "prot.h" +#define WMC_TOOL_SKIP + /*------------------------------------------------------------------- * ham_cos_window() * @@ -75,3 +76,5 @@ void ham_cos_window( return; } + +#undef WMC_TOOL_SKIP \ No newline at end of file -- GitLab From 4a87b4699c5c3c80dbe9a7d4200d253b4676b975 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 13:13:35 +0100 Subject: [PATCH 015/103] bug fixes --- apps/renderer.c | 2 +- lib_com/enh40.c | 1 - lib_dec/jbm_jb4_inputbuffer.c | 7 ++++--- lib_dec/jbm_jb4sb.c | 4 +++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index 1ddc3e8690..1144e1dd25 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -929,7 +929,7 @@ int main( fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } - IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, args.inConfig.masaBuses[i].inputChannelIndex, numChannels ); + IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.masaBuses[i].inputChannelIndex, numChannels ); if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, masaIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) { diff --git a/lib_com/enh40.c b/lib_com/enh40.c index 645a220803..1215d9f576 100644 --- a/lib_com/enh40.c +++ b/lib_com/enh40.c @@ -163,7 +163,6 @@ #ifndef BASOP_NOGLOB Word40 L40_shl( Word40 L40_var1, Word16 var2 ) #else /* BASOP_NOGLOB */ - Word40 L40_shl_o( Word40 L40_var1, Word16 var2, Flag *Overflow ) #endif /* BASOP_NOGLOB */ { diff --git a/lib_dec/jbm_jb4_inputbuffer.c b/lib_dec/jbm_jb4_inputbuffer.c index bcd965de57..0959868a61 100644 --- a/lib_dec/jbm_jb4_inputbuffer.c +++ b/lib_dec/jbm_jb4_inputbuffer.c @@ -33,11 +33,9 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ /** \file jbm_jb4_inputbuffer.c RTP input buffer with fixed capacity. */ -/* system includes */ #include #include #include "options.h" @@ -46,9 +44,10 @@ #ifdef DEBUGGING #include "debug.h" #endif -/* local includes */ #include "jbm_jb4_inputbuffer.h" +#define WMC_TOOL_SKIP + /** input buffer with fixed capacity */ struct JB4_INPUTBUFFER @@ -359,3 +358,5 @@ uint16_t JB4_INPUTBUFFER_Size( return ret; } + +#undef WMC_TOOL_SKIP \ No newline at end of file diff --git a/lib_dec/jbm_jb4sb.c b/lib_dec/jbm_jb4sb.c index e23de4aa04..a1d9d3d847 100644 --- a/lib_dec/jbm_jb4sb.c +++ b/lib_dec/jbm_jb4sb.c @@ -33,7 +33,6 @@ /*==================================================================================== EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 ====================================================================================*/ -/* WMC_TOOL_SKIP_FILE (basic ops file) */ /*! \file jbm_jb4sb.c EVS Jitter Buffer Management Interface */ @@ -54,6 +53,7 @@ #include "jbm_jb4sb.h" #include "prot.h" +#define WMC_TOOL_SKIP #define JB4_MIN( a, b ) ( ( a ) > ( b ) ? ( b ) : ( a ) ) #define JB4_MAX( a, b ) ( ( a ) > ( b ) ? ( a ) : ( b ) ) @@ -1508,3 +1508,5 @@ static int16_t JB4_inputBufferCompareFunction( return result; } + +#undef WMC_TOOL_SKIP \ No newline at end of file -- GitLab From c07a4a3a1633cd59273961c7fab27ee976e0e0f2 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 13:19:59 +0100 Subject: [PATCH 016/103] fixed non-matching brace problem --- lib_com/enh40.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib_com/enh40.c b/lib_com/enh40.c index 1215d9f576..5da2b0e6fd 100644 --- a/lib_com/enh40.c +++ b/lib_com/enh40.c @@ -190,11 +190,10 @@ Word40 L40_shl_o( Word40 L40_var1, Word16 var2, Flag *Overflow ) { #if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) if ( L40_var_out > 0x003fffffffff ) - { #else if ( L40_var_out > 0x003fffffffffLL ) - { #endif + { #ifndef BASOP_NOGLOB Overflow = 1; exit( 1 ); @@ -259,11 +258,10 @@ Word40 L40_shl( Word40 L40_var1, Word16 var2 ) { #if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) if ( L40_var_out > 0x003fffffffff ) - { #else if ( L40_var_out > 0x003fffffffffLL ) - { #endif + { assert( 0 ); L40_var_out = MAX_40; break; @@ -543,7 +541,6 @@ Word40 L40_add( Word40 L40_var1, Word40 L40_var2 ) #ifndef BASOP_NOGLOB Word40 L40_sub( Word40 L40_var1, Word40 L40_var2 ) #else /* BASOP_NOGLOB */ - Word40 L40_sub_o( Word40 L40_var1, Word40 L40_var2, Flag *Overflow ) #endif /* BASOP_NOGLOB */ { -- GitLab From 2cc706a8445e6830dbb50169f9d71db203f224e5 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 15:14:34 +0100 Subject: [PATCH 017/103] fixing compilation warnings --- apps/decoder.c | 6 +++++- apps/encoder.c | 6 +++++- lib_com/pvq_com.c | 3 ++- lib_dec/ivas_dirac_dec_binaural_functions.c | 5 ++++- lib_dec/ivas_qmetadata_dec.c | 5 ++++- lib_dec/lib_dec.c | 4 ++-- lib_enc/ivas_agc_enc.c | 3 ++- lib_enc/ivas_qmetadata_enc.c | 3 ++- lib_rend/ivas_rotation.c | 4 ++++ lib_rend/lib_rend.c | 2 ++ 10 files changed, 32 insertions(+), 9 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 012833761a..e0c927c966 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -165,6 +165,10 @@ int main( #ifdef DEBUGGING dbgargs( &argc, argv ); #endif +#ifdef WMOPS + reset_wmops(); + reset_mem( USE_32BITS ); +#endif /*------------------------------------------------------------------------------------------* * Parse command-line arguments @@ -446,7 +450,7 @@ int main( #ifdef WMOPS reset_wmops(); - reset_mem( USE_32BITS ); + reset_stack(); #endif /*-----------------------------------------------------------------* diff --git a/apps/encoder.c b/apps/encoder.c index 87cc319ec4..c12e023db6 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -184,6 +184,10 @@ int main( #ifdef DEBUGGING dbgargs( &argc, argv ); #endif +#ifdef WMOPS + reset_wmops(); + reset_mem( USE_32BITS ); +#endif initArgStruct( &arg ); @@ -548,7 +552,7 @@ int main( #ifdef WMOPS reset_wmops(); - reset_mem( USE_32BITS ); + reset_stack(); #endif /*------------------------------------------------------------------------------------------* diff --git a/lib_com/pvq_com.c b/lib_com/pvq_com.c index 6aa3040e6d..af8e3f1bcc 100644 --- a/lib_com/pvq_com.c +++ b/lib_com/pvq_com.c @@ -691,6 +691,8 @@ void srt_vec_ind_f( return; } +#define WMC_TOOL_SKIP + /*-------------------------------------------------------------------* * UMult_32_32() * @@ -814,7 +816,6 @@ Word16 atan2_fx( Word16 man, expo, reciprocal; Word16 angle, w, z; -#define WMC_TOOL_SKIP IF( L_sub( x, 0 ) == 0 ) { return 25736; /* EVS_PI/2 in Q14 */ diff --git a/lib_dec/ivas_dirac_dec_binaural_functions.c b/lib_dec/ivas_dirac_dec_binaural_functions.c index 213108689f..942f545ec6 100644 --- a/lib_dec/ivas_dirac_dec_binaural_functions.c +++ b/lib_dec/ivas_dirac_dec_binaural_functions.c @@ -856,8 +856,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric { if ( !h->renderStereoOutputInsteadOfBinaural ) { + int16_t idx; + /* Apply target spectrum that emphasizes low frequencies when the sound is surround coherent */ - diffEne *= ( 1.0f - surCoh ) + surCoh * surCohEne[min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 )]; + idx = min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 ); + diffEne *= ( 1.0f - surCoh ) + surCoh * surCohEne[idx]; } } h->ChEneOut[0][bin] += diffEne; /* Diff ene part*/ diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c index b4b1ded927..e1c6711236 100644 --- a/lib_dec/ivas_qmetadata_dec.c +++ b/lib_dec/ivas_qmetadata_dec.c @@ -3132,8 +3132,11 @@ int16_t read_surround_coherence( if ( hQMetaData->no_directions == 2 ) { + int16_t idx; + d += hQMetaData->twoDirBands[j]; - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[max( d - 1, 0 )].energy_ratio[0] * hQMetaData->twoDirBands[j]; + idx = max( d - 1, 0 ); + error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[idx].energy_ratio[0] * hQMetaData->twoDirBands[j]; } else { diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 4bdc40eb65..516cb87bdf 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -1817,6 +1817,7 @@ void IVAS_DEC_PrintConfig( #ifdef DEBUGGING +#define WMC_TOOL_SKIP void IVAS_DEC_PrintConfigWithBitstream( IVAS_DEC_HANDLE hIvasDec, const bool quietModeEnabled, @@ -1825,7 +1826,6 @@ void IVAS_DEC_PrintConfigWithBitstream( { Decoder_Struct *st_ivas; -#define WMC_TOOL_WKIP /* Create a copy of decoder struct that will be modified by preview_indices(), * leaving the original decoder struct unchanged. The additional memory used here * should not be counted towards memory footprint of the decoder. */ @@ -1838,10 +1838,10 @@ void IVAS_DEC_PrintConfigWithBitstream( printConfigInfo_dec( st_ivas, hIvasDec->bitstreamformat, hIvasDec->Opt_VOIP, quietModeEnabled ); free( st_ivas ); -#undef WMC_TOOL_SKIP return; } +#undef WMC_TOOL_SKIP #endif diff --git a/lib_enc/ivas_agc_enc.c b/lib_enc/ivas_agc_enc.c index 25415fe203..57d7a07938 100644 --- a/lib_enc/ivas_agc_enc.c +++ b/lib_enc/ivas_agc_enc.c @@ -347,7 +347,8 @@ void ivas_agc_enc_process( int16_t isCompensated = FALSE; actualMaxAbsVal = pState->gain_state[i].lastMaxAbs * pState->gain_state[i].lastGain; pState->gain_data[i].gainException = FALSE; - pState->gain_state[i].gainExpVal = (int16_t) ceilf( -logf( actualMaxAbsVal * MDFT_NORM_SCALING ) / logf( pState->agc_com.winFunc[min( offset - 1, MaxAbsValIdx )] ) ); + idx = min( offset - 1, MaxAbsValIdx ); + pState->gain_state[i].gainExpVal = (int16_t) ceilf( -logf( actualMaxAbsVal * MDFT_NORM_SCALING ) / logf( pState->agc_com.winFunc[idx] ) ); while ( !isCompensated ) { diff --git a/lib_enc/ivas_qmetadata_enc.c b/lib_enc/ivas_qmetadata_enc.c index 9f8687e72b..59a11c8ddb 100644 --- a/lib_enc/ivas_qmetadata_enc.c +++ b/lib_enc/ivas_qmetadata_enc.c @@ -4277,7 +4277,8 @@ static int16_t encode_surround_coherence( if ( hQMetaData->no_directions == 2 ) { k += hQMetaData->twoDirBands[j]; - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[max( k - 1, 0 )].energy_ratio[0] * hQMetaData->twoDirBands[j]; + idx = max( k - 1, 0 ); + error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[idx].energy_ratio[0] * hQMetaData->twoDirBands[j]; } else { diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index c11511ef3d..2f89c24d2b 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -903,6 +903,8 @@ static float SHrot_v( return p0 * ( 1.0f - d ) + p1 * sqrtf( 1.0f + d ); } } + + return 0; } static float SHrot_w( @@ -935,6 +937,8 @@ static float SHrot_w( return p0 - p1; } } + + return 0; } #ifdef EXT_RENDERER diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index a134992047..60a717905d 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -470,6 +470,8 @@ AUDIO_CONFIG getIvasAudioConfigFromRendAudioConfig( default: return AUDIO_CONFIG_INVALID; } + + return IVAS_ERR_OK; } static ivas_error initLimiter( -- GitLab From b9da8349ad23292a314a118d84d1ee8a120392a1 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 22 Nov 2022 16:27:49 +0100 Subject: [PATCH 018/103] correction of bugs inside wmc_tool (print_mem() and const array[]) --- scripts/tools/Linux/wmc_tool | Bin 216328 -> 216328 bytes scripts/tools/Win32/wmc_tool.exe | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool index 90517ea310d32c8c5421759cda3e32f53216069c..5e688baffec5967005eef9f6830e25c58bd900ac 100644 GIT binary patch delta 11220 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

_d7iLFO>=nl|8xku;peff-1d_G_m#~_XT`_rH0 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 GYXJbtA2_!F diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe index 9568101299..1b73a39d5c 100644 --- a/scripts/tools/Win32/wmc_tool.exe +++ b/scripts/tools/Win32/wmc_tool.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7694acbdd63f95acdccd908d493d93d6121d2fdec7b29fd21f030b5a6906359 -size 309760 +oid sha256:de3bb28f77cc9f38c67165cace5a096791cc2b5d8e7fda6aed17f87f63b8e7e5 +size 260096 -- GitLab From 094a06f8d45359438c28627863c57e41388c103a Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 24 Nov 2022 09:36:00 +0100 Subject: [PATCH 019/103] revised memory printout --- lib_com/options.h | 9 +++-- lib_debug/wmc_auto.c | 84 ++++++++++++++++++++++++-------------------- 2 files changed, 50 insertions(+), 43 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 949a5d2ec7..a03a564174 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -48,17 +48,16 @@ /* ################### Start DEBUGGING switches ########################### */ #ifndef RELEASE -#define DEBUGGING /* Activate debugging part of the code */ +#define DEBUGGING /* Activate debugging part of the code */ #endif -#define WMOPS /* Activate complexity and memory counters (! the codec must be already instrumented with the WMC Tool (use /ic and /op options) !) */ +#define WMOPS /* Activate complexity and memory counters */ /*#define WMOPS_PER_FRAME*/ /* Output complexity in WMOPS per frame to the file "res/wmops" (one float value per frame) */ /*#define WMOPS_DETAIL*/ /* Activate complexity detail printout for every function. Increases runtime overhead */ -/*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output WMOPS analysis for worst case frame */ +/*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output WMOPS analysis for the worst-case frame */ +/*#define MEM_COUNT_DETAILS*/ /* Output detailed memory consumption report for the worst-case frame */ #ifdef DEBUGGING -#define MEM_COUNT_DETAILS /* RAM counting tool: print per sub-structure details */ - /*#define DEBUG_MODE_INFO*/ /* output most important parameters to the subdirectory "res/" */ #ifdef DEBUG_MODE_INFO /*#define DEBUG_MODE_ACELP*/ /* output most important ACELP core parameters to the subdirectory "res/" */ diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index f9fbcc6f82..d9665ebe70 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -701,16 +701,19 @@ static void print_stack_call_tree(void) caller_info* caller_info_ptr; int call_level; - fprintf(stdout, "Stack Call Tree (frame #%d):\n", wc_frame); + fprintf(stdout, "\nList of functions when maximum stack size is reached:\n\n"); + caller_info_ptr = &stack_callers[1][0]; for (call_level = 0; call_level < MAX_RECORDABLE_CALLS; call_level++) { /* Done? */ - if (caller_info_ptr->function_name[0] == 0) + if ( caller_info_ptr->function_name[0] == 0 ) + { break; + } /* Print Name */ - fprintf(stdout, "%-42s", caller_info_ptr->function_name); + fprintf(stdout, "%-42s()", caller_info_ptr->function_name); /* Print Stack Usage (Based on Difference) */ if (call_level != 0) @@ -1267,26 +1270,32 @@ static void mem_count_summary(void) } } - for (j = 0; j < 3; j++) + for (j = 0; j < 2; j++) { - if (j == 0 && wc_heap_size[1] > 0) - { - /* Total Heap Size */ - printf("\nList of memory blocks when maximum heap size is reached:\n\n"); - } - else if (j == 1 && flag_intra_frame_memory && wc_heap_size_intra_frame[1] > 0) - { - /* Intra-Frame Heap Size */ - printf("\nList of memory blocks when maximum Intra-Frame Heap Size is reached:\n\n"); - } - else if (j == 2 && flag_intra_frame_memory && wc_heap_size_inter_frame[1] > 0) + if ( !flag_intra_frame_memory ) { - /* Inter-Frame Heap Size */ - printf("\nList of memory blocks when maximum Inter-Frame Heap Size is reached:\n\n"); + if ( j == 0 ) + { + /* Total Heap Size */ + printf( "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); + } + else + { + continue; + } } - else + else { - continue; + if ( j == 0 ) + { + /* Intra-Frame Heap Size */ + printf( "\nList of memory blocks when maximum intra-frame heap size is reached:\n\n" ); + } + else + { + /* Inter-Frame Heap Size */ + printf( "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); + } } /* Print Header */ @@ -1302,9 +1311,9 @@ static void mem_count_summary(void) { record_ptr = &(allocation_list[i]); - if ((j == 0 && record_ptr->wc_heap_size[1] > 0) || - (j == 1 && record_ptr->wc_heap_size_intra_frame[1] > 0) || - (j == 2 && record_ptr->wc_heap_size_inter_frame[1] > 0) + if ( ( !flag_intra_frame_memory && j == 0 && record_ptr->wc_heap_size[1] > 0 ) || + ( flag_intra_frame_memory && j == 0 && record_ptr->wc_heap_size_intra_frame[1] > 0 ) || + ( flag_intra_frame_memory && j == 1 && record_ptr->wc_heap_size_inter_frame[1] > 0 ) ) { strncpy(name_str, record_ptr->name, MAX_FUNCTION_NAME_LENGTH); @@ -1388,7 +1397,6 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) #endif } - /* check, if all memory blocks have been deallocated (freed) */ for (i = 0; i < Num_Records; i++) { @@ -1399,26 +1407,26 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) } } - if (wc_heap_size[1] > 0) - { - fprintf(stdout, "\n\n --- Heap usage (malloc/calloc) --- \n\n"); - printf("Maximum heap size: %d %s in frame %d\n", wc_heap_size[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size[0]); - } - - if (wc_heap_size_intra_frame[1] > 0) + if ( wc_heap_size[1] > 0 ) { - printf("Maximum intra-frame heap size: %d %s in frame %d\n", wc_heap_size_intra_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_intra_frame[0]); - } + fprintf( stdout, "\n\n --- Heap usage (malloc/calloc) --- \n\n" ); - if (wc_heap_size_inter_frame[1] > 0 && wc_heap_size_inter_frame[1] != wc_heap_size[1]) - { - printf("Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size_inter_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_inter_frame[1]); - } + if ( wc_heap_size_intra_frame[1] > 0 ) + { + printf( "Maximum intra-frame heap size: %d %s in frame %d\n", wc_heap_size_intra_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_intra_frame[0] ); + printf( "Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size_inter_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_inter_frame[0] ); + } + else + { + printf( "Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size[0] ); + } #ifdef MEM_COUNT_DETAILS - /* Print detailed information abour heap memory usage */ - mem_count_summary(); + /* Print detailed information abour heap memory usage */ + mem_count_summary(); #endif + } + if (Stat_Cnt_Size > 0) { -- GitLab From 978e301626cc2064d916ba649f5fc0843d73fd3a Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 24 Nov 2022 09:51:20 +0100 Subject: [PATCH 020/103] updated binaries (Win32 in Release mode, Linux CentOS release 7.9.2009) --- scripts/tools/Linux/wmc_tool | Bin 216328 -> 204152 bytes scripts/tools/Win32/wmc_tool.exe | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool index 5e688baffec5967005eef9f6830e25c58bd900ac..d686079a4a00ff56eca8fefede12135839d6826e 100644 GIT binary patch literal 204152 zcmb<-^>JfjWMqH=CI&kO5U)VR0W1U|85n+uGK2Xb!hykpfs?_3L5@M1fsKKIft7)Q z0jACY%7W29K!!0eFu-UIkO2$~3?S237#J8Vm>>ccOb`=bv^uGy{VINEoaSVwe? zAO#>TP#Wexkl#Q!1S%c^^&gCexC&+q0|Q7c$e4hqB`F~Go8=IVZoiue3t9!op0~ z%tWs^U(X2a7m)cNweEhQV4Fb3fZPZ3cOnA=LmdMHgAQ1hfx(u6fkBRefx!&QFJoX} zuwh_e;A3E5sD_HgGcYjZFfcF#F)%QMK*d0mB?ALPF#`ib6axc8IRgVj97qren?TtW z3=9mlP&O!3L1`<3fq_8@D(1()z~IHez);1&z)-}%z#t112T@iG3=H8Q1{7y7Ffc$; z5CcOp0|Ns;0|SFF0|P@T0|SE#R1Ju#WME*(W?*3O2XUZS4NAK+FfbTG*&qs(^t?d~ zC>CR2V32~c?HCvsJQx@lN*EXzav2yH0-@p{s*r(!L7Rbrp@xBhAs?EzK;j^r!oa`~ z%fP^p$-ux+z`($u3KC>sV2EL0U@(TV$)P}TiA$dlRDu&qBU7MkCJ7Y~h0-ue1j>LW zaRx;O1_oGuf=WSiGmM8yt1~b#Xd(&eGcYiK(jiDl9z;N~DFXw81e6U*m)1}=h|&WQ zP%H?gm7z3<@&pkK3=F(b8btAc2q@NKU|?`&U|a0|Nsr9+8#3V#F@~4=m2h z@KY7!TS$Hc=?i9LU=U=GWMH@o$t|$>)B&ppsX)ctOd#`l8LpT^%;5ofj)8$;1rGOU zK-IHyLew9J8mEfGd>6P7nY>>di=CHCr;#Wf& z;vP_)3eqRa0!b&DDiCo{83Pj6fQqk&#xJOD1c^7YgVggeFhJ8GNDPFnpz8T#Am+gG zqdQc5y#hoWmVTn3;yKWC1**eA=43#{-83QUTS0=LHUm_A0b2e_!{OgmQ1x4&{({xv z`=R3YXyN}JDsI97vG*d>UVc_cxZRV4h{NiMDLB%JGF1H+XneuiASO`pc~Em;<+?Z< zC_H%?VC`0f#xgILz6AL;Nr_JkiUy zk2uT+mDAYrR}>EQb8v{4;1GX-L;Nx{oD(b|;S7ooP+0tiifd><#6jf|NPH@^p5;KR zX9d|H^&NUWA_o?iWMH_7TE8fR!=INyK?hsCWT1Kem7Zje&uo6YAfq(DJGZT5d1E;or?rbK0ThC#(&Z zh{K&npyn6ELBbQ%E(2M;6^D8*9O7O$#E;={=M|{E4=f<|Hh?T;U|=|o!IR(&8&p{mKT!pGHh1OrN`eFqR^$a16uM z;-kz!KF!My@J?okk1{k%Oi77P%gjlQFUgP3$t*4j@J@%Fx&)wb(PSxTL5w7l#j%pn;tX4{Y-QP?C=K%uCBJ z%1tcE%+CW^1h?4P$Tc7t`Y zgHuaN3*v)P(=+q)im}-WN*abHkl=$xELL?{Nnn*mZkZL}d;!jhpj-jB*To1Nn?@$E zd|Vu#nHQguS%j3IgAL;0S=tbqPcxA+YCI?tLy8WD_|!a5&M-2DWzDd}oYGYEoXHR$ zpHy57(}Ku4;7|aiU_;a3?976APf+g9Ov_9y3P?6I@%0aLjd$@3a&->z^!Edm8m0k7 z`N^rp#qqwW#l?x~sR7Bkpz_DiI6l5C5nLR_mn5b`6IO9akr6BrKuWvh;?j6fbbwNo z0jQXRXvt3lCFRV#^x}YkWKbS5HbUgoc<21Q;*xlm#FE7LfFOTgNczDRNdbn2A@OdW zKCbaj{{G$|bC8lF+$B+lM!BiE1>j_k6sA$2k_c4iz!f5#oR*mfHq9KR2#F8!_r>N6 zP&gSN+>cEOD3QSIgXI%v zKB&nLlfS$^n-w%W^&T$I#L$d1jyz@JG&ayE>o0atzlwpOR4S8`fq{vE6*?~X<2IBY%zB;J4|4jLl|iGgqjk~s1l z!2~36P@e{*7KCRYiG#-KL1G}h07)D)X9W@i;T1^Ypt%~57zl4b5{LA}K%xu`JCMXd z^92x528IJj;>hzzCy>Npa|j?k7m&n3^GP5v5WayV4w^RtiGlC~ByreW21xt`k~s1l z)CVMS*q9(l{SPE@(A)+{42+@U)u6Nnnok3Zf#z|L#F6L11dzmG^B^ES5=i2(F*}gB z0+Kjr?hYgd!Wu~8pm`LK7zi66iNnSgLE;uj;-EPdkQfL%Ac@1qvO(e=NaCRR7?2nU z2Ox=q<^e%sARK`t4(s!S#1oLjLFE!i41_a~#F6J|3XsG>bB-XjAY6eY4x0M`iGgqf zk~nDI5hMn}9Z2G!`9qKx2v0x~2h9(H#6Wlkk~nC75hMn}3y{P?bEF_K5MF^K4w?f6 ziGlD2ByrH3E=UZ7cOZ#_=4C-*AbbEx95(L@5$=0P}@Fd{EK)@&K661>%Ed7hY}v^O-<=P!axe0hs@5of1O^sK|Xe0nGmd;)9C+ zmknV4D-a))9bOiI`Hw(+P;K!t0nEPz;)9CdmjPh@B@iDp%JR|y%s&Oe;0@knvQ%a0OoH3@%b1S7+x}f`Kv&D(Dd}n5C1^^T?FETs=JpD!2DSt zK4_}*^&V15yZ51P7u z*#PEef%u?l(3b^ZeiDcentpwm0Om)5_@F7_mjPgY5Qq<|N?tmE`CcGCs0w*$0OmV^ z_@HU2mkMCM6^IX-s(&c}<{N?dpsM911DLM`;)AA1UVius^1l*@4;q?z`2ft90`Wmr z&dUp6z7U8Hs%l;y0Q0#(e9#o|%MD;Y6NnF*dVRS7%>T7ki6H|tt^RTXnEwgH2USTg z8^HWmAU#c&Py9?*j2b!;mip!2C@hK4^O4B?Fkh3d9FZg}?mp2ju@nAUGu#0O0wzdQiucY*kzs`2FpFuw`J2TfMue2seQpY680c2HT(Ol^7UG#X~(hpT4O3|NnpNG1h16l^7Ty zDj_7ozSn&qg`Ks3x?TUM)a$Y_C@?htu;p)`3>sTL;L*);)F8=`;s1kf)>rG57@7|- zcCtQPuf*`Wtef>LOyCGeAhnxy2TWi+NFbz}^*l`A7)Zdmn{^jVU?WJtsGBtvCJ+M> zQ0!*yfeAE&1O&QSK{VLfs`W|?6DGtS2D#Uxv-XEax9g8%4F6#w&2I$2qMfB5Kr$ZI zt{+Ooz^vW?Mvut2Lc6g)a>UwCwu zKJe&vec;i}05u!T><#!27VQ)OQ{4<;2XtNo1=6Q~|NkR`2<|(C{T|(}gncJ~=4K?{ z%7ZP#?OU9l>%;E37YNURnVkr0e*Ds8(pLM&w@tCm-RKa;@9`fkC;K2$q z0h%tG-{1@N<`<0o+Zb%(ON3yd4i!-;1zCj_Gp|p;RDlu)#Q9-=;c*k}(fmdNDT-f! z;%@RE28PbV9$?=ee{loEI|MSN^X5K<6h{V+&g0+`^!#LAjOdZV#~TO3=E*)YCHlmn4mqP1ngl$wI=~?j~i+BC=#$|-ai!o zw8HJV_Zf?SJfLxY-1QG52T1;pM|bFp&SU!*!1XNy>-z&Ob{gLtfCRG#IC%d!GlB|^ zR#5B7qkAey5E`yxFn9dvJhuM;+_VV1rYYkx?ZjWGuRx}~fSbmJ*EA(urd7dB+X-5J z)_H6{M=C7Zw|@c$12*q^bZ!NupX087KohJUy;yt=Y87~N9_x1fmSfU%WmH<9=)!& zc7a;ao##M`#r`ocfRj8ZFcaYJ+WV1#;kCC1$T9|x86F28uzGZY^4|%MZVwJft^{lU z2C}Q$^#sVMTm1}RH-l1*M`r*?*@^DZADsaLuNfzFyTVcpG?jtMbA(61dH%=0|NlE( z|1{VBfjZj?Y*RPbs2ANZhcI67==OcE3)FJ-fOw(+;))mD4A2s@QvlgMP@ul(EPdk9 z8G6H`)Axc;rz=tzgRQPbw>lh`)zHeYJM;;-RQ}-64Kft$L=gLeM<+PSKw|9B4<0kX0ocnU;L%kn{*flB=DDvq7{dJYWGC_DBd;48fF_aKnw zPa~&!Mh1AA?>y9b;ot)%#tR1@Fe4}a*3Tp)e#zfh6aRsC3=FTspou^E0;p;{_<+fS z@q)*}2h7;>!8?$((0st&OJqI>0A+TM&e8)OouNBAeYe1}!*SOSpl%w-0nqGrqMN}3 z!y$|(JUU%39C!TzZj6Jos-^3XT0M{E+zT4urcF14ho$R*Qc&yhf=BZK4p1)r@&Oz` zA6~P8S^}?+ce`%s4fx*~x~261|I`C52l!ifK}BV^>kf}j*Bc&S`uK}|5M7`$<%4)> zG1zIH$6r_>WgD>O*2~cNBJ6O83qucpS~tgCKOj5-$-^hW+3N(j&2ynMKw$?sNVHu) zcyxjqfvyictX*G}feIN=+6OfaFL?AqvmvO22z}tu?Rx`SK-7br4{AIzf||0S7d$}u zj1e3r$H0;Gz=IL&*#{n)u!6JY(ZB!yUvmHd|9=8X`Gq&rLGum+QkDyZWE~_KScWqP z$#e%OfLzn^35`1R>IIb57!P3N zG-*(ncEUo7KsB@eJJy^Q_L_m=btot`!4o*+0lXQl6=W+kqh0O<$K44~8Hu~X0W}9X zKuNlDF9*2YwG}iR(>e7IDDC!w>KvcWR?vvdao0DHMA!;e2P!zhNevsC*+kwNf6=W)Z>pcbrhHfw$T$(@d=;re12HOiNK0438sC)bWf9nDM z)~#^80+y{HxA3>PgWTE;wzQj}`3F~N{c+bfY)o(ilP`F5_kz6O(d&8un!Zmz1+~0D z+~Y64g4mshJ$hR~!%!aGQ^9H>4cy)@pv(_y;5zOAH~hiv+zxoPf9xf~oc&K37+!)_ z6MDcL1J0OWhjj{gG`l{KXm)+U`0_odan}tAv(Do$CjA9f;%}O3-#{zzS`Vlsxa9y= zhb6MXg&8OpKY+U!lw%%rL*faXu^)6#1qBhff(1JRTsS=F4B&xU0j+1jc6187W`Shf zH?O5UK;Z!io)=F*De(rVD6D+<|G!7$5m4fQHt9W@-xzpw*4_Yhgu$IRNNo!0B)$OW zQm{K-fMWVkEhkvSf#WqhxQ=(==yZM3?fL{9<1akAjXb(TKY${>^N>g9`4@NIfWif- zaZ?0S`vIc%1ww7XYc#cPV5^WVhn5ru=n}A!LL4H&192LU=Aq6DubGh>MUX)T^lG}% z)PZ3aXiN}PcC36$blHK@H03~4(+3~0AlJ^%UxU&gk!42pXHZNX>UKqKnkqd`A;2(F@_Dbw`@a?2E&&^klUbo!of>2y5;suH^yI$hs1*PdZ4<>+>O^Kvc&14DD| z83z8AK2VwBdS(Mdr|XMu*B6?uXF$q9R)PEuX`?fOQtF3p*Atztf4W2ebi2N>JX9P3 zP6`alt}j{-l$gOdXDnUMl!BTGpr#&&ho$R{B0i9uN4J9jn8)tXTzi9|l(pOS&ugh} z*CWtw0Hf=NZr3A>u76(712-ul?Y_?1H=U&*XYp@40BypTaCf`D;oo+^()CZNM7Qgk z?-vxo4&T7gdZ3gYT9S6VzJM42Z3jYzd7$ldmrmC+E}g!R(F0ItC-g+O>zU4LoyT8v zfI9ZBppqZdMET*-?fU{UF7p2(xFy_N`-1`6oY?{jx6m^l-KC&v|A!;EvAYvojCUS? zQ4FdDz@4Y>7Y@FVZ#hs>;nD3X(H;7wQ=mKa1P)!ca9v-FIq5a1n#U$9;L-d7JY3f8D&R50gVFWJOI1*#1Jnk9w(}vS(hm>NkRZ6P z@WiFl^?^&L@15q_I}DZV`$3E9U$gE9txa_4_I=<2Dq2860xp4EfBY{M=q|kz2FlZ* zsR57XBLc*l3|c<=nsq;DH75a+%|P`4vdQ3X7bq{m`dvuz32L+b=tjin4sfjjice4- z0E*8WxZ<-1Z+tHP11dT}oncsfhIn+l3J{3TT(~Ysd}<-G7D`OQ;|e^C_R^QAc=GA= zz0qC!pxgHexS`Sw9oKDs!|}iLhGXYX$IcTTofmh37BYisrG4n(2&$3L> zGYj2Jl(^~iz2eg8dcg;h)xc2$F2y>Jzc}^;Tws6j0d+5GFLe7}0rz*i!DF#Md^-<1 zLOP{?K^B04;>TT|N5?`rT>Cer zIx@Vt_4@yR{%x+$EnGjB!h0j2F@;XoH^*JSfJP8NBc!0giyt1nHUci)u5Y?aPjvg9 z@#qe{0J01;L!6;-HHpC$lx#kLN~4P3|NnzZBTxb90ZuxgenhDQD4psMQ)C&`iA(WDsZvAZUR4g%K!D zK@r^P`r~yo$WQRt1?6c(T?ZOM0*!Pxzu^D}5ZqY@`8goYIskRn+n=b;^00P&Pzh<@z501bdxP~QtWkW#`6&fuM{KVB|_sRN}pPUg=x9D70M06)VPDX^pa;w`TBWWaCJ7<27|FcX9H99lP_h9T0!=!gaSp_| z%m=8wFF?WMPzUOpftgYDtf0Cu#iQBv1EUA1LkNpLNU(wxRn;AZi9&)EEE-j}9wr)J zvINFdDVYgl>eqpS5Ukd+p6PWX$Z@;CuKZs5!K3+yEC2KZkk%toA0O01MD*lAJaCH^ z+>>{Gur}OyFL^1JJM5Q#=yVtK=TiM{uV<<1_ltL z|1X%KRKnT(L!H0%J*0|z04|2lH`Jb2DrMin#Kgexnso;w6Q~<>2V@Ye%8TJ|IRl=u zaXs(R9r^&$CqMZJoED%i0hNCx_Qze{2!a*Hp7-c&1$W>bZ>coS4?+od% z=?acp3=A(p`&YoN7tq9OcjyC;Ue^uKY+im9+`HcZN`dFEGBE7ZO@{8G85mw#!9&J@vBMP`CHF0FfcUKp4TdshJ?)lrhTzchp69y#L8=3xD?Edd+tG`AQF)I$Cy%9kLKJ5 zjNnKtbv^F-MhIu9O?nK{4+=HM&Ko;H%P=~R?N5L^`pgXmhL@ndt;b#OFfuYUfE~yK z8s%U*?s^Bb2_0?CW~3njK7^^6|f;E^1U<^u|#i3(8l z*IjzY5nQ-}f_^)0-4f;4HS2` zf+sIQJvQ(_1%%rR8BuiH394(6>$X;CD1(OI!IS#UwI3j9za$Ehf4f~lv->u@C7==! z%;YLvaoqI}C`p4$GthK9bmkP27_A>cgZ0l&&?>#oWBWVcVOnvWfdOUcwDApS6wRY^ zuLfiw4zzB{qjRbRs593q^8f#TpHA@DjZY_dfD7SGutM;}Kd88T0m@Gv-BZD)AZjI0 zW5jU>1H8=N4E65LPw+Ayyp91>f+?4%dvrrG7Gz^Ij0YN00=vPZQ{ZJ3q(A_beV}g1 z2h!|y#9}XRi3=zkK~CT*u{`ej2ei%2qqh~bq6}0dKqpL}f=egp(8msVfT~|(V0d{H zlCwU5%X)CJ2C73^L4gPwIRz&KNHju9U~n{6)j7fJg_OWx(Wp8dm}qiF7gK5o3pZZyf(LM9fMmEpB@(12{J;oR({iAM z`E}a_cnS;s;L(XbB?@ZoBh5*k02dw*TTdX@Um$N_W^A@gN#F)&`A1M@gieou%5(61 z&Js{6?)AOk(HnZhqZcGw`@ysGq-W;^aNBYhXo)1KF&+u-1S5xkE=VV6flljz63}Sp z1&`JPrJ#Px16bmF=>$;%ssU{v=?%=Rsspv*!AwYc12d!QKpkr^GrmL~RBVF6Or->} zW~B4@i>3ELMdP2BphHYR()&R13@S7I&O5z~4wOwm^G%?(GgvFwaUcsmKwP$u zp#kKh<1ZpGoc9;BI~X*p$H?#!H0TEk2v9gFlqA8JoF$<7X>dsVFY$qi)|WWKn7rU# z3RnSGi8e?SG6*34Y5Ru(2;!Lkt6}v?+}TM;K^s4YWWFG&~6ExFSkF zTs7T!(C|8_^n-d6lxpn2Q3+n;;103uwIei!K)o^ST%>*Q=mzz!$z4KyweDqle+cOHKscL`MT9rEZcz2MR73oGVccy@mD>^!j(v`8EjiRItHp^fld zI(S$GxpV`Kfx}C;*QQ7z^#Yo4S)d^`AClJ*hRK4P-JPxvz~i@|1{KH4|0IPOsCfbl z8&FyC0()`K08P;ypy-CAk{5`O0Z&JQ!vNg)f8o&$FYZB$>34xv$b$kS>lYe} zQ)vPfQt6+Upacl2T#-u`v{YJg9;66YDg|u?07cBjFW^u?c#fP@DgX_spSREqBRZ8f zz5yLwjcz<19RaW5OBTt0V5mlLe>TDA=@2y{UZ!6x*?5t(D)RjL$c~BNHM7Cyc4uNrSsT+ zfecs&`S~dZhL_hMEf#Q-4b;kzKO!3y;G`#^`j!DKA? z`$2sG5EmK>J3#Dxph^r>z84<_XLnH92aA&p9^I}R_E|s^4aX%0(3T=_g6wG3r?d=ghX7dp1;`+)E0X#gboHK~L4Z)HUBHheMn6v)Im zAQO+ft^rZawR0HwThDNS2DJ7-1lBN?nnUzJ3U2To2L6@?*REkIP40HZ;+PfjjtpRvK#6q?II)It5bf}Sb0CL<9LV(295mQi zyN0>c9>bL-py^~#a}nagd#BM|c=fm|#E?(m6$EQoN|UgbHgH|f6VJ$7fY6{ez#r9s0%a@&y}soU;Lxe^^g|ssmS0?;D(~AXU{3kM7U~U{kwm zZ=h6Hprj9~gs*_dwOpa2vfzGWOFPJ1NP}boWT@o^R*yius>;B?pwN1tgncK&|N8&0 zS$Bd8JUr?Z4|bmFcHPr!!i3cDS%4^@^e=-7D9FMpuzOm0K<+v23Tn17cpP^HEyicS zV}UB@=qXSu9Ma_tT>x(UBC0x2UmJN$1y>2 zy=-6w4WXBUjJ|+c$EkwHUtLdlG}oSht_*`10qZ+Eo`V=+%ZekfK!UaTfdI%4!l2>@ z6p5hW3BrEZ3K~6z`T1)UvQY6Z=5NID=8uVg7Ocx^m!9BX#k1a6Ii2aC9FW^Zhqdbo{`TGADH!nV!Esm6VkUff+!j>6mRNzQaw~ADUZMl0%5`iPgVL%vm@1cp zq+9{pg&;xB*L=raw}85b$6a^KZ({^?+CiOu&n7;r z$_-FJl!DgLf!)+xyMv*Et+{p!Ly0DcUCF*HHOrCVHS4Z?kTXC90%VVw8#HKNgCpJb z1ZXcJ)_8%GEbsywwCI)LH7kf>#HxM+xX$D}2AbOO=ypXaq`M%=8Pu!;w^vK^K=}zA zf}rjVC<*bm)PttUyF)>ZNvKxvKeD1hgKK)ngbcmk|f@c}85;L3lI zH{p>E^3nm=v}rAW%M?%p=0`1m|1>b8n!g2fd}i~HYX1Hfu!uE(O97P8Uj%08@VCT4 z8U3KMMw@?V@VEGYMKt+a{lHlRyn^Zg%4jBo0}H4)S#k|joPd_$!j^wQmpBG+fY!v# z0PkdCywD9kew_uh0vj|W^)izYG$px#p~L_*ObW{4sD?8rfDCts7~Wj_grNd$yp+FH z2FYcpHJ>)95P`)04Wydy0KD>aKMr#ApO=rp=@hhR*cTL#u+0msp!yf2AC$7KT@REv zf>&npw}P6rpbZ+`;6um1e~Zq?(PLO4x#(1KrM&YWnf*QTRH_^7h(6X z0(d?l4BX{J4o%QHjt`I}j-Z9kkR^`Y47RKc3JfKxV5*2qmj}H0nz0NtuD_!jY!B9M zO7j~~+T4LiiaVgqeo!BI2Xx*8I#~o7G{9D$ff{W46rg<-jqC8FcmonhApi2WJOmZ4 zpy2Ct{Q&LngQi$#@Nb&{)(YwSS{y22Yj%CZ`1&zO5^cW?lLu=<7O1J*>3XKy^-Svl z$j&;p=G-@oug`-<`xvq7ngG=W8qoUyt~uU7J23D~MNA&7Em`1BgT=v8HSET8K#e&A zw(4~Ps1MD*4YUpeRC-z*D)qvyuLrEJ^+1UhKKV{ph`G(FFPL7lG^f5`1Z^HH0qtG` z_vvj*dAnWD@HD{Gb-SLi6=G0eC{^+31uaAdt>~%U0cou6WMTj%pF=NdeuLBX>w1uC zE|BU{@IVD;s8+1w38X?fZxBs z4gmM*TOWYB^QC8?(~qF)3EI~NWsyseEC^N!PBN{anik}476t_d{?-c6>Lkdj#~Y}* z+xG^j1>}0cqq+71Ge%-m?5*Q3RM8a+zPy2ZETH*Kfk$WU3`8cI0ncQ|U7^hi(7X);c&i?0xB?W0 zofmh3a+XKuvHhUF@(b^aAYXv?n?eg#{uViQP$L)Aa|RWzKVa*_!F4pKwg+!Lgj6Rt zz1T-hV0+a_ltX(hgw}4J#2J!a2 z$cD6RFYgDBDuFhvy@0N9$nZcciG~F!1A_p#-neuWo;wLT19+lsa=GZ z)1YDzJX?@Z2U=POW>)d{WkUJ`V6Fo~CW^n$A4w*jzr_KGtHR%6h{V<4Z=DXVQo(_U zw%%~+6>z?Vc6+$M%`|J*3uqI%YxaZF#Y;?kY7Q?)&BJ)M>(i#?1AQBYyOr7sL`O* zr^DY;h{Uz!Z%IPpM)SAwfva(Bv3VSn{W?KSS(MR*7yCd*ih*40y$=$R1z;mU3c;&j ziHXR{bC?ln&EEn#I2$&nrNiF>-2nv-QCt2N&^0M9Q<0pn!QUDL=3;X`2eR`^a3x0h zy%0aF0h>dTAGU%<($GR*gTEDYHW&C17VyN)3+UMCQHX1xWhZ#P#T$3U4etb2L(|S; zgk8{*`uK|sXz+tt+n_)rA*KHU4KYBR{^2FpFHlcMV8Ux&l+^;D^2?*s6*Q#30^(9% z*y4olOaK2je_(7mP@?G3>$(6e3+Z|1LGm`d&Myr+?z(`9L7)Mw1~lo2v4RdZkHrT{ z5}>LL+)4tMTcCQVnDwO^xO4V{@#VT7AeTb7Afl~h0Ppz*O^<_1C(!8$t}o#Ab1A6p z{{p$h=U`w0m-xp|g5v*)M>nPt7O0XXU?mU0T@+B)^8li)4qA!=X|IDec7uFf3fdhA zshUCK`=Iu5w}Sv^Xaci%V`N}}v{+z6Bgv-`x#A`05Pk4M+K$zbv&@g;02}&sZo$Y`B{|7~1 z1?$Tia6{Mi19TBMyodG#)CvT38=;NI8;IkDSor%TA+ZkYvi;}=pG9);0gDH#&!r>= zmu?0m5synr4BZ?^0uG?wTepEnZ!KuA2&iTL!?W`zsMPiYB{IuGj)P?(hJpU-IK6Xcsu>kfoP* z|AF={Jb{NMN>lu}>jJfWN6^sy3Nr}3!2v{fyTY32H^7UoK=T_vnE3mn!A(-v8Q{ir zCukogsL|bBa&&=5ukR7)bR%eKA864pbms`jX$hc&0LtO;89e?LHn3TsZX0O0093E< z1jX@fXqH2Jw+@*CWt2W=RGlS%cd8@V%fHJV13WXxJ9C=(scVM7KcWDbU4x zpp}-O0k;4J4-8RA;JbhWA9~6I%ttS?z=Qu_Z@C;@un!y@oyT9?Uk_TO#^34|P`)h~b$pmCRxT~tc-wHbK4Vp|o z>;x@%g(v;#pnM6+BcN&zn)G24kvlemUGwrAsC7nUdWFTWFTx?PJZ?iqGGW7F3~wo@ zory>$CD7slwEyY>XwDe4gc9U?c<6FKLigJiuz%nQq7=OH8a#fs3)Whl{S(w$Ma&=| z8myoZ+7qA#YiH;lcpDYm_W;cqfNIkNpj0<^1-Ls6@-%D(BWU3E1+=k>x+V-VvUL1K z{$a2tq~%~GL7*j%;6;ewvkY!@yYAr?U|>i94Q~5_rtLvKgf7Jd*(-_eInbChWXh`3 z^~1|b&}LAyJt%~hwOxR1;DOZqAa8(be@rjzs|II|<1hXnME3_|q63^yK%-uu&0B~D z8>FfN6~(AcYJmgrR16ANa90vCP6K8_mScgLD1Ca+axAbYWH}a?30aN>X6p0zfzGu7 zHFZJ7izR zO5SHDCM|~prwEyqb%#eV|VZoI)QoM`2Fy577GKzG1un|$6X(Qj{iCC zdIyxZkPX%YZD7fT>|Ft^rv=GD>tlG&CHLJ!$}&v-G`_@DemL*id`kr!*F<9HcQA%mOI~ZIgjT zBV;L;@Us8^n}7I}sDW&U#wbMQ=TeYNC?demf|hpq-f?&dYP&boo)0b61RD&p0unzU zE8yM)t@~*PDF@vZ*-(4lp-vg(p?X=cCQvYPLZk9^87u-`CxV;-3KK|41P(f~cawo? z9Hp)Fut4&IuI7@5T(`wpe2#6;L^*WR0%A|*m|HuqS^Nj%W>BSpv9aG zwa?A#*r8^0yWW8=ZUXPA1NZFV+h$>#)F!S371E%E!JWtU_vXU}6fVzWV0a1I5d^lz z0Ax341Qs+H3Mw=}bxh%6kWQr4w#u#tKs%vWntktpRwY38BX+ui*0t^c1(i0q6%S_W zqHfCvov-%_)UE)Xt4Dmz@NFl&gn?V4$=?FH8xd4Eg6xdtZGZFgRL2X0yDe)3eTM^Vz z0&n+w(OnAK3Jop4L7^JI2DQvD6$9trm(AcIJ{v;f3r{@JUcV_U(Wc*xQyOjr2fIJ;(-?0o|@Y z;OmJeqAGG=U~qWp22%vG7UYQ>3`GntL8tP9wyN&~ISZu79YYb*OVA0gU_~Hjf)pvC zDgw33UtWhq=#PCMZ-5m2U4r6p76t~Umz!XUDheQD_cu@#F)}c?yae6O3byVuRMBQ+ zMeIA67#Lh$XMs`m#*{hJBZzwifIF=U0>! z0HAfa-~kLsraM7I6Q^+-Jkx=iwc!3&Y-ycGcPYsJ2dLA)Zo9yCLi(MMr2(MjjW^&E z5T}-clKY#N29TMg2cVK2ypWD?yYR?T`3E1Cg%WfbgfbM4aTqJ1G^A%9Z z`BEQZ+yVHUtow9bp1L&;y1)!ua2X@ObR9Hr5qUJt0~jtAEs;5bq#1s!U@3hlpx+hL$Zn4r@t!IKn_ ziHz-wKxq%Y2=hh}tZw^0oq^%yeo#B4_6h@k%REp{0}bKydNAVl+3{uQK7(||!Lg6F z_#prk(x8eDvjvo6ltKdfIwEihMb1na-hVx+w}@oFM_*1pfvOqQY66BP${Se zyutWV>Nlt}j#2}@ft_IqPR=TmK=~4UhUM1Tpt=pd+OP2qXqgN2gavqa9lX&VTAaRs z4k<%cdqC%zIxp^G0axbGA@tbwplCx`?Qsv1cwRt;)IlS(@W~`lm;6IFgDnd~g9Cpn zbaoPSte}8LcPZ2cPz#j-)C~i#aQwUO|9|i*PyUu#h`CVZp~M{G^I`)$D&Yllb&2h9 z*FPMPoC02<20K*&l1C=bhvpH`VUiNXupDxA3IhXV6;XF7sLzd7suyel*#sWc2aT?P zRUp+Ipa{n{_3w^w;0;g^fYKGVhSRsTpkM|SJ+MJ`P?HN9#8;4KEnq6e>xDY|~*Gt%6gSO#-&l~!{__7o<#)Eu7 z6llNrjn2|5ps5FsPTvE_-slF+U!VnTv+D=Y><=Uff@XC=y9q&4KZvRsS4_vQ10|3n z0^ph)bl3#wOiIx1ADe3MDH<>Kf$q)%dBSKOD6ap!RspXx0o_wlidL91gNhT-)LthO z!Z(d?6hKi5*@fA;^$TcBqjM^_J=EC?x;F~uxgE**#U=3!4B$-0;L!=$7uh)#be3`2 zaqwBdpygVKqiH~=%|p!V1)sp;(F-XiK!?tQE-Er0{H^Q2`3rK^NT=(E zwBxStz=mpo&T|1xuzOK+_%IS$(Lj5UTY+ zi4^Q)mu`qX;KS=d;SVob`CCAXhe6dPxG-u3S%sWgz~y^41E@OR4_*mhq6DV++XMgq z|8L95(7?do0y_4^Rsyv6-To!0tKJO@3$R~$TfxVNAi`oH`j`=TcgD*lpvY-h(>@$V0P2RlEh`2g#_AV~fIufBVsG#ONcgSB|{7Ql}W z>aDPVY60g4kIq9cjx0otkdn%m;9D|aA?5m^#0GR)56Ds7kb_R3WdWoR?3;yD4ur$Y zfeZZ%3@>kix)IH;H$XW7-6znaT0ld_uh}QON+Wt{@utO9P( z+nw0mlo&`pPNKV^0~8LhwZF`uZC;>5|5+D+_K1V050TbNet;C};0b6@Ll|0n%C7)< z1Eu!lhBR`)6%*+2wi(cc=&-}=yBRuN?|_Ce7#J8pTaa2Wf^!;Zais$XXo)t&CU`9x z04h?pF9-Fz`8(D!fX*|y1KNtj-?|*+eo!M1bbfhvDb$H@jo|9H4y>`V9+HKySRepu zUmSlC22lq-YXrQS6U{sps5(7}I#A{H0Gm1os5&-?I`p;kElhV(e5k}WkS=i86@bQdz;1xp59?YwVb~AaqX`Me0?=Y? zBt1n?H}hfWVT1Y?G85hao(X@@De&5|vGxvV15YVvLFNgM-U*F+SdrI}XS?@bRGr%<`CD0<<6Wvf_TwioMSb*}1>xoXV(ChrhT5!OX8g#R+ zfoWTeMVkWS0Thj9;K8zl)&nIv-K=FWow-iN*%NS z2UKW5@A%>^NdpZ7fd()@zUBg-MFc*>7vy_1pMzId^DPDyRF$Ce0joL%1qX27_}L<` zI<)ek1ay`?Xwv!zcuPkKC~Jbw`T(8tgtW`4v-S??*nY^_;U|1LT@Uzl`tImH4PI^#=HwlN<13u|UWEgEo1BZgF_S-}(-c04_joT-pI%zyey{@&VSs0_~{m4S3u!Co;U$cUGPT-G>4y^FSABq#b9lW$1SO)BFH5%+KHL`Ul*Ez98}P zF{m;JucLwt$$2!s0Uws!Sv#Y%bc#o3Xop9qZ-Y-~YX#(zFVOe~|29@rN6;`UxXaJq z($2`hu>S>U5Z0|16oZg;2jHDu9^GJ#-3*sHc5uAG&m3s%3`xJ@mz|qP27MZWo z$@&$I{}-7r(aFkcgRsm&qLY;ujW3GEmqq5wbh4_V@pX~;E}g8V$b5lLR$FAgO(&}> z8s8U*&(O)*hRW?n<<3CmE=1+7Lgj9@QGy13W#|9@$6U8EK+jC@0Ieef_jjfsw~j%z z>jhAIzWz6F<(7+%Z=p9u%bX&0as`wZj^ z4%?BUJ0D(F@wZxWgBPqZ@OKz(mz!v_}D4h$(`r`!(IJYhayvXGBb_L5>N~Lf-@347T7b4>~>t!~tb{ z@CivE4rqH2f9reju@^s7L2L6sqhFvqXh;mCt)Sr#NL7F}kT@71fs`^A)O1C5d|kKe z8Svy9FKEA4=W*mjgDu76g7;kg0590=u;7Fx01r^(2zvd&8PFxk4WN-f*BOWrRsTsK zs}a3?{?@-7ppyW8fOq_tfELDr(jcg-O-!;lJP&`e5Ps)c0lY^1uc;R zh4*AgbBz?+T?yC@IvWDiCipTNW_#-a{?4V~I;a#Q34<~TNcAzeYFN?&EwGpY?ghJI zCM^;&(bT#4Lks3!7q|;r4^$wM25561;iM7t1LRp~(olo!9=qVtO*ml(scvR>ch$w=&|mgiW<3W zfi<_p=D>p=Tu6f2Rgf7T(D;}QWCj<^gv{`OnUEP=FcUI^3uZ!QaKTLdI#Blq%(Sc* z_2_o}0H4|UR}JdnfiFV?g(31P7hG;E0*y37ijWV8-~gSY3tEv38dgI}fuLTNrRxX& z)(}PphL-`X(2T4A%1+RxHrQR({H;ci+y&au2OhXVE|PHs+cs#6-xA>@uvSp8X_TsB zEp8z$x>17OxMX_W1*$PXTCMq8KsoT`LdX;y%z@BpbtDIZX9%zqLh!9HJE0Do0UB_D zgc;m{nx&w%I%vrdd`}GIb`eWgY>sS0IICu_k2qK;2_qZtY6 ziF-8Xeqemv35s~oLQ2ri`CQ1D1}LL|d*7htiLfvOE!P1zPQiy@gEy662``Kp6~3A9 zd;pr~g&qOuIs?1Iqi*){RHEYeTm{ zx9bLQ*SVn+be+Z4mIL5T)eYbgEl`uX+d%*(54zmw_zTl!$XFR9MYcj`?!iOmXr&2g zP!zl#4SIJ4EY&F?yabPM!l@23(wSa^QXM2pOE^5BS2ls7wVS~fGR|@YTw}R{?u-G& z0c0f%YQUo>OV|jo(sX#hgJu=LM!YUZPGF$J+&#L%)gf9T59uy$p8^Vgq(Z*L0<4{b zfdQ00uR+{~meX()_@Iqk{4J2dGtg!@Uyz$%=`Q{~Xx!BGg$E=NfR5BeBm(^&kSh?0 zpfrWdh_`9{|Nphdgx9JQUMo#_EkEJ4%!JpH6JCo=cr85PHO7`V_!I$X4F%{3C=b}# z@Sw?UhU4H1i9wyUfGUp{$Sq^gNXG1c%u!g%Zeg zWJ?FS>49vZ+8#9;C7L zK&dUvpUnqAL)RxDmMcOnXUDMoIx7RzR%S?11zH0Gn&1H6>VRwrDDNF_M|b=zNQ)LU zBnUpcS+er~|IS0*V1F=P=mgWC4Jx1`a2|ksVd;7TmhD18hbIuT$f0^7yqG@VaoqKW z0LVMtuAozXY-&qIJepl^a6qhVKEMdI6TFjD09$B)Jo2v%-6Nn~C@?da;AVi&00ZSg z-jaCmq$za#kqdH28Kj+vQ3`+u9Ow3dhM_7!9tWG^fmT|;1{_Pl>d;p%^0z>*9Rn@W z(g0nY+&vW(#h}Cw-mDAmxPx4#0KPQ=92T75k!CRSKX{}W%&ad3U8?|P^27WH3n$RB zs@Iz*KuibKs~*~}CqP$qLc#!|y!Aju7Rdb|c}Up`E%89*SLg8;8+)N8UJ1JS5dD^} zS86pO%ud%U;7hdN{@MjvW(Ydx3OsTlSq{olps`{G(7rxIh5%jb^O6~q{~$F;cLV4W zK93o@9Of`EcxWC1Zy@r}JOsWe`-i>9!54NOjE9;ZF+;>UK?)czbh=)FCW+%<{h-Rp zqq~*ZtOnYvj+vT4yFo$Y?;g!BATh;&8g?bs5U*>yUO|ZruWLQw0V={kaSI-n z-C6bjKSZ|mK&2Ig_5B8Dng(3RctEpe=fz#Bpxn@T{DoEvdYWd2)NbH>*Xeo!9E94S zQU%$^5aYTXK(k(;b&lYSk6xOAH^R(-23>dPmCgy^&7|1R^NRz*P-I@=z($>qpoE6D-yZzD&Ffyz5Bg^&3d2fZAE$ znFkt0$J1Ja)_0)d?*$*IGyLYY zEcjAlxO)RY&hG@T>3UcS%7?HuU5+8379MmJ$PJWLvLGIGS=SAZ?p6?&P;2f2v=t9& ztlfYVD4@og0%$-0+E|MNH!x5dYs5V!=PDM&`dVeN@y9zzyNNwz3l*(*Jyon{uXtJtq{HNbPUceJGx!ZG(X?~4JbTk zWMBYIf`TSUz)@o}8FuDFnn!o&4iE6EQt*w@(2ito76Sw5Ttx!MA?v3h zNen!B3>tv$_Amfb4krBTT{keE02QKOC9rm2yb81(7^b4c&@CDQB3(ByUg%`?R8eAh zZRpYM3)*xBs!!p&78Mx4ap+Kk?gSl>2SAYyI=8Q7HhA;_Y#WO6;Y$Uk*P$Em4y*;9 z9>CY5L&}cW3~<>25jp;1Qw9UWK6Pl(9-fI*cED6D$^e%g=H09r%1|%HD}!g8K;a2* z9AD^mU_lF%myf^|1Kbtho1Y-AxSkGn1w`cd3muRvw4tuJ2y!84?h;gj!Boh=UBLu% z#ZM)yuFybt1$dwWkv9Sm_zL;gYaqnu(D7l?$~K5`F#%nFk=5#v`CQKiV+{ za>b=b^Bc^?F`dU>sAPjo0beBwn%M)@AgK4~fVQfFyvWoBR*1Ai6?7^yc-8F>$P@_Z zx*5>0*9Yi1P@D4q|9`!F0%To4ut)Qo2#?O%9Uh&f8$3EgS3u9v1YOm@zm36$w*+)$ z1!%Lc4Oa>Dmc(Vn;8=PIUQ-7;Nf&gMem=a}1R8H$0U13&TTINgJ53YKJ0OdY~7Xd1*Ik6w_j<1gMPL9ZWxucZg;z5y}`((cO40k=dW zqTwM9T1kAO^FxR05yUDG&%8Eteq$4{WCB z0n%(Yu2IuBjbJx|It=g`g=+AnwBYgYTK-m0Q{bi&D2fq7 zrjR>9K@(KR7{F6j(0v`q&H**Fkf+XI!^pQA-~j?3?6xjVf_fQ!`6GA$tiBG`W3~pn zRS%zA1JK+GKAY+T)SaM&uTaYR(gRd|f;XLi1}&t=c}dm>NS_zfodGvuK?^H>z3;W6uw;c0cE=iG&(yk?pg{S%!Kw=)`8oKC<|^~U|9>i00w2d z3aE&C0Ukq!4e)^$xqD5LHR)N2CADKwLT zCk~M(TXCgoR)jsE^*SKu!e$3AlqSJbEyxYfyRjfSOaq$3W)-65uu?0K)4&J7fY!G{ z;`ILmA^zD2AzTqLG1h#c*Ry+g4%k`ikXwVrs;FDJ1-ah^!4P!ve7o-$oE2ufb+zk#t zcs0-8s*kFG6=S?x5LLmwUUU;agD3960Ryrkx*uJ^Ra6Ce;O;c?Y{Pa`1^dBMCCCb9 zqAIw)0o{sfR0SKstD2Bah(%T4GY#DYdn5&*W7VKx*6knw-|Y%oXaH*0?dyZKE^4bm z5d~V}3%ky|1hjLM1>Dzk1;;P=`VO@Ct<3;w1H~^mawotecW*2M!^=zH{xUo`JuqB4 z164sU+I~j<)+&So_+caq!S@a#he$Y*DsTnadHlsg@G^H~RVD~k9;m^xZx3|2#g#9h z0tn(@G$pVN1RIf*bRK_Eeh@wMFMxv#Vn*lj7bmu(E7*jpz!PUmSxc8wfiKX#}Xt|fnozW68T#`Lwb@Yz=K7tU_)jg_KtuC zPC$#61VG7M4b*`ERb`-}1($`O8x-LdzOMvZ2;C?TKIj#6a13af9%vF2S~x)prq^cO zVC$P-Fm{3&pn+!mt^%!p2Cb(6E#&~!R3{*d{Xp{#Uoz& z36I;1b?9+>9~{~c1t1%7h2#N#4)A$m``$tG-(T=}8gkT?fR69M7j2NuACR*q4}hnZ zpfTzC0JJ0t?1MAXN-#y70C6gx4k$UK>t$tvBJd_5@NE4!rSbJOZll z(EFC4J(HcG7mmAv5BuzPePZo;g})cNDF(DB3>2ZD*3%7--T(m)&`Nvoo$MdFT`zRH z{sFb$Aq~;T4YiNK4bjKohUjB(L-cVy`mT!-OYo|qhT6yVC7{`5(As%MkSWlHh*9GI z|F9!r!7I&6<{&LX0X2g^!1i zTUUKTiF(a*W3Rna*oy7Q34ZJ%5)X`@+?s^0?tq3x)x%LPHcyCpSI#>_? zc8H#C*A9e{X_klTE_J&e>2&RQeF{ZpMyD%ywP;<)an~~-GrL1OptCiQNw99$j@ARE zY@mfxuAl`CP>&$2wSrm;ar_KR*B_<#pjKTw?%Dxrejj%|1EQejB2P`aZh*DUUU+~D z!3WSw)Gtb>kr>_~znofqKMjt4v-n+RdI6f$`*zVOfmU1kW;2{Hq8 z3NChapyR_kIl5gtIzbB$zSukQgZg5iO)#LSeBoj3dV{}tEvQC34&G1!Dk7jgB~XWq ze;Y%G>->h=`QThQADj#4gLC10%v>lAR>#&*JO6(vOS9__Mi0xiS zum>MwrMpIOF*UeWQlxc~Y8|MmH9*8{x)jGdv_lO$+}zdQ5` zxG4b2;SY*gU(Wdry6zIR%95em^@z3W0sdalVRfKV4OdimGc^BTf?PI$OBvWEhECTn z-L4(opN_#N>g1l$#`URA9zI3|&=yu(s?Fu?K zdx1x{7e{yK5zt}K2OqI`Fkb8q{Q*ir=U?3Y2HK%_q|MFTH87ZA4U9=Kpe*y}HWkkK^gDQuu=djABKY8~0{Hyn4~(zhftrGlcGP!hGdny8WOZo;=%hH% zN=fkAWHb#t3=9nW7)l{4{?s5E+(EMx-3+D-u*2OqfO8o*SU@!%XwY*8qFV(H8Z_lE zAAm<6Kx>0R?Kto{p^0Jt|G(S>76*lZvg?)B10|rF4mWf&KsJSf&dtLN2nGglKz>gL z`KA(M)dT2&+GDQALGcd?SJ1#y>wyx^W3I;;UV@sG5YK?Oa`L0^WCNew>e1`F0LxA` zSi^7yXxtC7D*+zryd|Jp=E32~1-j%C9DUH?R(SM-*VZ{gT&)dC9-tV4EFpoYfmNBZ z5H)B%1C1#kXK1KB&H!2ij}nqhq5uEC%m5F3por^(!~?+Mpb%CCoh}1f@&R2H4_

%E{x2xxG`2C|S3%!DlD12Z8D`M}J2 z@Y-O|!P_YA>ks+=|K$d7!wBR)aHR9Ml!K~A&^W6$D5-#IJ1`Auy4`^Ekd`;pE(f>G zmV?`7%fW54<(O?Vc8})V8;q}yHPkM*E(I;4f!y}{KYoGZYqqzHRDA2fmvDL7!B2A#+TG91IxPB2l(jx}&lKz6KwnUEc8 zU?yb88knhH2im>^W?I&JgG_*X*2fjivyxEHz6?Zo7J5_wsz+Z3fIYgQo1x*!W6&Z_ zS4ioPo_=04P5{*fFK7G!wYiXvd4bk~km{BRUfo)N`+F$WZ7?{wfewNNt&+p6Zb7Y- zD~+X~Nj;{<+AACi3=E~gpyC`npaPm9Z$7{Q9sMYUrc>DL%CA+R+Wks%?G=s^VX&U& z0}9=tS3nnTI52byH2Pj)P+(wqxfi_c;RlCThKCJ0dQ)p1TVXGodK%&!DC5@ z_dx-L+@}GZUW}`K2&y_^cR04kgLEP#*pfo%T>T*)9S}v|ENQvX@&=AXC3G)KfO}egcPSM1H;Qch&(vRMSW3%926rh2TDO_ zfj>w)&cMrc%z+6ssseIH^8qHXb7yo0aJ&Yo_yC?`1MO@D4?KT>tz-x7ErnD?Gmbl0 zK%)!Vh-Zb^Jp&Zo&96aW{RjE#0niGX3Xjg(4%p1%aaYj3Eztcx2cQOZV00If13>1y zfwn$fJC1|r7(v|y4^W>AG9I}DWl=9mafRp|bjE^ALRr*%7NxjCS&0fx0g$2xv>^bT zFF=(YXruzvCmyE_mw^$UM;C4QNb44(y~*kTnmWC5*QB z|Nk%9z~Ycvn?Zn~^+1USD9P*s-Q@$lu;=)T!=6Z00Vs)q2FyTh5zs*{pgY%*jlJUa z|NqPN;8F=1fBnas3Jk56OKDTRV!+{z$Xq~$XtM4 zAprA7vKOo#f}i9d53!z@QViC3e;tct0qD+I@a7oM;E@fa(E(;cc8r6Wkop(Qgw(%a zCZzraGa>aan5ka}8Vmt5E$h)+@1>xzCU||k#}=NszySbZGn1&##Br8e*;i8DkL zeT0R-x_YiFxY3HVhPl|;e|}8!?;|a3s`a=FuuMGZq|1DKJe%Tt>go@hk0zk z>(jssFH>w781`90TPvKPU;`}+07V_-gkrFwKpXJtOwj!O1^85H1jrPSVo>;iX7*6q zrqDD9_W&%3oB+)>K$>Zw1b<-{s9@UX0Cj<|GbkgL3PW7&3JdU~?x55OT43sW0BIc> zx*f2}GzDP?xLX5Su>}dFB=Fky<^zl%E>{Vtc>|trP%d=@$?ReS_0M6q0Jb@S9RoTw z9IOZ&sIE7_o&Qjf!3R7bYgN?T|Nnmt8uYxu__`ll^nq$`(EJ=IOuCV#Q{chj2K8_v zC_X_dL3jOtk0vUq0Zm$PLbElNRc3HAU_n|Mg__dvz?Dg_YlFu=eJ#h7l++X_kNuV5zRvL>`S~851|FRi93J~} zwDdFcN)((u_UGpnm&CgymUwg)2zYc>NOPMRH#-c zN-Zh%=;TN{?!Zx$cg%qcv@aR#56H$R5EH3o@WZ3K7341u(9l<>0DK)9EF1Ecya6po zf^oS@nLrs5G9C=o0y%=pqu0a20~9Kt!}K~2d32tCp#r|&{!4T17f8!>LbvM|=$v8m z8wHQfTJTYH$6Wt2cr-)1!=Q+Vl(XQW-l{s#k@#RHq?`paqw0)79W9XBc<|;Iu&4@n zg)Eo}xrPMHw5&rbXZc&8+q=Nhv7oa6v0WK^6_f!%BX{7P>!9`#e@htXI6BY)yI`%F z{H?D4L3bj!LM}k%Z!rTmz_6Ltj$v9U&oS5kj4zo%^Qhn}VqITAgQoFK!DUdw+&e=D z)Mf?UWB_WzfJR|KG$>^||LFfPfT_4VahUmaa=J<=ncK`pw zr*XSmL54yXOFi&_av@nAbP*G%Kt?RGy)PdDseNJB7RyEc{|`E))B`jf49@EOEt#Mu zaI@jtAeuLd%*r5;s&?4hO7(BZ}7DtpcgUT*Ygxd1AmVkp1d?qp@

92 z*=2EvzvT^hBnUj*0L$^~K<#(%fC{32v<0LL6mO*t9=)LpJbFPxM7?02LqCx#SaNI#6FI9m7WDuxohw6q{{2P=Gpd$E>w1X;Qyx_4@LA$6pvno}? zqm$#90|(e(kXN88AO0eH0?INe~h{4mZg2?~Ly8Bhlg+yj{m-Y^Eb zv;Z8r;1UQDVvqu8@dfmF{sd~T^iBn39@KbYas)T4z=Lr7Ek$5u(0DukLf#rw=7KJ; zya1|*LE~*6jkPEKpJ!kwgU(J%xqz*LoLJlo&Yj@pzl@0ZKjzVS{Y47cDDd5#|3NO$ z`TyU8@j}{h(BYS$b`+?{=`IBw3IX;K>|BCfY0yNe;0d+|>4a7#kXym?#*oYn4FymF zfP})_^XOVWfyxGKwlqR*+2w(*#9Fb4}Tfdyhg0-#)7;)HJMHiW4g&Y`;eHKFr8JkZYchg9#~ zkn^IuIY4<8x%zdnMC4yPX9fmv6%1C~-2qxmT`1PhSYz?z_ED}WBgMyZrRE69=ST^!XgNFSu)Z3XY0LDan~&Vs@LTixpz?il9L z_y%;^ok!l{$~=eX+`2nFq8 zw<`RFS4SE!X75ykzyJS({k&5Slzuv|fA(1I(fO;B$)ouYOY>fkeGH`>pe;mVT%f|X z73>^nuiK*=#^pz(*&Kf2Mq}5og&??SFBq>?&t571|M<(4G74|i||mo z01740{(Z=F^1%m8paB`sk=LN{kXBHzdoW(;c2KZ%y};iKx?X^wV$fV8%-fI>Sil^V zCLvxSRJ4Qr3odZ<8Hlk;0@OE};Q?|n;{}gy0aTlpfl@Lg5cdg}LFNQEIWRDEx}IsS zJ;MN+2|mLJD(t3$(g#%UK4qxN4o3zC{%zo-!@uo7>wywEkKWKZ9^kGXSQNS&NyG=# z9&&xq?0SLm<$BO|T-Q0xKN$J@8ks?Ry{|x*0^tZ;&?w8k+0Z4dU(LWBA_b4$Rsm4T z-4Dp0#98Y*3#;4Q3r?Z0NxPw5BmVWgy2NBRVZg9FmHP{uyV0MJTP(#2SAq52m zg-nnAc_j)Z`6Y=t@Z7gE9@Mx{uvLI|gbZ{Piqnoe=u}xBbI`+K>4g*MnR6=Wm={-Q zMw?^ldZ9K6l4g5Fj)HO@XdDZa>ELO1UjuT$F&pCwxKs?QbXge~K#B16G+0tTfo#+c zBV0yFVHouk)NF>t0iJ#&Bo1nE$HBql=)uts-o{NZ^$K|OZUrSK$T<(7*!ArEucLAgZnjxD#z!~z!OVI2>HzYH*&H!bGUX+Y(Q4TH=ASrYf*f>Zj zg_@B5fNzvXPN8Rs%h(`KfC`pw-!sq%0ePYT*;W<9|Nmb*5Ru^o5QgmAfNa7e16;vS z;|>XiZcw4+`T&wqiy>k2pxN~b)nIy>HH$K>7KWJdUCqF+Mo=NtV z7Q}}nCgr4h>{oDxj3sz<7ASahR%m$aODsu@4+!%2_1F(l6CLZ(SpXV=ut+=Z;Gkf8 z%)tpqKI#BpK#v^e;4SNr6ba3|kkp5#1aQVML<(_B7rch7bpi$d3=c$pyaCOR;Km`m z@AUNudRjgYx?9Wj3ghd|(CFRwpd2YhdFaDK7qW^DUWKp1FbZ^rHq;P2F#+*$ZQ5}M z5o;U)=Z|5uKBxhX5^x^iURi2h3btbie~VDhpnnp9;EF4mJjdZ^#ig2KNy(b_N;N1n+wQ^~NDmB3XA*SOWuH7`b_~3^TE+pC(m?B*8IHR`2IaazYQfXmGY}CC)-3=DQ_Dkj{-Bx7 zZU>Ie)*A5k+zr-XMlEMImxJE}D>{$Ahy~TDoyT9)X@OD=XlNH?EvUuo(dmlQG5mdgpdzc=b%slK2524+G(`() zM0bNGWI+wj3!q*RWW4#j5@WZaG;n1zDE&a zN+-k=h{*958$jI7gWX#}PVNTxm_b8dpv;}|AmH=jfC@k+_QIW+s07+Pu!o_7v$1xMIuio}Y!^Y15jf^w?&L?rH*_om zl>fU+FF<>N>HEM6k@9r`NDG$8csUOgTHWAM2UH>)TaB*M5~LHM;4*lpA94vJ&CkHl zuoqN_F_fr-@(SqSJGg;QU!oiMjt}m70w+>|N9qx&5=-#|*8Kn~o12gueNxB|oio6!X@ zqpv}Y&PO)7w41f?h9U!~24Ky=X|MrW1a^x$Alze$Qyb`fF^sr>0BT`%yI$CL8|t3> znn+%??-pf582#-!4zDs`^JyE*z*alm5qYtXvg3;RT&=7u7hYuzpCjxg5-r@1az z%!O3)ph5-G9k~1b|9?<}9i{nk?HQ;(LvF4VfkwQ+IzascENu#uE=@kD;{{d?u@2s* zUbZg+|c7PkS-KEgZ4P>D(c-5PT8GJ7yf9rfmu@6xVZ-apANJ!P& z2^xupOzQ1cNGr`tjxR3p=#)6_z>!!~5}$V5fky$HS3oTX@FoV=3*eP9;7ZyCvhEaA zU)yk%vL9<*^XLD6SY7JTTLHRF6jFtkUI6!#LFa83>7oan708jWxs~qF6CT~Z7eFJu zpgC_yQ`tZq+~5WuCDD2OMJtHg3EGH==y`$8rvR-Q_UJscuO;4*;l*9hI6SDy1?eCm zAG8)O4qo{LUU&u`kM0ZwwUZ9KZiEaLw77yZ1h^dpTMeWP>e)li13dtq@aztqKtwBU zy&1fT1Rg;E?NH!vc?!uD;6s{g`CB2^29$zYh6hm3@=3A+wRk|+S-D;StvB&NwH35E z7263_mIzxfcyxmezJS~dhF$pg!WcC4U&#kj(Z}-%X>h>@{oor zl9#!`K?+WJ9N_Q+MGa=8gQx5uk!~#tj&z8~@fQ<7Tr839pupe&igc+;M}`+KKpqE~ zjEHoY{v=VnkzSGu4qMQEKFCmu5iICIMu8VqgAZ>LR0Aj9mp#z>3G5ftSOJX_V2hQ- zp!o=lfcXmvm=hjgXXhds>I$G$pswJCI%kOv=SOFv>f|*#h zf@VOi0O?0j30l?$Zl6z=2Tf4z0aabNlNl(Bf&8|w8af7{gX|&1FdOJpK1k9o1!XaC zu$jp-Ff_kl0d-J8Q~IC|0?5CR#=Z?Nw5I@H!pG_Xno|Jz8Js^M1p?%>L-1gQJZL-# za^60udr<=7f@cpw4Rz@Gjj$r;_>2D<;5dWyTR{Z@#H8ad{DeVig1;4XlrMB>q#L}2 zv^RjI+jS4)h2DVwP;r={NC!2qKsFXM0K@dUasrxiaIv>b9$HD2q3I~~0Ik*r*8_+O z=KyGc9MUs}490=S5D8z-ap!e79N7l@HXMbI)d7?&Nk1(jb36a#-=c0vli7Z8tu z4y*tv2ZwFv@fR~RL8GUj9bU&@m~8~>fG_GO^#!X0FW3WJE6d>lxpV=1X*%?#3iz!H zeClYLLAzI=mV!eQV<&BZM`!H`kIvEqouQyy06G_i1G4B4bd7?KaZp2p0X$3zUnU2- z~}ZXc>>|hlaf%`x#0L zpgVI~4wR&Vn4p4_AH0te)Q|&THU#2wmVkE7!nyy!n_J=B`V!DhRxoZ0`0937gq>AT zJ6{%oz3d9w90-awNW4Je{tA%na=0w0 zDBiyTB=-OB|Nr|xfLNVySy1BGuTka5@ZupzwximS;YBuF7OZzhkt4&4!ywrMAX#6y zELg8crX$0Pr6Ac4AX$A>+4=d73@_S2vI;eh3@-%5K_kH6b(!6+e?S4na+Cpde|hVH z5-n7b&O`f@85kJ$`_{lhtV9H~%l!}I>m$1uE+sLbONWYJnw@}QHdqAHYzes8`y)UO z%@9KgT#F1xh8G9^{Qtkd10?Gu2DhrY_76{e1jy--Wh$^kRhT_k*Tg$AfHt3l?@ce& z!>VRMyd#50Hv=LbLDf|FAE-wc?cV^h?zSk&)|HT8-HYFF>#l>W%MnHK`wmbP9{K(M z|Nb8!SwGSL|M!X4Ix_5+t%b$REusJa!AG6#H-(EG1BrpoHrpQn7uy69%LeH!fQ!u& z`u~6bf?7w07hgpF{|C=o?7t3|Z2-yM2gzO&0l5IgIs;-E)HyP|I0RyW^NEMZ|Nqb& z6713VW(8=-wR3L<=vv3EDIoGh$JB%$|NnQi#{2-~yH=1CcpMV48XjExU6lugGjt7C zYrzl5w9_%y2Mqk%Tpx6}K5W0U~WBsOBN>s!!gDzp_fxBJZ466VC z|F5;>WH4}m9ESs8wqN03V6bISU~u4X5oLoh+xLM)9auo3zAOw3wqR!a3XmuZSkxRO z3TC!X0*QjoH05upVr5{k1vA@gK%$^)oA_I#;mr0l5HpIQfq}oJ9b^KS*&YBA^#O~P zf<(d0b}NwRM9_U#Ej8>647Olqy9!9O8!XBR5(P8c`9PweOJ4a~WI?_FGuwZF6bORV zTEUs^k3dXru;_7+S}?Qy3`i7o7bt&=8%Pw)Y~KbFWnvIu;BR@s#K2$+X0|T?i83&7 zFz~mqf-D9z+q)p5j12rOpfPh>1_nk3{`L}(C?g{SLy3|th~jTgVrO7z{-MF&V#@?# zSo62s1|1#e%?`TG=?SPn?VbusJl(EOKnKWDg(IFas)Jw44y9q9j1jidjd3(z5|>#yF+ha@6$3I;6+?*a$6nVrv)Wt&}LZy z56Ge!(7kWadJ`1+9=+h3;6P>HMNj~Af?A+xVUPo=vpbJ^tgYW~33asVXwfPuf24I=oE%k>d>0Ve;{ z10Ajp`L}_Uae?+`9{^A1cep+Po5jAnAl{MTHS6wbP>qj~7W#x?Aq(+RINVFU+zbpa zotVL~#z`nSfQIlf%r=6X-Fa+(1>9g0kijpRzy^crP<&w{2RdqPFC=W#pyO_!`f(R% z=`J)Q-}?0bf6D=kZIrD~VIv@j*j@nD(g1d^>jF^5zX4)ni|t||)Sy`b_dyY8;d3uU z`)XzehL_S1-*6KMrZ9+$K$R(E{t&IGVT9Z0xZ`5IBLg^*J%C&Lo0Eaz&@#x$e0VH;yeBV)CKYY)nUh9 z^m2g$5p)>}xYTUC-|5e z&>lO`ro;}=!4EIM+blqROz=@PpfxK$z_$u?25?M>Jq*zg8L2@s17r^P7#&#mb}DGK z6LkClQ#EK?(F^cRbtsxZzMXIqY6r-Tpwq0n9XO!lLvRuBp*cT5M?*4AK*)8Le(84o z;xPl-Lk7u1HFb%ugQMfmp} z=sf;nKga+7od-ddf=4hrLw|Ih>HyvE+HwHAOR$6qe3If1Y{rAeA3&pE*FfcG8!O0V zpm=sAteBI71jVYL17{)rfSHW4@yDZcE99ocsi64w=aLU(wHe$Cho{Fc^tF;5 z)OrCQ(+4_82hRd>IVaVp8%-L1aH%_xD-bOc2|sHy}V z7RUJdF=&{Je;Y%~0r+9MpkXr5iKCE%u0Z2mN+qD9CP6v7u3Gu%jGc%k_RIcGz!17Wq>0x2ezF@k!dwLcg@$A7RIfJKi%G*&bI|NmOd zqgzx8BnqmdAX9tEAT8ajEFjU&<1bPe5#~3(c>roecJ2l3*rQSb=&>VQ)xbCtIsJlm zFn3P108z(V9sWWFq(JEx!3;n!BM{641TzD{EI=?T5X=Syvjf4LfMCu*FhP5&!HM8_ z>k5SE1_W~lf_VVJJb_?dKrnA0m=6%l7YODD1oH=i$$&`890;ZWf+>MuDj=AkL<@F$ z_f&AC^|pexSVGgU1mpkz$6G-K1+)VChgt!FN)SW^1m^XERD-4iK(W)?3MxnTff6IA zGM)#Xn-e{>Q4uuw50Zk~Bk=zpY@8A{J=XcL^FrsTj?gC^uAnmnUVx^P`1gT_Ilw2q zUVpLs??2Gl0Y5yNYkxo%)|Y@TX#W9gG4O8-eb6EB`V^?p$JS18eE~nBs{n3P?hnvX zPtYAoFN#z^?GOHK4E*~*8zvq=2Ay0%N?Q-W=9*Z+Gf3dd2UKf-H5Rjj1z)p(^uuk2 zia+c{(FE-^#JYDeSHU{6I}O|5;6;V9~>lW?f@ABnK=Pj(E@TN zC~^rnrR4zVW;s`o78F-Sf{bfD06sV82jlCD1YCu2-5n(CI*-5j@bBOM4%h#nLtH?2 zS=|7IF{qw~H1;n2`}d!JU+90!3*cq|NCMgnc)|GkDk%C;fNA`A5|(DyFCgcE z0>g$E+`IrYxk{K`pX_%10&N5%83{H3!(7lj99SddC^|5c3l@@(!Fphp@`Be#{D4jA zae+=Q&Hcd$a>(m-2rD7|3)o~FXu9ynzIzRjC1?JiR0(Q~BJzSfKI2^>$s8I!P?JGN zAwNkw?)n$hPyNqu%=K>!|2Eer9j^c2r>S^=4t?r%{R z?gt~NMaTI1IzpHm%4|7M8VB<-#73RJ+GY{5*( zB5^R&vW^X;_BH4t=@0uJLPMPQ=fD3R(8*l5paoR$rR;y`Hg!k{gHDpu@aU|Cw5dUx zNujf;;DpWJ@(R>mgtUpl@e9v5+kgN258es^I?51|TbBI(_uuj`IAB16HjsdM0ScH0 zjITj`Ca5qdU_eZ0z<{z9w4(@SLIMWNgaizj8C3@g7%&qOFkmJmV8BdBz<`;MfO!E9 zm6oS`L8sDgA((J`H3# zxaR;W_`r(*UOIe~*%Pjy zS#Q)R68VJ@MU1~lk0OwR(Svg3H%O>~0tN2+D^S6gpwk(_9zYFBP$>+(7zTVhy6cU7 z&md_QtoTI=NIy8O9e*(c#D<2p2czqa=GrR^m8|f>2~>o3hhFeV{siedeE$Z?x}fzJ zt{*^?{h+)LDu{cXKvgm5{I3@tpqsEeeP8fz6Y3D?cD(>vHwjuO@d12y4EUg*QV9=G zaSU1>)EWBX7=sQdM?lozGYsM`LCZ~`U%X09Q_1lLJ~ZfX;}yA;{G_s5bpsx9}`q6fHN?nme4C< zdffsNhgK7fZyX>EVo+1hqjM{$@ps(y3uxt`M|UeoaNkQvQ`ipk}T|=Twl#q5cPt!-0*5hlCQyUQo&cnG6XD9;oVz-1!h7_0yCrPK;<=<84o({ z-1P&*q!*xu^8}E)Kx1v%per<FxywWheM_v|pbFUi-GU^1`l3< z%AszCeflksrclc#a4S$7k5VJ3(nzq1Jp?0luUR%oV_!g{GthEs{)c~{!>d3d`;GTE{KfS5|NeW}vM@3*l*M>-+Zrqe z_e?=X?gR;fMp6=5U>QQ|?k0|&SID; z$DtbPz#5=&d=e^{2^K^#1$^i;IL12#UdF;qxeV1{0oDMG@0l zc=tQZIFYssTX-CYd34+QEX0iC7w|ZC zdk>A{*SQ|uyb1`lpa|Az1r;&S2$lh<1V!*`gk{G(x@!eqTmo4L%SJp6Nbv*;u9w?E z?bL4Ys7iO}pH2aAdVv(dpnie{Y%MK#fo$jT7oXq!``-x~_<&rC{shc@06H7Bj;*=& z2}3;>*o2p-m_Q}c6HuWt1GJP0JPn`*atru=Ch!8TZr3-~u21Ssx?LZD)pduy0o|d~ z%X1YpOaSgv_sR(F11$>y)jKcVfT~Mo@O&S1{R_i!&>6}M$6a55O6_jf7uK#1>b*fN zh8Z591|4V%03&!$i&m)~cr+Yz@Hb>N7n4Wx3l{Kv7-&5&2SgM2kfjsdLY)GjnZeg< zkGsBsm<)0$e}5-kVipAqFKn_+7Fsjb$tU`-3&jg2YNOL!ZxrYE_5@r z9w^o91}g>~M%5bt>QZAUW&|rNVc!XI)N5AoIS3F<@N(Z3Q_~^-Z3jD0Hs&tKsQ5!#xgIw z*6`?NJunB-3NnGWf&y9{8D4yR{qO&NP#@uiImkL_XYKV1P;(r7Bl(GLA=GSp!J}73 z5R_xhKpHwhQ(h;!8PMDVnz&*B=W)nrq1MZPprm%9n*nm4_zCdR_zT!VzVr#W^#~h{ zOhjrAxjw0NgajrcfOjsnfB6q`ydR`I^k{tJ z0IHKZ_kt#MJUX|6rg=d92XOV>3z`b@=x&9`9e=S3M$W-`NThd3hEr3)-M@{Kaul8tVp&Lt_9o+u!Z_ zquW8E^*{-DToHWAO7jZ^kXM>PUg-wiA};}|M4)q-uxxY!S{8saNdTzhf1=xg!}1V+ zFX$*3kSNHEiQry=D@dyOfJ3M2i$>QM|LwuWeD4GhqxAs4$DxBi_&Qx*987(|2PrB$ zkH2sOSq>UZ1J#F+zM{i%*Ef!!rXpyoRJTO8?+cG!*Gs!Vckn{Si7&qcP4j~b%+8yg z$M#QXg|+a?AN~LT8g!lI1IUflt|vS?13=|+ZvbdB-igit3DA}!*Ed-52xxQ@nk_)7 zdEX{z8VY#^&i~L<2s-z<1avP3XcfN)=*lTj^$5BbV=LShA0Phz|1uw%PK8y$54jioqN3dk797E922jpHxm|AA)w!38ha9sI4^A&&R}s_huyPL)A&s>*TKKX{zV z@bLft*QKD)0PUij0Y1OCy9#t^%?I#u)FXpv5y6jxk6!hEV9|R5s&)Rr6Fq20(+)&*f)@A+fCj&y zcP)diVS%}Ihevl1Xa(;F56z1nou@oB!3Vy8I$WTIiJ*{Ie1e<=z|NKiU3v^2%LbJ# zpzb0kB=s(R{S?%wa;*EJ?;R`nII;}IkBK4u3Ql@Si!%KPup+-yiT{pWUG^I*;xD0Z#?4pd30XzfEDS-z)f|J&hMYrd32ue_zu~Y%y{8A zgI-c%_Av+0s`KkF7{MA{KX^cl+o#h8>USJ}!TAVeAap|%B)Ne4>yT=YVV^!!*?mY3 zeVyXb-3pR}BvkNV6qpY#yg|iccjyOj&H{yQ?c;y{JuF>6fb%qH9t5fsVJyg~PFK(k zIiT_lr03@Y)Jy}uP}8HcbOIvdOz?p0`kn#zgbT!TJ3K(g0zf|ur!y!0(f?CcH?{e5eJZa?mz>U zplS)WbH>^gVFYMk{Dy}%Xt5mVM8h=q%mh(HXkJqtkbROXq>l{DQ7?I$SqElL_=HERSwi(8Yrw8$W=~ z1@3lT(0R%pc`C$D^B- z86@ill?C+*UkKg@^+kSobhAF60CMXwNME7r-oO8#>3rlFi`yREtcSpgj=#{l_wRp0 z?FNPtTQryV{RYQ2eD^LWJF@nGbsd9jfYgTs^2^7t1lxK1h0{+gy26lk{k#i~nwM)K zx}ZS^^1?CK0}S1+TbduRfXC4Jw}DnXtbnXdXs^Ix?!SJBM?up8FBU@04Fz}1w?HmB zoq7Ppl#UK8rtCmAB^qi9Kg<+H(AJ+WaPhoF6*TIA={DDyZY$?Fuue z1hi0Z1?+%zSL9@{^$8>y^tv9{7YU7JQ0jW2eH&cyuITnq@aRR+(gfAgZTq|rG`IvB zs5!VV3to+Uyz}or|2EeHEeAlSU$PzoDe623+1&^V{ry#Kjtnn;-vyb^x&$l>jc4~e z;248eT#auGKrsjD4RwC#XuX1{fuNbFx%LMme?JdslND%HOe^R-U99~PU65~}Jrr2& zbO@ZYJUXw#Yp31-*sv^UlzpFmd2VuiVrhv-r@?Utj(oig&^jJacLZL#r-6(GRW;xX zJ;1G9)#I*zK&{g1PLJtAvYybbhjt5<+GH)+-?=w6B9moO-SW8!^_a&kI zJ-GLkzk@RZXuTe&mO1_+_9m!r{e$u4tH1yMPv~}qHJTdV6a<52a^|c7CG)Kl)_~eD zA3zD*<9O=_&?h*lf8)(DVR_FJI*eW3Y)LMx$Fsm`1ym??Gl1vd`CFK{7#JFB|9oL& zU?|l(?)m^Uwdm2!8q=xBunQ!(?*P~h&_h2#_PvY{z-KO~HB)x=-+$2IBCgO)7oEpn zT)qZs0Uqpj{R29iwDW=ocyJX&F?%q+@X&PtUFO@#0okO{dHls<0_rW$)E5&_Zvauh zACx;@xDimS0a1+8u?j&943KfmZt%8N_!u4{d_m17JU#_AAi*8e+gCuT5MQ8lGr%YJ zR9=Dd7JkL3GeY;T64U{jR5Vx%D%Zd_<9G>z=7zvcTK*PC&{S-z$J+n@q4R?LEy_%w z*vIdNeV~~~P(rZ10*ZCe?J>1C82DT6ftw}x^@4|5H9`HqPDt`eK7lhHz=@{Y0H-`S zk${5w6v#0Gm+=HOM5zEI{lNyeZ-B0q!f84;8YATpCRoy17vRm zG9TsRlgL$ln5*2*MdQkZ8o6W1wLNb;Zhy1fvl=N%HXmsDJSVr>ziEp)n3R z911j@#9*UeYD$V0&@zqOFO08e;M4?-wBrm~;C2uG_+lgwy4@B8>>(mE`~qc$%g>36 zO9}99;Rm2P5o9yc^#O>oPQas^Rl8Y{VV~S`Pz49AD-19G`~Ol0TnFJu&X9O#fR`5h z7m!Me(o&FpSQ9QJ=BS#NLeBsD{}Oa=Jx)uZj-_4kRCtbHx`rlJa*C&7B1{Ke%z&r} z9JxUi0cgztr2GfxWb}C({+3OkmT&JMN!5SBeM$m(sFUNh>v30jlE#z7KnXjjL6Kpf z5pu$gIQQ@W%V2gq)gY*S0G=sFYEf}DK-#jP5m)f|;r@W-P7E)sK?#oyeCEavP}>A& z`h%Eh>H4GA52qS%0SuZN0c|A&&3!{AFFTLFcybz47+wKg2IBezbRX1}PS+=(<(RMg zK+7w-U5|jz*{{*H-O1%lF4;egW2&07iz- z{E@hG03;cG=GQv$nLqAew=1L<#Xsc$|F$2X6_Uv(x=Rm$ZmtCNbRnK|>;zwJn*_e= z{Xuu@iZ%cLGrGR%ZdCzwMO|NXw<@d!&FS*DfO^DWBS8aVEuh`!U>;~l3N)~Fp}Q1x zR{$tnL8rxl3Xaa>FQ#k*X)fUf%|)Vb5aMqEZ3-nVy@P@Wv;h$sCsilGaRL@06enOs zj2AriSt*1k7UgB;dF)RwR&dQr&M$>-LiN~}SCU$knxdxwx*6!0g9HP}*(Lmte#P12 z|Npy#F%4$=s z$lwXO6ynFe2ILIwauPIf@`v%|!{4Axa{$&0HUuXCh1LV$6b3r&57ZfkB;2?+=;84i zJcxM!Hf-5)4>SzW3+@g>yQ^nFBHgT8tB?w&h!fx#1_wCkY~gO#6Y#ma&=a7`DL_|B zbTS=py#XItfsL_1W#LVbp5w?(5KgG{YtUo`^p;d!OR(LC_RRqMAKIID0l5LR%Nyca zXp9RzME4MDQ}|mafU;dLxNrlt13l|d6_l2N=71peIn*R*yW71NO{G7g zm;ennLH(@u6iu17M>i`gvb$Ft1Fe9c@LG7nYk>)`c_+N)n(&%^!fO`Ldu&Q>geWC=Jt?T2z!@#86O_n4X)+kdv90%1{n& zprpeTKxvCai1~I<+7(KBL20NmoD?XW(J@FdOboQH3LPWM!PwYnWOIm>zpo08CI%S& z9?Cxlr7NLy7nIH*K*RLI)X#>h$3?G!%EM@weoARV?nIZT)V{&4e=jtgeezUIGj$Z4 z^K(>90gZUhEvGQQ*bNIOD@UG z&r?uREmi`V@06IL5Kxp_P?VpXT3no8q~M&No12)Iq7Yn}SCUu(F-WyoAuKVcG*uzL zNWmvDDK!VpGF4EwB1IuTO(D1>u_QG&H4ox8G-V+BJoCyDb23vDyi+U7^NUhIE-p$f zF3!x)vsQ4zXmXn`Y0wuMyQu0fa za#9t7!D`&VQsMbUDTZbWP)bWH6v_fo#ztUqVw0)x5|XhwtqoIYLs-4udS6O%JiQxrf~%z~0LD0W=)Qb5eW()^NC1r60?O$J^r zQ2hIr=9FX>RlgvHP$9Um zNFg{d2*fD`#X)c(gbECG402Ua03{`b;LP+qg3`z$BPoTv(czSE8U$oLUkOas`-9tWZ$MO-xqEEiMHuX$1vHK~ZL2 zNt!|$lvYT~FG$T(NK4MiFHTiRD=*3{NmWQIN=-~rP)M!FEKyKMEG|whDp6194W9EGA(kP{%PiWR^HLlqV)fXs(;AiSi^lH!u0)WqEQ z%)B&EUIOVZE=f$zhS&^Yg416}es*e}LO^112`JgCs}`$cragPB>ROO@LFq3vuNaon z75ocQixNxni@+%aR7yMN=ar;ZlrZR6Yg#dYQ>ucxjyi*@f3SkOHE5wW*c1i^J_c9_ zGBEHkD1g>SG4L}eFxW9LFt9TyFz`afKxaBbwSXy5dxaZGFGvt120Aht#D-yz80bW4 z7~c_Uo-h`@B1mFRP<5h6VlXpQ859_785kJU7!(-97!<%g1ZAk03WEZJI8@9TDyD>F z1}73*5z2Of(lGOJ(QH`Mv0xFyrXPB(6X-%Gu(Xq7uzx^&uwzJQkYk8ze7IwfpQoRD zyuY6UE*UpBbSc-MApamNTA<=?ZVC(xj!wY}3Qj?ee$E~Wpj;ZF5EA6*7pxHAAMP5Y z;N$PEpy1>0AE2P%7V77$pb+939HOA$=;ET_8|o9H;OpqDpy2Bt=Bf}J;t$HqKK|~W z&I-XEo^Bxu3ND^u3JRWnE}lWI&LIi`Awlt;ex4x;3cjAf&I$@DpyH+^9-3jwbMp&| zAxR#}%rA(Cuu2P35=&B{9B}@HvRx|k;(b$d<2~~-OB7%nS5WRn=EUdagEc9@m3ZdC znT{zbaJGMGi2|r~fiN?;BoWL3n~BVUn+X#HnWGR853?8SA_Nz#AC(I?0Yw)Q2V^2b z3)pP|p!yT+AgK8;+o9$obK&MAG=WT1aEbJb_jUD+_w<7^L9q!F_74qFPyqFOi%S@) zYZ;V5cY%XDWsv3_xRC@ZeM&M?6;kuS?J*FupeR)r(Y`BA1vdZ{xfql)(-f4!T|E#5 zY8WXfr{-j)VUb`^hV;`*^OEBkii$IDj06_}?!+o9OL;U@H;=^2nf<68H7~lfI z-kt#r&~&m zV8!4U>f^&;U}$7)Vrph?VF@Z!VU@IBX>L+#5kqbwsNtxP458ABQd6PD<lt8wQML z&}7iGwyLg8Wzc5OWe8<(VbEgGXHaEOW2j+>W2j@Wv0<>YV^C!9Wzb{LwPT28h-Gk1 zW$;U7@F`*NNo8;^VQ^1nu-0I()?|o}XNZqiV1OiKsJqdrJ;jjmr~ObGbZHAn&0#2C zNs~cI(;6fK#U&8+%ut#^MFZ4)NlYqc05zH!a`RIdaubt590gF@xG0qY)GW?TtY84O z=RwVRP-`C4=m)j_3-Zeuz@{VhKaj%PphDHas6rjoUGm!GE_oSj)vkeZ?pl$xHIp9d+` z^Ye2Ulr!^^b4pWE8I%x}fD!|!pPZRj0_xE+VC^=#<`$GxLIxfn)eb|ruYW)=13dLH z*n&FcXo)kPL0`);B_%b*sS;eR+zg8PL?ASAGzkP-C<>Tu0uxLAjaMz! z099U^5EHQY1mt@x8Z}glbrjT!t2C_@O7cq*bK*gDxPrE=LUENf12%Vn%z=6gp#hv2 z8E~qv21l-rf@+Emw!$Y~wOFB62jp@r?uMoqkiXFr0L;(UxZH_sFQ#UwojB|T`4d?` zs8s>ifyJFr^-4Mlx`sLm5Y-Hjag2BuP!k870Kg3ytjSXuns*dX@(##x*uzyhB{dB+ zQlhF=tg5S3te{#9ib_x^2`Oh$n>-4jp%-Z8cFr#aO_8K4fO9pdFTnumN-%)>2@Ju3 zK^WZ$22gK;0o0jbaCC8D0QDjmd>x$`K%EE%a3_KR+=pNQ_aPWuJi{1ZJqQL^4}t;I zfnWf2)1gx{@mNC9ngKk($EBbEbu8G8#R@^Gx%p+ODGDj2MWBYPOKNduUP)0Yyt=W1 z1QeHo0=Vc<@X1UnN-U~`4{H{KM*K?PgGq?WDm4Y9mHhS!++P2Zj8xDdDKu?m&_ti@2e~oDV=(z=j9iHk|(HSQB77Y<^t>UO)Sa4<|-_Q7FkrYDri@I|vLQ|3Kz)^+9vFR-mFQPm>EQo|B)RnVguTkPjXCDhA0yq(I}% zpe&6hr2?`TWMm>}oFAMCQB-IssR}`7cU8N&!}EgPSa%t}(bL3^Ewhn9fhbtr0v!0V?01eQK~q)neFqc`nF&1((zk@H~$m zsL2OuSGj=diA+#g1g?ekKp~)742eC^h(u;$PG%L@{oq*{^jHU*6kJ-6T9lSknqOKB z8fb(S$Cz>&n(7Ei@c1V zaCCkFC?OWdDx_uRq~;~&rW(RoMhbd*dR$!LzRn6@wPmWsT%i6)3TOnpQX#P@9bDZP zTXBJMivoBeMz=V%0F1q;?msI z6i_^-Kvt!2arr~M33aM&hC;NiZboWOL9CSmxKpD5;y`TDEdxoGr4}XS7pKDIq01hM z6+knt`QTCwG}BO&3&}&dpsPdDQ;VTSWP*$U$?N9l*4BxdG; zntzbN%gnqI(9nd2CcF;|F;h1Q{3ve=jAIv*q{WGUzC}i37Y!`r3F|B zCM%?57QuX#o|*@mcS+SP&rQ|^tAfeKS}7#w7gT~1G-wu84>a_Vg5V~Ds=P!{b}G_E zBotUGtmNWi@Xag+7g~<6vZKjsjSeFyt~6<>$gOT1ZAJ zI8eYYRxMUYtw>HyO##*2sh}CX%v{h^Ze~>~$iJ#7;7M!nSWGdDpy8~kU}Ruq1WvR?nduoN3Ss$~$*GR%pc(d} zf_zAotf%0ZlcNv>k_Yv)ic^cqQd9ImCV;R)NJeI{LUDdtNjYd9II~!xpeP^G$^eyl zp!@(aIw!FloY9jiL4zWxMS0)?Cox9>G*eoVnOdx;07@^#kR}yqX@L${Jt)8DrzvEX z6f2~p7G;)!wH51t?S|M^mYD)6V6nMg0n{)mQUH|+N}eI1x*-a|Ft>u*{l)4E?%@2K zqYzMK>Py-m$ z)=B|8Q^8%&(9%!=v~DKY-z_8@G&c^K@d#FM^AA!84sdmK_5d{;6dXfcJpC1%{arl$ z+!caD9Q|AzgIt1@5TWdtR|zUNKsmMqBfwLOax+UxQd2-d4+)HtjKmTJu)@6j63{F+ zbU{NAw4)5FH^6H0QZvET2Pk|JOG`5Hi$EE^2<$to!3m1wl+;vEl~$6kkdashDpFEX z6%z9*6+r8OQj1gbK&w9T^NK;Ol#+aK$Q74nmLw)+=46&sVt4^;7ia(iWJEz}Q2}W7 zJ}zOo>Ln*?f_$UT%f-v33|R*W8F7gB;N?QJ?fnCSK?1y7`dSJh z`Ji=FWuT=`O3-TENNuyrY^ zX$tZ2?tY=p@$tM|%8+%E3Lpi=;NEI{MrvY8Y7s9NWIz+-NPR8PDx4hMlFZyxg`(6P zaH=iN$Sf#^7z!Olatm_wbq$UWa1DwNc6Ijma{;%pAcU!bo&myhzMeilp8kIE&XLYO zuE7u$Fw!v93}h#2I5_$H2ZzMFf##fH>J$_dGz|3&(lkK=`dSLb$%#3jdOa;M8MN8~ zlmb!R(WEC>dOcaL2HZ>lS@Fw9;A#bPAvg16#-}Nw4B6rP+eh&5?g+upy3bDoIaAlP^J-*W#H6T zl9;0aNm-z*1PLJUOfPulSFwUdW*%hiS5j(Dez_*tB9O=QL2JuEYjEMsD{v1dH#N67 z6|^=@Avr%cDHBr2LmSuN#ctrHTWS&599T*Sb`6Pl^YM2K(I_Y>(kTNi8Pv%u%>~Cl z)ZGdSF}z&Wa1IfS7+z3&57bV~v?fA1$b6j2K;xSlhMLykWf2-6r&&YQgA$`grmcas zLZ*TZC?KsBGPSi)T@Eo8;vV9?08y`?piod!6rCBXV5QHTdGCel%e2Mzdx zHTehVD8$1?^mP>CVPpCrwXVS+E#Q?$V72ZbTRnrFYpp?v4^{$z92oBmNwtQE5*g%V zY{DQvK*f<&`#L&9MHNtl{li?L;>f~aPea6!g~4HfDGZ*vz!Zjr5Lny<$=xoVVPG)@ z1w#uYVbJ6WMBEUm&V&RgSlq}INi`^Z!J-NZM&OzuFBLLs3hGEB%53=12TGY54=S^u zx{Z+xg+)`mvw{(lFf7XAol$}gH01*|1VuGyAsJX4#lb%Q?qER$1r%Y>%nnrC5F^q9 zutz!;VQ{2F#F66*6zLFA6qkeMp5h_m$f_Zc4i-m_0Z62Sg;7+4@&UvYWMOEegOnqO z3MkS+VhRct^J?&#v8Q30(Vs}-t2qwmRiCEB(ckRm`!qe4>?TE~IPu=wP> zl4y`rthTL21x%(IGLDoC>PadTBE(-HomsD zwib~C9G!x3xyvay-WgdVlDnLODR-Asa6BG&fl@upVW{B+l0k78!d)OKWQUOxULZ42 z9EKWRzK+f?XDOh$3seeY4=-OwXJlt7kmW8%XB1~Cpt;LG%oXM^G*WW3yM7Rqqh2$`D+yyoRImA%i1uprpx(h6W-CbZQ z3f%=Z1Gl@t^(|I+fn~6}3oJ#UyTE4Pb{C}Vhd2y19w9PF4nxEvL<-?Ba^ewU29m>2 zRhGA>t7%h2$`D+yyoR*-Co3}k1ag%_*|0dgB^c)?`gZbP^WCIxdFIpGB} z1MW7|@Pf5rFx>@{!Qw8M6eaG0nSsMyphgtPO`zs2YIuQU;BEp*Bf<+L1#=TfhMe#M znE`hb$Pl#f0yW*C4nuVpqF-2$Di}7&+kuG6Oldp!pHeVg>aSu)7Q- z6Ys1Y5AFlOf({XzAn90bZEK_g1f&w?U~(J_GBQ2@Y9lN(ArXvlunSV#A0;S_v_LI< zt zSb{=#fz80=E^zZ^pAsmKC_h1Pmhmn)+!Db*k43h47xl$`Y%P|$8XB|Mtc&yRI z3ySi=qca#1Fjp!>!=|!g5o$m)I#3hi!82pvfn@N4Kjd}Vko^wUyj)-zq+Mnjkkbf2 z)4U2=IiOQ1G~ue?8_-a7mm+UgMU?`t*Me?ch0B0uSaXU~L6dplF?oe#*qZv3%wo{W zloaq#Euv;ba=3;jJeWW}P0lMRiU+&CAiuyGp#v-g-Zlq{cMTL}+S-~(3SoZI&{RNG zrmKsj4B3kym5`nCs2UV(Z50ea)0(gf3d!>zXCo|yRP;!E@ZcJP532YyDv+#)j3yx| zfQ;fG1i(csiWYF;h9UwkR!~GBeP$FPNZEp9a9~gfiUM$=MiBuuZcqe3T_qF&SRVyN z5Y|CJ5d^i)K`{oZy+9b@5ODh#NeUr@+%!hj18O58X;DBPU5B=|5XQioImja51_rVK zdbqn_2D}Sq$h%+$y$gCk!%9yi+Ymtw$}ym$qCg(d*8-pOpawqaLBlT}dGlauib7aw z5olp-F=Q$lw#p(mF&SZSZep@VqK-n6jzY4gf`&$-rnW|srj|xBIPHRWKZDmxfVVEA zYAh~A)u@Z95up{Fx50}zTwH@4okKjs979~e%UuwAXi}3i67w>PbHN!NmT&w6;+_3N z{X*h3@(Xkn^1urP^tBX_O@XWw1|72kHY>GAA-pKDpdhsfbzuhFr0^iefB@GZLx_=O zi8-1I3K}2^5i00vjp8*@D+-E`av{13V~A;BRiJZ4ilEVh>`))*l6*CV5YU>gqDuI& z6sRr*FG+zeCy57{1Kt`AV(4orsB6JW^n#Ki@Cg{9&YD|1VNs)rB zf*O>IRNTTt1{`A*nhF}oF4nfy$S+V=gUI0oS_`RO4$AZ3MR&-qMe-47p|?UoQ7U+)9%#*3 zVhUt?1Zde*qJp}!I@oWZkOIjD6y;~7CYM0H3ULdi$pvHzIK?1VtU?w`xJ z^$tj*LVke)LLmxNq0n%?t%*m-#gcNMB8r#t+I3C{6LR1Ez^(i`F?Nw>+z$~48GzsYpkWJG z@F^ha2d}FF1s{R*10Df@8Gxi8Bo4A&fq;H+OB?EZWc$J5U<2^GAKW>C=?7~9aS-Vn zG>8s!9^|kobb0>(kO{xfA_ni{g?9o_o6-sjiAlxr z2(uAwe+31wDTbOLCnY8oBem_p2L}?=1Ug+1Srh1>L4ukcoVVb=ulFvxje zMM#>!2N+`41WM!a8X!$zMaY^!2OeV81Wm7CO&~=mno=tY2y05MC_vGalb?=N6X+;4 zcc}9~CmJGY%E?bRG$5o2tO!XH_%ueWnxNSZ;-}<%l*k30-bh$eaVDs*39Hi-6iO2F z2x}@yM9~B~L6V>*kRoJ1flizxtO?C|pu;H%YeID%NRJUAO<+aH&P&cO&LE@-bg*3p zvZmt9Ji?klijXyxBod(sqzG9P=r~TS&I6yu2Tgk*MVjE&A*5}So0wdbUkvWdfcDjZ z4tdJ~jjMnJ6LUa^R#t+}M*^K`3v0ILX6EUG4*Uc)h)Xh3GmGHo--1=Z(oJq=UOae| zL=#&PgvjE#nR%eG7affxP2@r^H?e{^?THoGwEKGc5vASN(+{h5#|YxIJ4RsDPNd&` zvHRVZNWc4{`dwd30eZeFC~81E;a~?7qeP4X=rq*s2QRRLvtYLv|7TN!OCEo zL6HGE*p@(4fKI^0X)?Gq4KBz*%3vnLGMEDR&gAUlmqS@2kj~LCK?tU=MAU}a) zK_MtVzXaU%$DPVRN0O!CvH($8gOwp!;F(tjI(ruq6GYepJ2IHCO)!;6mVrleP+Lu) z3LJ9qFfJ1{Ku4p3vj{A&XzGBfbm)1-Fyj%?1U_fkC?02EU^Nibg3QTJH;PY#83-CZ z%K)9QkeeJ28nlVGh4!>rj_VsfD$5jR5TBKbZ0W?Aa-yU8FD^4_)v$ue1+6B z(1uAR@HiWI@CMspA87Od*?*9unQ;Xe+?famgBqT&6P;oHLoyIN_=h{da2W{IhQ+{m zP_d9#LaGa)+F%BP(tm0R=%j0X&`HOeY!kOTzH;hH+& z^QCcAg8OLS`Dma*%S+K1^KtK)n@E zPux&b6Qm49Blv)qc#ULD&{6g|sn{BK$iW4gP6G{`gEl3Bj+iJZN>otN&{P8L#8B5! zS4ah27zesYA{8>*jZ_LKC@7@lgPoX?uTYKbh>ngRhgl+}siI2E+YamKL@B#7hpgq9xIjLo-Iq^E6 zLjjz<<6T?>LOkN#oI~P+Tth;G{4_P8hN6ZIL?M``iDb5crj-F`l?8b26tqnpI&})}uRyNv$V^iJ-Pw={I^_X8 zg9mBaLh~0$3Y;oH1jrQV@mw~=B`KNtdKq@0lvo5irVF$wR~>pQfI7q+=&UcqLeOfA z)FSvXX$l&}8Tp`rV9?=KNuc9vb8@f^21AF{%Rsk%faeR4mXd(y5H)$Zs=@Uu_(&Cn zoLumrJIKi(tgoezlWV2mlUQ7WGyM;iDnxL!+ zG6s?=Ad;ZH%}_srq@YVwtf9UJoxP>5tBy381&RvLDiVlC@(YTilk-YqK`Tkr?bNLm zKwH1GH6gnUlJiOw)Ig;$D8DLX=B1#Rs*P+a$Z9AC2eJ{wgq(Z@HP9LMpeQ+#e3)Dhr?GDoo(F;+m1yurd z3Y@}llcTdU$W36Q@Hq))0@!Jwh=e!|CX7Zyya@6kxST=>E`7K^R8brWa~hgaa4vYD z8oQBda3gErtT=TmNHT{9U>%Bep!&w$6D9bO1JDL;kR6&fxPw5oASCI5(j_PX=^Dmr zDuB~SD(HG5YtZbywl=cwbuCPxv8ZciiIf=OPDL^ui3y$z0JU_m#kCLIsqVO)3O5Wi zX$4v#08Z#7>QMKBj#fi3Ia7BFpsRqJk6>u3C4UhI%QjG=$ zEjaBLmq1feW?l+KQ4TT@f+3L)O-bOQ+!O9lJ>nb+n~%Zeb6et!fw%`jg0fRiE;JXx zeGVyvV+_=-K(#;k94hFUTppmMQhD$?6=V>klUe#-R)EY z8bwWk^qfIPfiT`4G)Msm!y8wi$`;nShejJn9<=5lIj;n|>e&dQed@sI6a;kqSC~5j67-8C8au3^^?oWH!l>G(&=j{glFdDfUamNE&-W{Xw+qbF384u}0fIJDp(6*gMaY;&QQIU>< zQcMxJHDd+8ZwtJz0pwIjKM=Im0d(4COrDYssJ>9pRWJmFDa`JbglgTtR6G z(>*zvNuX9HE(d|mt=4cwG6ifnw9%;yr9mzS;iA-%(xN`3fMGku~@b7w|bQFk8S)T+oSa;4v^nOB1z& zsiIL_QiQ!t4@!q%S#XycWSlPLKnrv(mV$3;ZhlcEVmUPEBu|h8<>u>xTErl?D!Arl zB<3Zjrhq!w#U+q~Y(aoC0xeZj2i<*`o?4`?0MY~P z^Sfd`AFdj z8g~SpS`Q8>*z#0(rwTQ>f%QTTx(9_TgJK|u<>MX|I%0dj?aF6=y1(4od@`Op(xp+~NQ zi~}b}@JJRoq>!RDGY`Cm3VIGB$kC9fgjOz)HUGJ(xkv}AD&*wnXG2c21h1Ye0WV}N z$%mdX3#tT)Qj1G-AjkC~Sy&1>02u5Fu$v%UP)>&3Ite=8G`U0p>(x$(&NldZNpO!D zPiaBs{f|g3q z@figz?7m0NGYDg%V-;*cr8#)q0JI{tT1gLaf--2cPikJWUb2#of&t_Tj9SPko(c+Z zg~|E3`dT=YAl;n->cML%fR2z-&{BX^eBg=_iK4lG*ZNMw}LFbSvXrxwHK{qpL>L`F0y@FQ?XO<|G zgIX?$IiLx_{5%C?BZwK0m_T+1WWB$OYlx$#PcTTDmkXB0LFaYB({gCAYrIorh-)xt zzyuUL3JMA!F+(%34{Q|-kpzv6pn^ucT($7}4O~ot(X6;&4n8Rphc%$O1YFI=WBL`gQw8j7l;KR!h?|x|Zfb5k=pLnH zlu+(GF6hDbI-m-=xC9#4X~`v^gaOhG)|+1tPli_15Y6(FB#IptIw>H*Lj6R@7a$YhZESGDgKPzbSPK#Wr3qNTfx;A&Fp5gz!Hrz7D&%P* zTWlVIR0XIWh7|#MhA4RnBCMg1XNWa-8|vg4A=HB+Ha{7pSVtibrL@M8Q9;5QpyCMG zaEO0F?MZkhM3zS6L+n`&q!tkiNKpoA3F?4mK9FSL*$Rs!#2w%e1?^?U66D}1Hh5$~ zS{k{3{ss2-b@T@Q-efcHi0g{z|fysRFnsrwg$CM zbHGhl*k(DK^31%H{PJS3$&f+@RHPv8|H}v8k5a6c0czU9bRpjg2vW|=rJ%1xjZrnw zIItFU<0t$S1L&}w0yS)a4&0&kI}v3z%0*a^${w^>3v|5}sFMsD&_=rF540B#+^+){ z@Sw5e%)GMvY{<#!iOI>}1NET=HLQg9b&QA)a&`6(a)BIIZ)jkIbdoPf*4e``2x7H@ zf*G0|xWa`>BFnk>hl0*~_jQbbNE%dFfOhQ~7#M(}2Rf_)ZmGl_Lm4^wdFcuY;H#!zhRoK-PmC z4XRv0<12`vl#;~kR8Y$&Um-CWoEpJ>^pw=()V!3$yb?&;4x|;$-5?Vo;Q^HZxfxS1 zGY@q9AT&gwDnV|As00l+@Nz+gL4)KFVWHsaBgoG2SI4p4D%ac*U2dWC}kTj6{LGxqf$>26D^eh)h zOAQ=WkWo5#)&coBQ%4~StQwRIz^hL(K|?8!^Z7y937YsJ=k!Ao1=50+;*z4|f=UfF zu<_BEv3ihvXb=mUWHNxy!+{KkD*Y&|0zREYK|hx`xmM3{nIdCS1N=U~s|e(J{0bnY0#U9; zHwZj22MSqmG@~U%a302)3=@;HA-6uj;}aT}#h?)l$YySk$)G#}$;QQ?xP*o$Eb<^S z3bqPxQ!r8@B(-7-258>J=5y?!4=ofy?f}OK*!$323+|eMqZnm81f0DP>*hc?I4`vv zybK=d6_5~0rUqS+l98I64XWPrQp>>uY2c9tsAs`Of-8A&_&`ll0L`01{E8kKNI{4r zIza0WKqW(Nfd<$M@Pa`HQcr7w*7+EK?*0K;2|7p@ViT070P_+kWT4)HNg*%Y0*OIm z860#VKFGKEd1;yHrA4VAa}=Py1dSnssRm^_qX5@Z~BdK|Ry4G}C*e}ZH|AzM(1 zBV>_+3n`x9>%EY}DWJ4CLjjudLBne$sTCy(`FSPzpwr@$v*Aes6ev(-(CQHsF0klB z3JH)xaCWn^1^X17V@U|Km?Fp^8aT~pXj(zt0lAJZHAP3EqzH5wT2U%!e`Gqs3Nk_v zR9t|Zs;v#G15kYjuMRnSOXPBi1dqYsjeYmi*UFY&A~{S0c14@ z6L2BavB=pZGcU6QW-fYZf*OGewhEb0D-gjN`M)q_J5(z*iY zdPorh8O#OE&w~0>usQ}lfD9fv1-A>ova6#SxEv!NwqDIT-Xr&}_oWb%6XyrPnlM8h$dh}tB zC8%OpUrd3Fj0;L>_zed|DA5K(dIa#OaZfD)-@vK>I$tLfbc-}-@e`=@1|Nn6?)Jb- z2T=Y7m2?Vr*kTCgS4at@U<)a7qjhybT0k8pkWWAuyKf-v8dwR3o}i(b36$d@ZbvFH zFf4|*xZv@KHO)d|7IK0lw(blxZ$P_QFk6rV5FQ|kpyL@a9EOo*QEb$-QV1?dOwLxw z1+6(tN>xbBEhwo}Br;`!a+3y9vlgj_#?g|31bb$z9&#gJ+ZI}XfJ$tvLk)-+gKC8) zH@I=w0tTcB6gU`)VDXDcK_I0_kqP1w&qzk+_6tu7%ukS%lf~O=9 z2ZZsu(FPHypq4xtZba#`!95HMYN&zG1PXEv2t)G-lnF_VAPz3=&?YfLAyz+uqMP*C zg6M+V3<~q)yb=;)31kSC^a;s0|To1Gq0B^uS zib51mz!f7|0F5t@r{QW*rJ?W`iu zM@QJR9P zg`RPmf~q;3MArneLBUo5s|5-mTVNPnBgi%+jaV%M834B#;tGf{ph=!I1*D5zK`l{G zSc66^Kx2>~HpEvT2bLf#GAUM2H8d@T7=us+at*So6a@uP;DF|cU@MM5iZLp5P?uXl zS65ddJQZ|FH>g|g9}ukIn3tGSS)5r6mQnyIg7?cYi~!GJDI4+7D_=O*wx2P0pu24UELbc0w0i! zf`W6XZ>W!Bh-a89Sh5DE8$n?RS{4Kf0tE$yqWsd5%)C^PLEtWAF_;C)Y>?GMprQrJ zN-RruZ6s#09(m*%yYJ&4GXe0~NHG$41Dd;2Vfvz+Jg$oG7)q~0{Xyp$Y z_d*QjLd^%=qpXE+3zBj)6VVkWR>1lwXbRz0Bg!a{%?8*lL~dH@Biw<|i_3J7OTi^0 z@(49{JD^I@Ov2)!xE(0{7V9V|K~gK6 zBs$r`EWnoBK<1X@mn7yW>A;c{QV=UZ!U7gfFm7T6sJ_RQG9h|k4G844h|3{L(4GpG z!Wa}V=Ov`q7?=bbM9pHM1hZVog!vleJ8 zhSmyrr=vjao-B|`*sux6Xb?tfoPf9>j1en33SeJ@BEnSiZ9s4 ze+|$Qb?~X?MWtZ(6>DZfo9rOJBIy8c$pl^IgtRLWqy#fKN*q&CiorPtB(I>LYG|Zq zmM`t3ebaaOL5ENdNhAilWQzGolFN6A!8g_!WV-vPCxFo*_$yN%(7JQa4VN0P0 z48cN}LQBDC4iL69I3qKy1ZE}0nFVtG3t?NGiW2jZGvFaip;uiz!w6gHl3A7s+S~~B zD}`2qPNO4iC(@C0paO|PJHf}a61Fs?C@~M}Nl=cV&{EJ@ScL5aowTI@YX5+|NpUIy zo!v~>PM`ez0tL^!%o3{D2|Hhau)UsnpoN#oB?^uyDMeP47J{%79SGYSke>-U^a|!> z3gZ=YT@YbAT`NF`ZzbpFrDT@qQSMjJ4WYzXT9BWYnpcvUm;;Jh3O(xM?@riCpZxU1 zqRf(vT#$tnr(e*aB!uk*?W70q_*2L)pd@TDPip{Wdo1lD*PtN(AjClipvDli)ujO1 zF=(ZrngZ^)=qRAH;-M{F(2e%+JqjQj&?lX!wk%i+>u!F9+|?1;~zG z4af{0Xv26$Y9i=dZ3V~<2;ant%-qsku+q$8s9tcNN+CBtFS8^cY!GOnFSw%#*%Oxt z+UuGNIY|KBWYF%T)WqZr1#lBtkCzM0B8WrqTa}WTmX=zSnwOlakd#_do|>8mUS+CY zl3$<>-dwAmlwVSkpQ{dwLF`%3e`EoqPo!8hS3B!Z4t zEXr3WN&e5ib7&(Nq#P9i6`iq3ee_WP=6Mr2ebyN7Q$SWhLp~`dKRLS?DMpei6`HcW{`3POSm$?*|j zgcUsV6!MEwQj0)Ix2P0i57ZanrAXjJm!F>l&UCPJjkIwSv>+IiPBh_D)}Y7)WsDNA zmZa45%)C61Dfww&0nkB|DVcfc`YEZ&`5*>tr#(0$fU|8WXh}?F9yGVXU6WT_nhV}- z0m>XjsRj8(prR+U7<8tqLRn@a*mzJ}<))UT7AdI1oTjd);8~)OoR|l?TBbM^yanGt zK_jWMB(+#mN5N1*!`LWEp*+7Rr5K!cjTAJ@Oke^KS2;pFlbQ!U(-)Kmae6~XK^;7p z5D(f!r>PDfs)F5#1`QtgaSTa`#o+bi=*L1}dRtGy6B2~r45y$D+E9dFOT#=K>#X@^dTh=xNs`g0Ue+Mb_#4O z2hS#1rP60NPt!> zA$G?g)^a+6cAJ2iY668)$X$n1_6)XlC$xO_HG|a&c z(E|^1Lbs8D3M%B2KM=XV$;aQ>J3h!i)X&A!&t1U+6c-?@uchD!JH-Qb5(p^#z_(O_ zc4?=if=;DXK+|sm(hI`K`jJloLE6CwHNh_)a%@LD*r;Fy4RkZ%2Svu z0`1RAErzTrMidALXNLy6x*$0Y%+ye*L-!f@gn_WcoKo@U#bVQ^iYS`-gztAN)ufLaPrK2#+{q&V6r7Hkis zc0p9PAoCGt`CxM^5l#eEyxNA~wzFTT4>)Gak}kgB&dcYI0!)1}J1eWdq3n3eaW%yk7&V+My>fI)Qrc z;G02`K;s*j!4F;{qL5gY8V@cmvD*Z-&9N-CC^0=%AryR?8>rn48JvN{FT5B|QAjLS zC;|;dfEruiS{&4m1Gkb94gd=wB?1Ld;S4HhkrG;7esXdtXl^347_Y7@JspeqJghWnh&B?SxGQTMS}>du-4Wte~U_awQFT;0d(M z4m z9v)xOMy6(J|d&Z&zJ&C4tS9T=!kt)K*I;DguifrmsuOJX1l@CkpQ z6a5r?@{<#D(9RZxIvuq-gY?4VLA4snK2uQl72H?=b)wJ?UjqdgalK(SN{RFGz%o#<7XmrT5UP_IDhTllGI@!$d!d`uhSY&fKV1jh~N7+-KHLB)Z6 z&|qE(WH<>lJ_5q9ZgXZ;syvqK+`2Wh2n!~?7yR4hX`d4X*QI}XPYZt#{O zw8^JXoS&Oo0=l#uT7`hatwfySa7iLcmVyl)!WF>wtbvCZKyC(|HVkPMX@UkMVV!1B z*nnIH^ABj#Q)X2vl4_{GK})pYiWF@XOrUFckk;>j2NKgXlw3hKD_AMGRurTrgS$5B z&>{|e6?{^v0=Q%E1nSsB4@_1>S;2*8D;sD8qXcwXIIM_L0N0(M4m~9EYG}gJ7C8MQ zf*$04XwC$cY+!A+kUAIBCm0H0qk(86GYXKLpP!}y)d8>HHDN1{;H$$(asXOThC;?L zOY#+*i&8;bZ+)O+JjjiaV&Xy(sfYzvfRM2k(B+b-GH70frz~hC21-*%`k|uWstx(X z09aK6uf|aIz=gs6H^e~$C=GW*P|X9Xqd*B2Sq7yB1a$zh8-St=uVL^S6Te|_WpKkF zfrvU?O7$`o+|&S_F9)5M3`zw}4}e8sMGei0Ot3AO`!ztlVw55h5)debA+*Q`n*ehs zB42_EJWy*AbTnadwt}q!xkVz)0v~*O0oe6OVGq6>0o*o*rf}3EAKWj2OhSScVQt5P z%Vy9a6foH|(C8PHNBcpIGbA4%x1~VmT!F?H&>A1m<3tJ8gwR4Awi_H0fvA-tB*AFG zECR1BErHFufG)Jj%mMd+6rg9wgImz>B;*O|b%D;WF3Qi(1vR~k6U!h2yr70_YLPl< zt`j#;Ew6+3rNrYcMWM&fX z7SQrR@CXnz=0T%CdI|wKsi2Vr*oZ%P)CJvIVk^6_#GK3&c)L}>FEKY2)sxVZU%_Q3 z()L|qyyKZy1~whkv<1!mgRemZk0F6V4B1P>x;7XVIUsj}x{9EV5@@{`Xp|nbcnoY! zCS=YQd~!HEz>7BHLthJ4fI+mv z2fm6Gia}W%yy^y&l*ToHogMNB2p_%(x4GU$>%c$*I7C|GoWvaA9)Il&SwNH#Y$H#fg5 z71Bk6XHmmg9Y|3D7Xh7h2DKcNX`!Rxpo6+mk|QW*B1NDUQg#A`HMn`J5t^3+ng((! z&B;LxKgVq2eLIaG(bm}BlQFobWt-L zD1=u3!fnqXL-)4L+oxgSPTPl1Lkm@tcX1P@&pk zodiTif~tY{l^|_71p`pA0qWcN<(DgH>4WB6K-*-g*sw+%u?_MpWL;rUDk!Bx(lxk( zPc2eN%>$jb1U^s%ls-YdN9s1U!Ob-I5z}O}(jaLWJQt+}bv2j+oqK_#Q_9+7E~%jI zcX29O)dMRgU?~{nl44z5c;TY2r2smk1y&V;Io)ip6H*3eXfthdAMBt*EPSO96< zL#8Y>oDxCnjPmmoT;OZJ5!E_K8_4URXn}+na=8JLMe`x1Q*%ne8yhvi5ryPb@J(^L zcHmS2j%r=Z@P$iaX&)dinFG()!kY^qM?o7nASU9#DiDv5YoYs8K}tawJ$@Wh%0Tz) zp+pWSXpp=G?x~>Y#Rw9pCCDWkq-}s$Fh$jp3qGlWR9Zm>VvCVZ)dV$#L0bwH5=$#G zb21ab$1}o*C!jqX$g(L|WdoZlPE7%KydX<$bQD1AD4_ii9nkXdMDP;fVjYFll4S7k zkb+xg9%u!>4(N(5=+JX&u|h#cWpO5Gt_xz20(dPQZ0H)?zyU9uMY6p(AKFhTMlM}J zqq2~42DF$9X|fa4eg!rDs9WZON>t=~k09}i(guQ0h(Y8)MJmV_uq%)tq9B*S=DHvv zsFQP`)+DI)mIm(eg5*FKg@e{#r4}pXLY7g2cOO8RTKb4`9%LizI77SxU!atWGQkI) z--8xe(5QmX5`gblf=&y8yyI%kkue9 z)xo0*G(rTP>;sQI<539icfuCdq^2NGQ=z*Kwr&WIX~+{%kk&T*&_;CAP?W;wj6kYD z7}>|jDp97bP$#5_)<%+L@M$g5EQ4!L`FN83Qd^gsfhMuBZhmLTvT{RdbNl zt{`z}?FlgvBn4hF48E_iBts!LF+DRGba8Ac;?QB_Cq9A@B}qK1VOsnq~5 zhI%rT4GS7%UqM_2_7{p%kcMwT9zxavsqI0-;E1{(TIC=sgQQWg^KHQmJpw5atkMoV z;s`1Db?s0~U1&{mSk8LRYoG3_`dC>QHzt2UYOMu0}7v6+t%>V6hq02PC6` z1kD+aB_*I^Y(evl@Z14P$-$swbCB0tK;qi1C^Z!n|CuEU;F%QSvJgIRAs-S6Npzrw zEBLq)a4!Km&W1W&p=+lAI+MK!)FFWFt^%);Ey)KBsemV|AakdX&Cn^O;Kj6g@SYg5 zi;(JFaH$O`&-JwwLJLwrGhX0@%;5GUbUF{!NwBmG6-63e)`l!-!W#AHmLLtA!|ekP z?YUMYr>26=CxY1nN++0hfrqj|JsEJbAlfh%Go^r9d?+UxAuVE5$b=7VfHE0U$_8;k zR)RAzc={T=fERQa9waS;rtcI{%59Jq5JocvB!tBjkX6!638GB#^N%R00285dGZCM3CW4@;sPX&q7&SV z!5VZZ%D@(2q#tOQz)eS);sI}zgU+9Vni@!H71Tu@o#Fu()hNf^qK7ARKpMH&fh0)C zMO5H$r{Y8pdhKn&x&pLG z32G@K8j)bnfDUie0v${b-gO2#qXMa|3ffPP+?u5BpbFAJHqzJ%)c2rF4;v`~U3LOG z8!jWU2(p?H+%$!+{(&kj0xeBSO#zps(5QqA+kpKEYVJZsLBlFq;N`K9hy>+Is2O=W z3TaSPuptys%Q_ysp%7I9JTPKxges_zn^>H!qX4R&;q4WDErlSE(-cAr6d?Oj!1WTW zYCv|jf~^9^hBc7OKn+TGb zxX%f)TNC87V9?!tpfnHSKmrjKeg!2(#zsgJ(OQ~tXFzSpQ?OM)+m#BHNy&$VDv|@W zz~*UdD}V+`5F0xE{hgqCYC#)`b5a#FbanF(-Un^Q0PWhuY<>BHJ7eIm1~sP*;LRCC z!a}nPw0RV287Nc{n+rin0i5(fMFZ-P8;W5D70|mFVRaI;E&>Gv$PC1=Iy8}k`~ixB z@{CN7&+>G2F>OE!7=&d|XClX;8z>k+(G--Lo0$hX2m^Xf1xnE9Dma2S;DU1oD1E}B z6XZseWTy*j{ev8sreLd(r=SWJf~+F|ZI^*L9~4??$deaH@v5%{*}M&MJIFq8(WY(y zIh6s_l1@xXEP!mE!q$BTS+1|8Pz*Y!4wS2+4R!5|Omq~CbnOhybQFwr?JN)*@j!|} z1p#Piros&h6l`o1G{Bo3kQ}a{tB?ko_ppE*YN=s}IxPb#N6-=nXhXCbxR`;4J;*Y! z$1`(sAmtP|1S*ivDXj)I&p}N|$O?3Y+|;75w^h&p*K8Q& zA54L^E!q}mXyC!iOHe5at}->DTHtjUwAhBLgv@18eFm#IwFI&s6L}U3w#^;1;~c!t z9llHfS^O5Qq?3DTP!*fXXHf zgco$}pkqb`vEYdl^<;I-x(3BuY_%CAV7l(PTuj9UT0i(jFRQprTd-RFfg8!BXieA`EZ`9%PzZo9-1{I7VgL!!U<2hyE&Iq0+-*c#9j&>3b)pnAC&wiymod?NQA!Mz_)@uyId zm{9_nGE;zTs|TOKjkRxyQZz$PnxjK;3ZK>nO@@QYRYWimU9N&!l&EDTimAx+ZWXWw zHnhM%ZkIvJQ=}PraMu!27=g0}D5pR*;wWhpbg^_?ASS?zGf-q9`b^Lh0GyByi9=~X zz*02mRx`{76DXZyY5t&;MR6!?L4SWI+!+rZRyDTZa}L0V&_GKBkX5h}2+^eipZN** zA#5#9NxlN8rKS;_mskL5tLNmGrxurh&Rzm-(L^+bAi=7Qt1iG&1cMgqf?NU$PFO=j zArx{hQ*c3Ia;ic|Mj}R%FUbcj767>f6#CHa3bxKYD3mdJ^q7?jD6N3j%wv~n5TDpw{ammlHKYg!t=cCoAaxWn^-}df zOQK+DPXQdX;8XyvG(r8{L~zd*9IBal>4;#>RKVGP$;94&0fh?pKaOi*>u0iI+9TLn;716dEBLqcjxLao-&05fcC z6ihWiyFn6*GeC4Qc#|YpN=w1mSV3DM8Qz43w}!ydwhB0m07W5mWgLcKNOE9fAw>kj zPoRheIh^iZg608`&uEbT(N>=!vOsWZViD-X=lmjAClyjnfX-S56+Ga>cJmT*z~>Br zPO>d2Ey@F*)B`@dF~39sylI!Zc>$bRkxmfO0#%5hQ!AiL1*v+12t0#;k~yeB1xXU1 zeQ~J811O(@%1kX#9KnaNA(<1LtUy@-x}*=58DYr@G>8Z>7ux2 zkS||E$}b?7fZE>R$zPPFZ)P!gAtN-n5U2R&=7Y{p2A5Z$I0U;lH?ahC8wEJggM0zP zpjr{C8Me+2bru)8i%~&MO#$j_TTuO!4?40hA98LJNCU_MP?7?fi8^u&5`m^{%=LDt z*VDk7Ye;n{Xq6^7dBI%`H48ez4=xX=JV^#Qau$@HK^SuQCn$Eobpm8E6=kh3_y{!U z@z2o60gbRBEgA-AAruwh6OI#ekQN_94_O51OoSc?1{;V1I|CGrP}3nTEs)AIq(#sv z@MBO@L3>+MG1fwZhosRwhgiu2%k+>0RRrDvmV!7{3bfw~oSbqKD?tak7NvrQgrF-f z^7BB21*ks+PD>h^ilCIPMOmc?(GALS(35LG=7XJ&Tu*@_2D;c6lzYKkSk?oNHG;;V zP{*}EIUJNKp?xFFJ%Gr|4t20g!&dx3D+%!S0k}$Vyg_9kbunVR6J#+skWdOYQ0)VW z0C*(}T4IJMnL)7+8AXN->_XR_fH%y50tsX=!Wht$RH%;+)DfhYIG}O?Jm`xxw}TTP zXe10d%Y#PgBU6iY6x_hGk!Ty4F`P%JFaT-5veyM949@f*2Go_%Isx}OX$n^gBF>(1 z%gjqrfUeAR#&#?kZ1OY(rGrG=iYUb35Gc0cD}LZ5AI1U=1zlnm6Cs+o7$-4;CyGJk z2`9#AGC2EDanJ3Kr;~}gw@AIiO~J|+IVslsI34EHjqIe z46PGEOb{k&B@$K#z=NE82SD8d&whvmi?sR&Ya#dwkP4CPDcM#ZnDI6 z7u;$G&6$83^O~UE24dD6QB7$o=!3cx&^9O9R4^zpA(ZOcA#d@5oL>TI8Ny1<)%x(ESJ-vjvTZq~^vWX2cLKMvQ%cHpZvw!dl5FjbwN`7us0@MFqI` z1e)lD7M?IET^vhIz+Dyv@EIRkNQ+EBP6qcJ3rdPm+yXs6Fh4gHbg5B6YEelhw8Z3y@7m<}giUo+v|02RH#J6hp?e z!J`pSW=TGxQx6?=)+z?I)Ime|&^9_!+gz&{yyUVZADWQh#RzH$Q+Xr_e7J8s=qk9x zqDrJNMLXw1qad|NH?t%)S5pCWgdXfb7|4+ypcV>jU>00N(JshAMINe?K{0^{XV3sk zrjA0EjzU^aVmfk*2{baBUsMSVTu?HOFHwM8fdmx;MI@*M&P^-<4X#I zxOTcJfG%hN9{`YB3|EM<6AY>XblC-1fg#9Ta5#avMj$TOJ;fzO(O@2EbOG>iu-`oN=opgajGr*K3zw4eg303D)2(ug*sPz4PkfsSXv*oTceE({vx zL1@smLvNSCdVtY}v7iM{(A*Dl7*YuU;^OuRYzhpd3WN!bJb_0mvcN&0kfmUwU}UY3 zg>9w_P+_iKQ<4DbX9l7?YuT2w$f zX9qd*(azdI9<&A*LZEB}IxV0Gw4f1o?2ZB`?ZGSn(MX*w5SO?Ci+s?Hbfuu{8bEqr z7|AFkCdfnuNc9L(h!z|q2OLIzpkDBy-aJXW-~*pcP=eWS92AKFUekgi3$(%nv^N!$ zP(e!>U_}f_4pvkqm8R)HOH*ih2|qd&bgB{PdIO)#yi^b!Qdt0|;R*s0K{vOQq!xj% zLx5eB1By|Qa`0(I@U8S9I}1uniZzl-(~uJ}q}l?V0$);;lbVMvjp9rtRRgUQ$k{}h zc_o@qt-1<^Itm8JWV4tZQsOu=G>#8G5BRd0;vf+UR+GP$IbVgmx4laZU7rP*j zqU91qX^N-#MYsfH0ytx7;4aJ5)D)oQm6{sLT3O`M8d^dtXe!jypc)UdLO}yp!vZvZ zLD+QU774{R8G`IYgcD}11M8Z?ZNl^rQuz+@A6g`UgkW3oVJ#uh{CaYJQ3|MLgq;Y0 zt8s*!fi~;gD}kP;F1%$4Gl}@kmXqrhan;vp6-y(vw(*wHg6)Az#xlZ7%54h zRAkVmloI$Vd6|BDa2X(qII+d6m$RK}T@Wef6TQ;=02M!AA_9H<( zMd)#npnH^q{C&Z99mRu2-bxGNA*Y=?gKpo6cS$Tsj1K^*0E!B+##5lhEYu88)L}Um0^yX!MiT#i!> zIQl>q!O}j+Rq*r=;$S!t6vW`b2FE%$0-#q+r6iUlYAWE54RS&WXTkxkSaMG-iAVAt zsErs8YDa>q7^Fl6@(Ku}MF2<$!-vr0Q=kV66{VIGWu}&;f_CM?FY!}Acpembpe@Is zn1UQ!hvXb^_=44f+zL-i$e|5#0!oO31TfqLHUk{kVEaIpA(92<=>S(KYG6A{6Yg42 z#6VBN2D{2m0k)eIDVQ<50#87ok_?hsG$6;2YJ>U{1)AX0g~-aF@Bm>9gJAsvkU1dx z!2zNQx=I6jqKqn}O^@P4w7LvWRR+F>4t~oWEXq(k4;uPKy7C3>By*%e45GpV5(tnG z0hMti1OfPTRPa(^D+Se@QU&BtP=*ErWa0w1b3wBcpkRb-n}r;_j#2mH3ok@j2#PM) zbp@b+!#&~+QVGJ4nh@*_@B!J-BbBXrxnLD9NEJNr^|chh6BOX_F;Kq>S|fr-zltHl zW#CN4e4byhPCT>R2QojXfO& z*ezu!Q)QqzAJC#pa3HuKrfO0kXFY*JLPHaEJrgK^(Jm|l2|=4q@Sq2U0m_s+TE_`X zQdcN0Nr9aV4XwYy%c3AjT?5jT*M~H+k#j$IPzsT%Fl@%!QADUmatX*I(4bdPf|VP{ z3qIi^V|WS?kQ(r2Q4D)YEL5-?WDpDXFUYAdjLpfZMbH(fAX8vj9@LZv4f=wY-Y7sb zJaUg6W9<{?oL`;z9EpXZ+*DIhCsX(O@$h{y8PU3`%D)@L# zN@_`BW=<;T!W2lKCNn<|d^mCu_(lwr*&dWJJj@9ikTWm}I!HCmt^LG zPEkYLbqre4Tbf${USgeCTwIz9*=CJs>Gf1&B+b z$76%s1dbdK12XjtEe}({yBR>uFK})^tp#AClAsWTs)v=@pmsb`>kuh@f=fm;)v&OE zy8*dl2&t@4!{R4u*QO(PxoSBxFlA5Lf7USgtb%~PmN{ZsaSC|##7l6AYAP<4> zElui?=LUHAcID-49#cRtN&g7b}3~^^3|V_x;!`ul9rDAmj_td=9qQo49fYPL#%wz?h%;eO(;#4KrC2OEToJ7dM z={XQ7&^G>5uKXf}qSUn1BG3*}h{2%Yg=K5=;xx~80zBbui)(O;_2tE5FFy@=i(UT60D@h#pRe+2|Dcp zl!L%W!J&jO=&Z#OPzVoZzPr|7X7lAe;6memTas^O~rlh9kf)0<*hcw=D6H`(Z67wn*ic$+eSKa27fPGvH zx;!0vm3MJzW=UdFW=>{FC5H34Ky5pa_JY!)g8brCg}nSCur(Q}IVlQ|Yp{zmlXAfG zyHQj0U;c^sq)ly5-& zTCi+(YH9&UFgG!;G%-g3p%NTO3HyM;?REweN6H`(^ioqwzfvT=za5Y^5?oWf(&4YT7 z$W<3~#XPwA1sR?L@5}@_5Y)`$1joP$ zCq`*zYYkQgh9wLP3|}h#{x4x=U}&lN``?9?fg!B+@Bcq+3=C{_fB(y{GcZWh{rzvl z&cNVZ_xFDcI|D;(-QWK;>i+(p!_L5+3kL(kp~k=e*KjZ}Xf^%)e}#jAVN%oI z|9?Q@O@IH(a569mH2?i?!^yx9*ZlW?3?~D_#^%5OYd9Gggj@dppTo((@T2AL|2>=x z3>mF||KH(cU|?wb`~MFo1A}wh-~TdP3=G%W{{FY&Vqjoz|NB1%-+n^ zg`0t4a{u4|OSl;rm?r%Fe}tQX;oOA3|DSL(Fz`?O`=5n}fkAuH-~TE+3=FN4{{DC2 zVPLpF>F@s(9tMWXlmGs2;bCAM4K!AK_tOke&AT{}UbthK%Wd|FiHi zF#MkW_rD4+14HVJzyDo$85qoG{{5fA%fPT;*5CgvybKJ!v;Y2I!pp#*H}CKNGrSB8 zpXdGk|Av==fqT*4|2%vQ3>r)S{@3ASU^uqy?|&aY28LhD|NhV6V_?Wx`S*Vh9|OaJ zRe%4l;bUNkS@-w<89oLEruBdSzu{wGNZ;}IzX(4A1M}{`|4sNA7&7+#{U5^5!0_eh z-~T223=B(8{QWo`|4W1!7L$zB>ww9M}&c4Zt}nXdqfx*_NV>(e@BFYVN>D1|8rOw7(NyL`@e^k zfkC0@-~T(H{8seu{~uNchK!fx)Ku-~Spm28P+i z|NhTmV_-N@{O|uBHU@^T#sB`_VPjxWD*5-HMU;WzWy!z)DxwSw$z}ikyNEI{9Ip8H zKSh**LAmnZ{}xdOhV<%x|CfNotN;B!BFeyETl4S#6Hx|+&YFM!S;QC^PSpJSuOi04 zAYc3Mzl#_H!>-zY|5L;m7{O|u1aRvsHmVf`ZfaunL|F4KM zFg$Gg_y3DH1H+%TfB!`!7#LD|{{1(RU|^`~|Mx#ef`Q>h|G)n=5)2GqCj9%qM1p~# zWa7X7M!L(!0>wNzyCgx3=9*e|NEaK$-r=O z`oI4@k_-%tGyeTwBgw#^F!SI4Gm;DprnCS3evC5!@$5` zQU3S87E}$00*QlYRP_uDDhvz^AoUf+fB!cyGcYjl3Aph|c=2=^Y1^%EetUG!x8dN7#J8Fa{m1X*#nnnss}3o>0x1H zU|5p#@4pGM`T1aJa2TjCGBE7O`S(8_S)M5htN^6ng^_{bd(OZAy2$bwU}>=a6h;OH zmR#KOEsP8df_UVYFfuR%mHqv{0oi<})nE%i_8(znV0cva7iai9VPs&qQug=1F|z(V zuy(NfSeO_Xp5xK4!ocZAEg zFflN6mH+)e9YuZ;Tz&}?0|R3PZv97?7#P$m{{9a}(eDS>|AdKwA*$l<{~Q$gbg(=q zowG1AFf6P1`#%6#-nE&T$qlRoBnr+CI?N0V=PLgG&j5+Q(wRpyGgCCGx)5dt2EIzd z>S~x782kvR1BKrbW(J17%D?{&knPQe*a?z9!py)huk!DIKV*3(Pp|@z{1avdhBJ8N zSy&htepTWQKNS`R2HmQ^|C3P6kA<7>!ot9iU-kF@Qxy3JaQPG#1_qPrzyAwRsd=6L|te=IIfnjmY-~T_6<(a;K6@c`sure^z)c*aygOPy&UVbodW&|k!$%ERV zBK3d&ccSQT0ZD_+Phn+XsIA9se+w%ELtp*h|KCyce}d}=2{Tp&_<&1vcIFGp4h+nY zavf4mgVL~T!{7fpObiSxTMjwF-RRNG%q-6YH|Gs21A}MN-~TT_2Ex)W(_^?i4;ur6 zU^8xa>VWF+X58`Y!^Xhyy!r3{d=&Gu;O6JBF)*05{QZ9hMgBNkzK4y0;Ze)q|BlG= zHDGB5P<)V_;xz{rg`AB_71#@o-=GRO6A)VP{}i-~RXiA{6(}g}c9poq@ry z^Y4Fe6nQte{2F!!hL|qg>HG{k1H<{QzyGsP+?NV>-y3!Y2FdQf|1Y7)pM}fwa4;~O z?*98f6UF`%xcxdD3=AT@fB&yV(Z2$$ACv}tI2aff_Wu3pfB(y($V5{h|3xVBxo~+CP6mb>vvBJV z;bdTVGyCuVJt*$m4tHM(Cj&#r{J;N~q4<9x$a~;=W(p?*1K)zb|5HKzM410U;TXXQ zRs+%o3I|Ys(tG9K|8tPTn|V4outD;me&+GjfB&bVxFZ4X4p9G-XZ_#*pmYZ>Gnm`i zL6(5@gZiZv+y4IFh+_U4xcQ*|D(B9>|NT(H$rBzhJ#mRt5%^BWUHK zGb_j$;Btk9n}Olu`M>|&QT*uy_ooUs1B1k+zyJ4u0v;A0Oxxl5LH+M7m;U}gha!Ix zE)VLLCtd#gKM*AzeBki_?yq0_`+p9K{B*cHs2|UN>+gRn6!)3J-3RL5Yu>?KZh-pz zA$R}&-^hy`4{LZq4g`f$3L68%(^r50Kj36wV7ZAFPM0BR4x|oLKF|H~_dlp%&+-;Y zomUTYGYj(%P{e@JO$ZMIL(QMR{~J)kqZ(u#IDKDXV_>-R=kNbd3=9k`YKIZ^6{yYi z0;~)iFLQVp7?%D0``;7A-!5=}@8Mx!IRF3ee_53HmjK5<$Q^fh7#Pkl{QJKKMSeM4 z{tpiWLj)7LJ7}UczA-waXzX3 z`!9_mF9w$fjqkiw`}ec z!xQg+|1YB0dj_lqGZ zC6xRv3(nu5@PER|z;HY8-~Ufs3=AyQNbUud`A;D}1G!@jKLdkUJZ^WK;b&mj8~^Wr z6^c7b;qG|D&%hv_`0sxLN`8ul=O-Qk28QtDfBzFu{0ZsYfb7>1U|^V@{O>=gzlSJ~ z?cw@;1Q-~0r~dmNgQ6eO5eMnd5ny2Wp8D^96^eW*JRExj7#IT6{{8nsk#~p7uMuEi zs7=E?&Ts}aj+gfDe>jT%Ah`ZF0t^h7)BgRRjUqn{F3%&#z~Gnu4`)A8N05P`G5z2F zVif(5jx@-BK7tGkSJMCCY=7nmGBEIE;11s&ko_6|{xc!RAJbp3`#|XgG_Gin`R~6R zvb<|EGqVUdib1Xdmz!4v85q>E{{3$SiNNv+Qv=)_(0F8b*1!M9kmW&T?;fxckSN$3 z86gG+&Fp{wS&{8yW&m3T@~@2$0|Q^qzyDnz9dLVE!G?h3V}uwODsuk)XF%4^^cyZ; zBgDWEk^AreT4Z_V6>#(C2r)1`&HMLX8rl3Xuy(Nf_6RXBJjna^KLe#aNd}iEpzyjQ z#K53Y^6$SGa=rtF7Y{h=flLLP!y?SUAXfhGe;!B#?hnWS704VFVbJ)+zyCbQ?gW{` z1a>M&7uXyhVFm_|iho$^Jy3Y$2s1FOsQCB43E3RxTCgD?`5s{g2Ck}q|1Ci#!rV~; z@h`|7YlImXl&k*ze~By)insd^H6US-Iah=k7@k!9`+ph5o^x<}z6digOt1O(e;JDW zLb$w$2m^y`-M{}9AOm6UD2CVpGT%gmfx#4ye254GgKyox|MDp2OTo=A5n*8PssHz1 z6r~&zfR`gvL>L$x8~^?HMUFRS4{)S`?B627z>wF1yBxYA!oV=8?ce|HqR92kCQ*L$h=KTAg3i6*5pFls8E1yIkvn!uMFN-UmMh~k8pFta&2cJbVyDy(Z4xfc1 zpMfKvh7+HH6Q6_=pMVn|2Y8&-MwEdeV$Q$+Aa8(-0%6d2YKSNUL%^JW{{=t-NcjJM zMxK5q)eaVhPfQya85sWmXB3Q_%gn%VlZABy7ehPiVOFr9K>keu28QKAtb2tS9tu^0 z#Z0F$v!3B&=w|^n#+%t$-|{hZaM%EfwwpWz!MF5#C$=EA8ZT^9UQEyco^Pr++YSQwxBlLEq2Y>q73IbRx>d$Jmr?(A`xIEY|i zV3;8du@5F50OdoiW$=Ki15G)Am@xbQ{fA8FJ&=Ov{}1KE-0=a*eq`Wlpe2Bp72X*Lz8{ZLvBN}EAxHz*wjrP1S& z5FfN`K8+zIH7zp_+>Ou7OU@}xNo7!0hUnDR)zVj0i>s-#u~W3Qx6+G-2*b$_d64`L z&e_Zi4BwFXj0_Ba;Cu!S(D)U5K1@9e0|PSyg9MZ>05Skp$iPi!VBlj=0Q0JgVfq*t zKq0~p6|Y4S2WjVliq|8HGcqvnLd6@A#X7~xWN{V- z1|g_;C$cyLXdM~E{oQEd!cg_SXyT$!@qRRMF{t=NG;wjL_!Km8XQ=peG;vO-_)H{m z(EJh`RD3p)IH<5@hlnFF+P&U|?W{iZ4PFSA>c$K@tb8!%>2YFGmsw#iJ@z zd=;9w8dQ8Onz%Ald;^-e3RHYEnz*~Ovz3B|yI-iLf{C7mo~eS7fuX5^nUS%AMo?;s zf=6NrL|oUzM3VtYv8A4=9?0FGG=d8=GcYn(Knc?*us(Ka%259|; zD$dFPs|QiV*%+|ZAIuEw46u3!RXqm-to}k3=Y-dDsN!4&3h$Vb-q2|Ean;^9yTnRP@Gn_$d9kIE8DOf!}!vbi$TR<(|1QlmUgwzM% zv2_LphVx)?2?mBskZ^;w51)g@`56+R>NP-)VPIhR3l(1g6`ueV7iMH&U}TVFP=NXu z)(%yJimRZB8$iW1(8R5v;yP&Jpf#=_^9|6%{h{hj(8MF5;udJ)$xv|{H1Qm$xC5Ga z1ytMxO&m0b0&1QiFb zsb*kcP=u;yQ3JJ77#P57g&7za^r7PBP;r=g8>qM^R2-(>8!BD{6$j-LP!dgpii@a2 z%m?K|kT_`VFUUPnP;u}YUHX zs=o~tuY-!i>fTRK@pVvf@S0r)1_mA$i2MJbiK|1!y|f|b!~A6p6`u-;I+663=A8g;vu>aaaeraf{MR^ii6kQg32CNh&%Q5AnL(u zZW$ODKxSsa4Vd1$CDqe36Q4e18%D}+z87lq`Dh^)j%D}*&$qsSPE(?fy zNG-s?U!hL zK0w8vL&d>sQW+Q+Bsn4O33Py{2d_nCU|_I?iYq%p#KCJ&85kI1q2fJG5OMI@Qw9cx z0;ss9GejJ`=9Gbf0kqc+fvF$cWXl!1XEoC~5}0ID7~e$oY1FX9VPKMz{(Z-k0(@`H$j*PJpiFx-WT zKl6u(gV&mZ`XQh_dknk`5rGhKn0hU!cux>S9K5!afq@~28{!@bsC!`JGW}5X9$^sm z;I*a<3=F%W;_sm1;5DWU3=EH;;=u_J_24z7pnf0^#C!#)`LOce11!$Z(2xa5$r(`p zw(>y2?R^r&9Prvx1_p+;Q1Os7h&Xu7DJUGE;tz5m;-KkmP(J11h1lx=wHH=C2lGPA zpI87<4_Vb%Z*OoFcFmyx3 zllvj!;5DTT3=BJ<;{PW>#KCJx85kHqYr;U`V>uNf4$Ifd0-$h^U|0YR{|IO}OazNd zGQ5C>11$YB3PRl3G7Vx5c&#Y|0|RJpBqIYq!vknP7BZ^9z_3^lWIjKGKnW!Mz}8B< zf|_Hx1Y!`x+gVvye#GRnxGTR{HpfLfEcpg-I4pbbp))XW@6)N7h z9ikq*wv>T^;TTl>`c8;Acugq-1H(_K_?KM}aqwDF1_lNlVTgMwjzGl0YcoOl5h||n z03r@vE6KpX&Y^U|z_tK&HoSwF&~!i62w6E zV~$G{gUy#W_fMVX6>xlQ;u|00U-tc7oOO zGN`FT>;I} zZfN*`*UW<2`B3pRsDHt0CK(tQCd)D~C@^4-3mHg&!V@tL1{;^K2b%-642cQ`i}N!0 z%R$@;UaQQ&z>okIM^Xr7mPjx#C^7Idgh)Zu!{*~!!0LG!j;TS!!E2g9?u3d5D?`L# z^M;F{;=9j6!U4Qio`HekBv>4384`6DhxkXZI4{F8Xt=@pYyY6)o!k(6!E3=m<&`8T zoRJKMGPS_sybPN>AnL(u8A1JVNr-=Wp#Fu$mm^p`R5KD4hC@6HEY8a?Q43-|c#SUu z149{9oL>dBaI7muC z{Hq}iaSwP8HmE-ZR?o|zsR9uPuNepJBZrEwhsG~>tvRTFp#U-;bDY)>s-8~$KvTK?Jx7Ka8F5_J(Q&daa` z>M!tGb_NE9XHao_wD1>`2KkGZ!Gr^1FL)0F0|SGZG$h>aNkYWId+$O0aj<$M3!%(7 zsQNF^_yX^RXJBB+hlZ8e zBg4SJ@Cquvnh)YH(4Gm97er)0;Q(TxVjZwJFT*r#h z%aC9R31`swEJ$ZMR9r&?A`afW0O~i%g6aiH1`cRH3s%ogl!erH=<^E;#X#bc3=B6> z+ZFSm<}2tx%!jpO4}ir%E+w z^4u9JUI5LH;Ik_j7#K3a=JPUKg_c*~y*{9N4J;0_2^Ft^n$r#~Kfz~IFfcIG;E4B~ zU~_mG3ZU&n@Z>tE9t4Y{nhoOJ#v#5JM>+ovhk6!yP(I>icwhmEM_4~j5iAa}2^E{+ z5cdX)^D?l#gw#{uy<(v70gE#*fHuz~o3uq968;a-!sjGdJuky)Xn79aE5pFR@Bl21 zYyyP+6^A%4xZZ)NK_(RyAogxSv)34`o|oYPH2k66ZU$$tII;;4b}|m}3a~gY!@Zl3 zZ~*P?1L;@<76-9V@j(Sp`wdkL#Jd1i&&zP+GsGOwo;r~D7qB>pg^Jk~A@NuWt-oOP zg(O%URV|p8TvSqAQks^gm&}loT9lfeSq!?;v?Mn^IVV3awU{A3J|#aMa>8YNN=bfE zaeQKF1w%6Iz%V^?QzKLCisI8U^D^TTi;5B}<5TlWiYghvC)~!Tl;-AEGQ>mf;)d|z zGxIV_P?RRe7bF%HrxxiY7ZfnWNBLM}r&gBd7o`+~I7Y_K`FSaspd;P#5_95Rz(=WN zmVsOw=3kPLT7(b;8)aw)KIYxOpg2A}6?||dSgkSGk@1-+ z6`)&SKtiU8NyQKgOmj1flfjxzbMo^Gz$`QHtps4EX;x`2M9?&?G!LTCB(W$RENNa+ zl$ZxIr?{}F1T1Qjl3503nC6z|K!nV5GxKs2E5M=_Ir-_C$%#2&j!9w)BoIuK6JZAB z=0p8%2|Cmq6qaD6mYI2wQ|7=tv*L`*G>GA5U<1LTCb@|aCt8A!FOAPHD9!?V*C{74 zFFPO^nH?Mt;+eUmf{u!VNWnP}IYTqV`E&8%py&!n4)6vWVrb!#T8t(e5Re>f05;Uf z2u-Ru-mNG$|c<02NoOpz};ByS)gG-7s z^U^b2jVwX214=@WGt1G=I|TWZ1mi%;jm%J;i0lj`pF-W3UkpyaQ1=9QCqn|%&^#cq zC^fGnBegiSI39ePK|nGj08N~V5|gu2OHhT441z0jlk#)oeKU)TGxO5X^myih&r!{R z3d7>UDKRA;bZcT!esX+pWnM{Q1=M;=*NOu0$*l3N6`;dAi!<}{pi)K%DgR)In317p zURh#JW=gzwII;$BSiBmV!tR-k4@yl3nPq4k0Ls|$AxSy$DXD3ofHO33Oi95Z9{^Jy zl$uP8`mBKDV8i%eLvX6XXK+?Pawb%n5zI-TlPlw0^FVh-6vsQ~76f>gLDQ$9S#W+) zNj%i)Aa!tuA$!CE?px2iV$e;t`FR0`CJ;7?kBvb-hKPd$1x-zWcXF^%d?qMxjNnor zTXDF~9PB!Xd60Wvuv%+m1a}|knhkK`2W64~LsPfp5)cc;k>(&r5>ObBoS7K_aVWwJ zJTA2WyA*C4NF@&2&EReg$Oqqp7+`1$Wudsz5addz1f~)s5#$tP=$4rWPjcSL=#iO~ zX=vi>ALbhG;u+-X9OCKk2Z{nB^q~?`mre&rU5i%I;SKq{v zTtS5tx?e!jhNhmy@vgZAC6%x;CpkDCt3m_k{L;LVc*mmj;s6|K z%sq?aofC^oaLF4Qf)s%6TuKDhW?=g*z+QIEOU}tJPECmqNv$Xe0GIp4si5m{N>VFI zU`3sg5m+tgvPG~|W?m_{8pEaD(847jUa&huj;%%aT0lT@ZdR~Se6SIykc{#%gxKK% zUdvmI&16?gNIN34EEVhlf*Kg&qoRC3*(EO}-ZKxpGMFfXjlsUfrvq$1Bmj}yfLKij zs|Ba=cvzDVw>n7T1~(CLD}opXD-v<31GPcH9tp|MPR)xCNGvYN%uB}_u!hDZU^N90 zHDDJ*d`D0(SS=*LyrFGlY*v7kL5%bVpC%1z!UvZoVN)BB9FUcj1c^L|SK(T)DR;Gm zoKKx!1Zqk~`4|$T$Iu+E3Eafb%u5G5kqEsYbRH902{dOkKb_aUiw%|oM_m= z@HRBcFNiNH%}Ff=xhOLrDIghKOGo*DTcIUIrJ&m(;!*5Ew<;5(<%!47u7;+F(g18R zLwuBb7=7)dmFK|u$H)L%BwpXl-3kD1rNyuxuIR z?~Bb2usY;y4=R0dDl`ONSOFco@lH<4WXLZqDJU(0j>83)_!wFiWTqykmS+~H#)Ix% zC@CsUE&*9$nOanoUlgBPoX!Al!j_g~<`jeVfo^sHT~Pt%#7FsCssNR%0ie!#Kvr-(WMIjnxTGi-+USRO$=!-lQ{zFGAjCtiPYbXBbD*ONMh5T> zBv=@m8q1*6#1ya*0m-Pk4Gp1bBP21Y7){D7yeP9I6;ur7!G~2~jxvPEK?ZKX-8ir> z4V@B`vr7xGTV(*z19By}SppgY!t4qd8U+;PC#Mz{Lk-Eq7Kgb>pb?cQA47A0aJ0pT z=jIo{bR@YNnuBj00$&Xj54!LoJ_B4z5v?3D5{1=phWL25AV*)qexdQM9#A>3gu;^^e#8qbhclA4p_;Nb4#>Es-5q-UgO$`BuA zR$Nk)la~(~h=g2bhpGT{lWcK89;#q`l%ZK-N(v;9O7i1#GK)(0!xTL7KqzFx4D(H?BhWIE$gWS|y&=_|zXygexf@T3L zZ?MHSLwuBx3Ape|E`bgtg2qI1At?l$`oQCKMke5_0xfvK*O9`q47dbIEh<48QUT?) zyv*VfXjeR!AwJ5qxTGkv06Y-s=^tNQl9HJhUs{}+0`gFD2D*o$Okv5t3Zwu_*!r30 zrsf(ImlU}ex`K)Uu$8IF8AV_#qRhcjQkoQy3?BM4G)5U%#TF7tAd7NR(IPQ7H8(l8 z04=z|$srk%9O9!4%^?LI(sev#AhYr?H0CB|<}t)a!JY1G4YM5PQQDi}FC7L+|7&P;8olBMN1B3?5U6@ij>ElcB6Q4}8l_ z8oEVrHzt<_B!dDtKDi<>KD{)tC?&oqH77N(IMuT*$ur(i&zK<@+%`uy1(a<{ z3!tfhAwJ5o2-KD+NGbw#o*?BNDBg-tL`=cn3V?XW5L%nSk^@6LIBIiJ^HM;WF+R%B zu(+fMl;jb~4HOE-;81{645+CUwE@lmieTihH#7kStpVJjd63a0keQH>g^m+K#z+w% z3m1llYqs zhlkK2CB6bws-g)-85#$tmXsDihqJJ@cR;NdLlbc1#6!~@R&`lP;H(6iTf)cz@ll|m zq6%>70xsi{L8-q8qX0-NPEE~5bt5RE(94N5(1q`)%F@zuN{chl#6VXlp$Z}8LKh>~ zG6vASf2b-zccG$+fNV=f6)G+%%ERhW$fc&Jip!uEE24^m3Sd|@Q5>I{7oU<@6pyGb zf(_yWz%>RasY6TmOhoZsT#}MngkE~agQ^2iv6Xo6KozLP4JmT4l_mj(h9U88o<6SePX7MhnGEsq=@k|6 z1*t{F`FV+;8}j1I3{Z+|P*VY3#KFTO%Frk`HMamO{6 zgS)eHys@4EC^si3VpLn8LLOAc!)-!@JZOfWAs(rANlY#*%`8H#T}tvx3kp)vlT;L_ z(}+AFjI;X!u@2noiw9N0Xnu)L&&|(+{oTm4h1j zsCF^v6<6k#BqlNFfpQa=&VaGNQ&a^EdU^RJsd|o1p1Po2l5Fm_61USe)$G6TpC zkX;OV5R;RNiy8DlH{hk_m4H`_P(*E610yDx@Q2UA9kJ(XgvL9Sz9fSp4G;eqxjz*rF4 z9kgfe|NnfLe%QGUkDv!9{edWBfVmf@4n~9aAA-&lg7IPJJ3N3M5dhnl3JN2TJ7MmJ z8p{B>L>6Q=Oh4=#hyYN;g7*7D6@t`&m@xe?|AY4VgXCblC1B?w&4B8MoudR&13Ehi zU4J<=T%o}YKUd-aG~%J&09g&jAalSBC{cu_A9nu41E_xRU0YDKAPTlW14h@P>4%+D zkpMa%80nlUkX{gmxgW#^;Wjk=u=6Ymp!z3(4gdftgkqSzP%c9cntu4X7x9ps!U0-%tF%-J4fTqa)^mKpoD`^4o`GgLdE+diX)kaRBYnftUz8mt)Hzi2lzIVK|BE8wLi@U1fX>;3I^B8sVSE@3+CL2n6PSMZ`63q}`Y(VaK^mbLrVmEHL$e>Y zPWZt^h<@0`50ilDw}S~l zX^>hF6GnrIS-9OG2`K(50uhDnR{)E^BQ3oSWe1_=P1s$jY6NH8}5|;r0JfjWMqH=W(GS35HCRsBH{p{7(85=p)3Xl2L=lUP6h`Cc?LNKHUi_ZM*jdA#=yV;qd6eT7(k|h^jR=L1kh<2h%f_;h8hEQ8!J=}8>RaWVjzrWU{C-n z1L+63^}|ny{D+@PU~w32zzOCu1n@#=m_Cqdu)g0Q76ZeF-%x!}S^y%<0Hb041NjYv zL!k2LvVDgMop;lYxQ3i-Cc`n}LDBkAZ=~ zpMilPfPsM_h=GA2n1O*I1f+q1fgy~6fgzlMfgyr{fgzfKfgy&0fgu(u2cqH_7#I>j z3_uXKV_|#F%EAnXGc4w_)J9|I!)v#(cooae?-8kv?+tS-DF1ODoshUgFa?=k1?+ zulI9mHT_w1@m<=!yZIO2SuV@wbiT&_pkrcI{j8epym^66u2LNE0>ro#Ng+skG4)qQ=)SKc^{|1NpQ#i!W z;0T9#IMjc_A?}Vtyd8)5Cmi+)AA>xoAZ1`+-~}~07#J8zSU}}4 zAH#NUhybWg1X--W4iVQ$hKM(S1Q{3@rn7>|PdR(ve zo&Yuf#%qwN3=A`PAoN*qeDO0}fQB1Hl!0M2G<>X~;nNC@7%Qkb8xkQF!rD%4(D?cW z4WAECgARku=VRCaH6PYS-2zqrCJXV`22J2^OL&YaU?cMJQu{Q}SE&#TdkHG=zPFVZ#FH~Gj9HKs10;0hS8ve|F z5b|vremM=1X0V0Y`vg?MF)%PVLHkXY zq2dKUAO;+R_8$~EAnC0ZYCfp#4N|cTYVS^{J3Byv3=9nF&~OumhTB}Icsv`Z+>>Nr zV1VRDs4znyG+hZm<2N2Eu^yT)BB1fo0u|?nilfIDKh!-J(Zc5&RD2KA{h)R}$f%9% zkn}tUYA-C`#j-Il2ryu}vw;<&z73jxVd0<;jj!z`kN~cM#^YOPIM@e6#MvPf!we>f z`LJ>Z8dmcB7O=g9t{mojB*=lj=ecVy&JSVxdL^Mau`J15SroLq3Qfo07M*AAA_uz2=y;| zI5XsACKZ>YBx`Gf`n+Zg@$u=o`FZihC5c5P@$n4to*};RDXB%N>6yhPsYM~a&N=yc zsUe9;IjImi>@xA`6&3LXsYS*4d5JlhC6)1I1`P4>$rXw5>7|K9De*|1vke`#Y_fK4yS z&tXVQPc12CNKOQ+EG{X^NzDUkC{8T_D=aAjQOO_;X~n6j*&sQPn@aLa3kp(;7|M$C zpl&WMNy#rQVMqhn4knAiY6~hE(!dU9$c5XHoCr2NIk7kuWERM?Aa50yq@)&s?aPBn zrIi~>a0RhPYnIK66=Zw_k?0CP#+|+;oL*szNqTl5+|=Ci{GycP+=2k_lA%$!t+5dk0<8kx8irKZMv<`t(FmBfS7bi8kBZhlc^ zfT0OYG${vaq(yN_QC?gYmzH0Yn^=;Wp9iuCZn3kGYd|u{$tIa4`NaXrnczq; zhG+^;EXvEwOAqi)207Nq6dWpU$tBK-IXP&-VhR_AhYQ?}`YgHuaN3*v)P(=+q)im}-WN*abHkl=$xELL?{Nnn*m zZkZL}d;!jhpj-jB*To1Nn?@$Ed|Vu#nHQguS%j3IgAL;0S=tbqPcxA+YCI?tLy8WD z_|!a5&M-2DWzDd}oYGYEoXHR$pHy57(}Ku4;7|aiU_;a3?976APf+g9Ov_9y3P?6I z@%0aLjd$@3a&->z^!Edm8m0k7`N^rp#qqwW#l?x~sR7Bkpz_DiI6l5C5nLR_mn5b` z6IO9akr6BrKuWvh;?j6fbbwNo0jQXRXvt3lCFRV#^x}YkWKbS5HbUgoc<21Q;*xlm z#FE7LfFOTgNczDRNdbn2A@OdWKCbaj{{G$|bC8lF+$B+lM!BiE1>j_k6sA$2k_c1< z!4)E$oR*mfHq9KR2#F8!_r>N6P&gSN+>cEOD3QSIgXI%6(FW(Fn(7BqQQG(K+K5E)Pdk%@tgfr$ZR8mKu0 z!Hf(L$i%?N0KyR7K#-tz7|7m944^hIsQu5t5TI7c&A`CMU<~c|f#g9gH`sW?<@MRD zpcw{hxI8n%dZ>Poc_NvaybKJi3~n3{Gp9_P#s-?12!QfSr7}4g7?>EMq55I-L{Kh6 z0<^>S13Hfc6IXzWGyH;##=^uI`arH@V30r)XNHO!pow!p#XZo(d7$D6XyW`(@d`9? zQKFU7P;mt`aTln#1Dd!u zRNMniJP;}#fF=$L=Lj@$SU4x3iAO-q$v_j2g^D+zi6=wFJJ7^4q2d$J#0#L}Gtk6K zq2dS7#OKV1q>~e9;`5>67tq85pyD^s#1})wAE1dZgNnaE6JH4x=YaOBVetjyC!mR6 zm<4fX0h;(VsCWaK_#LSD1T^vIQ1Jz5;y<9`C(y*Bq3(QuCLRkF|A8hR4;2?+g!ETo z{z`<3YoLiIL&Y7?#8aW-5oqG+Q1JpZ@l2?A2by>`RD1!NcrH|Y2by?3RQv*(cp+5$ z1)6vXRGfhc)xYIXaS1f>N~pL2ns_x-+yhO#7Al^ACf)!QuRs%Tf{IT-6K{cvuRs%T zhl(FS6YqkG-#`=Zg^GVb6Q2MT=Rg~WoeUK}@gGt?gNCPIX#!L)TtE^x0trCz4J2_3 zs2GTPfFy1S5`f|tNaCO|ZKyDV1k^pC++zq61dVw^#X-~iusLXuG;G`%Bo3OV28n^N z#6O7p*%=tXYa&2mAgq8S4ywmNVj!%6Bo3 z>_B25?13Z>auY}lgaeSo!SnbaLC_pIk~nl|2`rOm&IcBO5DiG;{1729*?}YuYD0hp85kHQAc+gY1Q{3@W*~{f#;`%s3y{QxK>|>` z0!bXS_5mu)umMS26eh^Pz_0^JTntJ40Ft;klK2TEap=$?SoQ*vIA}ByEXcsXa05wP z3MRBq%>Q*wi6H}2M82E==6?e5K}F-s1~C5>h!0BcFAKo@M<70^%6XXp z=HCMGK}F-s05Ja&hz}|fUpj#Kr$BsAQTWmT%s&L;gNneH3Sj;&5Fb?Zy%YfRH-Y$| zBJU*wn7<0d2NiWMKl}svcM*sWD&k%~0P|;o_@JWg%E>qL&6>z7vQKDuP}rfcaJ+KB(wz=OqJ} zuLa_Rikg=n{(}6k1mc5=n3oU0d?^qgRJ6Rj0OkvU_@E-?%SBL^EZL`pe+BA0nA?o z;)AmK%MX7*{$B**gR=O`2Vnjz5FgYOd3gcMp9JEAnm#WNfcae@J}B$I+yLe`f%u>- z|8fDCUj^cWvii#jV1Ch6C5E&KpbQ4WhHpJPFUEOvKJsXO@*yC^rUUL%;S0aK3j>2kuWjcIC5BLsUe?ANN(>&BKRi00mPmSZvnpMMWNqHq z{}0mi_~jupd9jBFYIh0vn_G&!h9H$H9Nh9-SXN4!*GWU_9n=@n4CA zM>p%sD-Z*DKnCJ6ufbOFh7toqslG?E?er^33=E+l_waah+n&0j#PEXm|Ns9lJpTXx ze~k6#btMKykaNIG3O*lB1N#T0JoaVU|Ns9%tj^j$-L8LB>UG%|6d0O+*z&ipVqjqC zJmAqQ(h3SKk6za5WJZQ=7ABA63m(0!d7!Xjyzu`)H|y)`N({{h7&}=XT~}gwUDnNd z4kmCEB#_$8x)Ua_0VEL8&3XYQa2zDy+|9ZhCa?)4VARc;1`~({2`F~6_QC{OKmr2Y ztRNa}ZS{2}h6xj54}-kn(OLV$qucezF^2yzk>)o7VA0Of4gxv+PNEr7Pk|xLZyY>2YfpG|mL5p)=w?v`Wh{?Q*B^!l(vG`+1EnX| zZyuel4?MbE4|sICzVPUFec=Id(hL4=3>~ib8*1+>l(03_-e)M)^5}Mbz`u>5t2x5j}#AMh~r9FU%dGB|35Sgn%^jRbk@G`=qv@f@PS7+1IY0pXMmW!0sq0w zP6060&EU}u3dn1qusr?m|9@CW;tvFbGl>cW0W_~61&Ta@K*1RXeHdZzv3P3|@G2gM#9RM<+N8j{k*+L1*n7k6zYipezm1`~w`1rHaR0zkqU9 zbL|(-dJ#~9OgqjH&*0JQ`h&6A^$X+cXWg!EJZ9_yRk$9Shdg>&7lF)RyZ}w<_#>$K z1tb492AlX2Ay@=KMN~>bc7fv)5s9x)z*Hfkkp?JHU9tq z-}#}VRptNx|Hv8Th2eqYtv3Jv{}*9oVBp_37bNe|I~COQ@aS#@>4JuJ)c^ngJvt9{ zgB5q)>^$btYkNJOkpW`4j07VCM9QPv_eF|_F%LK=max9~4RTiF5s)*;aFr+lR~`9> z>8e7wtJ=hIxhj<+S1A&3l^zyXF~D8*K@69x&VT#=-vcGAJfP|Cxa%KA4hDv9*FPTJ zp)bIJe<}_Z`13&qy8eL{DUEL~fYz;d?zKRR>K~w}_WA$+KWOQRNAFZnbJL@{6{HLr z$7O$^p$Sq2wxktqi519_R*-~8w=bwTgU7JsH+WViY_~Eas7%IU_pd+bb{oR&-X{tQ zF>H3v{Yrw}pfw#>{auG__fF7o4cPM+Vqqa{i_-xzI2_>7xfRr0N6u>S@Mp#q2H$>z z!r)jpG?=G?Oz`Nu=+XHJ?4As`d)A8J3Xq;J@Bo3<3g}L71uaEq02S5U0ieS4L^p%w zA^uj-!eg+Yg8*m-iJ{Z=Mz`w?j~NFauy(rM>2|&2F#}W{t@#3SqU!^X=Gq4g{8J9J z94N6k?s^5ZeWKglLv3Z^XdD^Q|x=!)tG_bqpRe zJPtl!_2>i@YbQLqJvczcn+L=Ixv$_d?F7iMor@U2t_IgZodFsk=D1!S zCXlOkfw~PIoyR;n&%bB}1w^;&i*5#J4b>^o4bOv+pnuU>`oyC%^oB>L?**Su*AvjH z2y8>=@fYD>yT3Hoeu3H@4wgZ;oACm)N${gP^a;2Y{Nd3JG8F7a5c`5hCpacS>=PcH z0TLi{P~7zeS~fsRlOLU>UpzWPUv&C@@ac4Y(CzvG)Y=49vS5GKJ^+<5-KAeZwWVh# zxaFqyA0C*9=E@6?PFGNC?*Y_-A3Pv#|KZW?z~NzesF-~Rs0aEw(gS1#s$3a6Xyq}( zYg?!sC?$gQ33yl@Due1%#3EM=)yE31cOccA2dweg?fRpe!6O;uCXiVi9=*Jt|NsAo zM%(ch_MhSH1rJCRoggxIoCOuB-L5CPLAisG0iHWL4|QHR_<)J=!odg3$l0XzBMI4L zyEIBR*%%4SCdULA8D57$vq|y=kIoAo2OltbFoGy%>^bHQ$YM}awDb6jJ@ZM+F##Xo zk=*AU5)E2vsw@Hp;z1Js!ZISQItPk_Q4-EoX3K#AfwQenej>3XGB z&!ai_hXyENftq=it_MmXorLBC9H2aY?j1PTZoFn|cD=&*`gphNmfnE>ouOM=5AaVt z&~kvkg%4DAcDwF?CcPaXT{9rMKxNVm@zP?j(>jm85C!M23(d6`7$BNkK_wqp7E;RK zaX7?W68cS18615(}$gyb7^6*RinIrR@H zk@x=i_y507XDeuc54k`CH|{~Bf{^sv3f2iKn>$-2K!$XKbsPszARTWN`TzevlEQ8V zORx}suL{WCZm^ba2M)_tke&RkzZe)8y1{I4?E#hsW$Nx;kjtPIIPdHK|6336w?fKK zu$pcM0n1j9gZW#kAqIn--ObSagNwfvG;Vaf735?#CKTf#hW56C#yp{Bo3evOkf0*R zU&Mg8ore*f7l<>!9mTnyKyiPl8*H-U4sd4=+K0&wfkkZuH;Q?3?2HUA?}F19IGCV$ zAI$C)@Ms2mMxq%UMvO0ygPQ!^kPz-X{zCWf|Nos}+nV=+d;_WB`CED*=0PF?)YJj% zz><_eP%k_gr1ghK zH>lkF07^=bMxf>^P#f(Hdu^w8C8K6tR ziZOAB1P{bk(*Qh!JG|5k}WHujheV(2!H4QsqTBV&_X~=yAQc-JS`U=6A9sBLD$l!JUqB3i zws|3=jnICHOQ-7@mrh^E$P~z5p(nas&vahvJpQ5sG-Tv@!lT<4)+%`cE_tv2hh*#K z+8@w{RSRf$QFrJWk8W`8|KSL3+k=uZXn5*H5vYy=hv@eU2Vcmy94M*s=ysLp4*k+8 z018;_x@_ROzETrmufLh#`2 zOVDr-cvu;4kot7`-srA<(CzyK)T#C8hE7j3zv1{_dc(2vr(@>{&3YDY({~4Q^X-S>0cc$c>MdLVMfBQ- z;4&YS%wG6(yYA?&J<#oY!~>d(e4#1s_={H{`(V=@@XnJ7xV`220+bg(pNjC4V2Nr3Z-;*AE_y z7a-0NLKCT~%Rv)ys6$s1Rp)`GCLUA*Lwi^dlT}Jo(A4PHX`zW&)`Q1Qz?r!D5F@0V zfAMk>C?r9hGqh1p<%dXh8Yniwb5Nb3d$2|#s5kuLxa((7d3?C`!O^;sJ&uPaQs%wuqFfqJV zJMQ{fL$kUTWY}xTU!bPYs2Ky?fb+9l&F07cyxyz09goLR?%x}wp)oI%%k(z3wzKAW%CgM za6cE`A}e(Or3n6Q0$}S7fvVLfjIIw}gL;ZDAi`fPAi|oi4_>o_$8KH=fQArD*j|=H z%i$O31Iq{QBLy+i^dh8`g*c6O_AVucK*yaR-#G4II4ti0W_t9R9`k@?=$>Ey|9e23 z3@Y0|^FlV(-~oXWPzwXhuPueTNgGx|>;xIL3uG!N+ku7>Jem)HE0CAf;I5PF50r8T zQP_gU=0NEMv>>II_s>pb=N;tdfH_Ya>b%CEsLu1Sc70F`Y8U)qK*Sm-+2FDcG@t3g z2p$sbc6|UHQb_v$|9{JY5-xB^znsIszyO*-fMv?w3Py0j0(PQkL{LHW0^~$U06IhBoxw(IX-;141;aP70pi7BMi3Z6*!g}F(q)C@S1mWW)puRl+HU|EE2bzDVmk2fg(C2T-Vq{=w{-MO* zI-3cu1GKcDmHq$!{|$RVq*5vS4kjiBhS#h+7(pXdtvui|1Y$U}_Ko3hDP#i8!A=F~ zfVvej&pm??fSh;y#f01c|9gPK@303< z*YOwEzcMhi+~#kY%E-U~aVsbU5Ti6mj{N=r6dN!{f+m>D;7;8AlY!yoRdD+S91i^3 z92h&0LRhPW7ZTL^{H?l-3=9yCR;e;HAU&E7FnRQv20@)_dIMw?*reC4s7gT7qo6YX z&@H$UxB|#@e@v+ml86Ut;%Yrm8VvEL5P>-1K=!U<=Z&49MOxsAvh~iem^t!;f#Kyn zQ1J~;GK`E24KSa{z};|w3F?O9U`0%bPy#jdpmMLJJbGtCvfxlRSmjR8VJhH=zvl>x_|xAQ7(fI2 zU7~mPbYW;6}hwo&qtdef()z` zv;e6Uy7~i5^;Z0cEd+ry7qm8lYa38Q(s2g^Y8~teN?+?g!0KSg+5*TD15ijQm#BMm zw}QtpLFZF}OG_{hJXi@zksh4_FaLlGB8XnJ*h6>AybZYBve$u;;e|3zxA2w(K^H%O zT*g)6a=aB37LK6I178~fih1bTh$wJXai|-t3LII94zS3Q`^v!Z(iO?skbDEy-3?ny z1IjGmP6fngh)_wW1En8O@&vi0sxAb{T@EO6QFRtba`7cvNIaDiP=Nq5MZXT&cb4@~ z-#MZ94jjLb`k@9?bc0s+fWiRmyUq46-#L6?V0f7h(%Ib$GQS%<x;n2iudw594(`-c91*?o+Sgf zj1GBpL#rSGkM5};CqW0eL9=y`aP{a$HoF|fY@|MdFx2b}&>RieY^cj16s%@04Mz%S z-cl7P57Z+7MHv^kJ^;G|67gUr)FBum;B{#wY%hZ#-5!|x!TF$50G#JR0fwIEH(!G1 zdC24}`cT1f*AtLtkLwPP<^u}g9vWz(6kG_pf`-;FfO@<>y}TJ~(aSxaRZ8HIy3L?) z=!7Z;)#Ttg*Cn8o-Rt|nqc`-1M=yAY?}caQNzcv;;Lgl0&|-H`oM-Cp;GsZ}HkA_4Vmt8o$gf*qC%gn5F9tFd-X70+3vQ2tg8`&R1JvVl0Jq3M z+kQJiL%qJB0J_m#3L5o&fk?_)_rPW%d21#k14Co&83qRi2L4vi@G;0LXruXpM|bH9 z)IQMl_n^Wa9;zk09^IiJhdl7GJX9nJYU%C+t^WoEq1z3xT`%px*~Aqz2h8XJju5cp zz~ep;m+fO{0Qu}aIOF)ZFz@q<4 zd|;yWC5|vAFK7$}64G2H&>^|f7f1uUyCC(>@fTBGfTs8=;Uf&7MA&km1QN@g$6uu1 z1iSBb-f@tVI2b&-eL-toL17IUPd@%)%Lj08mA%mybX;EpL`CQYjF?z(2W%AFtEHg8 z1I@5scqt27NBNp-!fW;k(1|V3h-NKlMUV|-R*UsT!FhsN2xLEKaE4G8QeB0fg)T3H zWTArBD3J~BDDt;}PCxR%o`pbLL3V-mhk)W=;|IuxXTZ}D-~|t@KOqr#!vl8~ItNh# zj!h**wy;5Di^tc&#=^R(V3jtdDWJ%PCff%d;EEnJi1&uWqgT{rCGMIv*^-gr#mN`2 zS{{mJ4Ojq*BIp|MZg4lgEOW`kmA7eP4L=f)?L{$CF?I2HKIe3$)D&6l9EFK|ywM*tOpq7;@ zSX2d^z`+yY6Rv=r0A8MT176LrJ_i-bAa8-EgFpoxEQXk%F?1W8GZ1bEr+Uzw%#D|a zkmChoLF2|#Nbv$1amH)`pch}DR6lDjD8xxk^)5?MW3Kb~i)qh52^yS5aHo2nlORR7 zQaxzf88p?~eFlXeQbHvs)eAtwwEY^IVWg+};FIvsZG0mDs(w57g1WjGJtj~$1ysj* zK*yKBZ7p!W872a5aY1{{;GP(?+w0TI`*tyEu=bi}n?Rbk7EeI|2hjyvGXkywS`1mh z9VKx0yA#sz?cNIRO+dziP#YUr&oRvbuMO~oj7kWDyaw;!fct!qESNe&`2Dls{xKt)VO{NiXBL_g1iao z8iLe;cvW>VNI?MU8p7nFK<#C)*FY-cON@|Is(@y{;Bxx>eV{{&k>oA;`%4k_Ldr|n z7y!upeW1QRsMuA11S;LYCPB4B6+^p#V5-;jgdrqJr-0hr&|X9dKO~KS>b;ksLoDG# zBc>~jAj(a#CY@} zeGHn#1`k^`oZ$eQ0*-umR}$3}Z5*b6s(YAQ1i+?%d$ZkB!Ra5eY760(rx&rgr8Kd5 zFK8&3q148syBC-KeJl(N4j>OLz;1{%AAAucNFLI@0T;T*Ti-zCn)iZOJpBDjxj}0bK^)K$$j%EMC`&gVskfmU_ZX zfzE4yDe!0le+zW*2~=T0rYAa&zi>SA|9>ZFtOO+50a~#LVlciw+PoKJB2#HiH`q(q z-Tr#A5(ED>7N(X1psWkh0M5G0xbS;<&17s|4m<|(GSo**FF}XULma_e8iLzfC7RG0 z74D_H!`Qua@^~xUa4XPs4A_S(rPcU+$U9jHwA0phDMJH8sVhE}*C%1~R3oaV4uO`D zfg_XgWi=-Q1H^-@{H+tg#SQLM(mDy^j^!YCMB{UZKUQ~qIr9I%M=xZv5K2P3eFQnw zU#m1jU3ZrQ?z%dDNJ<1vTfRKS!N35IjpHvI_k%JWxPJHOZUyHCNXrI1R0S>PdcoVA zprg7zy}UfLQ8Rz%@fTco!RCMxpGPyeO$BYVxA=lA>;^Afg%x3--7eq}VtnBcJP{mX zpiTD*tp`fjcQX91|NokGC#asnr%xK9Pw`;qscvwB=`~^UfUZ}DI|EdFBg$>vGoW%C zR4O#@1(8svx2|PpVDNyfR0d^IkK^FB4v2}*0kbAR91hwd-gX6FP>n6Ol1Ztu{2S7n}zXoUo09@e1n=&%TVV-#ThYi%2giI4aW?fL5 zkJ^yP0#*ASu%-#P`3S0HKsLdLs%9UB8@ikgf1$9rAMEYs2Ld2Z&jFS4*gSn<1`bdE zSA%#u6f|oGX*+?Of-j^EU{*SStUL_v<%0tS6hzjgF8K6*=>t30HkP4*p+pKAw4nM| z0uhc|SV7?ktLs6ofzI%Aqj&;otl13ei9euOEr=(;p^RwlS@XAmPOFABtvZjtP)1nj z47L#N1*=kIht(g0$AvUl9TtZbO-Bx0B!>xTK|(hf&0)~!FG++t2o!Smpvg^8K41q& zBDg6CE}d_9z^9$TzJgSBs)s>Y|4?@;NDFk@d6g!t%6@*Ef#GE~sCNUiN*Bp0D{wjn z8MY5}01PPnLqIhe*sPZ(AZ?JK^FW!Mhm2!^Yivl2h*nO+-Sb$g!pQLA-&J^C0$GPI zXHi#K;eGSFgB22!^LQRM=V?4)eF5F{w`S_NG1mI&K|s=X4P*CNMTK}Lgy zc_7x!Z)0SD=RI(h0Ig*pt6z{~c={A@41+2$g3MqjF@uU!f)@X7Qe%WH{@n~JHDG%`j(K!m ze=z|Od!RG&p*aS$Rs&y@D0G3N1YTwC165V8SwR#dK7DUG!TLBs6MbOUL#Eyk6(kS5 z8bGZe`@y*boQR;EL~zJMlRAIPZqS+}$PxnRbRNV^@RZU%Mg|3NkH-zG>7}4)P*9dZ zGWliJ_y7N4Eu4*CKx|Nxi}9u37f^2qJ}m$)KG0Vhglz}yGmb?p=>rXWqAt%p(BXRE zxa$K@uz>~!Asqwos2XTBJZJ#)0;K4H51}(o0;ft)qXc83TvvgS;YHg;SgM2!s(}mA z1I<5l_*-f~jo2SL^}@|RH27Qcz&y03@<@zoEmBmFq9ZzH=RKNWO^sW^yb9eeLHw<z}qhddqKl{4_-b2rzy~aI?!yG>ksfU_2V!0gDNhN{%+SF9@efG zN*q1FCbg~wt9L!o%>X(ds{zzW2d^E4PVRw|8pz!b4uQ=Ftw#k9M87TvZ}1B}(kbw| z7`ulR!1JXu&Vn=|2PbIO@&#lA0!nb&vN9+zl&FHKA}(DX@cBQCWuS@66Ww5oko)Vd z51U2HP?Ro;XevPd;_X6YVQy$H(HyCkiJqFWy1(f$d)g#0mSZwK6WCZtH zEe@7y<2EoCX5b01&9Ac{=E9abS{y13!L8W@qPg`zi9T*c{18Q;jTIojHK$%-dd2AH~T*Auov3K?tJC!lF>2efEpVt^#OaPUO? z8SwHgkOnT0hAQx;QqW{Oq!rTCiyZApt&ol2?dHc{u%Cq&KcM341E^lp1kcWYfRwAQ zH(s)UGA)WjK$YxHW~f8X{Q{+b$RK_zsBG*mh3yvtkjpuoW2>H#`>q#Jw+658zf%nP74r0WNd=GqU?4S=9M<1hAsuGRz@y<#WW=-0X6 zrTg8kP+P&ddmkvPXpuHUcjz3CZr2TvqPz3rE^tom zJhmUC?Sjp@PGY3(Cdvv<)@PI7;;PB{lT>)jo_Rt(S z?s|cdK>#$>y#msna@_zaE=0Y$!POQho-wMeGD${;7w18PaggF-fk(IN0?_0dn6`F3 zz~5p7?qIqu@aQ$okcTvPW3GdSja^rGG}o?x^q)&|J-U5Ycyxz?4A=k-eFg>ra2>U4 z56GJ{nrml36!W)MgUt-x;L!~-1T;U*yQB+8>b?x#xqbYFCb}zoO<#bIBRT%!%r$iP z@VA0aa0Gjz*K{G&gr!)Nb%MJcr689qfJ72_m)kA|h6Zqj(0=^?e^}(Sii5ji;Gnn) zwK@=snV-RCx-J0aKghf!mdS7F zfXnX05pc7_A+h!01iV-PrJ5BGXMvW*gPB$QeJzlB0nBx%gUdwm_hli;#PhdABXL#u zTYQkX8vL!G1nui(<8@+;3@_NRcvOSGWf>C#!^<2br)u%H21B`MSw$X?72Y5#mK?_x zmZ0qj;J|}KF_;O7VlWdD#b72Rior}3{#MWxY~U==YdQ;>o*1t%fY&iViqu!2(z@Gq z1w0Luoxqv~(%W&QfoY}Z2P_|*m<`6EjdWC(fqAS;Laqr z=sga~n&1i#v{DS--dnK`bZIiEu)ek#60_}KBS7csfj6wcVs=Fv?wGwI!pQJK7rXPJ z2S$M1tHa;22hutOb8Y!sK#j$hpxf6#K@9St27fE)5<%=qlo{C%IFo4kCWuEs5rQR& z-fzY25pIx2QjTKAg9hX@1#kxwnzJF@`pXa}L5o>%um*TQGXDZd+0L8SiX8EvrXZ-8 z_vkeZkby*eJiXnpbW@=s82Okl!m z-U-OHDY)o`9McGDzHad7_FVvN-A_OD|9|rb#+CymiXOe-b#oh_OL7&qfgJ{~C`u!b zyIx>o5NLq;+NYPdrUgD84fX0T5r|ihgS-l=89}uYc-zkkP$5&y`ttdY|Nom^=PnEfScMLb?oQVa$6Y~J_cC~Nmx4BPen74?I2f3~l}6A( zkUt(^Qv$l&1r!JRU?opLJ(P+P@G*|y9@_&@g%8@Sco4oZy}9-dLn-*|0_b`iP($no zm<`&~2WcCoH6y13Mg|6OW67h}bgCdEa9$sRC%g|YuYo$9wNDuMJI+9|_yI_B1F3@p z+5`n!$mr2)${__YBJDh)Xey}#Ijc^hIrk1Dh*b*ebwV7~>H6Zev`4S)ZAsX$;DzH1 zkW&R;mO-q8C`7n^MH3F!Ul)K_t&8k>35X#dJbF#nNFIvhzMbDe-q?D3#k2C$o4y7F@9+yjv%(e`ad>|e)JdA*aqt27WQktZueC}H-8M{UqPIb!Jm{i(Ye6$_CQLrP zpar_1p12sQa0p6_wZO;aEmtTTTaRr}Uhq?ss*b=0orNE=Jb_PaI zVhyNE;L*$K2yV8yKJe&eb%QWpc=WQmLYSa_-3(|~Pz$yxfDHm`|-GC~D#K?h{ETCyA*9{&sJi1*#{xa1UgJcfzC7>nC{H?1Y&AJ27 zfx8QkT2j=b4qPq&|NsBLPi^`CC=t1s%F?pMdAip`NbTMbEn zpi&eZ4PYlCe0!i8hi@N2Bf%Amv#d)!z{X(rX)Z1!`=LgD+J)&;-crzVO0X+I?P4x? z+F=5XGQ3s-*$0x~g{LnYE^reBtOcaTquX}}I5Tv+UO@ErT|h0HGi$(M(OkO*TAZ{( zW}#enKu^=&;nC@O;3aq($`y1gHv>51pk=cI9q%q0q+N?FR1MU zJJkc;j0cTMz;{<20Ht8bIp8W0RM*1Rz=ICbc>!(DKk(`0{ZmFVK28IOCyoE35a95BdbnXIV@kDT;c?Z;>1~-1d zXO91XHZmT(tboo#cDvqz&L+S&i-KnI&|4JXU47t21#|`&valJlG!ne-0Nlidtw3%C zt&{QS1}{7E>E#tc^I@;)Up`1GiU&nGsxIi7Q2v%L;1mim3bK?IY#lg#iXJROssTZD z38a$(u7=;TFfzPw+XhRYutiFs6_lVf1X(u=<3ZNV!g!E%voKy1c-<_F2U#}@<3ZNV z!g%`peR>e*!bB|j`yp8jY(0FHEaP_2pbK;XEjWBUx*N$tOmMly-vSy_hOVXsSMB^QZJ>GvzQP6+ zq>w@v9Dwk-)mO_w%K$)ogq!z*NLcyH2VRv0_7iAU8RmHKF~{I_j1a^2F+o?Qa^W!N zBzSBZ61m{o2+VwW5ZuK8Cn(4P551;WptW}k=qM;~Iz)9*6T~D?s>PWGA#FF_o)U22 zg8KTPmaDwaPH=|nH7$kOQM&~mxR4YKb`@e5k0it{upD&%X9DQVA&4@l2>4tg6cO;b zL?|NQbBRzyz~>U7h(J;pvR(Rhpq1OmB9`?E&B+{xaI94r zw2d3G1`Tw$ z%>Vy8T7~|D4if@XHhQHR-CzrvAE>n+DB*AH1=$AbM!z&-W?*Ora}{3lF*7jmZ-Z!w zC^dpal@ zJrd5-2XEL01u#g?vJN?LM8U(EV5Qg%*5~j004ZYN2JrXaV`N}>eFEw^8@Ey?SU@VY z9w_C7aoAc9AY#Pu9w)fc8Q(>;+|f^ExhsEf5W=pxoGc0CcJWsAy*dr7HNsdQklZ9YSrH4Qjg_ zf^6vr*DVq3uyG=fEes4V`M}5Ug7R1M0|Sur;7fKurhuXZTq0ea0x}0>YYgbTMP-Oc z>w!{sh}$`!zJr!Nklh>L$`RyWZBWw>&eKIb{|a>aw>-!n(8?5}y)ZEkcY9&)9|ndO zV(Z{VKbpmwu+@BU%VS|@*uh00sRg7FKpTv}gSNeQh5hWsD3AE-$BoTXSHa zDuO~0w4@$c8T$?<1_qbcg-{zAplY6hnxW8^b_x5A29O%?L1G@grq7_(9YR&3z`)?} z8ZtEBYZ?VU^!fOUd05o2?f{iOkX{97M-6z4y%W5U5xH9dK938ubp+b204;Qcj7EZ+ ze;$x^lh7s|czIy=R7fKayhPHcmv?U#QpZVv!K2soAJlssYrrKASXc925Cv_℘;E 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 Date: Thu, 24 Nov 2022 10:52:53 +0100 Subject: [PATCH 021/103] fixed wrong inclusion of Const_Data_Size_ string in case of a single file --- scripts/tools/Linux/wmc_tool | Bin 204152 -> 204224 bytes scripts/tools/Win32/wmc_tool.exe | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool index d686079a4a00ff56eca8fefede12135839d6826e..f3a182da4e833f6be2045eba5b062905ff5106a2 100644 GIT binary patch delta 26158 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 Wrc25)n{z$*3{f4fI6X>?Sq=b{kHESB delta 25942 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 Date: Thu, 24 Nov 2022 12:26:58 +0100 Subject: [PATCH 022/103] fixed formatting issues in the memory printout --- scripts/tools/Linux/wmc_tool | Bin 204224 -> 204224 bytes scripts/tools/Win32/wmc_tool.exe | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool index f3a182da4e833f6be2045eba5b062905ff5106a2..a5a80a3ea7b8177410c2463ba1cc51d44cdf8fb5 100644 GIT binary patch delta 5634 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 diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe index 0978123154..19abc48e90 100644 --- a/scripts/tools/Win32/wmc_tool.exe +++ b/scripts/tools/Win32/wmc_tool.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:173b31cf61e6b7616617bc7e09df9bac4cce896bed1c8457f2c48ed8fad2457d +oid sha256:d620d27b217f24d833fde95887a3445952ac82164ffbe267c90a48273adac368 size 159232 -- GitLab From beeb1191b1e22d4a55012c679bf6d9c2bc7f6c21 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 24 Nov 2022 13:11:14 +0100 Subject: [PATCH 023/103] minor fix of formatting in detailed stack printout --- lib_debug/wmc_auto.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index d9665ebe70..6def739e31 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -632,7 +632,6 @@ int push_stack(const char* filename, const char* fctname) /* Save Info about it */ ptr_max_stack = &something; - //wc_frame = frame; wc_frame = update_cnt; /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ strncpy(location_max_stack, fctname, sizeof(location_max_stack) - 1); location_max_stack[sizeof(location_max_stack) - 1] = '\0'; @@ -700,6 +699,7 @@ static void print_stack_call_tree(void) { caller_info* caller_info_ptr; int call_level; + char fctname[MAX_FUNCTION_NAME_LENGTH+1]; fprintf(stdout, "\nList of functions when maximum stack size is reached:\n\n"); @@ -713,7 +713,10 @@ static void print_stack_call_tree(void) } /* Print Name */ - fprintf(stdout, "%-42s()", caller_info_ptr->function_name); + strncpy(fctname, caller_info_ptr->function_name, MAX_FUNCTION_NAME_LENGTH); + strcat(fctname, "()"); + fprintf(stdout, "%-42s", fctname); + fprintf(stdout, "%-42s", caller_info_ptr->function_name); /* Print Stack Usage (Based on Difference) */ if (call_level != 0) @@ -1456,3 +1459,4 @@ int cntr_push_pop = 0; /* global counter for checking balanced push_wmops() + -- GitLab From 5aa9a2b3f19fa7832c03e8659c6d4e87d86821f8 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 24 Nov 2022 13:15:44 +0100 Subject: [PATCH 024/103] uploaded binary for Darwin --- scripts/tools/Darwin/wmc_tool | Bin 0 -> 502293 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 scripts/tools/Darwin/wmc_tool diff --git a/scripts/tools/Darwin/wmc_tool b/scripts/tools/Darwin/wmc_tool new file mode 100644 index 0000000000000000000000000000000000000000..1393aaa77f752e4595dfb5898a5a0b8a3e010ede GIT binary patch literal 502293 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 f>(XRYyjW>p$=6Jb`U7=@{{A$!3UM# z2wIfA*|O%qv0FUX+>!y7a3gA7UCbHp(+HA;|<0&LDe`!W|r@pi^o<`}sk~!>8w@ zLUReolGGw3=jbTpL()8G8ons8s8UCPfVBmn?NUW$sVU%1|GD|#9qNgB3i)|3OF;I6 zu!3ivLVi(7Y7r>u7L`Kmf%*cx6bYQ@^7C`RnGTc}plkcUhoh$Ef)0;^Y|VsES%V@I zlrc)cT9Q)JGxPF5rhqpCq=FBgOv%hk*H1}J&Id7IJL|z20i111K}%vX^Pss6?wY*f z(p>Ov3sB}LN-fAQ0u?=(#h^1>70NOb!S;dTDmN8W<*S3%Dua@+x}Jh(i9&K>9_T8W z;#BaKdjkcHq{@=iVoe~^+ znNn8mLz6^F3&+eXd<&1a`r=N3P=YCgTo!1krmXzvk&SD zkds48@M(a_WZn+~!K zT+%>n1V<`(c#lE?v|8g{1$7g^TlD=LeO=>y zT>acbJfKPyj7=3l8!mjI<#A4GUV2G}0{G%CkoVv@vA6_WDT5C>NJ>>GDJsoN2E{xm zqCl>L1t!RC0ggeAzQJe~K`k^jz-u2OTajWRXg~|Pz#nQ2f&!ggpsxjPm}e&DfM$Te zZ4b!OGEnIaO<$13i^U4Mb_%(m`LrZZdd$pA1})P}O@URgMW93oI*d3o4V-YHCsHB% z9?3EBL9UKIKK{<}!6B~TZA^v`--m;)(JM;Tg%;bOQVSH=IiQoTKnWPq%7MBFRGC0r z0WNqD4u{GsBvnFoKS5 zIszjJbc{xEWpPPrt`6jY3{bIFTA)ypm<{r=p^*thKd4$thMaAZ13DG8G!J~F5y+jO z(iC*^S`zp^K1el_mBLfvw$R~Xua)FbNzq5CIkbkJ3i>IHvf(0yj z=xZrB!cOggo%{g`Kk%)Tpk3K1kn6Ahv5A`jTnL=i zK-U8#mVnlgL(%{w!okfYXxlO=H4RjCgPIPBX`m_%-1vef&eRmp(F&mRy1)SrE+#GGWvD(A%H63~fPP<4<#39`%l{hi{2 zLmY!b!0x~#3@QvU1@*NQz!&Ug=A~pNCxVZ`LkBvojzfGl_Q z!w3zyg$5Nya5kJltmTkc#IPHYAHX>Qk`&{EJ)>M9XK=vnQP2QG(77Di=;>5f!4Pzg zi$Wbn3Wmra9oOO+91p6S{GBxvic5+V5N8HJEdmQi8$iwhPF9B`cTjH^beIaL>787H zx<3+D8^wc;$pG(&!&q?F;Y3gwt!)TyJNt$DfRhI(WI&5YKz)nE z+~R0M1#R#K0n{oL>_KqmhH6*ORo7QfR)_S<6x0-;!pNqU=7BC5Nlj4zZ?elsEY5(g zzyYmWfgC^s6#%WG)`FDt&;SFu3Zx92jKR%ts8Wz1Xw4Rq1V}9=*4I*iH8H?yA=M0` zhymqGkgm+U5^&j9o*WPAHi7MmHj1?d$)RA-agm^@F^4Ddb1X|ON=#2x z2nCw+hbAua=_b8!4)+EtX8 z3od|k6v~t1K^(B@Xr&LPBy!mS-*OEqYhgBlYA4X* zO3=1KsJp?n2DojMnV%OAkFRJWQ!~)sFePx8HZw0Z1+=&jst07GUukZ95cn(tq}}46 z>=<7HN*yKf&Uqz})3I#9N6>+fr9%k=P{|&T)fnW%t-vR3#fRo)mVgcjRH#-^0yXf# z>-WGzBA_KP5QYL|%RT721Mqcqp!qA%Xb@z#8r12i)fuE09uKP3Q1+RE8VumZ0;m&( zcGwyyz#!+b!j4yi=3Jz#o(?%C3|by&pjfH}Do8VQKwAz$D>O0^i?qOlFvQyj^$MiE zg`biZ4=zB#$Fd>Lf`gxJiRxm|IfoPuEr7H`hUGznc_onHB+&Q>2*bL~nN_L!U};!i z0Cmg`eLNnd6=W`@7*ruZHxh$w2Rja&kT8#IgSQl+O+JO<{M^(M&?V*2Dg>IQOL7aq znHpTig31hiEd|itxXi>H(DA^KQUP2xfd*VbE&wUQD16n>jR&cK=Q;&j&;eIS#Wmcv z;F3g?ECm}pge!pUSEFqgsnqhJeeQz5B_`Wv)F3$94f zR>1_ih6ic=4tO9jO+(2Qbd!RWf@?)VYBIQMqYf?Nz*oN~r7D0s_D-OVJ@kNNMU)j> zc($^EMlecJVO1>XAZ~Eo30j&2$-Ekxu(SnE|B%cM3VM+Hp*a&&vVpbPLh4*hpI|72 zjRu0orI1Eu6d?I1KTQLw1D@$MVJnZ|tHVfg09sInLdGyl@)ewmQbAj9eV}7J$c>R= z;zALrhy_=Gkg*ofWs;~eXkLYfPsp`zfb4f(_XSXBeB#!&UZg~9zd#6bfn z4R=FO%>$~VK=FtygHi*6I)K;>Kv9O*FnEoL-!Ql`xM7e$M4c|B;$$hL*a8gyD6B0;vmz603+8?eP_G!Jh=c?LN?`~s^1&v++=A1m<3kD7gwR4Awi_H0fvA-tB*AFGECR1B1)aYHYO5%K zF0jeW0r!9upl8N|ThQ<%R^)01rO9=GYwJ;fdjWR zM_aWbcYE2EA09w-u6l#&Fh*BRE7NC1lL21S_FD)N>nLuU<-1Q(8pt=EJ2U^tt z2@#O8@?^+J2+H9Qk-N#0WaH2nV?zsV4&BLb4LX zg~ic^_zM$o5vl-dV}i6Jmc&6kfzqKuo)Yy-Emr{N7|0khXf+xn2ogH8en{kt22X6m(JZ6exs2njn2MP|Hgb-pfD^E+pf%VF@2G46a}Y z8-@az1r0u=po2E#L6S)Or}3MKlu)7CVf_F|69}|x3#ta*9fCC16bwKm1E~AvmtU@+ zr4O1`0nK+(vF!{xG6n2>q}E$dDk!Bx(lxjaPc2eN%>x~%1U@qals-WnMC!Jt!7VZP zsnKLK#2{%IJl&)Pbv2j+onC>YQ_7lLE~%g%c5y0N?E)(%U?~{nl44z5c;TY2r2smH z1y;k6l4@QKMj1A5H!sZ+kA2@0<{}m z!HEza+~7cj$1$1@5M>r5=JDq!q{R&=tFWj#_6HuefOZ5x!4KX9h?MUFKzskOFYRD}fkuX5bv@2T zr8anu84`g==?c96Rw*VATubJsfk%Wv&Gcf(A{khR5uC=r19qS>y&}+pi_{dzu0BNd z3vw9L{n+!HVQjPkXeJuu6HrkM&N&dTfJbY%y%q*tc$5FcK_fHklMF6I!a!SEF zF*U&H2q|*GSJ~;>ffFq_CF){EKU@+^YX@-)9(aNo-uMAI3ff!)F%c(hfp~;m3*A@? zQVPQ8$;UCJ40Hh?O4y_1wtx&AtT4d zNXLMJ8up+)kP3;V6`47iiQw}j5%o2+LfLe?sR7yrS=+Cgno zE$~WTB-@Mgp}nqR&=Tn45?$~lENB=RQVfDtpCMHupw>93DNEfN1XMpDU(5uFSCkfA zX*h=N=Oo1BA)fa(m$oC0Vz5!5yYwMEmwU38Ef=q7W}g0a+M zgLccc!Ka#3a^!4s0u5)~R%@M#V31yIm=On9pdR9t|( z0zOp(6lOjN7#!|AV4TQxg;lp!?`B0|I0R@*E53VA#Y86CtcZR)e&*2#+ezkQR7$5J4e4%7XhC*&) zdS)`{X4_K4DapuD2zCg#J!T6kGa%^=Y554`wmxv-hEn9?Fay_|IxM6}tp=d0380s; z!xq~?_m2`cg7jgt9K6A$7!fm&{t3$RUQNgdxW1NxUw%od6}TYBn&S0K}`+yWOWD|7BtAdg18FoFBGSsc?ekxq_$VE zMXvjyRSvQ;NE!t@AF@D&KuQFwv;&WyLJEFeJJeDaTGJxuW8>2gwI>Zr&>Z19jM_7K3@ggOMs3VqE5c(+9`kzkuL&u2w>a6z{`3| z@<9Vc;JE_GWG`g*c1kID^=}@$Cx+}Iq zEG)j>4afICV;DDEQ%nG1!Zk$#)BD%)cFSqAu4JR4}{6}21)}7WDp2raT!Vg zfSr##l?2j+U~RrlU+)f$yh=PWXbF8c1ms)I}bh zumTs=s1wML{0$FJ$gmAcl>$kSkejo>>Zmwv1s}qJw!}b%0c3$~0Bq0%kq|-MWN0H0 zbqGaI!LgtqH7})DK^@+rR9ApDDN!4dV9$U~o74iGqz~RE2Rc*(sjUh+006l)N!>ve zq+xlau@$KAL75&lQi8Hn8Y}_2*BZWD2`o|qI^s1iB{cm^v#Py~{LI$Ob30b_?9$Yr1gB_wfT=~h7EA5{Mrmn7z;Bo?K> z$J0Ptd=pbrK$Smy`~b176TDLru|fkLObWIz15n(Cv7=8*!3g0nP<4Z30!rP2R2W0^ z6lk~v8gk%l1d0NX*HTgx5bkq=Y%c}*EEsgzASlg)IFLYug1qMR1v!&K}iAJD+3h`s6%cjh8a{qFOP)PNzl3o z6c8XY5X0)wL=N%?C<@9mGC@Ae)78ba0V!Y*mO-6~9EWb8U;sr^P-<>w9_Zu_=)oE& zL8GhS2;MOa&KaQe35!mU8&Q&-E_j$1YEhbktwNrHDp&}zDgv~>2j+ZGXr&=fULeJ* zz7}L64dix^ec+-^-2ifo1gIsQn37lk+3$s|`wR*leJzDz(7}43TorAoYiDGlqhO?K zXK1FQV61Crf!H|+QVc2xKtnSXZcw0LW22w}-kpKua0Ok3G|;?<1>_V?4MWsv8BjTb zmN-EBoYla^3^YhUmVrH&Xo&}^rV(yL(H4|iSejZ~lA3}@ zDA0-wR0M)+HjMHQra;>kZBI5d@ZjYo$Ov$isR`8rufw3lHe4lSE{p0jSfE3Dz)LES zXR%=W@TU7V@YK7I0DlwQVh+s-T*X424QSwS$WbNC5-4 z2vmYVgwRSUq!I#DHfbQdplb&mGct$;Pn@VHt7FzRDCT0T%^(>Y$*l^u(95kr!K7;k zP7<(|AVe{&cccK@2$fi(kf;FK>I<)t!Bsyf6F|MJrHSlrh?$5cBa-dl;0KlV&>#a9 zwHlzB3`q@^N>?Edbf=KD0@nH#6mIb1P|+4C_@UtiDld^LI1m@fI*60BaTS;#)zD%U zx$*|DwNfZb%}vY%pNR!dTnZYVX`o(3PG&ObU?oijL-6@43RnZs0u+AW#H9%iPJAJP zS&tJHA{N@(pejxSWQ!&usSqD5;1MHG2!Jr$`ydWt0147y1LakaI0z$bQn0hLRe?uDk{Nc9q2q4nO@@QY zRYWimU9N&!l&EDTimAx+ZWXWwHnhM%ZkIvJQ=}PraMu!27=g0}D5pR*;wWhpbg^_? zASS?zGf-q9`b^Lx3!IQowL@t@z*02m8aARkMJQ!a97jOo&&e-OEiM5a76sZj$= zU4W$s1}!}XxdarPu!e?0DC8ii;DW^DRE3a?M2sX~k`G!e0CEW^^r77qY@K^hC}Z^K zF)I~NS^@0QbUSx z&>jTR0#ZjIQ!iByv?L0a_7uQD3r+>#N)y!IO$7IB!J(R&myQV5Oa+|%mrU&a7f`rh z>5YJb3QtHO!W6A}fSw((hY;4x2(8>;CeWf%0~gScqZmMutOc%coZ*=gyj}ymSRXV4 z3tAeh0GWjaO(;T_qJgKvp?zFXo&p&GYI0MGL4_u~$qug#zy~5hY=bx(`+6|YxopUj zojMAjh6`fN7ot&*YBJcvwhE@k7O-36kj)28h833-K~p%Wx=V(a6HqzW94jc8pz5Fl zJjn{S3ZMi88cc%EAt5CesMQ)8V1|v2f~h8GZ%blv28d1u@9G3gX(<>RD`+bu!<*3X z)(}|QRsn|*peTf{jKeStNe*l*BsnAe1d3RY!|CoNXdVFhj0Wi+ZS@%<3k0Vo7J-ha z&M$&>QX$m@==WI4?0r0knYybo6dXX;B{dXd%!^5TH{K!Mlv9n-{>D73s($ zEl`CBI%Wg9RFJAip1?=?LCGA{pn@a`&@MmJ;sKOTL1m^ED30L6*pSQ#PFA3-0A11t zDmFl?4q?d&G>8Z>7ux2kZ+4b$}b?7fZE>R$zPPFFL?1@38==% zha7tft)+AGK}XMm%PUYEg58@7+Sr1&WfD}>L&F-j&JJ}J7rO0IK}}5o>T6q=ZO9rx z7J!lzD0EOqjzJ>Ol#RLG4)s1ASaS`j4uvN#a8^Y!3p&CNE)S?YNd`G17nGhsSOMIT z0mUx3PJm3NqO27LpV_wU;|NL zXMmy+YC5E)1yY%Yve&j+8MT?E=F zpOFgA{NUu2n^*}tfwm|WG$aIFagm<~Dl9<#A#hsK&{PDabS+A&MUZ|_mV+L(12P}% zeB^ox6fw}nzM$L-=EAZbc&rgL28E~sL25ub9F&rveIv{rjmXOmb+AjrR{TLL3Gns- zxJq!mL1iFyF=D(EWHC69PzpCt?E{GbcqI#3VumQ0L9q`RMTQORLf4&u_w#@P31l$B z7|@hdsE-fS5u}$mpmG7Uh{G0ZZU-ko&`20^mIsZ}N2V6*D7b-U96_saV9o+L4TMpg zN2o9WX~41-2P6#6^dJV*mC!l?_d00`R|+By%W=!hOHqKX%yhK5iMSO} zh`}LHY{OUlz)L=i1sV#v#4IL4G;uMGjs#B>gUS)msYxiOK7wVSNz55?2f6~}P)Jy$ zVz>r5*MRzH(6onD9W47GsUt6qLbDQbRRm9*pg}xPHG!N+LFE!C4!G$hkNh9K3_AT9`F^>I-m^hg11JUI%~R)7W@$RH4g)`=h{2otpu39AF( zK~BB{pl*R@KSY8>TK$7Hk%1d7SXZqf$^>0Iyx|UNfnfC*JY-RqyCEmXp}O=9#SggG za)A;C2xCdg$jiJ?Oam|Z!lD6^d#IEUv6zq3L16EZvpf#dTd+}6P?&%)G~Gg(h#~;L zTOchxq>~0f`f+LjhbP|j3C-99a}VnAyP$%Yyxe00-PZ>40nW?=FBLE|4@_z(XCAm8 zz^MysjDlhngo#M2aMQq%jYR{!GY{NBVDFKedElmiy+v;3ftvz$3)Y}U&pdD~V2iP4 z9+(n%vlvVE0kxJe4t++Ml+f_W&(8+$jDgQ&Acjq0_JUjOpg9w8V_p-~+d#~kBdRG) z1$|JL0@~(8n+gUcB!p63JLD~1kkeQot$bZOqy^@nUCeq0Y3K$csQ@kE!EUU!f`*}< zK^mHy(6plX5FV1CDGB(Xf`4g=u78@Y6R7E4tl*dopU(qN#JPa4RDj+og6>Dym@Q~L zBsDi4F(Za>F=Ffkv~NFE7uHHfX(YqjxzNrMC@R3cC(uMMwD5#U>Ec*w0`9UXfKM#Z zLRw@3ax%E*SWr@g;uh$Ehxxgwpj(&3Nmm48x5q(i5tbGNyQ~dlfJhZiHLAx!0wB=Bj(@u0iw5{oL4!W8Y)5{-h?BHhfA)Lcyk z(3yWlp!@Xl^Pne~f%b2}24=xU6zzf>ROF#L859$Ua0U;a=qP0AD5T{irX#nzKqIsH zMU~LN1tsJ75(UVeO;9mVM1o4-+{6;l;Ci$v=+H0Fa4DFFYp0t6=tc?f0RXwhaD^y4 z!JsNYw{w6M7=p|NhZC4<1mc3-Q(RIM4d#JHhrn`%@H0xlj!P;{i#9fZi$SY*tm~wZ z%g}%#(EWI+P`^R51-!HFEKm=64&;-OWD^^f~ z?7zdd`wt?65(p?|8hGj!++-|IRmcFHhnEP73(yTlprsfX{WEAW2QH*Q!+4;g4>Z&d z_XCc|h89%dvNgX*frwp1Ncj;`sDg%&K&Lff?88PK7Y23H5gK&u(AyEP9$>U#ENHM0LBqqp21xWP>Qiv8DBnKQuexP3P zp!ONF0P=MP*WHnhvxyg_f7_ zvtB`mE`jc2@X5?e1<@gu1z;MkARrNR)l5lh5$FsgCD_eApcn-y2cK31-%1a%v!Jx3 zSR<)44LK1*sx8p5^(93)sd?zqD9%(;HPA|doK2LOSE32ks;gkAqhNq+CZsU~_L;hY zx{iXnt~#=LjXAify@G7kPc9;0dJYd zrU`B5JV*}=!`xDkSOjTp=_sgSTUl)ss|j%wMjHfX5{!nM1a=OJawKSl~5BJ zNG>lQpKeg?1xi?8-3qFp@>K&=$+d;W;1nsmP zP|$-g%Im^|o7 zY#|BDa2X(qII+d6m$RK}T@Wef6TQ;=02M!AA_9H<(Md;y|xv9At zLH@qr%bDUqBX6Yz@sQ)$ok70Pndh35nhWn_fl33c zI?*Qhpk{z#0?T=MF?kBQy1EJhMfvGPiMa}(Pyq)6SX2QXkBB@8b_BSEj}U{7G=NH# z+yV`(j*15Bi`4^NQ4kMW@~)$xq@)RQs)42gSPr~B0AVJ2Ee=+LybuWFAtb+nxETIJ z_7*6sDrl${Yg#F&rhpE$ODP7G9+1l*LD#=&f?F)uU7v~Ka-3?w(Fd{!IWxi2KUOD# zf*2gw;8+Jo0Q63*l*E!mO$Ge1K~5;)OgNw=PVT8C@krhSwGrb%?MP4+0~(|wTz6wc z0`&M4=)poosU=03sb#64UAgdE2Ne*W2ZbJJml-IgAP3hWIR_lRV6`B(!qXCRXoCV7 zCB#7j7;XZa0S;`ieIUya$%689fGZR=u$`p|cP%JlpyzsnU1g^L+f9m;&M~|KPe7oO z43b(jAjgnugZdK%n&8xh$jYGb0AUP+VEqD+IUxJN0ip`J`vZESj4Gr}kK#nMx(rWM z2EI2Bek~s?%1}HH8u~@LqXz9{gr zh6V#<;sUpGL9-K}V1#U&g&ZS~QTO8uFGN`giZ0mY3!s3*J>m^g3Br(?5bO=`ao^Ab zqOEzkU==S&6+H0uwG_Y;6yWhOP`?UVBZ5c2iXp>g;3bEyj0pSX{7!eV${BIrJNEE15$o{j?SS~ZlZGSIFK(4tFlAh;l=YEmF) zJ%K_(Llbp96DWYuZdd~eL7PtSpa+Ek=%xVBSQ2>aBwEJ_OHx-TE=hqMTn(+i!ONl` zNnHcdl-GwevXOH?cu)$FsxWNE+EGNPM{)_sBha8%fR862FZcxc29|$PP_hp+_aJwF zG3+I=Pyty64muQr3}V6l1vwRlu{k-l2)Y6lWC}@6M(OEN;$*l%XikPE6_D#uJ6uG> z1bN;9r#*7L0y>cjR62p&3&P+ePPnLokLRSMmLz88q=K%0f%IuW*A9XXM=k>2?}0Mg zgEEGPIY9$*21Y>#Ny(s8kJ85?x>|uO3N{2c9TjXrjmV_Tl45XU!2)#51d6F37k~l* zgfVJb@Y?CjVui#!h5Uk&%-qc4lFVd<)Z&uNT+k_Mh|8HlOL|Ll3&2aP6N`&Wb0OR8 z6H6ew=i&G0fcki#F=*&DJK!bF(7FdCrKtdMDYi}-Wa=4O9zqv1=cl2BIJ6dkjY@(- z5UL(lYJ=MGNUcMp^a(B*(Nx322An`Z0fgK!gw;@>b+h5V{sF<@sOIHT&P>ZoNljA# zi}7-Sx z{{BAk!QP$$pw;@wm;tN?bfYhWYOwfV6%Jb;g* zQ}9hpE&?4msgS7Pm!GE_oSj)vkP2G5o1U4U2Qei-KZl{ZmVr~@e?5b8W?phmX-X=C zQh9E2d}3)yzFvkBSc;d60Tct7c_kL{B?=6w6(y-fpvmtiLbeoBGY$*UHG;|?97?gKJq0A2z{v>Q zCj{Mgjm>*d+mv(^bPaVN+q|%bVJ%iqLQ^(&D-{?JxeJ@suw1Bsk_*9^46E{#)U?dJ zR0UP7VpUzOVg=P=P%=`@)MNnf0s)mOu+qn`G&c!aIzkH!@IWM}kOY?$431903{F9g ze$E~YA+Et848egxAqpWuj())k0si5xK?*+p?hHQu{s9c2L3IX47Z(QKP@fP6Uq@#K zU;i*yhTstYAXf$-e|Jx3hF}j*w-5#w&oBm0KNrs+SLYChfRLbgPe0EP24Bx$X9jSo z2D&7ss3cy20g{jzKuu@{7%v`6iC_(KrGf&)nF*%bY0CKDX*s&nB?w-yHVAm=rxOj#sD8SsS0CTT`0?5G%AZLLV!-4A!r0N8G zFA+o#y5bMQfs||zHiJuLUc7H=ZoFq+W{Cof<642niOr#L#@yvrW9aB=^Z2!^{ z1<<%M!pz{3L@)aEx z)eY|5Lu`gH86Z7B@MSOg$smWODlmWwF4bh!VlIZnq+*3M5Rn5S6w-3?^NSP|iVKTM zzy#P(}rDN)wAx6@m*P zRA8uMkgI|M=m<^l5eo{zp6-4M3YmFj@nCm?Tm`wg&j`dciceEehzD=^hnzzR<`);1 zCgznWfa3w=3Q&B2T%wShn5>XnT&lnT9+gkZ&(8s`-BT#e$S*1ZE$mPL?=1%}bOi-Z zVu^y5R!V*;=%&hGuo}0V{KOK_ErcnCW-v-iD>OX62qs``1Qs_oQhND5RsgLzP;k!A1+_61U<+dPK$Q%n`R4+vj50w@RdB-sECZV9PyiJI znTa`>Rgjh`=$J526C2TDO-%tS4lXT7ElSHN%`YuhP`6fBfLtkvMNUH#RT6BAOKNgX zBJ@D(%sd5W(D``a4TE5_L2X93(-d$z0eaW4BRJWF7K5rsP^(stAw9n&pCK8#N(ba; z4NV1bi&X(M7Uo-;Q<7Pbld1qd)CfF|>RM4ylv-SznV$!?A6&_Tua*S|4sI7X<|bvP zgM+|1Kd&UUq6BP#KQwj~)K!x~t0z>8)fJL6^7D&R^Yj>;GD{R3{ahHJuBZe#&n2@g z6J$B))V4%OV+52_Lcn+3rzj*AD4SXf z>hGoy1Ug+VHAMl`*#N~CC_Y^Cz(=wMmgbkFDrl%CYl0L*y_*V4$a$dCTuX`-K&28W zJ;Lw8VbH=b+%vB@GbL3)Ni`YNOM_+tkf9(ZX#b!u=nTT7RLJ@73VHc?phG@NQj5VS z+<>}%AjPo87-+?0Q9fved43T%M8Jrx0{R85I9YaEc979~=!ySYC zJpJ6`{rwbh$+)?pOSuLG`3GUq0u^_28|pO_sQyk(QGg$;0vb6`C`wJwEC#KT2aQO9 zMsiZ~N^?OAgG-Z36iV|zgMBWk$@wX%MWBXaNveWt9x@Nwzl3(w!Mz`a0c`oJfLcZ+ z@zACiq)Cq$Pa>uRfYREAalmb1WDdL~3~%UaF$TnsU?uY5UK*cP#+`saQ16C8MFG;}qof-O zOKYI!7(9uMrowno5Ww>uIlWK~&FWePa9lxJFW^h5K$RhABSC5&_yA-O6LcnS0leNX zPE7_iNENw2Bclq?!A{uFw{mJuW*Qa=24&Fn5GZ{iSEDKU`rw8Zxb>D_S^_zg4x|bq z46iB^lZqKYy(@;?{1k@V#AFah0n~{qN@W1`pK=o`KV%Am$j!w|<%$6#Z_U}wjm$l%MMYsV1H5X<12%HWsE;8Vijlgi*; z!r-3DV6DMmt;wKiZB<>H%Am=h0UF;@EmrV_+Y8#%k&>F0SejG9U<+z$APx6{hlcTu zoiQkAgBw5^SQTZafvPWTQlQSZf`S4zDQyF5tOJJF224TCTnz?Ig=z)pAQ*W4L5Tvm zC;&SitO7KzicqAWnqsYh)e2Ayfl4mWxrHT(C8^-P8nz}A1K4K_keL>S%rpjYx&o)V z)VvfBzo;m`h@qe;F+Det0W@LGP!4IVGoYOsb;sDg1%uizg z?;v5|Qc!>nID)%C#jsu->_)Mgde55MVN&yt1o{;G!1vk+B2cR?7GmF5}zeoyGQxt;pON)|0ov55th^e4y zDS&g;>7e+g^;4sJn%tdid+n;DGWs=49-QFCEy_#Na=5-fH*BD8Qk60hl~t^ z4wy~_UlXOs#h|Chz!mQ6tPlbkn$mzIcgNC_e9+FvWON^cRcR`esTOl_X*g>t7#SED zDJ16?R2F5XXOt*}xV+9Rw7x&00j zVW8H#4p=>SU@1)jbP{n&Y7uA(6|~+`hYMm;S!N2vB5Y1p00n&!_;Ld!&yY~v5QSiv zJ3*mTtghgmnwMIXn4=I-nv|27tl*QGoSIjhs-&j?8MXnf=uU*(qMQSf0tY!)evv{^ zYFcU$=r~!3!JuRe8plcjCnyDXJwr=F(Cyty!TxR`;h=#@(By8gf}4MkLU4eqtFs4a zfJMPE)Wy?Z!P(!%)6ZQYIK-R|t0u3Uc%di3A65h=*se0xaM`VF~f4m4bU|r9x09XlrVUjzU;Y zVoGLiW|4w#VoqvaepzvLrGf@bP!A#K5E`73T9j0jpP!womz=1{#l>K#XTkuU4*<2v z5Jeg|BosXJ5Gzpp^KvS=7(y~Yds%aG^2*TfkJ*!W;*D6I&d;921%xXYCG6OJxCQOzkn9Ef@QN)QwuPogc3NSyim509sZIT}uPfoLT|8>lvgG zF$)RKv~X@RD2srGdv!rKrh-(0JK>-;E5*>=*g;5(=|Np{*qRm4#6bq=5P{6R63~pk zh9-E94^(P^26jM(!d9K;m4fFY^V7iLq5vHZOa^DNnxc@J2U=rXtjNWHD0RUzIjUI1Qot1|=oSjFtY1E8Y6miI1*(_y zT{4TnV@FUIrKTuyF}P$FK}OWAV561A;NgnWypq%+&@t}}s#=-gYE8A+O4ZP?Siz~X zB(<1}p_l=Y)IcGL)F=fv?qGA!nRyDJz%ev1P*nvD1{UO`g35~EQt%NJX{9+im5N*p zzL~|KeyW0FQ98J(RIJFw#h{zPpsSmanp40~#!!}8l$2kb%8TT6xg_QhMPzeOR z?i=KYB!;|vT~MMgEnvuG0PVie&CkoJWJqR62N%~Rsk-I4$)L;6Qj5XvK*R#cu0hj} z=^h5~4o52mP>KfSNQLNp@RF+HSa4bcS!f7n87b)L>2ZOpVX#_o{pt(4;j09cMiOB` zZN&v@a43Msa&?PAo87?!;@~af&_oO}xEM453G*E26b)Lz_4N~BSXM@28KOb z85s_QF)~cq#>l|Tz`(%6pvka-0Ss6VFfcF_OkiL&n8?7eVJ-u+!U6^chQ$ml7gjT{ z1ngp9_;7%Mh2anbi-HUzLxCnEOMw|9gM%|8Q-Cug!vhaSwgf*$rVIXz3EPu??u z^}T}9AEERYDE$*k|AW%#=COQ$=;wmcf>2rvN~5cXnGX_Q$k4#B5X4|$V1U^NiZLdJ z1_!7xgB+4Miy0ai7DFYJki=P#)T<(iFJ)+8SPE6IjU>LDp@CsJRNM$E4zgDQVom}` z${Z$c#lXPH(BQxc5@cXtu!o5=FfjBnG=S8CFoW=8NH~C$MKLrqFflNI{on>w4-)rg zXaG@QEP#|Sx~+^ln+xk zN{@!XXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S0i7aZ9H z+3$Z2O5cFe8=&+qDE$aZzk$-rGf?^(ltxbt zpo7)YK*uv?=A|;gE_zZ{hAY$7)zVj0i>s-#u~W3Qx6+G-%ZxHcLtr!nMnhmU1V%$( zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1O_q$1eG{~T*I6~oEmrp3M7IZ zLzEd3EEpIV1RdhzTQq%t%-_zwk)6F{1aOA?c_z zF$JV@29yW(+5#}AI5jmJB((y}D@n}(dv61nS6-A^0#>>M#Lb2K=m40Tnwy*f_Rt9! zH@5&}(ghf|pc2Hr0p;fAmx0ZC0Oc2_fXr7gdHou0to&F zFux?R1le6XAc957iN&eO5Dy=K3xVxF0pmhK=K_oiQG5f&g@n!n7`M0p9JMc?{2WM3 ze}HoHkgWRw7lWACz%1kd%1e345FFFfhh5{N-k0I53x$fq}(2BQ-fY-Y+pXH6XyyI3Tg8I5j>f zH90;dH7(d6K9hmXGq1R$s5CbVSG_o-;Fu_WY$~>rsDU2)(2PU#HFmMDto z&1B5*pUH&b1G8yBQGRl2adEtFYH@L5dTKy&Zh&`kfT3}Gd|6_APG)gQd`V(D!wD9% z#FUiyw9K5;_>z3EI7nGQazG}-ITmw=LYzf24a%r2?LgaY*^6U3F_iA8ytdFcV($yE&ZnS)bHN(n^%wuI>;51~I#c0H^hRxUr5lr#U`FX`9@h*uaiSYqJ{=V@ciAg!B z*h~*FGz^J%^Yn3zck=i5&SaRuX_8rzUmTE}naMDZ)0ANqr&)1H5yL}Ha}d?YWx=q7 z%MzYqp(*kvHw(jqWo!%#ECy*ssj1-P6rZ04%D0($>BRv7$(anx*o+w-vY9aKU^jIG zsbSd9!NM?M0Vq|tR+JPaCYQvACFYc-#=8~e=YkUn)bQJEVD*r^1olU~Z)$FSQ6)SB zh9u>HG8e;Ic4mePQ4A~$3l@P=F3i~AlA_GKbaZnAk{LF!gH86#D^4vcfdmoUXcL$y z)a>;fu>4XSpP3h*l39e5Z-Nct1Hf5l3kNepLo_JSF9#*64bcn?Om4{~&WSlWXy%*3 zg`pPg;t0sk%qvMPLRSbEhAN!Q$;|KoWXFO{prYc#98h{{XaoBgnoFw~mT-d83^*s8 z=PWKM$}9*-PG-2u$->ak1k&(f35Z-U85I7>dHJBMeVa1}!uZO`!th`+NWP&TEMHuj z6p);p%`u3&VveASE9ru`)0)yJdn}Tvb?;7{ffS&^%BZ3458y@QMqR zw5EZ|*q2NUEDQ}(L6)W_XB2^){DBKms^l_E;AUZ%FbU+>Jce&v;7VXSH@Kk%O)ZzX zSy(1KWJM}BH*&)Y&a)uR6G4u?&<`RvOaNIF#W0^WHzPi^A~m_RBsD$*oa-5Wax;P2 zb4>9J_qlTuGxHd_cvu(?tYc%i5M^LsV6fpE;{^5wz7LEILI)TdBtNh`V7(yNAiIFG zfn@^If-Q^}xF#?z;JU!lAl1NifnVSO(*pJhj18;}Y#*2&un8DAJYZbFG=U{x0ZTwa zf%{)P$&zX-;!hVYx9e1%#Fe=C$fp#j3b1?3-r^8Z2k7uG=J)wm({6|95s z9ie=O4G?}jh|j{n@Bn%aRuPo{1IllO@>gtysGkAl?}74HL-|v-LFD&=_^b>J0ox(` zt5E&}C|{U|fq{>efuUhHMBW+7{~*Bxj_+a+pOb;Xfq@y!p9tkQK=~`6{0&h4HYi_! z38MZVh|kTyaKI75=jCN!;NxasxB%s=LHXC9{75MOE|lL3u28-Tlpg@)Ye4zYP`(b7p97Jl zz6q3H1?5{n`7Kbs4V2#xT<*$J9J)rzGP<|+szX8f$2IU`s@2S2IU9nLiBHj@)agRI)D#BA zS3w`d{FhL9hGq!=JB$zYFDnbgz5=L!g`oTeoe=d3Q2qlbUk}P}Xotw#LHPmD^xzBS z7kEPC^Pv0#TOjW1hw>Ys>gPlG0#NfegZT{%6QK3QF)*KjVFENg-GuTlK<$46(KaH z(fG&E_~+61H_`Zy(D)zF_R2Nk;FfddzFfi0JFfcSQFfcSSFfcSR zFfcSTFfg<*Ffg<-Ffg<+Ffg<;Ffep5Ffep7Ffep6Ffep8fZFE_4805t44^u!pMe29 zR6LP^fngE@1H)tn28JmN3=C5l7#OB8FfdGKU|^WRz`!t*fq`Kb0|Ucs1_p*X3=9l& z85kJmF)%R9XJBAhz`($;kb!{#R0l3*U|?9nz`(GSfq`Ke0|Ucy1_p)|3=9k_85kH= zF)%Q!W?*1g!@$6>mVtp`9RmZydIkoD4GatnB@7G64)>vswk{$3KBI0 zci9m`ZD28|sYs)3U}4MwH;}Lq+V~n+49gH3NZc4@@CmoSj3KUq4s(GA6u{bv7+nLY zGa+s?4XhN!CY%FmAf-f(a)OlN9_IwfnxljQ&LKFkQi$_VM&aV)ql|D5d4Xh&VWUvk z2e-gVz@tz^jBkMyo50M&IjRL#1vU~kgasP=!#S`8R!+>=7Dypv=ng(~g<>$qh!#Qv zd9?dg)wFuACEcc6%QWi!ZueLACEdS86S^6CmA0f51EYw$zaSwq6orf zAhA!_#>dB_%}An%K;~w_LXde`2opRj8y_DJo3w;XSHdPL+R53$*8fe}POr4HiyoeP>O1POrV2;)H(B2VSTLnos^(|_RUKoFytAs#XT7!Ps* zit?gV$i!tle9|hu7-mE<^6VaHFdjC~24R;lfa#1P2n}*(aY+$qo((Jxnn43GK$CSK z8a_)0;Xsvx=jA{mpi~Jq2s{%95`h^28r=o)L6dIr@Y%NbGPsK|rqbi%qkIev-9R(p zkYWxpxQjmEpOqDm3ChquMn*xYpkR#;E-gqcO3NwDFD;ID^$*5btN9q3f=%~KNzE(C zOv_A#PFvx$0qPpaWD;nm3^w@(oqNd2G&J$`4|9!o@eFcx4)OH&13S#n*gdr*9y0u2 zS&$l#3>LL;&o9XbyAL!m2QBy!WuT9d5!i9Ac`5M$MX3cv`N{E4Ir+)iSnLIxXK3u0 zk`fOo?KAW90u0e6FF>JZ6b}h1Lue}_JijQVIKVqO2`X&ik`K4cIX^cyF)sx@FaiRS zbF+et;)9LiA=ZM5yp(wVg4CkKlKi6L_~6ncY#|{mcRu+1&LSx*}z&XD(uO!~FD7`o!IT%AD*nvifDhXWi zxaO4w4%RsY~poC^*ifG=Udd4^_z}wI$zaYM-G$*wfG{uw|kOZFR!LQE< z-5UYP!G@49vrGm%JHMbf3*tmWB+G-#GfR>)Ai)ToTZSgD%z%JoSg;$xV;7&NVEXZ> zF*FDVErEc|wPA}oup2FdQWH}ks*(dNK-0INpa4r58agE=XO|XW%DOu{$EQ{#rxt+b zo0D=<4UHKvgiJ7n%rS*5FocYZA(oqgr#AfyisQpmGt)Clib29rK87aX>;q4i*gWQH zXr2#Gw*`qs#hH2OP~GPKr6mQWCGp|8`31#Lk0rSpnwNw5iKQj^kZJP_64gWUzLBwW zeqKr@Xc9LsF(=+7vnVyWB(p3P>~i8 z+vTp7DKL*fwHSlr0NVH`QV*m&3CYh+&5I96EG_{}vE)yOb2uQ)z8u_PlN>`Z7{0C^g# zax;+f;>zN9a03HFkB@0_VG-0~^W4n5+{6m7qoRCF415!_Q{w}Qvf|y6p|u|(!GhN> z#6zm}OjjdIkXt~x0o+uJ&x9|Z0jq;J4qW0vSJj}F(C7tiCT8828Q^VXh+a^D3b0~V zLsNKifE4i{>)gYleCTSSk6C#}W)3XLftqOGaP+ZE1#K0ZA;8ENV_J|5LPovV=jM|U9JWdQM!-G^crIJ}ZUE41=p zvmof^aa@O(HyO0Sgn@wp#78y*-R$`IQpgz#nR#jXVDnMkH|HP3ycDSWKzwvFkj)3B zlNVrfTpU9jvU@l2KqLsz1R(5W)ds4&0v(P*bq@ z6Qm(NJ|(dv5yXOEh(950FbOqJ3(R3)V1Sti@kzyq+yF|yAb%nh89>d0XGjK6 z$RXsR-iHf-{0S*Pd_4WUU0pn(vB}VY=FbL*KSiMq1(^fFFoR4O7#cwF3epGKz-bKS zUub4#-~jDAWnf^CU|?Vf=wb%11NWH9%^`-u&tn-{zf2JCA_6K0UN!Ty7qqrt$?0P>H`G_Ve+D8ya^s2!lR&Y%F=NyEqh zcS}xYQnI$To}pe!Wlm-i*qxyBTtH@l)ibDrcbXup53VdONzK)Bf@%TVrN+R(0CLZb zPG<0WeN8AI6uuw@vQWOmB4&oG>>!a*JQ@O{Aut*OqaiRF0;3@?8UmvsFd71*Aut*O zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UiCP1itw1Tlu$|aphlUhKU>k4m(#cFqnL1 zW?03*;_&lgB*TlQs~uN<@jtZU0CW5`eCm&qsD3Aj>epgX|0jRf%3tY>D}Tf@ zt^5|wyz+}b%gVpitSkRIGfw=^%z05>f%&S(UeO2+Mu(p(n5BMjG&t;(XJsfzc6cx{ zn4DyCu+(&9FtPv3T=>9&A;kVKW8ne^hLCG)3==t689p-p{~z*jGQ-YS{tQ2-ayk6$ zIK(jVML5IHjztU;U&J%~e0WnN0OY0z%%ZC0(L63p=Pdo;sO2R?=^-nGlYP|XNu2}I`JvqLcWl(km29|kO$0Ss~$2-uQCi^n8Faqu;mvs!zz%u z!ORYp@yraC51GYRt&3!s63onCsSw1lHJ(}Q^+RTckca>Oi(h4Pu-w0op)i4gA!Pq5 zhQh|*|3eONF-!!p7cww}C|-lOd3hwm6m|v%5s+E4BN?W=U}jjw`8VFe9^?kbhFJ-L z3|l~YG!zQWW(}a;>=a*oIpPaQ0 zlUIsyc3Uzs>~vsfm}u6>u+pBF;U@!cf3qx|uoh$FF3EpI`So{H$kU_~;_- z@GFslA!HXD!$e(129Xs^4wjsiQbL-njDhy4423Hh7((PHLgG!nma(ugks)L^8^c5< z1_qI8c7};1%np_vRZ>D6tc-#3nGA)=|Nn=~pTtn80HW&{3m^RZAJTD%Ay8hGp|JDc z|B(5M7z#TW76frJbU@;bS$q{J?93S(c5*N}?EDXnt8Yvkf>*PogBR2}Og@mokdak4T9zGPz9336*96GO;}#43{w(#8Md}DFoGXo+Sq+B9pcm>4D;qXL%9|QrhAE)DktxR@ zWY5TvZOqURRKqs;7ARe7Ocad((V7!QBTN}PW`W$q%)lU0%p}9TnTf%KkwK>Wkuvi{ zP`ZE2EWS#Gp&^JhVMfqX=9NXym}OQyXO>uH>d7#rL6Tt$2ZMv}UA-BHZDp7-PfE7fcR2?=x{^D>5;J zTxQ}BtjUrNZm4&dY!JaPg+ZDbUM|QmI{Z8YPHQr&Od}Ykh=J3Z%qpn}hAAL3kjn&6 zngjV8l*UYy`ihhiEW5{A6HdxX8f5Ffq{yVxKk0zCZuB$}=#0WDLIhpD)ch)DYL|?BNEVZ@;ao9Wngsp`E>=vpWkYsvW2&k^r^<$Xwm04sJsGR}g%lR=(`NGVw(h;ie^JCVD4<55lTpP|XP1pV=6Sb0DfVxEo!gUJ8=3_n5XN&@26RUkGOguU|MG>AHwyJvJ*7Dj6CF4@4QZz|yx^ zAw>OkD9ynHs>>G^2`e%LMnK*Cxtn1pF9U-}Bs;@Ikhu?-C09LU7F&gG{!?c0RbEg# z4hS)9L9PEpS3P2A2x4Yz2$FDRn8IMeV7iAn^2g6)ho8UpJN%r_%n!Z%C_JD3 z|1S=+18fF^gQfgWhC)Vhh7eHx1J#f6jMCW)nHfSpGmEeK&Mda-8?(f!3T6&Lsch+B zhkA#}4B-q@6vP9ab_PLEJgs12 z*g5t8e{oQHt@VZF5wTVI5cbN%X4JIyFN|Tz=l2XNZJ_Cl0V-cF4#@*K5Phpa=EXtS zD;*nA&3GHeFa^}^1*Q3fCP@Cuhw6`k=mG2ZgRoaR)}!jb3knO?hM*VWj4NY6?(k<= zxu6kZPOLbC$mJ|ia6PYh1Cj?|=~cv#A#htXBrSu&D6!As$3iZKEwKCnst;c5clasJ z3Q5C>Ob$OmVXq#S-N`12o}PNYHgTeQPZPK!JRhcQfPILHW3BNCuA@*33kl~`31#xTViT*pbQN(6-q)Eq+foE1_%2P(TQ z?;^@;Sh_d>P8ZUvzWcz^h4iW#22eapt@;EPlUh{{5?jqW5tL@Xiy@Uae&XP=lQjSm z=IG(*0S&_hK87u2z7VzB{UB;VWyuaUNIX1XmcUt-m_yBQ;K3|Q7BMsgIfL3Gpzs%k zw55L_wWV30WeK4+bRs)L$O>p1nuC>LA}6DRrB&&_8-&2!k|Ba)dz&;pw0 zW`#0Ld9V~U&q3ltV%7XmSbRvVY9S#$K>bVf_yEO)2~yqzg+T`s!_IyG|BHkAPg-IO zBB25eL81){ieTlGqW~l>o<3%s_=s6#6*J?4AeMxNphpr6Qyf?swuJFRP6x{~3>@a!jSLqxSs4QD8M(4S{XtHK2BDYL zj5{@J9VT;#a&~hvI_%VBWHaJqW!eE@i)wK)GVEmFboj~1;9v==JMB#w3RNV%szBo* zY(5NAKy6fz`yg!qgd2B)-1r;OzH^L*xD})p?iYoIp!FbiAiqRGGz8Uv)Pel+Ul?2-4wPROVDk&qjlm!{BKhT@A0+?6{L;(- zNn@TMb*v0quK7ab2g)zGSo{KWqXNi{NPby(RT$hJfcXVfJ}@&ZECR)is07251XhME z)2=|&43vK?vG@nsov+0irYIo!$r0NBQx%1jub{kx+$Sm&WthTX$*|=&Gs7w|5r`V_ z*eAn^A`VUl!57^OJH-`d1bt^*SOgmXKp!tz!N?HeJ&y~VUWpkm5vO2W;^a|C*u%yp z4(LJhe3&QZxI_hXTq1)9GA@zHgFY@H0Uei+K#WU7JN!f)mylTXoLOuYzbnI(1-iJ$ zB@XI<#w8@c;}TLV3=94xs)%xQ`(Y>F4zc9vE*%&c zMElcCmOvR^R6l!Sapdnu#NVKQi}OOesxC)3O7%Ma}teg*|I zOu5X?VDiA;;iq{pq77@sz#sy$M+B*TJRdryJei3@up$f62QmYh9|jF9pFm(dPCH5eIo zg2t^Dib2}B*v6kkMHr@l%Gw22|8LDgns?w}U=TqcV|>*NvFkH4*D9F(T#XIjvBoZT zhKUv{5p8pr{ot@?VhE{W;t-qxZKHk+Vwm#4nc?Sx0LCpZn1xp{)mBe_;Oy}8A+zYJ zZ$S)Ggu!7Vy6SciBD_K46knYgej>Z;t21bh1Tw~M!^p7nGqViBU5t%jcUdBhfg-!< zAatH)1~i_|1Tjoe@PWn?)J+ea9e!R4VwiFnG?wA)@N+wodqDFN=;4FXZ((c#+YgJE zS>Qg3^r|3FM4!|J!d}VvPZ(Ur!N%Dx2Qf@p!4DZ1s{xG@Ff;sY;DEHzf`t+N)TuYc z!0m&hw;(hq{6KNc%+Lg%!< zWoobljbF}z+MCb=Q6nzQAoAax;pd9Oj2A(D*cb8)Kc!h9Zu;Wx@RNhNA&Bz{q)j(j zjbk<_Ju$L6{&>;OvU0&;#*34J7^a9ZGz868V)*!ieZJJnOJjzgoDb#)y?npFNRx4X)XR8=oiDdH25G8Zne}o#+saHehKVm%Gp*#1ilPX<{A;X{E8QxZPOTV#kiSakgVZz{~t z5M;*C5EKBiL)ziziU`(g}*YeE=8KyK1uU=RWMKa8OvNE75XXnf#vlQ&ZM;&T(S|5hDlyol~U zZ&3ydkXhQ$xI#9|2Q98ZZUm(PP?~-m2q`~d{py8>884#eLDgN5yvZ%fFlB)cWPag= zvBOVLKlnww!_Jq{3_CR#Ik-3&g}Gl;Gwj4ymsLW?dYS_nrW`m9EhFO{euBn&Aa$AK zs*XTdT_(9IHxN;76H}MTFf?3()hDm2A$80vXNRA^n7F#lk>+Dy<@XC~ho39>7|cO+ z+rxZFdtkXc!;~M)4677a7`DLbeGX=DyB6FQ%0O<{qRnG9fZDZ;@jJK`W(2)vTv!y( z$ejhsH;_3_iPtCo!R9z6US~q*vm`+CS?mlGA7(@BZ-?3c=l@m?P}_DPL!qM#BYaL* z7->!y)UG{kO`kr>$^=MR4eO&UI0-3Nb=@%AwdK%0ipO$DyVi5LNQ5P0$E-ih63}+7 zIQM5J29ri+acCb!a@AvuK8pA%_hpc@_tcSLN`o*XxUa#1G>3WsscqXR1Zvxgdl&!x zZ~DUA;pYl&NW3a0Lc-M$7Or%TSH)O}{em$2q4E0C-QlObD#OPleufbFmkfmu_!&b$ zZBWK@5cM2^3{w~s5p8l%JJguvhxuns#QcqjBg4cDMurQ*h73DjG7GPI!7PG0mm|jz z!Ual?2{VFTGp~fFM=tREsth10nWrbYqwTni~bVk>St(ty~NY zBI1k;TV66bSiTSk&plXz=KdSG8AE$jv=g#|E7SpfByD5Jy9tIR*lOIZ;95{IT?QE(a- zUG;)ld=)n|y@J~6ps`iZyd(oN#DAbN6|_bGl7=B`1YrIGtq}nE3$!N6A^==2T~hc9 ziEEIbK;lLq_x%6Am4l(-63Bc|{*gCi*a=#S2xxx8{w+fxsNZS7k)d$m z&;KD)*cb}4e*O=c$j%^=$;J>^&%{vpnVECdnIHc{de|96LcaVkH~zw4`Xb!nC$7F+ zd6snWgF1)Fhy6iq8c4eq)Rz-ybodFW|HN0F@MoAZ1>A2DU$xdBQU8JZE1*6lXe}3L zEz2KH25_82V(DLj`gJeW9e!#uI_!Mq4jQ}W(&DOhn7m4itJ{;2VP_{h!^DWC3@hWI zYrJ6f;VgEBiIuDjTZr+)B!7k}4sWpgVY)x84i{flgX9Nd>Tp>7t;Ns~#Kp3r2-GLF zVrQ6WiKYGqwO2rOH+q|;wFFXc+!KQ2`Gnp7x0->*=NK6_fZ`fFX7rMw@ZnpAkgv=# zt3cx|pzzIr%7fO}f#$?O`Ssunh7eFWuz-!>;z2z~o>=7yDH|8u_z!O*ynu{-Z2*mz zytw`!vDO7`?2F<0{}8Q4ENukn7#O&X038DZwGm)rU=Ot*c6USVcKGvu>(YP!#jmk3 z2!hHKP+#HU-2Wj;fB%bv_~1T{JHtGyjLc+A=G08B8Rg>i|J(am+Lz=DuR) zT=kk+LQ7MWyBoAV$D7r`@->5kxmP2@LquFCW0#vKK(>(h9M+Wv}|d@`2>4U4DqX4001JFN50h=>30C{)OcO zuBHXx{=W@$tsiI&7A(Jl*2IAP`^$x43IizLqSmVvhBKtjfP^!o&H#loZ2c9;-a9S~ zQ$THQP&k9jBxZ(H513_ECH6wXG8MFjg^^)P8WV#ENF7M75!xS*1IhU?Yz2ua_CwNO zq$^|$2{eZX_FJ^W&pi?hQy8u?Y=Nb#{VtHar|=1p_fXQ+N2I)m-ah{TYJX$Ndr0je zh<_pNA&`G%SQ##Y+dRx-s}?}*2Kl!Ty7mQ>u3s=A*0%j&WY_}AKcKn=lxH}gYihI< zLF*muq3a!GUL)2!%De`xca&vf5Yggvu=H}aFo)@D{0~~gEVC*RI!+?!$}lCtiD4_K z{6ZclT?`!`1+7&Et$lTLWC#Jd8PtXWg&U~NjI16s#|csg>YISp$b#0q!p2oWYhFS6 z5xCmN* zoxzN>t~ZmRu=)M}5c#DHg>RT3W5Ns|{z8Vrhn9$Of8_P98e9w^+1EIUp1)}Zwa->E z6oT3rpfF*0^FL$O=_4xDO6g>AKrxZv*p5Kvv7aQAktenud1BDZN?zvb-$a}+a4g6C)$86=^7Sy3!~ zS;L5&6dQF7d4J!NELF=ortubd|2wA;@6FfeNKCTCvV?|$Mt_#X@ zUl|G)T=*X%pUYU-C=E$xpgBC`y!?WfA%uH7CpgZCF}D&q?UJ}gJo6@M+DLGMq>ayx zxYGuQ0wis4Dv*~p*ySN_Gc$kPM9!>~D;^Cw)dGT;u z2oevTwhU7ayhoiEN6w=U-+|`EA$b&3wu18JOlTMkMEHZsEzsN>Jp8{h6lyXw1ZgOq zn8nF(=n^Nx(@z|XoLww49ez1({T~9V6F}{;-^^0rb=4sEXF5UFkAwONpz#M|<{zLn z!y7U+DE)xPnb7KaSRWnKr-Aj+L46v~S}f#tq?Z%J z6p-81K;;30%aI7W%?9^{uXl1ObqNqAdOl9l120=OM2vg#nz zZcsYWfR2kltJ^ujbD_l47nH2sdAS_5oO&PtDW}pMFzbtIXj`J=oiKR4 zN9Q|X@OqD5%#z^#XfcyCw=gqC}))f@SBcVQ{$SQwFhA9c4F>nS3krPY~pgo2c zKq(jcTQ16s2p zY?N6C*}DyDr&!&DteeVUV-SS2VHkG)hxXHu>qie(hLG0*#P_ExLHk>nrBcrkKcr_IQb| zDuntQR3AM>>N_Yw_cWuAKL~^Rp=kSjL3@8eX$%xEpm36Abolvzfk9+t7Fzzl3`rxk zc9{7eR!@6ugy#Q^ko=EaPlMKF5>ro`SuspG&;dDn09P4supLweK z5{Jwif!Yp{jhORB86piq^2{7r3QzurEKG%zU!nGpJazzS+z`4x7+i)C+z*VhKU@+i z|4V}NKWJMGW;HXs$_^ ziNPcTOTQ6R&U1mwd37^LUlCHyL;8x4a=z!^fANZo|4rnT844M%{tp4wQ=swL16qvW za~>MB7(+ni@4|oo#UFt8;7P9%<75zluq9RrgV@Y6tJv&e>m_AY{jdYGS2k{elmW1P z#O>O`gG#LW2~oESv@YWzRO}0q*fR)wrQ;@4b4sD+yx?Z|X`=$&BX$sy z*1mEuh=Asqg_%2Mb=JuTgW5D8^Y1~-0^4-~!d}_99@X4<4~8iIMgc2*^yB`5k*9cD~vJY4_SQG8Bdig3d4yUUkS0yf=H*17_h>TOjO}jB6lf!otJZ z1G0tbUg9Yi14i~NfkA?%e4=b-xSgge6&(77L=c-jM9E9`Iv65k#i zh&Ix}^ANYERzmt6kD?uZBKNl@b1+OttnFT8QK=l;t%oEsLDCo=+FVLC*h85s70a>6m0a(_FGq5vETzCrN zMs&A5WtLi%%>ik{Gzc?nfw^ZJ)IAT7>MBrw$rHMlMFV+l5?Xs3R0rVhFG0sn!Snf$ zIWAD03))8m8UvaEwHMSM2928%-TwaZKLlh3s80{t?+B%2;QCm6)ipPUDIqWan}X_1 zAJAN}zr#;(9^DG@b80*!PoSq!LoS9X4(yQpBh1tgB+Rg;C~ONv&-GY{9#N$I6|i*z zpnSq5jJkIMWVQzb!%hZq&{{09Rmk}i)Rz(Cg5(8o8!g=7C;Fb?hkyQuAn(zh3ObW1 z3(@`nt=om{36@+n%Z*{mEe23KUUF4EG~7XX85G8#FaYIg*cmgR{SB9p!X$Amq%1n^ z#xNzplwpfh!i=C_%`1yQZ3s{qS_Z9`q#0HRf#MNlulRwbL7~PBCdSST6G3YaUNCcL zX^3-lb8sTghykVTZEg%x4j6&P@*9Fc?KjZc3(&YOXv}jz6G!#|(3)Jqc#Ew6>d?7) z$eJ?Hm{U9>C#(WjTP(tpTqoV0irkWInW<2Fdr%;PF?Gn?UYy{Qo~Bi;+PDv>pv~ju`U3CQzRow9g*AE)BXLO6wp) zV7w|r;R+^(5E*E`p2N;C5!6m1rAz>=7XXD7`eJPaWc%+f|6^5Dh4}jEhW;-%7gj6tSm~*hp3$0*gF#W-9 zU@pN9aR(@U{$SNGj{u1=OM%^X_WytJ2v!Yq3q}L8hR^pcX1g*>kvCujpGODcPY3Zs z7z-D&g4_+!13E*3lVODr2O}r<$^Y|%Ufy3&1acDx$Zi%6GmdI$AqhqXu=!j6{}<1Z5rU zlHy|K(vm;OP^iM`P{qO65M;^RAq9&2hzl0x^6WB2ii`{)58NGoGBPw=dc-Wb>H#PX zFv}WovM^kfXW)D#!8k+ev%AC3jDPVK@>`+jwXJ0+WaNa{&A`cU(ebk&cn;&7HNzC@ z*UgYNlonF`qyRc!iiP1~<9mp`8?0et)ee@RwI>QJ3?ZQL%m>U2A;@_PU)W}V_Vd8j z&5$(a#emf3WdQeiKf6QDydg9`pbc6lWCIx=29=kf^XFjWEe5WzHEE)&L|q~EBdDAP zm5ZP<+LF=XCunR9RMtWGkbQBW`UOU=&!pe~d z(E6^+|F@ch#uq?yQ_LJ%@bvZWe@F(n4KKNBfi<`<25y^ny!|h}`H>)aJRdTzD!j@K zv`6{>|E-`lEvT;yYMX%8a6-!#5AAP=B(0e>wS zrc7jI5COI4r!#`u%hIc=A?ASRMos?y7cZ@VmnVn5mcUn>aYwkNF9c}o{<&0 zo{_--R*#9S0>u}o&H&Y8pgFq*pn3+S9+QIXrv}$OQsDj6$n{tixE{ka2ekf43$$hn zx&|B6?_hw}XHu_Mfb4;q>G|(}$YpSSCJe66kozj2HPaxsf!qjkALv|+07eE8E{296 z5762!h6bV6%wntFFmtWS6?L%CWMvTaVr3BA&&ZLT`2T-M7wF8UBOKtl%TCaFCW@M~ zITaZug2perSQ##A1~OcXcZKXLi??Jb1g!}-Zj9gYxteh&Xs$I|-oZkH(_yF1!FY>$ zMxJcYnVrUr4m&~e(cBCZLF0rz%np_yIY&l@kZ$d{LD>uoin3Hs%{s-vU~bHcP|Lw6 zF9dGKFfs^%_NIZ_>hfP13PE#L#Y~b$ATvQ{OL{Oi1aYt|C<5(OZD3>w@c^9@2IV)h zGlV<>^+kh0`%|S>fzIV&W?4|g!q5<;5AFj=uR3@dQtq@_fzRB4uPp}6&B5Z1{5e)= zc?XU=NP8SKh6bO9KMt`w-3l@n59(8Z$~@3no6;-{6HhWQh&*Ov5JdI^=u81yW5|3D z!wd$~&()6Lz0#oc4I0M;l`Ek6I#Bz43es6W%q|R54v3?+BSCw)LHla z2ilf=;|wXIz-EHSj$vgW1IjsH9rcJazNFql#;`ir5#!)5xEKUM@$ygzF&7n#HW%eR zlLK7#(0b0;bDJPIUBlO($wSJQTNapO(eU+We}uqu#xMT}f#-~2YnWl{&l;HttUqIx zST)&%VG8IRUC>F2gb%52Kz#(zo)S=<<0;PB z{fdu45VRKnv_ISiOTQoFHc&bPxec~PB-5E;N&^ctox%2EGfS{NDimv*=3>&MH zT=f>j2Ccubgw=mit2kH~M83X->_G;NwS(r2+n{EF_Ta$k8^z_2^aDC$4b;bjo%^zg zjbVxc7sD3Vd2eEt41w2|LevT~ED93B(QmXs+S?8?57cJ_nGG731f6RPGrtRDK4{)6 z9=tB+=St?8J3!|nfzClXX~{4}f`tKk?i=X5GI8+y*<)t0RiLw(szG`g8Mdqd>0xEK zxPn=72PnQl>s>TNIl4ty9e#q-M6kn84Nixjnw$+gMHo4|L1_^Ee7J`{|A&Cihl|XH zoE`Qaw0@`p8qd)Eq)E`T!@f8%Ot}p$OKv(r$`Vle!xq<|GvRiD`X7@Wc6xx$Nrd*< z8RrOs=l+jAgv1Rfj6iFEm^)S!u`nzOy2i{fzO#SL3{JKSRE|0{)?MI&WD7wJGeMOXGKEV9iX$cK>LNc z8dd~pGID{>&f-*r>`UTQWZ22+2xU7m?3B`U_<0r74`OH#dQr`|^MSX+Penb*_{TaY zhA9es3?`s?3+Y;i$)Umw;4=nc@}O~~El%KZq{1ysvu4d=W4IV9?_jY|4m8FrvC4_D zAt)Up|8a?wLltN|6_ma}=>as~(#XURQpUs~cn5k$Y$V9O1W3Aqq$lxJ2~M!_CGl0R z(DVcgE7&{>XfEYDbbZ+iF^+CehK3-{h80DcKluegV@o10A@vjT91AEu4t7K8;5G}$ zz9sZM$exT06z)OBzgO~LJH-ApnEikLZ+*e!US2TOTPhC&U7h9F_lj#;4k4|L8ssQd$;FAg1} z0G%-ono~nQD_b12R?r+$4uZxLKyw1HGsa~c8Kzv50ge00tYUOT)US__>Zr${z19p3 zmxARTEE18*ViremS^Y5uS{8%Kz=g?>^y~@^FM7x6!gz@NsxbRuahl6mn25BF4ZZKM z+L8l2Rz*x12%7UH_YC{Y5Y&8`uosfPPMc!pOV}Cq9J3+$l5;jBUqbSv40zv)BQw(Z z^{_J-6lMfHWn2h7zg}`xt0BXb1=^6d2d;j@LM>3-P8S7 zhQdTiNFHPigv99vs9TWtvT^+XkEmy8kPjdH|1S>Chi@4RABy1ad!E*Sj&&fN9{@T# z091CP@0(FYD&L)$A!eeN?=qlqH!OV_P(KEAMm=~gwP8h(*H3wHe%m@*VTM5+fs<2q5?ka^%J zcF>(YnCBKeoCBHXgxxhU)t+I>0(R7T05YyDvuc(-!;~xFewNItdgyv8P6tnY^PTSOUI0vin>VF~J+g8D_w3JpO|m_=8W zF)&O4&C5+QfXF{m2JfYS_fJ865AgZDjF2;XLHa>+T`>J=3=C5e{{7zy+D8Gp>)^n5 z_LvvJ4nG+j8UBLCWg-1{nN>*)4MB?L3{zq_!0TaFCLDp-mt(>(Wd(E850Ku>LZJvy zpVpp{<27hp5ws@cKQrgVztyfQzxcbX{1)!K@<+VW%3tY@EC1vl1K%+PTARec&~WLl zDP$}F#6J4`zc`4#fh2Yc!d`i>4`MHDd^^&fVaf{bhMqes_ z(DgJ5dm-iQp8x;FL1(HxU=~@m0-}Evh&>C!UU{$sY8G@|jix=r6dTYQBY%dK2~aaY zYkdA6X1w?(pK;}{bf%R*;+a=|3ujsR#h-QM-)gp%f14R6eqm-^^^KW%)mLVwRiBv| zS9QoR2$jn)2z4?jbJ;Vp6uva>lmg8)vPe2q*)X<9f!ypM%CKcdyoAt9c?O~TYz&2< z{V&@X8Nltyhs?sOj6rGq|NpHE7#Kw6vojPb@G^w_;bSme!Q`+rL*$1!=xpklpmWvY zB!qS|IqY1)=I|4w?gcx;&qfx85D7=fSbj#m!{nFj4nIL-8>n;A!mFh08Ky7@GHjXs z|Gx=1Z!k+h`qiwEa~42n;Dg8W8RK`HX5!-VVif19XJjaJ5Dc$+2Y!^F*%%_z<_pOK+30qO?t#`qugj2y2)Zt!Mw z_z7Zz+|bFyuv3PM!35-v+nkVb18inL;9vloox>=>mCYy#H9HdQKU`*O)S`wd2P?zH zQ~&>qZ)1Yobp`4ZfZ`CewvB;}Vav4t|IMc{G3*4%PhTq)WBiU@MhUJSMoF&yj0}Yh zf)KaoG{*m!4-JY)!%Bjm0$c_ zSAGk3S@|R0dF8KkrV1kIs=%B&OKLJ^=nc`w8neu_3QOl072 z__=T%q~EIwy))?%`22drd61I-|4%=l1!)t)&QZR`3d#S$j0_tbpliM2O(1K%5||ja zYBMm1fa~bl5VO(EJn9A+A7lFee>$knKcLRA1!j&f)Eoz9hArT{$n?WJ!-!!g==_0B zF^8X;XyXE)d4ABiKs+Pz8Nm!F<4yBOh|F7U&GN*SFcR&l?moSi;+G(vW+#Ky81H#Yp#86*D0E z=F$v1;rCZ%GeGXIGG;*BU-d-*W!|767E+F$F=7DUU&Sd8xxdPSp&>|yeFo(IDr-m^ zOw(EjdK9C_hv!UIJjPbjK4zGFG0p%LGyf|`Q&Htz6e91 z;-CK^AV047{U58@4}Sd*(J};`SpvJG4YD>HW-jQ=65jv+#X(^**@$81Z)V9=pm2G? zECF7Rmm$v4oyiWmcWncBJ)I{z!$c|QdO8kv20`So0fmF(eMC68(K#GuC^_r|r3DH2 zI&}$@wYcDQ>d>%&tiOeX1!SG06nJgMsek{)JB%E5g7)k_{Qf^gn3)59N85252Jkty zpuMvk^$wFEb7Ru0&e||ck@)r>d~f3>8-^)6m>hPl`Tt*B7&O){?(h>-HoufZv?mpq z7(z5abH&M^^?Z=_XsrpulwgjApwG+|v8)Zq=1U^XSNQus zBp9?WHGTKWAMuPUzlAfc{Nm5N@^3ZE%D>Ev6F)PvuKL2vvg#`{^Qv#mOsl>#Gp+)K z$pdD_RR?Ssz~^p)$|BI5(<5fFRiHBI3A4zmr_92uYXAP94%!ng$qrfX$G{-jjZIzg z-~ZDUm>ITke2BL|UZVp#_ZzhS$>HDs5YYN3(EWShGjB8*3K#$VAHtDQfuf%I?|<Kp$2ho3#J`R9Mg-)fhYU;Ld{ehYV6`6J$O<*)Rk;I{n#X6B23@;O%iO6Oep zBc5yJw{Y&2U;KGi{;lR+`PZ3wA}CHg1R(Y8ie~8jtfCBsiTn&955yUMif}mm{IAaN zGx3xFxK07Jn_F!drZ5OW&R*Vn5+V-DYZ3`Ff_^ZsERs@~5%jBZVG$_K#T6ZPUgu{p zkr8$HIn$Y8;%{d0RiO1epnFe2^NB?^ko!~{_!+iTL)(5Ym?gpOPf!~Nw6_J+_G|d} zKZFaqo&=KS#lUqZB+ZL~>rPOam}vw$dlI4_G~WbT^8vaO6I}m-%O(k=^^jsn>mkKn zgVsZW_Md>(-h$f5Vyp}oLGA_hU8Zp{Y&pQjaMAIQ0C;Y}*N9;Xc-#hbR->ZB&JJk( z4?cTI+~KFDD84p;6w*Bd(Dj|*HUMOOCu}VJ;Xa66Mxb$M@E&CcOV~Yn3qk7@nHao5 zXEB5Bj{xnZ;MmwH#Zf9Jq`}DH%~4xF`IR!`M9<8O3Q#zDW@=Qx!dw&@<_w?zZ8$AM^YJl`khBsLTSLE6vE6?Qw9v)XUii zDnV|3t;{%)o3(y(HsgUxABKh?dq(c;j)NUiFQ*@2`*^BW&WjrH8 zVJ{0q$TM+=pC@`4c6NfzW+>ET?2xkOWGGB#VF>ZCWf0P4We5b>;}e-(F`tnmJD0Ij zN}H3R@Fg=th*xBGMLbxnS4x|gq0oVuAp})zuaveZLt!%$Lx`pzL!eJ&CfE#3#$G9y z-VDZ0sTbl5J9!uwL_lu2-@~vIG|mkY1JR)V56EpG_Df|ZO;COQR-9pH2dJDCX4okX znxA862s**hu(N}Sqx*ga!_F?ohM?EZj1w&xT7m=^W(0j;Tv)`%&=SPQv7pFbp&{r6 zKf_PZ8loTW9YH@B7Zkk|cK8WuQT_zL(G3?U~J9CohYVlV-%$2u+I@H6uu!^AhtoZxZ*v<|DMkzpceEiGt2crRn@4tr+Z zEYRBI-p1G;`x!;R`M8%c4$KDS;||979i4&>JG&Y|cL#7}docFQ5@B@s338t>LxWHr z=ssCThKaA4IlybaKyd)FBO7`?S}$Y#j{S@R;C$NK7!NiVbmw3%qr*>-eW13wA_Id+ zHnfinT5FuZ$`GQ%7`vmFk&ml~QCbMp4{MQhr~;j5rqdYvV?Lt@xPPj{7zbv9`(cdn zJG2BHc4{{=Oa!I7493n`ptDUtZC21Y7H77jl_XMn#5cG&rXfx#469VotD20MWE*O|PqhurVHnv)?!o>@4% z;?N8!m^lys{tx-hq##(9FB5#A&SCOS(B4sQ$avcyWrm-i^OJvwJNy*0cKG?Iu4Xc* z&A7*kVajxHyH#w}LMw(T;@J*6pD|0U618UdDP7I56FJTPV3t`0OUr+h9e%F3WZo^3 z$*}T7hQm&ARtCZA84No+isXB=h?4>;ED4|No1F z=DJ@?JN(RKWY`IcW6=4Lpfm6se*6#dWQ^bOpHVXlw7$=?G5&`=qX@W8@nm%P31Wld z7<9Mr3u%X+puHF`?HP7*GcxRqVRZPp2{fj}EVJsxa>tdh{57AM99~t_Ha{T25gxL=+ z{tw}{VweItmsN{V(EE+B!%lDBGg4VAd8Ff684A6b7(&kUH0%VGxjB_N6~3$tg6lXL z0`=J#1Pz231phNK6bfvcC?!xPC-jj~z&rnDVa0z&p6pYMT~cdV83OmSG8Fdw`yZmo z$mIQG=}k=nQxUmE5pYZ%)G03fBX;OWo5XyuGV4Fd0npA?{_+A{%7RO z)<4)U^?`}cTb_-fu>0Tt5J859paZoIlMh-r{8SKN=my29Asd6BJ(ECo!{7fQ%mN2j zJY?nvx0hKM8ZJF%W?IGc|NoXp%q(EB90mqUMHYra&{$F`3&X|7%&e=HFgRGwS7CtM zx!u43zH|F2vx?S!35Ft29ssGE|A!G=ZhiRwU;Gg(Xw3)1Dg_3Io$)LTg$=9>A@U5& z*_x~jA)YZ3LS8ZqLfR}2KXYpwCim1hOn$+{uq9iRw>#UBVPenA>dPR%XEXA2Co`~c z*E29=CowaGDwWsuo9j1D_>8F{#R7`dS1KVIN+C!3K2ZqMU?|3erU8iYXl{xgHdW0+R{N@rgA zBc5gDw{X^#U;Not{;g(T`S&p6M2-fBo$|a4g^X^Xvy>UYcj$KTIqd+|Tb)S^JM9@5 z3OxlHg3MSurDm}?{5;{xU;?VQWE5ru{Xwdm9#%lw0Q{AZwE3#8dh$zVaV^c4)t9}Q zxw^A?LFc*(n15$u5Cr8-Pu%ny*rrqhI*-^&o9i9t9~-`ulgp=uoL8m40(o$p!Nc%jDrQ}{9pS`rwNgA?^Xi*+c$@AO=f@ zDWG_Og&Qc%fX-+L)ebNNg~v~3##M@m0^oUhTYZpP$yG453R(M0n7cu7%OF8w+{QxeRM2Ob0<#Yk#-MWvjKO=mq*sCNT?VxaKx4tbnK@T!{f)PX z|H)W*hJhg@UX`H`)Q*d9WGDo+IY8xCJhUAb|CbS5mab%Uu(bclSonsSAp~^KDrj#C zD84~^Q{)*KL{>1d1%c)RK>6=Qox^0%IcNCej{_Wkp!;nz*%>ZsF*;a+?01p$ta{C? zrIjtoAe18MPz5@NO_P=3;*bCT#qIwx7lO{5wg1al=*YkjvX&JzZ@~K+G-kSpk>fNd z?m+1W7GF~=7^b`j-(@QbkB0;X29fx;421`o7(zhh4RTonYM(JNF@%81oE-3YJE)z< zfYQ!`ls%l_b{?qg0hLkn8984&P4uX8{s$W4VgsEiwbKoppEy>5<|4d#9V}13Q3s!G zt;xzz2s&r?*T4Vbh`1761{}+dqDWH98T8!~K zyczkpycng0KyyGYk`7g%Gyz%v!+^9OgW)x3KgRX{|HVP>1nsj!aVLL6kckB-4Ua$39C6Ti49G8_@fgrPOz?P&DnlXYj6i7y(QZ)MNpyzPW0&+mZb!<$JPccE z*cmSF=VJH>+S3MVZ!ETI)GF4mpF?66aukv-@?lVmoit^c1%H2Wb7LkI^$!zC|qv2IUZ z#~+~b)|(N0uiZs$Mvm^Bzws9HYZ<|Nhvq}?uLhM>D;OBIC@^w#KVs%M4XS6-%o(P5 zh>LYI^g8@_%D^y1UIDUSk%NKDC_|ZHr#OSK5wbr(brQ%gwV-l=-Qg!EE5pQ0c7~rk zj0~3B6&VFV_l1Mz>p^#DM1kDK@AyNDmEocnGs91vkMb6v@w0=x3?bXO8-m0I78E%! zgZ2!Gtg2*$?BDpt%&-bH{|DM13@Uq(?LNrO5R$3nurpB;5`LZB3?_cc3>UM+9DaI1 z=g7eAK30ap1zZdv-i`4)<}+)9`(&_rTu{H;n-wyr3+j`-<7fEk0oohM%5X7Tmtl$n z2g4TFo_|ms3OXx66M9y{LRE;p$ZaO%x)hOzxCyqCK=Gxh3^5OMR)LQ$!xWgkp!4Mv zKx1jlh%*FH!hx9~1T^LXn%9(KWtjM#S!&gbNAVWl*%&T@)*r+AwV?Lq38X$RXw2jR zv)HPsx(rjqSQsY$XA%Rqg$^-Eod&IE1*L~aX5h89LCE$!l!dsnoS9)KD4oK}QBKgg zh2o%d3nj8wyab&^B)p1|p&@9-kN?v_^REuzyFNr#{jGLi`NiLD<+pIxl|SNLR{lzN zUil~AY2|-r$e29HJkUC5&^mljTy}Fb1cCO>f!YS3aTL(F6X-6MMNAAKy{rzFx&Ot@ zJehu&zhUOo@)70f?qzh?xgT^N6(gvgW-{t!WZ2oO=&*AwBa>0DBE!yJM=0BoVW%c9 zgP;%itVPc36@UMSWNz7yr-9c=1~}5jJY*uH>7c2}WjbV^J66ow38(oGe57-#CfbRAIjkW)+c3%0#-)ZHy zaL1MZnW1y-#takxOEXk*hC`vQHB*o2kjx{GRV*Wq4Bn*i9ryTpA}soegvui3{@|}(GY}7 z{S=0VAQ6WJMGw6pVFc3m6sm8^C*1Ztgx1d>^*3Sa8F1U9=miNIkovPapnG)wZ#4ng z-LRs_Q4JCwAh}~Y3{x6D{@laj%vz)aS?dhiD=)%0RSH))5*jA}t#i7P12GqTP6qSJBG8=D zA8SGI{=je6f)P_~Aa}JrWENTV&6Huv0|thzp!*6z`vX9CVu8dzm_qLTu3&Q5d4u_f z`46Ta=Ab+xVaTu(BF12n!RGK2a_$-Gd?={z4?6b@bbbYB-z{W*2-4Su%nw24RX}Ag ze19pk$g0bx;Bxa4sILnu8zAd-L{^{~aP=F9@sYt_sW+`oVPH+je;(ftU%216Ka4F>3*ZqZe$YLNXv3E%&3 z0fhl<{RQ|OQRw;$#gG3(s+lFcXaD_gy7B*iaZq@H>MKI^3Ze7{8<%=0hkaa1LkH5H z1GV=-a~54}pz{T11ifTjSY*k_@WGssMG$oMG`P>jAOP-jf$B$CJMJO_gNTIG5A#>d z5?W@WT-~=nIjlUzFDM!(zk<+1A*2{fYxEa@*?j2U)<)~#UeM}gL@ zfcsIV+z+i`mh1+t;cYw*$>#>z;Ju#Udy5*+LBzDRA?+Z0ZsfkGM&M3Z8Z@s_36lR0 zxf}1qL5M$KeYOKykTT3nlVJ*I?+z#~L2cm|%nGZ-8Kt^UJc_rt#>Q~*I~&79a$-=x69COIK0F8sJ3B3gDIouFF#a%$fQo_4d&n%Y${Z@!@&CU$$lV7IL;SXgp&>}u z1e|9Ik1$330;PSB`#|yYh*^BqTVsYP2lvC=ExJlo3p#hs$go8mDh{&q1;Y{x?yAX92%3XUU}6Y40h+t* zWhex-3Bhh*mRJP}FJ{m_{eS;WLH!btUeFj6XfEzPlPI_^0=fem=I;H*3{w)g9DY9B z19AJ(Kal;zkC;VPf%Yh~Ff;_M`|^MK0$zqK3@Qv04{nFJ?X4!m6wp0)4vY+2%%EZ* z|9LR}Fk8UJ0KRYL2~5rZ|69TL;eqZPVqge~0<9BfgzQCyi7(`02!YkbE13>hn#nQ< zY2+f-NODeP1DB~?3=9I=nHd&doZQ_GjPln&da$jL)L2N~8p({+koeYQXbgG@8h;Rh zq~&G}NPP_2-)0HALz;aiWPRi(0dTuX^OHb?Ib+AH9iJfK2MS|QJ#EP>#yyjX!Gw`P z3|dc%uX@ZZ0;#7NKzkR(Ry}8ySY@LEIe!{7o&&3&!Fv~>^)qPig(b6?_szfmO;>>O z4I=~i%zIE-3R;T|5@TZEI1O6+3yND$WAHhSL8yHp!u>>0K6`1zFy&AFu9d&i8CU*@ zXIl9!oO$IJf0mVht65k6b!MFSpIP7{sLjanMgY9-cSW=0kN@cmJO39m?PPeukpG}r zXzhb$!L<*X1=c=j=3o1unQ!fbX5O_Ant9efXy#tKh?&9UH+0QC=qw4)nqg3QJ!FEM z`Fmmoq@H4AbXfb4S!69JOh9QEG*%2MFCH>7giL=7S$Dcy6VzsAnD~g9Ya*z<0&1Ir z((P4dhA9ge8B9RuNQ!~l2%t5spz)MBkodJ=Xbk!RieFYp{BmnBOaZO`_^i+Hb25{I z<$NXvOPG0}^QS;&9$<#7F`LZ9V9CJDU;=8hh%hu7eMmv9w_};-{B`HKCb&o%znY=v_qbip^%${A>^Aj!_P0u z3_pb#8ZJpOfckX}mwqHMT>PfQa1oS_I_kD?Nij-s7qc-;e8JSPv!03L^(tnD5JqN) zpAVS1CO$L*`HySjQzOtG0IrEISsQ{lGZiX8_b@P47XJXLIS*9>3WL>J3{ya36d>_O zhgl~+WR_X=Sc_rGi^Hy#EB^d9d2pC@;-kro6G7u$9@>!d}FyJ`373w26l_cD#lrmc-(2kFy*_t!%qed&>m8eRS#Jkf^VQ#|Vw~*BKZ@I&^x2JopwA zy(nhbsWA~!MuYlKFU%Q!g4&s&Z~*0v0#Mv7W(4i)0Q*;Q0z_>D7XLn!h4}Z82KGGm zhlycIgA8u}eqlo7mjoFG(-nP?bjrYZ!1lr723wAc4nJNpb4}E^$nXO_tQn;sb|1!J z_gyCNIk7my`YMv$4H68d8Ql+MwI5CUzAcEW9+mP&DAi`k!BHdvpC=X_{Fob~e-ioT?AF%jV?0|&H4?{$H1J&=K{Q{u1 zte|>FgaxyFn+x*40E6i?9A(v1s2iq%?ivtaFa_u7bV#1&2Cdz0gQPQfcr1j5$3o2T zSjY zWVZtcgDGf@D=1&QT+BETIo~lhKUB`Dv4^4g% zQ#c0+^FTF*DIoWO{227_zj!dT%?+vRq*lS|I#y`71%uk%C;ywCD1f9>V)8C%?g5l` zuc%{p^E*a{DGk5=o8q$j86%|J0NJf@^uH;n9)#tc7tGRHVjpWS!@>!aR~)%O{WXzQ zGqON+kmRau>X7mZ;wO<+kC-LEVRZp&?g35)Q;^(rXx;&pi!gs5hpL$l$~PPgro~F2 zJzK)Bzc5R!0@WRkfBuJblta=AEbnj#I{bVQ%=i=LCRjVAkrfhmlW>H?8b*dG4xj#; zeq$C{1rG~#&|D279u`C00}6`-UIx<_B~ZIzdFLUt41I{D4CRK{UxaKw)O=8TriT&H zMhXGdA;G9=reO~x%^Xo>m~#B@e{oP49Q})wW}s%l!ma|ztqdFtrXFZ%hGF3WNSV8^ z0i(7cu%L46vP{%-$UuQ`V3P*^~7s^{Ox{FTTU8u{s*M}cxetpLr@IEf+A55NH|+CGF<3n za@e_&iNRz#XzZ7vA!rv9!WH!hw4u%FH zdsc=*&DQx+k_-(&R!Hu!WQVL>vuBh9ue}Ai12l&Tng@Zo0d(#%%nhKi1JFKhn7tsi zFgrnJfy@Ev1-Xxd^@lmg9iVfYK9t#pVafp(hAq|X429kT3?VPX#JbVl{!ta;_6NL} zZqMLlFu~^b1w63zb-4F{p}YM$%$`60w}Q$fkUJG0K=Mf*-{;#@MC8XgqCk0!0DuC`;B{3~DL+t^%3$)*c<1xGW&qx2wK=V_7 z@ti5};1VQHyQ(lu0kv5{^NatRL2FQ1R{lz7UHK!PZRNLc_LX1!IadCy=3M#LnQ7u@ zX699o_!)kJ)I^%7@PqoY601z~A#)<2v+!@R zIs62T^NM6z&z{NzUf&@I8Z+%sV%XWiEO}abJKX36gQEK3UsW~uJ)Oj55w`@HPq89q9K&bAe5*a;es1)nYX=YL2E6N_L6mk76H zp=_{1y~E^-dJIz-m>_$gZ?ZZ3%-|C4X8Krr8MM~#njY+&ILTGJ^%$mr%mIx;>$MLySW>g3i}w2F;Co zuKeQfvGQBE`^q2jZYzJKyRQ6`@3QiLGi2RBz8=Gr|ILgSv5faU2cVrB%z!NMXIg@&NH?;-0I7BDbu5o2fw`pm+xrG$y$C+I91(AZ_tzyH(0 z^&@nAlaZMr1XSN_f5b4+NtI!WC=0{HMfwmwf!c1MJOrxCqyPV(4oYhYObn(wm>ewk z!^dqzSHZ?GgP>}5FfmvvFfy2e&eYN1fs`L+42?nGlo?hkltRqzR0fT4h^<1;8~>Xj zbNL`M6!jRUytm$#`_`B-_q8@t?n`Cn+&}ra^9ARVSwWz@5D+L3!N6pH?Z3Ih#sAGR z;4!opfsp*MqFM9@c&<#8p^$MpQwV7P`a^BTohKL?f;bvL<2?+kqo0$zj8uVvKA0@Yif z^?{)KG3PT&gYRm6&%hvZNA`#LOJ*4@F;UL$lS~dfL3LWA3~0_yY*l8{ft8$03|lzC z>k_5GYZ5_bc!AdBGBH5cASb68d~v%vT9dw$~sn+-c#&mkU? zc5f*`#;7ypAp7`1=d;1j|FwaPQ@^wkh_GVp0M8+V&i)16QO3wD+5O1eVWN|R)I?Cd z1s|VIm=W}pd1cWvX3160ts!mbNpg^Q0qx}ng+nH@2Y4_4g1`SmGT9+)&>ASv8Nk7R zA$$2H7#c1~u!F{HC01?z#s?n92c5HVM;UTX^{?d)KVj(>)D}XHU(j00mpI}VycP^2 zej)1!An^-XM*xan(A*hhjz@UaK4pd}pmq@`UXksd&E&B2#cFVy|ED$d3=alohAmu3 zXLx|xnV|ix3d{^4-iq-S+5hd$AZ_kBEv+(Muv$B8yO~A2{KM(sK06?ukr^r9avXyK9D-$8 z(%?OZb95M{Jji3(0%{k4@{$;%!_TC8&>e$fs}|}oOxX?HYuKj4Fy+O1ho91n4m+PR zi>!j#|E=5MC&&$tE<)S@vQt!);is@6Xg?q%?Sa~LAhSXDQoLZ62A>zPLX4xEg^^+B z*L;VcGFPGJOb}y*y0GfXSwI96y{-6FJj>!}jW}rED#s)|o z0NT5EQHf#7W+nzp4iQKgylr>*`I4D;)gxxv2X=(shgAr@ zOQCvKK-ImhM(91t3(=dv$^c$};8+RK=c>#w7ev)NnC6>;&z};9_Lhsln*5^VMvJpPq~kJ2e3zw+Z@zm*S) zL1#@Hm_M8B@Dr4OLFE>5d1c1HAOb4i(dBPgr^fl}j17|8Ldc1)WX9 zoOSRHuje!T1m*c(-3&iL?X*A4f~!7*_A)UGtoqH&zv>4w->UDRJyz=- zem+x~Hg7U{(X7N?;m?c)dXO>>|0jytm)kkKTRiHZfSGU7Y zbUz&Z4>>~-=7+6rOs1f67vwLPA2jM6CWFeQdS=ONj?4c;+87u_K>2hslgw#Nb_T%= zafhET(;0qh);dg<5asMh$W0$*7^Xb9%&;><-{EIvu)|J!c80l`LaJ2FfJt(63=MF7>E)yWJKudy){g2pH^n&WqX&cFtRPXcrN4^Y_yGIJhi zz01Gn#fc(k9$^q^#{Z0mjvGl4=ZH6h9;PuebtMarNro3G4 z@Y6C7a<&(U{WTdB#|$DMwy7?|PqRdZogB;!K^oy2vt<|=e!jZwuv26uqoyz?!%hu$ z20@KLP?}?yz~Sg*d4iF_^u#wv_`l?C2;yX9sN@u6sNiH}sN^(csNm#esN@V}sNm#f zsN^hUsNfW2sN|f;P+|57qUSfW*s2qUOinYcWSj^pi$MMFhxw3kKdnFir-RC=1y)R^ zFD8TAA3I;E2d@O}^L>5UVW);7w=^itgYJL=rFpLp5Hmeg9W+5>O`43{+#ae7nm^MW zexjG7iN!wb2((TZRL2#w zF$mT(NoOx&VF&^3RgGuV0q@@rX8B?Mnps#&Ta>#yo7LgxY9@v)ZObr?$;Xs|A(w&bodEkgVwWw?8vTjm<%$jo>@5i z#Gn5mptC|>GfS@moh8uA>tOlzpSn3{eLAQP2d!lT)t#X8035g-ekLB^1FvTjdkzVY z-{5*q8l2Bq9?TAU!o0fZDYMwBoOl1HKbX((^YdhepY==(g>RG@Lte~x__;!vaqIud z%sc-tX5Jax-LMm6CSwSstV(?XF%wi4F*7ZI)|;z~Ucdf7{Qx`Ue!Zmlh06tAFmv?bF0OrZFV6leGuZOpI}6n3yPsX%vUSlne;Y0t~> z6O_I(m>G70?k)r6VUPO^CZPU1Cuc*DRx6~vS+2!7`*{ zhKbLF7$?4WVwm{h6T?K1-Jm|2AXh_>!&gY(``7pRLBD?QFFM885X8l@pvdtigPj$?J14}l#ysd|_zPk?fY|L2wgQOV3}G{X*!2+hgBaGB2h|Yv0T8~r`5>cfN1BLtP*pgay5R|A#Zpgo2283n;@ZPo%~aJ!fj+%CSw z%pd|L(0{z$~!} zlm@|dEHwRr(p-{ALlBd~f}+RbA)2so|5xm}QUSCdirHc3OD+bJY|uIpX#Wtr*OZfC z3lFq!2x_B%$|+DEuYr>x1auxrJOk{^6VQ1i+^<1%3XtgJr3-*=vd8Q_QKp@B8Q{UM0rLI zO9-29qC6wR&d;kIepWC!{FD(F?QURp*!j@hVWOgg)I>df#|HTkGWH`4_M{6ZwMNL0=Ypi>4*7C&>1V0@KcP?Bw8OFahmH z0@({1TY%XG9;@Sljn(Pn9IH!UXSg^y6XH(L7)`xAWSocT|AZ;e+;h!2AO$TOjMSA>$;V^RqsuLhOXBFBV>vD392y2eK1%$1!LQ z4m6(midkkAXdH3%FMZgU33v~-CIf>ANG)=BfX;IS?Rf*uvvfhvq0oe$Q46|9vjIMi zqmOqS2Xy{LXLjZeO-2!JdqsvqEry05PsNi`S_TcEJ88I7W;#@X?yRh50*xEUtn%h` zu=M^1cb_20E>JnyCm3KREH2uez~}fQBo5+d(7dvwJY)_I7Pe;?8-jRP78LP<@*~5N zB9OnZr7;eE)HJpw8e%3a-a%<>0el>klr$!?>Wdu1l!o8`w_1A#c_*uLR}eN+u3Ljcn=QFU%aP7-}6R7i%y~ zIq;rw3ux^rsQm;wXDaDc^<_{zRA?|v31)(u~V|$>v8c<)uMwH>Fr6I#kP(1^R$2aSpSAxqLP?=xrFu6;dtJ{;2VW;;- zhL!QqHrLDbkTaq{?qA2LU&msrD33Db7^Z;kyg_yYavJGiW-xJJ!k$Jz=@VR^C_>f(fXZW7IziMY4B+}? zIU{O${${zuPSE-R1ryZr{2jlCd4@h@Z_#WSh`pdTFlZkHs2&5Iv$;S9GR~OwA2vS? z-9rN1PXgMz3_5RfjyOkm2Y=j-DeMkEUoHmqPdT$0H5fuTL>hwbGje2s?nmi!H-Oj8 z9E={89PSJzU#vmnV|UKoeUX0gVT=y*!}0>7X&h z{+m$yk?mIa^M9)q=-z2@(e4F&jz5BpA?X{GR}RWT>TD54h7T||!rD5ZJPF!^-T^uf zS{BKzj)=TMjXbhImSGCWjVSg)`)3?d5PLy&_yI0RdPT3lAArhI@cB2m>u*>&x>ArK z5MMc3A;~bMK?+fhg37=h&~j7~T8`Q?b7X_op~BL!DKm%QiY)2i&(LyIQJrB5!!blT z3c8C{3EU4AUZtkaFy*Hpt~?&=@*;^p=kk>cR*<|gAl`L~g3nSA%l2saA2N%HK?GFJezA7=xrW2S9JH@d{w+hH50{2HXsz&PW(h6OoCxS_ z|Hl20bl0lJFvS71{%AeujuwZVCM-Y9xuN$nUtxiae}mRUi#jq)%d%Uro>)8Z$!(WZyQV?!mQhn}N~c=fd3(yVKMdroik1ouvXg8y_@2wq+MY z9x^8@vI?}03$%wDqy|*hg4_YRryDe;zzI65YAHkELT-i-P`H5egQ#$~CTQ${mEod1 zBj@YJAOAxZfcB0+`{ys2CA2{6z&JqXkT7$+ZscMJnE}3Q8rp{Ab+BB04YdsT^7p?u zXp90BhM=>9K=q^JR!DuLAj2>Pbe9+`&%o*sP+o=Aa~jBN5zy*w&^Qa^TzW{@f#Nov z5qG`axDjG6lMJHX2K9kJ^)=`|MNs<|)OH2M8;7WHH^`sz3>>c$fBg@MgWP`^1Z#Vm z8Zztz<-d2#BC9~@23y-RHsHQ6M%xBbzC+qJkn$b0uNTx7NL&H2 zdneRx(3vja`~X^G3p&penigQ;Q_sxt8gwpEHTeEW=~ao#Ao^Fr^#A(56?9%?2eZRY z&^e@>0t<>XdzrxHSpx$@2-s}USz{6mAq~<`f0;V}23v`cZc zjj;QJ5y>BnaDRa2ofKFYCNe&Q*dGD2ALx;$UWz+m#y9K3!AKBovO&-X}x_FOwyg3>#vOaQfkKyeGYtMzl;PxCL# z5?aQfb48(Pj8jyk+r*J!BB%_NU}X4^z|JtSaWbTgQ&olJ4Pj$Yxhf1US7Bu$DE-6A z*9OpjWR*O#EPvOx0%OBo6inHfSlm>}mEfzmkWZU)ev6VM%Q zpgrs`_b~QD+{38KFh$-NwEo1w5_Cs9>$Np~t)zhGG z1=YLAW$6n%Whr=F7e+Y&ISUw4PKbchm*b>F| zPL2Q&=AHN;8KQ<`1MkEK@enrX?r5-^GMIOAG%)Yv5a65mAQ~#?3^i*8^G=QezKIXQ zq2lIH@eRy7IWF)`pIXYN&ax7rk$r-@3lcS6eJSWJZ!}#+= zDI~pfSTO#~D20lka(!}yZ}rsf3W&lQDGHCGsat~ksK zUeCwzfbl0sA=I2Vj6Y8lK-T$j{9ybE+E>l+hw-mQ0n|Jerk@NPOn*=0L)8c{{mjUR znkmEdQzIX$PJ`*^3+T8rhY8cq6?stg4op8i@}TN{n0|ux2XHK5*;$~>Fy;Br|KbnM zJN|q)xp^lu7c!Mw z!vY5elNXDfcV>Xr`@d#nh3})LYqMCupww`(nhJ&Nqu#z;-Q zua-Of^z3Zd$uG(~>AoKeEo14MR0?n1f%mU4o8#030{oLSr z_I11tmLR(s|Nakw&9{U4&JTWr?g|iH_0d^i<@;`ipP=?HBPVFRyEu4GT;R+9=?&(L zrWvp22fcW|zvu)L2REqSo59QwlCa1Lx(-BSRlW$r6nPGY!mrFStGZpUj@1s z;0-e(Y|lv5AZ>F`sUmEj_&Z2)S! z$Vfuk1qr;6FSW0A70v>fbOz z+6dm9pfeXCZ3J$HhM?c95O;(0gYG>5rC)nS?rhLm$i0g37P|yx5LGxSoxn(3_bd0Hsbv>Mn z3>P$7q4S=tkUWE4R<3~N6HvZLU}gwG&reDnko*KXZy0QzE7Uw!hMgas16FDfYv%? z)G=%U)zOR$vx1rxA!q(1PJ`6lta}B(c7f~%tyKc0S=jn1*{A=fH`Fj}`9B|W{>cC7 z4A8PwY9i-GhKZ28B{mU!&fj8zl@_{?dSJ?Ah}n_~GlG6HE-X3+I!Elh&`CDx=To2WT%pXdf47UlMelWa7gDNc&>FIJjT9 zGvoh%b8wz8WZ2mOy7wE$9)$&koiwgzaF$l;VEcs9)p8r z{ddMf4|zx%P7^wQti;$c3sN?Tf$MXbPyeSYWHXq8)OLzZk$S-_wum4R}OJm@Sf z&^hj)v$R0<2IG_uJJDKi4uk z{9Fqi=K$5GpnL$Td)9&LOm^tHKpv!ZfjrES3CU7W_0)ox~BtlmMyGY0NK?88n0wz2!X6Y6o=Zyfn*m4 z*e=jr!=SN!(E13_dFeUebK?0??gL`@|33sW&d&ipFC8+@&jCI!9dzGbJToLLLFu=Q z$>Aq@I(_)+e+Veuzvgz_8O6jPGMyW=7e*XBPK}=5mM(zgMf)fJr!&MdY!MfMsg+nI ztjI9M;opDoymc|N!_LplKg^4f#vnu>+H0mF_JypXa2Jbuc+ z@Dp_AFzAe84o1%I7togS8*W0+WP=I~MJ1VhMIXTFIG zm^iv&Vfs#||Bf)2mcY|EC~Zowf~E0XsQ*fs87vbHFqk5{;m})1 z7=z47{_ubLgM*lEXgmmUgEbyEgn-kM(IMIum2C>Jjf7eugOrT3=&()PzWm9VeLoQnTi>VkiDw*3=AU1zuC>v z&7RDBz%m1Bwg$*-P8RSO8YyO{FffR8!1lp1GlU?!gG047C}aKlB9J>kcU#LcFo@K1 za#+IMxxPOrgAuYf7I{DIA`blKfbLO-nQ>AYGX4hJPkR8`mthkDoek zY*WDJK4v8GfzN%+OyY~MhVG}G!X(N)g_*&mky#XJKdtnt$Lk$_sxUMJvBLM$impme zgw*r<_!*`g;A8;T>7cp2SLO~Ay&Q!mdNO*z{Rrw)EByT*;>qd(-fQc~!4NWqN!0tw zpZ}(yv}9rdNlQhbyIXLC4L1X#Z{R6{>R*RiNS;3>4Dm1W{^3%#$zcD!h=Ta{Wfa1{ z#Z02ylZo{2^GJw)n?U|$BGJE$3?ao#qTZMP{5J*V50IbD|Nj>U(IEy9zpwcV;jjAp zUmP^{;nCl)ljERvH)qG>AWcS&(^(ypgFF~HPTMmweB{{JIg0~&?`j1j2X}lw=>BQP zouG53-m-$vXbYOMm|@~i6G%9L#wtPK2kH-i&eklFW0>-Lvh&VqOb$Q6;|c5xfm0SS zOaz_ta0)sX1L{M7+RhzJaXU`@`)|U;DB%sdd+ycW{~=EQ{+m5!X7UErU!b#eLFXrF zzW+bH;qQNwugnaqHvRf94k^#YCO%}A0-x<5EXFV;l%pZ&D>K8&1<*0GIAO?m?6P0~ z#s8dl{29va@Y934VP`}?1NgkT(@hK^*LWa)*v!Py{gV?C&*F>>8>I9g;-LLDG7A|l zax_No0L@Q==DnYZK+ap(&m{c1i33yyimn2=vl!%WW`0r9{DPdQe{qHb)Aw%L!^1XwNsI zJ_7kka+S3R!xT^*jR{tB$<;KfU2QBu+qmC7)ma#YI8=Nzl0T zum9qpwkD{q?Od3|(P`HV$nk>RFMVy6UBGV2?cth+E2iNgy-a+d4gboJN z&rA-M|3PP0fcvuI@OpAFRLy5521}5A4DAfyaaGVc&K$asvmZcvy0g0)cCL8=8LO`{ zuht8!^ghfm(d#mZ&A-xHnPH-rF^J8# z5_ET#S1^dpyV5(EVWL+th|ROodosgBug@Sh_eyVO#))3Sj1yn2=UQpb&=Mq}FeB&( zOlK=X(D=NrBDRg2rP_85)9M zVxT!;hFXS@>ZaHqAa_6Hgrr4Y5%Ap(TR1^yX_$h}3K!+pFlE>YO4Ei63?d-43ppTa znM4?-fX;jXs|Ae@GKz9*STgKbcuwASWyPhMfb%d&QWZ3zl+u zJN)d2sy+A(Vr~Mm+Dxe0Oop8=k{y1wK-D&Wg{TchR+|e|o6E5CMZCk$N|@R&kZ|xq zR$B;FTgb5UMYO}uJgC~l&k*<83q#hkg3{4}xBnqwR|?fr%CPfAxWmsx(0#*;9e%!= z?C=wGH!rCESk2B5;>hgq6Vm?`n+U7pLE{uNL3^*k{cf>|?x6WM1_n!yc88sx7c;DU z(Fw^zpg9Z24oDsWjpb&`Fii1)&c$jla&(h3X0b3BQct}Ug49!wocSh#?v{DT45_1- z-$LprhhU^SiWxLsfvBT?y@99!)lm#V45qMk|DgW7h8?7il3;8Ky3Ps7JD~ajR5yf) za(ACnVwkAS=&)0sSv!k?5wfQclsB(6F-!!_d4cK&=Kudg?lUro+_C;)4mu|blt(?8 z8A4t%%dGmz$gq`*q2UsUeVPe!Kdm>Df;nitDo8)5?dcE2=!e;5E{C7hYz!AyKIQ@UnLuUmi|q_QH4+_uyxh+?QR5^3 z5AeDCe;Erw_o0IN$Dr{d(0!KwFSA-cTFeTaPm%=J`Rm{OpPt~&U<&F7g4QU5#(+R` zJQfcj=`f0+AxKJKK@q4O2pSu5&IjEcB)JMS76&@d3U+?SQ)cm1C+_^84jLnpWMP=t z@bCXtP#A;KnTW!Spf8LIi>69|&dL*A^>Dqz&tFgfPY2Z-3wJ@%@Lxg5d1=V|*r4Mk z;5}?8>-EsuV4(RHE%3OB2vYqD2|q~v3JE_@SV^)nTvPy!6>fvrdmm~qXe}dXoY$UN z`n7{PLkRfn)US+%pgnhxKBm;fdO-%udPatw#z=k46^slaJTsZWZ4JymCW9rS-^u_! zV+l0Z1v_J@33SGiAOqrzB}RswpgtuiZParzSZ09xk__;3mN-{K;sn+&WDtSW1q}kY z`$;Q4@`C$?D?jo^fX-P0ooNd4C#bIkK5K~qxo;?iwQu;GS$vfR58^%mNS{z@q9-Hh zJPOWi&{<2KtPnQjtR+!z*jY=UGzD6>nz$Mg-u;4*J_2lS@dIWC_J7Zz=0LF6-qr~jubSTJk>G8Tg7c|d1XcthJlR?xiLz{PMeaXKXI zZV5p4ErQB0(AizkHNRlLp{y4Lt@(wnIS0)-p^U+T(-v{-q8Cnv*t6d}VCn00>uCF0=S_v0}Wr8$=sYk!VP7P)bZf0HvK~R{0&+lNC zUUg_Qq>Qk9{eSub8PI&9F!=rlrp=K00yKtc1UfT9n!yxQufgg@P&o-Y%L}r$UnaZb z`2P@4I~r70Hugf&%@hHKDG9IsL(X}C_K{J_=$HQy`>N2(=okN?`$M347QC+*e;IwS z6Jl?f0HkgJE-N-nxN08y;LD0STDGT`+QWo(srYz=*XXJPd>Nl=n;_wEQO$x1!e-u*|@PYC= z=w2HRM#LE{D^Bu*+rXrp(V}6)!*}A4#%YF?j1wQaH`wY*F-+Od#!#qz|8Iym=q^F` z1GXFtYI0w=8-gAz7Fb!zVKcKT=m^e;ztYn-B znm?@OYS?)rtJ>mzmbFEuki*Vz%b8ZLoCQfwFP1Z|1odscE@oKyU@_}NP@f3YE@X6V z2vV8>iN8mZ3{!4oSzGMNvb2z2z){%5!VvOvvjfKYi_fytPG}M@N?oJa-cCQkbLzkNInT;X0QacJs6l6OusS9tODHy?Gfy- zvp5NK2P#K4Xspir+y9Uy@BWK>6hQKfDMMq>S7nBk4mTlwTg3;uGbI#!XNu-dUc{X# zBA_;^=&Jwb4io=3%S`-Rjs48hm&(q$ueF_W-x@pSzPCP=bAUPi8mMf4{r|r>$gYkY zh`pe45_E*{)-ob<_npHSMdr!)(3;~_J4jbdu8HPh}%Ac+QrU%6Z<3?rieN= z1by{qSjiv@>4QT0Y7(pd@-s{U-5dG+#Anp1?(Ei0+ zh@MrTKH_}{du8H9sQ$&Eb|mY>JW0^{g9b}bzreHsJRbOyp$p=#C_aWMkUpEts#_5K zt3Y!yXCUmAjOQU{eS!KVT9RSPdfHk?lRXVB4M9>Y4MAp65P8s?K1dBHExeI{oTm&rAN)U) z=xa?Dh7izM@t|{%UNDP;*YMagYi7L^pD$(2D6RE_nPZhaqv-3EptXa4<1OreG8Ud; zU>C*hLG2IF*p~fY=0eb!NcMjj3qf~Q$}@|<2DM2aF-e>T$$PRggv1Lnd`w~h z^(`e<88I-3cz*@eYuu-KxEU_KW#(Q5YP<9ZGF)6M$ndd&nIWW))xq-qU*^IDMuw0+ zMhF|UkE8Enyah-cwEm~>A%qP&6B=}$>nv6VOPE?vT{nx7!4jr^;lKYOvp&jO!1OHq z^FL(PLwO5OnHA5-{dyrILx=>UG#6;@;13^Uoc_n>|0bX?U-0>V$RZ|j_&w7e5)4y7 zd)`3(ZIHV`=l8@jioOP&9qIiy-lG05Gx+QttB>*)KmY$1FXaNALEW%(ArnXUBR@zx z3p5r0D(4wrLe6haU}P`_wFN+TD}&BBc;N_13$VNY9;|}oLvvoxIm)2>#@tqZ@poPM zE!<`0k9g;mztWvn{>gV-`TsEFJmnwpdsd>~z5IolX%*~jX$}U5pD&mgwv;V%SZU5E zb{drCRw^+}oWjNsxPlF|UX*hc2NS~w2Rtv5C+srZ%bQaW!Cf*3pI+GR5Qa?T)W;R;D02#x1BhD~oK@udq zKx=-rLHB_$Ldw3U;tW%M7c)%!EYGmBEEQ6(7Yj2?ykZSeKS#JBNc1;E96T?@EVAm4 zIOL3e&>grxn8jB8FJk)m(`e2tP<;j&KagCtR~&TDkaV}aAcN&^(E3$o(N#yp8Ky`u zOLl)}l6;-`?|;ZOCaG=*#)hDS;-EMb1Fuv1CC)JA8WTe|Xr80v&wtYce<6177H62^ zkOWBsAV2(KV3@MtAB4X}9CX(gv(XEAhMnKCA?mM~Lfk(~xFHDSzpq~);xIp)7KfB0 zpfwaAKg=&?`Z&{g7K$Hwu=rsz)DLr*VSW$?`(Xl-A5NnA;Q@49vrC*|%7F}sn?Zg! z$pAX{1j26y$>l=w0!Z!<1H+UDzajh@afT@z?;+~SSQ^0Rh>Jqig384_kUQT&{0ll` z93+-0&M@W5TZo^(f$CXi(N!tp3{!&NLd^N*54zt=bXB}K!;}+mpz4$%Vo~A@Q#{_F znine0Fr_0Ga_&0JjsTFl*HH7Idc8sBy+YON23pJb3e^rrP@KI)Rc8YVgRc_PFJ z2GIiwk2(g1DGJ{pd<$?`i-7N^uKJvb5Q18k0)e9*l)!cresJ% z^nk<{WJBEeT#RAL2`Pvgs5p2|;33GITu3;9#1BBtxeZz?4^33Dequq z#S|t;SgYMg2!Ng$lg3ZBFzLBAjQ~AU!O-7k6m6;B|K=)XJ##umZ1kkt( zs0{(C*Fk=p2l5*eLpO{Ma@%(%28elo|C|115;k@Q`M(*GHXe)OzeDK%VVR5Hn3-37W@cLTotY8bCIzLD z6`qJR!XV=Cvr(yGr*Z_eZOYORqykEF@(e#`Dmmi`>X;fjf|?i>6fF*d z#N`tPh7U*o%@2C|dw-D|LqiZ7(}JSop%A%y&mimbyJ8_`fX-Y1?cX`c@WULmpErt~ zK`@?KG8?q^ay~PI$gN_~y*pA`HR593(?RE+GdWmtFiIMM;vICiD@eUZy~E@TagJ_# zW~uBIfB%O}WM&ZQWCope%*!Ru$e*3V#ta zk%NUNXicDkJ4F9SX314?ObjBOp#4D#ko`kzI2l4RIT8DXcm)|kI+6Gc77QVtpfh)& z`;88mGlXO!>31|@2;upbZw~So%+H`RCVw+CuaZFXHzyW<&qVU~2}X#&9iVAo0waS6 zCnGEP%r^}ghLCT}T&q?vFbJHg&a429nZ9BcTLl_7<@pqjW@%QlH~A)E{?aCrrNh7j<6EjEbygBlDWJ#XaA|1k5c`pwL}>L;@VIK6yh=38|J z;zlrkAB4RU@m;wq5VNQpiWlRp1 z^-K(w;52ccVI`=~1&2FoW3V1@gZb$p4K&KR|YZ&uEre1+iCr6|9W?pbb%f zQ42yRs6)~Q<27#Z{3)zVXjX@WE2zAHl^w9MWVseZZr^T5de1U~nBmOCAOb4?7F_!u zBG1T{-6+Hm;&V+O8qSC`{QI}$#6QgJt0W^9dCk1)6&GrGeVYqbc8I~tj%=j(dI5_sX316eIT@y$(tx;W-bP3m zvP0bh3u9QAgWUF*S$Y*LUJjms_+f!0ME^t?h#x;NORoCFz#www6uUX-tO!sVhPn4A zGxMr_XzpE)#l7|-3{%WNWyWvGiIBdE^r|hK3{$d{A$HlVfw*s4H6Z`VK>fEA>OWze{=0x27ofF^{R|8up!2pt^LL=IJG0N;{IU>( z$q6QIE)Ed}Gi`>3Akdi=Jp25?`5;(>!31>Q*9mooEngqAXnxjb*qJFV20kmvlu`V& zg=9m}=f?~aLE|WyN(>V-*ueXh0zWfzuIf-l9!C*<4H-uPt@99FwMG~+j`G9bRTC7J zpfK%|f%p*?)&e|`IQYl~p&QsC{#M)ui6>YZTg(pe{}Tp=3$Szui|gZD5V?D^Az{@e z1To{Qy2H-xfB%c0+2)Q>&;DkXTP24UPyAToX+CJ(4z%vlfaMpceL|cJQ?&RYcKu_P zUe(S9aRR=$a&*6Xn!U%->Ns}ptaDDHUU56-WnlLp5Ul;m|P~#(S3l;;pZP_##K%X3?e6( zEVMjUv73R)ERenvObkKQjAB}n%p6*v@?j^$|KPH1HG~Z=e?j~3ZG;)7fZFOS{z2TN z`48e&Ey0di;5u(L!%EONHK@)@_ydt!$pJdIT4ohI|C&4O1f|2p4A4A{rK~Ra4lzIQ z8-#xF31U{`LP!|F!i@PdBn+{oNl;lmp8<64C}JPKI4i@&2W$)zwK*Yu&;@J^TRN2- zc7puo`TxHOsBh9C=I|4AchnnZu2p;r4MBbk3yb&}W(2KgTu}6Zf#CvZY&)BkK@het zzu_-rpYeW1{w&bmyxvC8x#8mAy?Ky*#^T_;dE7<}J3;1OXJpt4-Y3rpIs=t2i}5#n zzp)@_uRLho6X@JSkR714P#`f-AJd01e#d-9KCm5-dypV@K<+_;*l`rJzMffP6|DW@ z28lm#Tv|Zb;J8fu0}00yLJU(tYo%cAmhbV1bPYO_0~C)Boz#EyKz`NNyL0 zxEJhpP6!+9_Qr1z`(_H^Zg+v^#XxRXcnxs_2a4Ne;BMFZ0x=8b_6?6A>L)&e&%yQ3p$R&i5fHKLD2jYX#5BFxc7Hv)>U7bSynxkX4v_InQ7HGq`tn#DIWNExFv(b zPX%^{i;S(1a7pHXjA4V$k&{uF5%h;~VbNy>h6~ay5P8rV6VN_^3?tCKYlodDn4ovK zqMf$~-X{QFS0V#hI|E*`Bn4jM2RS233cSY8iqYYx13SY-P#@I=YWIUb|F?R8_OA9a z6fWds2m#46HbCsR<^c8S7(jO-ZGo--`NP0)0p_j_=zYGRJq(>}4nINb6+m+@nCo4j zYkI)$g04*muceX(y9;*4onsBeURkKU2cT=yL2J%gBz>zMvND8NFiUiU?&3o}$CsIr zAp~@eFX+BU`C7(8(D`*7ptb6%422rtJspy(0y$vw)sm~6A?%e8??UYRT+J}?K{dm~ zOM(njLNpqJzW6h&RCo+Yj|bQgV}~zyBhnS<+>a9s3?iU?(Ephje(q;t_z6#cyAbL? z=S=JauPKsRWdN}keCLr8guU|MO;k5*6l9oU0(HZJyO8`eAIS|TwGPy_hx<^N0^*^EpKA)lEz1go+jcdTRyLe}4b?pT?{=J4~;tLn?3H4&gS zZRX(f!KGG(3NlOq#XD&I;7m4$pD(2$XJvrG4Wt${Kd#EjFeQWobgwPL$_Ffv_7Z6S zH27?AX@{LN*%*FK7Gl_`$;fX6x(`ocbGlQhJ*`f&a;;tJTJWk zc3uJ~k9^O9$b;MjTHA+_N6^*?f%6D>9Vc;T6M)vVfz}1*u`^5o<>S3_o`;G5p+` z35k<$3=9{<6J`W`XI@zZTJy*u?_klv4mtxEv}QzfRk9%D?CY6K4m)=;|1iJF^uzq7 z5yMUp|0XMg3F!W2@HrC9lHhq(&^VeVD?=gZoD{{ca9)P&S%<8HgX~#{tUu&n z1fTVD5#mnKRqle|`_wOi@(gI-08HFbkYUP#|Npmw?xp1T9B(0C$XE! zQo&^tQK3#kqhjW zTvmsl`=M^h<%F<7dtx$p9V|~U2$<_IGKhfAwgm6L`pQ@cS{Do2t96};VW%1+g9ymZ z3>Ao-AbVit@d0Iq5G_sz%dY?WW{`S80dXz ziVTIIdmJ?sPe^GRGz4)la&ocEbf`*HWC#Jx)Bj{-FhO6_3R-Ut*|(+--M0p{2VDM3 zfcLHaW?&Hc-^^h7U!GwnC-VVIOIZdXjaD!YH)c0ao1!^~-q?xVvB2u`&VTjrk{n*Nmxg`oY)ApadSgSg`!E5noqc7`oT@wDNWDMSv%jjWLTiV;unv(J&^2~r6FtUT%FQTjd5}1R%!Q`-Wmr=t`P`MV*3~9eaGII!;XG;e^ zsB@TX#m_Kh0VBhfZ_Esxcwr&N|m2s3Mjlm?%yWn@DoHo zCUmRInlGWiSy1k(N4hVA*_FgAo z@A)hLrz`yZZwAu)w;Fe!?LRZq#XtE>D}SXkuly0uvhrIv>&h?wY%Bj(v#sxYYu^THz7$<`i-iGvA2%pXO@)j(1<5mrymk^|2vHDX*aAA6^o2OX zPKksWK|h#R7JWMcaT};jR2s$;As!B?Z$Nd8{6>bt27ZPRP%~j8FqricJVQofW|-}?M^9_cBcdUynDz#V&dAJVyjm2LCTp0 zfBtU;-B|?+XOLSK^Fi93kg`DJHK=TeU|lg*?*r|B%0fE71Ee0_4v{?0M=8Vy)U&2wBPB^zyH%g;o$J;{}xak`Z5_(--FhBzD$R(L2bG@%u?QS z{{A=Z_zx*l+dyaji#vetihCi>u(Rnutn3wez3}V*kQd?(J0CD}tomE+zVeH|+sbd@ zt}B1UyR7_`?!59(zSGM8%uL`lEx*!tuly0uxbj;#)5HLWvpF`;loDld_-V%A@Ke0jVKQi47bt!~>kSq8!26s{{#LuJ{NnGt@>{sm z${+ELD}SXQ1&^sf*13Vo9Pw3>d<;|M85jx~1m;I^Fh^Ep|N9>z&n%hE%g7J{S+9uQ zj1E4BotbZ#|Eqw3FFaC@x|5h`t{M*a`&i9}-IiNMb92F8mD}x|;2DE=F zo{=M4fuAAdB$`+QA4AAXG_eP~3?ZDssCpfE8A3GC#1`-{gm|KfG4L>iWTJ^Ba5IE- zqKO^gVhCA@CZ@o}5ONYt40O-pOEj?u91J0xA!zOc%@L!CEnsH|@kA42U}p%)L=#J3 zV+iR)6Fb1l5V8_YOo5dl3n1Ko+`i6#c>pJk$n zfyQ$?(ZoP~*_CKwp!?cEyFPg>+8rzT*I?2!w#L2Xv$euMM`=$7NDGgZH7AM-%O05K?s{#-1!dF_hncmt}r9$JLAHlZ43=T zkqiw%k^&2gW^sVlp)V-I_I31?mff>S{A)$bA71m>9Nz#z8#(|2OA=j>&o8 z7%K#=*M{890U2L_v>~B)7J&P`kUI+$86AE;`~P2Dg8_1G{sSh45c#Q$g%4O5LgZgE z6oT$p0NL5W1|5?`8*c%n8*u%|jJ&TAY7e*{2(brr*DlDMjGzBaz+;GL<}CQ}KLpg5 zjAulyXEDtY0-dYGIhrC+MDC&>hyGu?EbHA=?$%&v3F78hPz2Hsn!C{iojcCR5CWRJ>1E{R>S2@?+Rw;P*dpmr z1v;M+GLORmKA#dYkHY{ypAyt2s%K*OxPoc&EJ!_wy-oqu37*g~4o*f+Zu_qcg&Zsl zAsW1pvTD^P$XdK^1_lA2%uI`HPM+=r&{z%+L>`>hpltBGA(Rce>*obGL=EVyAr2@T zH2<8z1rZ0i5he~=L#N5gAjrwcuoJY_l+gP6&&JWgBk45F|uZ<9~>+W zKQ(I{CWFpF7n5}OdGHV<4TH)dTWDGW-F5O4)E-or5%i03VbP9*5H+AQ1WL=Gvt~eS z!f9Cwsm)6$ElaGDh1w5F%U?m`KuMi>hlnHWO;FJ`d(ug*Go&#fP<(i< zU<9Xm(3qMw@)*!!#NPK8>X5dd7PyZqwkn(n*2fiF2%!sgBf+oDFS9dL!DACpK__=bvHY zNe3h$cCTZAv?D=hSz9tR1cBmj#dq!qGxnL_aiz}h+!5xC9kV2UK=w<3(upOr7`G%d zgULcBvF=A8w=;{cddw_>HkKr|>N&H-s`NjQy@?Hs3|m$(Iat1&3~5J#+mzEGY*3rh zl3C1q=HLIOpz#+`hK5U^`HNCeoHRq%M}Of)n>!;szo5v?Fl90$g9vEp`M>H@w z{Cva?IxksxRVz2c6cC@4n_&v9p8tQC0o-QBY-2L4GGPJDrHQPn0-49aP}s4lLCTY{ zAt>{dMumJMQ{ie>h7gfjrob1>!mB|0u{Bv3Ozb-u!1Gg}vGtYz|C@sDt>I*7m~@J< zL5Q1?vpbv9!BUfzVIt_x==x5E!W2n|D$v|^JtIS*f~5a1W+sLZkh(-xhKbsi41x8G zBH2?9bxXxFie!6joFc_>Q0p}4TvyN@|C2{sgHEz8DB^r5zeATBw8mT1dp;XO;cEtl z5RNKHdS_rfV4HBM(}v@t!;g$ZTt8s`hP7}0JF{N=lP|RLi@)&7zttiu|1z^qe8>zf ze;#u~<~EyUe|&aknCLMFl3y8E-PR_sv8`obbzhsn#=e$;)n#o08_QY-R@b!&Y^-Y; zSe@2BXlGi>!0NpAK|AwW@EN!53~L!!9oIf+XI%ThnPK7&E`})}8Wa~AERePpEG|E@ zLCVrA@(n?coEauAb_VsggjXGuZwL}cj|(qITyV27gb3F%1#+-L^wKUqgtJS)@gbb; zwQ(}e_&CYMFr}DD#Je7}_ZoDzTrMI$PO?DG>s4TEum#17#z%%9E1F{=`xmYw@+at= z-oMo$E5G;$ul$oAwDP|*D>$v%axqN#;=ga@-)hE{f1N@7A!vMEgQS07E@=9{${o?j zn%bc3kO zMl#F9jLC?!@zR-Lq5>-oBz-8b5|=&-xEQ9u(gP?RJV<7l2ull~bTAd< zN8~&SO$YEinanbgc4>gPJn6xOnkO@25orK9PlC#-juYGwjEoLHLH>Nh3EDdjNe`aK zQPac!W{!#Ic^I@d2|cbrV`H#BvH};wlm!e7TZBazEI|DV84&;f|E-|CC+KEjngba# zkmdr_ZzA2Gvk3PyiM)1ZWC&UK?Y;%5f5pMYFeTyt|1F^V*U-%ao#BEmhRqI97KVvi z{z1$G-C6aSlVM83|NmR&%P|x^V4gY)-3;{f&&mZF|7GX~#koBrL*WDFj#;pD4yt>Q z)r00FG#D97Kx2oXeLak_48owWxCXM5fniI=zj%v`|Nl*e85%Bu{D*7~zCE6x@oCW6 z(h-~tQ>L&nTojjK5I(?kz%qmr)XxxGCC?z94LSS4!4h;|=mNO|7QUPeQ$XUNb6!C8 z`U*w{lWlCE@(#2{U3eAf{FeQk3{wt3&zr=ypA%HigT`&J$${GTp#7elU*j!aGBB8c zXwcqc29^dX&{-lXl3w8Y2NXsiwV?C1UotV6fb@XQ-~-JMgYHxVt zgS4mmIT@xfFhb8hfu3;!b`Nxpnt`!l*5B%b;6C~PW`>Kfvaf@?A!x;Ad5eXQ_0lEVZr0ylN*eaNKIT)t=XJW_(&HsVa!Tbyg3((nu-mtu39{vS6OS%C> z*D@A5{Q4gPn@fE86A~U`;5;n03R~X5HC|)R;9wcf%3uQ8w+$L&oEioR8_*u{VkWU} zP&|Rs!3z#h9na8R&g5Wuof)(?1hn@-bk$jCm^_eU5Dw*Fm{QKhF!2T(!$m0>24T>h zj|$8OEd4n^`CbZK9)QM(J^ubTQIJ1i;RzK7l?Nd4jz9lREZITj0cd^)w0>D))ou=k zDG#7+d_)Qu#*5#=8CQPsXIlBUntA2l!weIV z_uPZ-HA+;1jH?BK!i`yURR#ycl#DugVU7bD-CV2;7dz`5CVO$7oVA9Dp}U)rtGkPp z;bIS?gJljQgJlmJgJ5s1!{i>;h9J=SOgSIrE#5M7uJZdDZ;|&_-hzXb;Ug%`u4QHT z2%6Idi~og)gW|BBiJ{P8Yu7B~^!J|`a$W!zgM;M@>4qTC`97favs^L`7V$e73SA@} zszCR5cr$WvWwSB{)@L#lg3gtVpU42d?;yUGu@JOA$LkoAFv zle1gX)?ufnCRZ?6{{MdyP~KU@4j$K>2r5sV7#o6QI2fjY%mK;G2CW5SXb^(6hdt}j z+CR>S_RpVu$QW%UJ7}LK=GhA%f5X~AAosqgf%#qLM?3?ASG@+Tw~(s2K5V9Wo24;w?g7P`TzeA zZ&t=YP<$syMpnK2_df&_WQ?C3=m<$RpP&ou@BkW;km{Ol*VgWJ>q{fpS)P{@! z_bD_>5n%|rOADm$KR6tnSAOw#TKO#;v`!XshJ+eBYTp8sZb0b*6fXxD8B9Ru$AkL2 zT%ryZpgYuGiO-iR7V4PA0UDcPSk%1wkK1&1KMg-Nnpgsqv?#FEZ zLB_`!nHjcZFg5Jt_*i?HLlIQwf#$(ER>iS{+D{CtwlabGF(RufK=HuBFwuk^w5GRV z=YlG;AE0t1hn-={2{r~n(EL0oe$d;D42%sy>QJ-lnHY9%{ri6_C|zXaa7QqM*3L3Q z#&R0j8iJHSsNG@Zod5r)Kj3Egd07>r9<<-#9~)$C@B#sb zEmh&5xR6=}IyVSxJ~$tP_#&%#*ui^gOdc>xtr7y|LuSx=V$oIn?2vZBeKv-|?!W&- z=Cd;tdjI_&(ovsq*_h$Lr5C~sKRFnMyBYo_OlD*RmmgC=`46;?@kCw1OFo%b0T3g5BMmjbQDc)8edCCA^`$sJi4KQ#ZwO%~3~+;N8iv=3Wk)qysL zAE|5%Q!LpTK7!7W1LgljHijw2ptUjJ_;&cY6qJTHGfZ5`#xUi@W`>Cz3>@7YALA|L z_c9ckyoRI?h4=qMKyoix8-h496)H;q{}(qFg`^3QR}eLjvxdc2X(O#!)(k?FFW~j~ z+zvngR!6S<;vcc{TX^`&AMs%;f2D`6{F5KD@_#cMcnpJwjbX}5<(;|s&VAyX(ghwz z{ou<90a>;90WUU90WUT90c2K90c2J90Xf!90Xfz90Z$f90Z$e z90VI}90VI|{;y`(`TsD(&i}U=cK-j&uoIL%KzF;nlxEx+&&XgY55gP_g<4DuAsNs- z2HIbdAPuQkuKfBx9h6ryJR#*v0<^wqWP+40jBE^3f|(kEo-ibC~6fGI$z-UbHjpoWjN+2)d7X zJ`+c_mmx#QiCZNA{t#?4`SRncm zxgcXN*Fo#`I3Z#OIU!+o31mJ8M68h$qV6m!!;}S3v43oeYJbIqDbU4ih=P@=oLs?U=<+sRM}s$=Cd zH7#J~HF7ruJz{MLs`>qYI!x^0VYZ3WSQ(}`wl|lOP|HVP)HVRGrTaEoJu$Rim!Dlu8H)q%h%Tu5{177!4 z&ae{{j-WC@RFgXbmQVh~GwhTE)ol_CAv5Y6CW|vc`Wlw(41yr_pt=sER-REJyFr{G z;LqJ z%`D)1w_bzR?}6$r&>e8B4ME%>^Vt}-fZ7KgOfuf0VE=*IA2O>RF^jJH%fc`vKHJm+ zbYCrKO`#qGgUAbSr%DZu3iFPL0y9wC1hmf%QJ=`wAw9pP=~`kQz-^hKnF|pmC&1W{001M_Yq3 zcor0CFf;4~weu309ey5Sa`*{a7uNe1a>g7euD42ZM_gfI_*u;4u=A(6!_Q)N2Gas2 z29Xo24M85v43!`^gWR`=1u|}LD#0BA2@9!JD?o7=@32$Bi@_A+rx%_u|46QSWDK#Z z2x=Fy9ly9Vxv2jzo>Ob$OmXZ)zJFif#$XDIw3?l4gzoOxolI{0p*OD~uuwO)uL(zoIz zNP7j8=0R~%t;R9?CA0J@jb4WzFYOtAg7P~b$Q@{PJE&eS;dj~rnm_w&%<$7&fgwbS zq2UrJUuGyXTzuiq@Dr2=g&7@whJLQST$WY(~5C2{LE@l$l}5e__U* zFf|XInI?XR%y+LkAj)9sz^o+45xF9Wkx^ZafkRQQkx5C8Lqbt*Gn2#5hqE1aF8IxO z5wvG(2dLZxpPeMUD)BwU>~qWz`xp)?$vt3Z_{;bnGX8Ud88WvH3Ug3j={PgPlwvl> z_$|nN+nE`r{9({AM|P7JRL=nc2Gh^M4nM!ncG$TES}!Xyg2oX(jg{>(;)SSKx+U0-}-H}!_GZ?41#}VGwi(2B$NG$ zks$=s9s~6wRx>h$cyM$CtzhEd7IhU80`>JaGBZqR;9}S!(ZDeAM=-V0;SithnbB)>o;C9bFX?G?C=vb&TY@g{Tj5sh39X) z1!yl%&R=c;=2J!98?E_*1&+{`3vtv&=>qo8#klCR8Yr@Ph<;!e`o#6Y985s&+h|iaL zSq?f6ibE@dnZdl7nL!8?CJ);kb}}(E1S!4!KYalcgUMtj22)VJ1MP=ntgM2xn@YGR z7BWNgSqb;V5@u*VE9IWZ!N}0`3XBJA85kRE6(%0AVVKxp14;{*g&9o2{z_q= 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 Date: Thu, 24 Nov 2022 14:32:14 +0100 Subject: [PATCH 025/103] update of binaries (fixed Include_Header()) prevent C4706 warning when compiling in Windows --- lib_debug/wmc_auto.c | 9 ++++----- scripts/tools/Linux/wmc_tool | Bin 204224 -> 204224 bytes scripts/tools/Win32/wmc_tool.exe | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 6def739e31..427a29f096 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -1063,20 +1063,19 @@ static unsigned long malloc_hash(const char* func_name, int func_lineno, char* s { unsigned long hash = 5381; const char* ptr_str; - int c; ptr_str = func_name; - while (c = *ptr_str++) + while ( ptr_str != NULL && *ptr_str != '\0' ) { - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + hash = ((hash << 5) + hash) + *ptr_str++; /* hash * 33 + char */ } hash = ((hash << 5) + hash) + func_lineno; /* hash * 33 + func_lineno */ ptr_str = size_str; - while (c = *ptr_str++) + while ( ptr_str != NULL && *ptr_str != '\0' ) { - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + hash = ( ( hash << 5 ) + hash ) + *ptr_str++; /* hash * 33 + char */ } return hash; diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool index a5a80a3ea7b8177410c2463ba1cc51d44cdf8fb5..eb2720672262fa6090f6fb6547cee7a7b31486cf 100644 GIT binary patch delta 3824 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 XpDD#`&IPIrKt}Q$*?vok`56-cwaP$$ delta 3782 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 Date: Thu, 24 Nov 2022 18:32:46 +0100 Subject: [PATCH 026/103] fixed formatting in stack memory printout print also the usage of the top level stack function --- lib_debug/wmc_auto.c | 31 ++++++++++++------------------- scripts/tools/Linux/wmc_tool | Bin 204224 -> 204224 bytes scripts/tools/Win32/wmc_tool.exe | 4 ++-- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 427a29f096..38ccb5d333 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -29,13 +29,13 @@ #include "wmc_auto.h" - /*-------------------------------------------------------------------* - * WMOPS counting tool - *--------------------------------------------------------------------*/ +#define WMC_TOOL_SKIP /* Skip the instrumentation of this file, if invoked by accident */ #ifdef WMOPS -#define WMC_TOOL_SKIP /* Skip the instrumentation of this file, if invoked by accident */ +/*-------------------------------------------------------------------* + * Complexity counting tool + *--------------------------------------------------------------------*/ #define MAX_RECORDS 1024 #define MAX_CHAR 64 @@ -353,7 +353,7 @@ void print_wmops(void) fprintf(stdout, sfmtt, "---------------", "---", "--------------"); fprintf(stdout, "\n\n"); - fprintf(stdout, "\nInstruction Type Analysis (for worst case frame #%ld):\n\n", fnum_cnt_wc); /* added -- JPA */ + fprintf(stdout, "\nInstruction Type Analysis (for the worst-case frame %ld):\n\n", fnum_cnt_wc); /* added -- JPA */ for (i = 0; i < NUM_INST; i++) { switch ((enum instructions)i) @@ -450,7 +450,7 @@ void print_wmops(void) * #define WMC_TOOL_SKIP ... #undef WMC_TOOL_SKIP macro pair around the malloc(), calloc() and free(). *--------------------------------------------------------------------*/ -#define MAX_RECORDABLE_CALLS 40 +#define MAX_RECORDABLE_CALLS 100 #define MAX_FUNCTION_NAME_LENGTH 35 /* Maximum length that the function string will be truncated to */ #define MAX_PARAMS_LENGTH 50 /* Maximum length that the parameter string will be truncated to */ #define MAX_NUM_RECORDS 300 /* Initial maximum number of memory records -> mightb be increased during runtime, if needed */ @@ -716,16 +716,15 @@ static void print_stack_call_tree(void) strncpy(fctname, caller_info_ptr->function_name, MAX_FUNCTION_NAME_LENGTH); strcat(fctname, "()"); fprintf(stdout, "%-42s", fctname); - fprintf(stdout, "%-42s", caller_info_ptr->function_name); /* Print Stack Usage (Based on Difference) */ if (call_level != 0) { - fprintf(stdout, "%lu\n", ((caller_info_ptr - 1)->stack_ptr - caller_info_ptr->stack_ptr) * sizeof(int16_t) / sizeof(float)); + fprintf(stdout, "%lu %s\n", (((caller_info_ptr - 1)->stack_ptr - caller_info_ptr->stack_ptr) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size]); } else { - fprintf(stdout, "\n"); + fprintf(stdout, "%lu %s\n", ((ptr_base_stack - caller_info_ptr->stack_ptr) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size]); } /* Advance */ @@ -806,7 +805,7 @@ void* mem_alloc( exit(-1); } - /* Save all zuxiliary information about the memory block */ + /* Save all auxiliary information about the memory block */ strncpy(ptr_record->name, func_name, MAX_FUNCTION_NAME_LENGTH); ptr_record->name[MAX_FUNCTION_NAME_LENGTH] = '\0'; strncpy(ptr_record->params, size_str, MAX_PARAMS_LENGTH); /* Note: The size string starts with either 'm' or 'c' to indicate 'm'alloc or 'c'alloc */ @@ -1367,7 +1366,7 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) for (i = 0; i < nElem; i++) { - fprintf(stdout, "Program ROM size (%s): %d words (instructions)\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size); + fprintf(stdout, "Program ROM size (%s): %d instruction words\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size); } fprintf(stdout, "\n\n --- Table ROM (const data) usage --- \n\n"); @@ -1379,7 +1378,7 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) fprintf(stdout, "Error: Cannot retrieve or calculate Table ROM size of (%s)!\n", Const_Data_PROM_Table[i].file_spec); } - fprintf(stdout, "Table ROM size (%s): %d words\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].Get_Const_Data_Size_Func()); + fprintf(stdout, "Table ROM size (%s): %d %s\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].Get_Const_Data_Size_Func() >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size]); } } @@ -1392,7 +1391,7 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) if (ptr_base_stack - ptr_max_stack > 0) { fprintf(stdout, "\n\n --- Stack usage --- \n\n"); - fprintf(stdout, "Maximum stack size: %lu %s in frame #%d\n", ((ptr_base_stack - ptr_max_stack) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], + fprintf(stdout, "Maximum stack size: %lu %s in frame %d\n", ((ptr_base_stack - ptr_max_stack) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_frame); #ifdef MEM_COUNT_DETAILS print_stack_call_tree(); @@ -1451,11 +1450,5 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) int cntr_push_pop = 0; /* global counter for checking balanced push_wmops()/pop_wmops() pairs when WMOPS is not activated */ #endif -#undef WMC_TOOL_SKIP - - - - - diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool index eb2720672262fa6090f6fb6547cee7a7b31486cf..6d8f0f709007a2c2d66bd71821602a081d11bec3 100644 GIT binary patch delta 4006 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 L*?v=s`8g8+o&Z?H delta 4028 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 Date: Fri, 25 Nov 2022 10:14:57 +0100 Subject: [PATCH 027/103] removal of debugging message --- lib_debug/wmc_auto.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 38ccb5d333..22edfcff38 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -791,10 +791,6 @@ void* mem_alloc( Num_Records++; } - else - { - printf("Record Exists"); - } /* Allocate memory block for the new record, add signature before the beginning and after the memory block and fill it with magic value */ ptr_record->block_ptr = mem_alloc_block(size, size_str); -- GitLab From 9036bf0d42dd87d2745867b7643e36374030fc37 Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 25 Nov 2022 13:42:08 +0100 Subject: [PATCH 028/103] support for .csv output of per-frame memory consumption --- lib_debug/wmc_auto.c | 42 +++++++++++++++++++++++++++++++++++++++--- lib_debug/wmc_auto.h | 3 +++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 22edfcff38..559f355c91 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -1238,13 +1238,14 @@ static void subst(char* s, char from, char to) return; } + /*-------------------------------------------------------------------* * mem_count_summary() * * Print detailed (per-item) information about heap memory usage *--------------------------------------------------------------------*/ -static void mem_count_summary(void) +static void mem_count_summary() { int i, j, flag_intra_frame_memory; size_t length; @@ -1341,6 +1342,42 @@ static void mem_count_summary(void) return; } + +/*-------------------------------------------------------------------* + * export_mem() + * + * Export detailed (per-item) information about heap memory usage to a .csv file + *--------------------------------------------------------------------*/ + +void export_mem( const char *csv_filename ) +{ + int i; + FILE *fid; + allocator_record *record_ptr; + + /* Export individual heap memory records to a .csv file */ + if ( csv_filename != NULL && strcmp( csv_filename, "" ) != 0 ) + { + fid = fopen( csv_filename, "wb" ); + + if ( fid == NULL ) + { + fprintf( stderr, "\nCannot open %s!\n\n", csv_filename ); + exit( -1 ); + } + + for ( i = 0; i < Num_Records; i++ ) + { + record_ptr = &( allocation_list[i] ); + fprintf( fid, "%s:%d,%ld;\n", record_ptr->name, record_ptr->lineno, record_ptr->block_size ); + } + fprintf( fid, "\n" ); + + fclose( fid ); + } + + return; +} #endif /*-------------------------------------------------------------------* @@ -1420,11 +1457,10 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) #ifdef MEM_COUNT_DETAILS /* Print detailed information abour heap memory usage */ - mem_count_summary(); + mem_count_summary( ); #endif } - if (Stat_Cnt_Size > 0) { fprintf(stdout, "\nNote: 1 word = %d bits\n", 8 << Stat_Cnt_Size); diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index f379572bc7..a124f14aac 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -487,6 +487,9 @@ void mem_free(const char* func_name, int func_lineno, void* ptr); void reset_mem(Counting_Size cnt_size); void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]); +#ifdef MEM_COUNT_DETAILS +void export_mem( const char *csv_filename ); +#endif int push_stack(const char* filename, const char* fctname); int pop_stack(const char* filename, const char* fctname); -- GitLab From cbb762185a39bd017a316de36d19696882ed0734 Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 25 Nov 2022 13:57:52 +0100 Subject: [PATCH 029/103] implement calls to export_mem() in encoder/decoder/renderer --- apps/decoder.c | 3 +++ apps/encoder.c | 3 +++ apps/renderer.c | 31 +++++++++++++++++-------------- lib_debug/wmc_auto.c | 2 +- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index e0c927c966..ddfe3dc691 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -1434,6 +1434,9 @@ static ivas_error decodeG192( } #ifdef WMOPS update_wmops(); +#ifdef MEM_COUNT_DETAILS + export_mem( "mem_analysis.csv" ); +#endif #endif } diff --git a/apps/encoder.c b/apps/encoder.c index c12e023db6..a5cbdd1fa9 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -716,6 +716,9 @@ int main( #ifdef WMOPS update_wmops(); +#ifdef MEM_COUNT_DETAILS + export_mem( "mem_analysis.csv" ); +#endif #endif } diff --git a/apps/renderer.c b/apps/renderer.c index 1144e1dd25..a86af7ba22 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -781,10 +781,10 @@ int main( inBufferSize = frameSize_smpls * totalNumInChannels; outBufferSize = frameSize_smpls * numOutChannels; - inpInt16Buffer = malloc( inBufferSize * sizeof( int16_t ) ); - inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); - outInt16Buffer = malloc( outBufferSize * sizeof( int16_t ) ); - outFloatBuffer = malloc( outBufferSize * sizeof( float ) ); + inpInt16Buffer = malloc_( inBufferSize * sizeof( int16_t ) ); + inFloatBuffer = malloc_( inBufferSize * sizeof( float ) ); + outInt16Buffer = malloc_( outBufferSize * sizeof( int16_t ) ); + outFloatBuffer = malloc_( outBufferSize * sizeof( float ) ); inBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; inBuffer.config.numChannels = (int16_t) totalNumInChannels; @@ -1000,6 +1000,9 @@ int main( #ifdef WMOPS update_wmops(); +#ifdef MEM_COUNT_DETAILS + export_mem( "mem_analysis.csv" ); +#endif #endif } @@ -1031,10 +1034,10 @@ int main( #endif /* === Close === */ - free( inpInt16Buffer ); - free( inFloatBuffer ); - free( outInt16Buffer ); - free( outFloatBuffer ); + free_( inpInt16Buffer ); + free_( inFloatBuffer ); + free_( outInt16Buffer ); + free_( outFloatBuffer ); for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { MasaFileReader_close( &masaReaders[i] ); @@ -1578,7 +1581,7 @@ IsmPositionProvider *IsmPositionProvider_open( IsmPositionProvider *ipp; uint16_t i; - ipp = (IsmPositionProvider *) malloc( sizeof( IsmPositionProvider ) ); + ipp = (IsmPositionProvider *) malloc_( sizeof( IsmPositionProvider ) ); ipp->frameCounter = 0; ipp->numObjects = 0; @@ -1695,16 +1698,16 @@ void IsmPositionProvider_close( IsmPositionProvider *positionProvider ) if ( positionProvider->positions[i] != NULL ) { - free( positionProvider->positions[i] ); + free_( positionProvider->positions[i] ); } if ( positionProvider->positionDurations[i] != NULL ) { - free( positionProvider->positionDurations[i] ); + free_( positionProvider->positionDurations[i] ); } } - free( positionProvider ); + free_( positionProvider ); return; } @@ -1953,8 +1956,8 @@ static void parseIsm( if ( parseUint32( line, &numberOfObjectPositionsToRead ) == 0 ) { positionProvider->numPositions[idx] = numberOfObjectPositionsToRead; - positionProvider->positions[idx] = malloc( numberOfObjectPositionsToRead * sizeof( IVAS_REND_AudioObjectPosition ) ); - positionProvider->positionDurations[idx] = malloc( numberOfObjectPositionsToRead * sizeof( uint16_t ) ); + positionProvider->positions[idx] = malloc_( numberOfObjectPositionsToRead * sizeof( IVAS_REND_AudioObjectPosition ) ); + positionProvider->positionDurations[idx] = malloc_( numberOfObjectPositionsToRead * sizeof( uint16_t ) ); for ( i = 0; i < numberOfObjectPositionsToRead; ++i ) { diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 559f355c91..4c4831754d 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -1245,7 +1245,7 @@ static void subst(char* s, char from, char to) * Print detailed (per-item) information about heap memory usage *--------------------------------------------------------------------*/ -static void mem_count_summary() +static void mem_count_summary(void) { int i, j, flag_intra_frame_memory; size_t length; -- GitLab From bee6d5a37fb455571977236d13a686ab71f2051f Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 25 Nov 2022 14:01:04 +0100 Subject: [PATCH 030/103] update of comments --- lib_com/options.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index a03a564174..155e3fdec8 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -48,13 +48,13 @@ /* ################### Start DEBUGGING switches ########################### */ #ifndef RELEASE -#define DEBUGGING /* Activate debugging part of the code */ +#define DEBUGGING /* Activate debugging part of the code */ #endif -#define WMOPS /* Activate complexity and memory counters */ +#define WMOPS /* Activate complexity and memory counters */ /*#define WMOPS_PER_FRAME*/ /* Output complexity in WMOPS per frame to the file "res/wmops" (one float value per frame) */ -/*#define WMOPS_DETAIL*/ /* Activate complexity detail printout for every function. Increases runtime overhead */ -/*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output WMOPS analysis for the worst-case frame */ -/*#define MEM_COUNT_DETAILS*/ /* Output detailed memory consumption report for the worst-case frame */ +/*#define WMOPS_DETAIL*/ /* Output detailed complexity printout for every function. Increases runtime overhead */ +/*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output detailed analysis for the worst-case frame */ +#define MEM_COUNT_DETAILS /* Output detailed memory analysis for the worst-case (maximum) frame */ #ifdef DEBUGGING -- GitLab From f10127ea4df9132b9b65700d40ae80e678bb305b Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 25 Nov 2022 14:42:56 +0100 Subject: [PATCH 031/103] check, if .csv has already been opened --- lib_debug/wmc_auto.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 4c4831754d..3a7acf8f3b 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -1352,11 +1352,16 @@ static void mem_count_summary(void) void export_mem( const char *csv_filename ) { int i; - FILE *fid; + static FILE *fid = NULL; allocator_record *record_ptr; - /* Export individual heap memory records to a .csv file */ - if ( csv_filename != NULL && strcmp( csv_filename, "" ) != 0 ) + if (csv_filename == NULL || strcmp( csv_filename, "" ) == 0 ) + { + return; + } + + /* Check, if the .csv file has already been opened */ + if ( fid == NULL ) { fid = fopen( csv_filename, "wb" ); @@ -1365,16 +1370,15 @@ void export_mem( const char *csv_filename ) fprintf( stderr, "\nCannot open %s!\n\n", csv_filename ); exit( -1 ); } + } - for ( i = 0; i < Num_Records; i++ ) - { - record_ptr = &( allocation_list[i] ); - fprintf( fid, "%s:%d,%ld;\n", record_ptr->name, record_ptr->lineno, record_ptr->block_size ); - } - fprintf( fid, "\n" ); - - fclose( fid ); + /* Export individual heap memory records to a .csv file */ + for ( i = 0; i < Num_Records; i++ ) + { + record_ptr = &( allocation_list[i] ); + fprintf( fid, "%s:%d,%ld;", record_ptr->name, record_ptr->lineno, record_ptr->block_size ); } + fprintf( fid, "\n" ); return; } -- GitLab From 628ea712c8991bbde0aa0c5a9372c6a7291a17ff Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 25 Nov 2022 15:22:47 +0100 Subject: [PATCH 032/103] compact memory printout --- lib_debug/wmc_auto.c | 79 +++++++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 3a7acf8f3b..84818dbdbf 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -540,7 +540,7 @@ void reset_mem(Counting_Size cnt_size) tmp_size = sizeof(int32_t); if (tmp_size != 4) { - printf("Error: Expecting 'int32_t' to be a 32 Bits Integer!"); + fprintf( stderr, "Error: Expecting 'int32_t' to be a 32 Bits Integer!" ); exit(-1); } @@ -552,7 +552,7 @@ void reset_mem(Counting_Size cnt_size) if (allocation_list == NULL) { - printf("Error: Unable to Create List of Memory Blocks!"); + fprintf( stderr, "Error: Unable to Create List of Memory Blocks!" ); exit(-1); } @@ -759,7 +759,7 @@ void* mem_alloc( if (size == 0) { - printf("Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Size of Zero not Supported"); + fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Size of Zero not Supported" ); exit(-1); } @@ -797,7 +797,7 @@ void* mem_alloc( if (ptr_record->block_ptr == NULL) { - printf("Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Cannot Allocate Memory!"); + fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Cannot Allocate Memory!" ); exit(-1); } @@ -816,7 +816,7 @@ void* mem_alloc( if (ptr_record->frame_allocated != -1) { - printf("Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Attempt to Allocate the Same Memory Block with Freeing it First!"); + fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Attempt to Allocate the Same Memory Block with Freeing it First!" ); exit(-1); } @@ -1132,7 +1132,7 @@ void mem_free(const char* func_name, int func_lineno, void* ptr) if (ptr_record == NULL) { - printf("Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Unable to Find Record Corresponding to the Allocated Memory Block!"); + fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Unable to Find Record Corresponding to the Allocated Memory Block!" ); exit(-1); } @@ -1275,7 +1275,7 @@ static void mem_count_summary(void) if ( j == 0 ) { /* Total Heap Size */ - printf( "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); + fprintf( stdout, "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); } else { @@ -1287,12 +1287,12 @@ static void mem_count_summary(void) if ( j == 0 ) { /* Intra-Frame Heap Size */ - printf( "\nList of memory blocks when maximum intra-frame heap size is reached:\n\n" ); + fprintf( stdout, "\nList of memory blocks when maximum intra-frame heap size is reached:\n\n" ); } else { /* Inter-Frame Heap Size */ - printf( "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); + fprintf( stdout, "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); } } @@ -1337,7 +1337,7 @@ static void mem_count_summary(void) } } - printf("\n\n"); + fprintf( stdout, "\n" ); } return; @@ -1394,10 +1394,10 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) { int i, nElem; + fprintf( stdout, "\n\n --- Memory usage --- \n\n" ); + if (Const_Data_PROM_Table != NULL) { - fprintf(stdout, "\n\n --- Program ROM usage --- \n\n"); - nElem = 0; while (strcmp(Const_Data_PROM_Table[nElem].file_spec, "") != 0) nElem++; @@ -1406,8 +1406,6 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) fprintf(stdout, "Program ROM size (%s): %d instruction words\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size); } - fprintf(stdout, "\n\n --- Table ROM (const data) usage --- \n\n"); - for (i = 0; i < nElem; i++) { if (Const_Data_PROM_Table[i].Get_Const_Data_Size_Func == NULL) @@ -1415,24 +1413,32 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) fprintf(stdout, "Error: Cannot retrieve or calculate Table ROM size of (%s)!\n", Const_Data_PROM_Table[i].file_spec); } - fprintf(stdout, "Table ROM size (%s): %d %s\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].Get_Const_Data_Size_Func() >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size]); + fprintf(stdout, "Table ROM (const data) size (%s): %d %s\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].Get_Const_Data_Size_Func() >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size]); } } + else + { + fprintf( stdout, "Program ROM size: not available\n"); + fprintf( stdout, "Table ROM (const data) size: not available\n"); + } if (wc_ram_size > 0) { - fprintf(stdout, "\n\n --- RAM usage (Stack + Heap) --- \n\n"); - fprintf(stdout, "Maximum RAM size: %d %s in frame %d\n", wc_ram_size >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_ram_frame); + fprintf(stdout, "Maximum RAM (stack + heap) size: %d %s in frame %d\n", wc_ram_size >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_ram_frame); + } + else + { + fprintf( stdout, "Maximum RAM (stack + heap) size: not available\n" ); } if (ptr_base_stack - ptr_max_stack > 0) { - fprintf(stdout, "\n\n --- Stack usage --- \n\n"); fprintf(stdout, "Maximum stack size: %lu %s in frame %d\n", ((ptr_base_stack - ptr_max_stack) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_frame); -#ifdef MEM_COUNT_DETAILS - print_stack_call_tree(); -#endif + } + else + { + fprintf( stdout, "Maximum stack size: not available\n" ); } /* check, if all memory blocks have been deallocated (freed) */ @@ -1440,31 +1446,44 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) { if (allocation_list[i].block_ptr != NULL) { - printf("Fct=%s, Ln=%i: %s!\n", allocation_list[i].name, allocation_list[i].lineno, "Error: Memory Block has not been De-Allocated with free()!"); + fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", allocation_list[i].name, allocation_list[i].lineno, "Error: Memory Block has not been De-Allocated with free()!" ); exit(-1); } } if ( wc_heap_size[1] > 0 ) { - fprintf( stdout, "\n\n --- Heap usage (malloc/calloc) --- \n\n" ); - if ( wc_heap_size_intra_frame[1] > 0 ) { - printf( "Maximum intra-frame heap size: %d %s in frame %d\n", wc_heap_size_intra_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_intra_frame[0] ); - printf( "Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size_inter_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_inter_frame[0] ); + fprintf( stdout, "Maximum intra-frame heap size: %d %s in frame %d\n", wc_heap_size_intra_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_intra_frame[0] ); + fprintf( stdout, "Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size_inter_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_inter_frame[0] ); } else { - printf( "Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size[0] ); + fprintf( stdout, "Maximum intra-frame heap size: 0\n" ); + fprintf( stdout, "Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size[0] ); } + } + else + { + fprintf( stdout, "Maximum intra-frame heap size: not available\n" ); + fprintf( stdout, "Maximum inter-frame heap size: not available\n" ); + } #ifdef MEM_COUNT_DETAILS - /* Print detailed information abour heap memory usage */ - mem_count_summary( ); -#endif + /* Print detailed information about worst-case stack usage */ + if ( ptr_base_stack - ptr_max_stack > 0 ) + { + print_stack_call_tree(); } + /* Print detailed information about worst-case heap usage */ + if ( wc_heap_size[1] > 0 ) + { + mem_count_summary(); + } +#endif + if (Stat_Cnt_Size > 0) { fprintf(stdout, "\nNote: 1 word = %d bits\n", 8 << Stat_Cnt_Size); -- GitLab From 1ceb051a2eeb4238aeb5f0c48f363937d8e80e04 Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 25 Nov 2022 15:28:30 +0100 Subject: [PATCH 033/103] define export_mem() as void statement when WMOPS is deactivated --- lib_debug/wmc_auto.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index a124f14aac..9b218fa293 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -511,6 +511,7 @@ void reset_stack(void); #define free_(ptr) free( ptr ) #define reset_mem( cnt_size ) #define print_mem( Const_Data_PROM_Table ) +#define export_mem( csv_filename ) #define push_stack(file,fct) #define pop_stack(file,fct) -- GitLab From 87cd96d97a0e0d03c1554b5017a10ece30c5e27a Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 28 Nov 2022 13:56:56 +0100 Subject: [PATCH 034/103] print duplicate records as Nx999 words --- lib_debug/wmc_auto.c | 101 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 87 insertions(+), 14 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 84818dbdbf..38ecbec1b0 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -491,9 +491,9 @@ typedef struct void* block_ptr; int block_size; int max_block_size; /* Maximum block size allocated */ - int32_t wc_heap_size[2]; /* Worst-Case Heap [Frame#, Size] */ - int32_t wc_heap_size_intra_frame[2]; /* Worst-Case Intra-Frame Heap [Frame#, Size] */ - int32_t wc_heap_size_inter_frame[2]; /* Worst-Case Inter-Frame Heap [Frame#, Size] */ + int32_t wc_heap_size[3]; /* Worst-Case Heap [Frame#, Size, Count] */ + int32_t wc_heap_size_intra_frame[3]; /* Worst-Case Intra-Frame Heap [Frame#, Size, Count] */ + int32_t wc_heap_size_inter_frame[3]; /* Worst-Case Inter-Frame Heap [Frame#, Size, Count] */ int frame_allocated; /* Frame number in which the Memory Block has been allocated */ float ave_usage; /* Average Usage of memory block calculated as ratio of used size and allocated size */ int OOB_Flag; @@ -784,10 +784,13 @@ void* mem_alloc( ptr_record->OOB_Flag = 0; ptr_record->wc_heap_size[0] = -1; ptr_record->wc_heap_size[1] = 0; + ptr_record->wc_heap_size[2] = 1; ptr_record->wc_heap_size_intra_frame[0] = -1; ptr_record->wc_heap_size_intra_frame[1] = 0; + ptr_record->wc_heap_size_intra_frame[2] = 1; ptr_record->wc_heap_size_inter_frame[0] = -1; ptr_record->wc_heap_size_inter_frame[1] = 0; + ptr_record->wc_heap_size_inter_frame[2] = 1; Num_Records++; } @@ -1102,6 +1105,7 @@ allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int return NULL; } + /*-------------------------------------------------------------------* * mem_free() * @@ -1158,11 +1162,11 @@ void mem_free(const char* func_name, int func_lineno, void* ptr) } /* Update Worst-Case Intra-Frame Heap Size, if Exceeded */ - if (ptr_record->frame_allocated == update_cnt && current_heap_size_intra_frame > wc_heap_size_intra_frame[1]) + if (current_heap_size_intra_frame > wc_heap_size_intra_frame[1]) { for (i = 0; i < Num_Records; i++) { - if (allocation_list[i].block_ptr != NULL) + if ( allocation_list[i].frame_allocated == update_cnt ) { allocation_list[i].wc_heap_size_intra_frame[0] = update_cnt; allocation_list[i].wc_heap_size_intra_frame[1] = allocation_list[i].block_size; @@ -1179,11 +1183,11 @@ void mem_free(const char* func_name, int func_lineno, void* ptr) } /* Update Worst-Case Inter-Frame Heap Size, if Exceeded */ - if (ptr_record->frame_allocated < update_cnt && current_heap_size_inter_frame > wc_heap_size_inter_frame[1]) + if (current_heap_size_inter_frame > wc_heap_size_inter_frame[1]) { for (i = 0; i < Num_Records; i++) { - if (allocation_list[i].block_ptr != NULL) + if ( allocation_list[i].frame_allocated < update_cnt ) { allocation_list[i].wc_heap_size_inter_frame[0] = update_cnt; allocation_list[i].wc_heap_size_inter_frame[1] = allocation_list[i].block_size; @@ -1197,7 +1201,6 @@ void mem_free(const char* func_name, int func_lineno, void* ptr) wc_heap_size_inter_frame[0] = update_cnt; wc_heap_size_inter_frame[1] = current_heap_size_inter_frame; - } /* Update the Average Usage of Memory Block (Look for Signature) */ @@ -1249,12 +1252,12 @@ static void mem_count_summary(void) { int i, j, flag_intra_frame_memory; size_t length; - char format_str[50], name_str[MAX_FUNCTION_NAME_LENGTH + 1], parms_str[MAX_PARAMS_LENGTH + 1], type_str[10], usage_str[20], size_str[20], line_str[10]; + char format_str[50], name_str[MAX_FUNCTION_NAME_LENGTH + 3], parms_str[MAX_PARAMS_LENGTH + 1], type_str[10], usage_str[20], size_str[20], line_str[10]; char buf[300]; - allocator_record* record_ptr; + allocator_record* record_ptr, *ptr; /* Prepare format string */ - sprintf(format_str, "%%-%ds %%5s %%6s %%-%ds %%14s %%6s ", MAX_FUNCTION_NAME_LENGTH, MAX_PARAMS_LENGTH); + sprintf(format_str, "%%-%ds %%5s %%6s %%-%ds %%20s %%6s ", MAX_FUNCTION_NAME_LENGTH, MAX_PARAMS_LENGTH); /* Check, if we have at least one Intra-Frame Heap memory block in the list */ flag_intra_frame_memory = 0; @@ -1268,6 +1271,37 @@ static void mem_count_summary(void) } } + /* Find duplicate records (same hash and worst-case heap size) */ + for ( i = 0; i < Num_Records; i++ ) + { + record_ptr = &( allocation_list[i] ); + for ( j = i + 1; j < Num_Records; j++ ) + { + ptr = &( allocation_list[j] ); + + if ( ptr->hash != 0 && ptr->hash == record_ptr->hash && ptr->wc_heap_size[1] == record_ptr->wc_heap_size[1] ) + { + ptr->wc_heap_size[0] = -1; + ptr->wc_heap_size[1] = 0; + record_ptr->wc_heap_size[2]++; + } + + if ( ptr->hash != 0 && ptr->hash == record_ptr->hash && ptr->wc_heap_size_intra_frame[1] == record_ptr->wc_heap_size_intra_frame[1] ) + { + ptr->wc_heap_size_intra_frame[0] = -1; + ptr->wc_heap_size_intra_frame[1] = 0; + record_ptr->wc_heap_size_intra_frame[2]++; + } + + if ( ptr->hash != 0 && ptr->hash == record_ptr->hash && ptr->wc_heap_size_inter_frame[1] == record_ptr->wc_heap_size_inter_frame[1] ) + { + ptr->wc_heap_size_inter_frame[0] = -1; + ptr->wc_heap_size_inter_frame[1] = 0; + record_ptr->wc_heap_size_inter_frame[2]++; + } + } + } + for (j = 0; j < 2; j++) { if ( !flag_intra_frame_memory ) @@ -1315,6 +1349,7 @@ static void mem_count_summary(void) ) { strncpy(name_str, record_ptr->name, MAX_FUNCTION_NAME_LENGTH); + strcat( name_str, "()" ); name_str[MAX_FUNCTION_NAME_LENGTH] = '\0'; strncpy(parms_str, &(record_ptr->params[2]), MAX_PARAMS_LENGTH); parms_str[MAX_PARAMS_LENGTH] = '\0'; @@ -1330,7 +1365,40 @@ static void mem_count_summary(void) sprintf(usage_str, "%d%%", (int)(record_ptr->ave_usage * 100.0f)); sprintf(line_str, "%d", record_ptr->lineno); - sprintf(size_str, "%d %s", (int)(record_ptr->max_block_size >> Stat_Cnt_Size), Count_Unit[Stat_Cnt_Size]); + + if ( !flag_intra_frame_memory && j == 0 && record_ptr->wc_heap_size[1] > 0 ) + { + if ( record_ptr->wc_heap_size[2] > 1 ) + { + sprintf( size_str, "%dx%d %s", record_ptr->wc_heap_size[2], ( int )( record_ptr->wc_heap_size[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + } + else + { + sprintf( size_str, "%d %s", (int) ( record_ptr->wc_heap_size[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + } + } + else if ( flag_intra_frame_memory && j == 0 && record_ptr->wc_heap_size_intra_frame[1] > 0 ) + { + if ( record_ptr->wc_heap_size_intra_frame[2] > 1 ) + { + sprintf( size_str, "%dx%d %s", record_ptr->wc_heap_size_intra_frame[2], ( int )( record_ptr->wc_heap_size_intra_frame[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + } + else + { + sprintf( size_str, "%d %s", (int) ( record_ptr->wc_heap_size_intra_frame[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + } + } + else if ( flag_intra_frame_memory && j == 1 && record_ptr->wc_heap_size_inter_frame[1] > 0 ) + { + if ( record_ptr->wc_heap_size_inter_frame[2] > 1 ) + { + sprintf( size_str, "%dx%d %s", record_ptr->wc_heap_size_inter_frame[2], ( int )( record_ptr->wc_heap_size_inter_frame[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + } + else + { + sprintf( size_str, "%d %s", (int) ( record_ptr->wc_heap_size_inter_frame[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + } + } sprintf(buf, format_str, name_str, line_str, type_str, parms_str, size_str, usage_str); puts(buf); @@ -1376,7 +1444,7 @@ void export_mem( const char *csv_filename ) for ( i = 0; i < Num_Records; i++ ) { record_ptr = &( allocation_list[i] ); - fprintf( fid, "%s:%d,%ld;", record_ptr->name, record_ptr->lineno, record_ptr->block_size ); + fprintf( fid, "%s:%d,%d;", record_ptr->name, record_ptr->lineno, record_ptr->block_size ); } fprintf( fid, "\n" ); @@ -1487,7 +1555,12 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) if (Stat_Cnt_Size > 0) { fprintf(stdout, "\nNote: 1 word = %d bits\n", 8 << Stat_Cnt_Size); - fprintf(stdout, "This is an optimistic estimate of memory consumption assuming that each variable type is stored with sizeof(type) bits\n\n"); + fprintf( stdout, "This is an optimistic estimate of memory consumption assuming that each variable type is stored with sizeof(type) bits\n" ); + } + + if ( wc_heap_size[1] > 0 ) + { + fprintf( stdout, "Intra-frame heap memory is allocated and de-allocated in the same frame\n" ); } /* De-allocate list of heap memory blocks */ -- GitLab From 9c6c89d3ee14982dfc22a49091a95a151f858f78 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 28 Nov 2022 16:26:19 +0100 Subject: [PATCH 035/103] parentheses around WMOPS_BOOST_FAC -> doesn't affect complexity --- lib_debug/wmc_auto.c | 1 + lib_debug/wmc_auto.h | 36 +++++++++++++++++------------------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 38ecbec1b0..bddc735164 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -1272,6 +1272,7 @@ static void mem_count_summary(void) } /* Find duplicate records (same hash and worst-case heap size) */ + /* Note: average usage is not re-calculated */ for ( i = 0; i < Num_Records; i++ ) { record_ptr = &( allocation_list[i] ); diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 9b218fa293..ffcfdb63bc 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -23,10 +23,8 @@ /* Real-time relationships */ #define FRAMES_PER_SECOND 50.0 #define MILLION_CYCLES 1e6 - #define WMOPS_BOOST_FAC (1.0f) /* scaling factor for equalizing the difference between automatic and manual instrumentation */ - -#define FAC (FRAMES_PER_SECOND/(MILLION_CYCLES*WMOPS_BOOST_FAC)) +#define FAC (FRAMES_PER_SECOND/MILLION_CYCLES*WMOPS_BOOST_FAC) #define ENABLE_TREE 0 /* Call tree may be activated by setting this flag to 1 */ #define NUM_INST 20 /* Total number of instruction types (in enum below) */ @@ -242,24 +240,24 @@ static int wmc_flag_ = 0; #endif /* Define all Macros without '{' & '}' (None of these should be called externally!) */ -#define ABS_(x) OP_COUNT_(_ABS, (x)*WMOPS_BOOST_FAC) -#define ADD_(x) OP_COUNT_(_ADD, (x)*WMOPS_BOOST_FAC) -#define MULT_(x) OP_COUNT_(_MULT, (x)*WMOPS_BOOST_FAC) -#define MAC_(x) OP_COUNT_(_MAC, (x)*WMOPS_BOOST_FAC) -#define MOVE_(x) OP_COUNT_(_MOVE, (x)*WMOPS_BOOST_FAC) -#define STORE_(x) OP_COUNT_(_STORE, (x)*WMOPS_BOOST_FAC) -#define LOGIC_(x) OP_COUNT_(_LOGIC, (x)*WMOPS_BOOST_FAC) -#define SHIFT_(x) OP_COUNT_(_SHIFT, (x)*WMOPS_BOOST_FAC) -#define BRANCH_(x) OP_COUNT_(_BRANCH, (x)*WMOPS_BOOST_FAC) -#define DIV_(x) OP_COUNT_(_DIV, (x)*WMOPS_BOOST_FAC) -#define SQRT_(x) OP_COUNT_(_SQRT, (x)*WMOPS_BOOST_FAC) -#define TRANS_(x) OP_COUNT_(_TRANS, (x)*WMOPS_BOOST_FAC) +#define ABS_(x) OP_COUNT_(_ABS, (x)/WMOPS_BOOST_FAC) +#define ADD_(x) OP_COUNT_(_ADD, (x)/WMOPS_BOOST_FAC) +#define MULT_(x) OP_COUNT_(_MULT, (x)/WMOPS_BOOST_FAC) +#define MAC_(x) OP_COUNT_(_MAC, (x)/WMOPS_BOOST_FAC) +#define MOVE_(x) OP_COUNT_(_MOVE, (x)/WMOPS_BOOST_FAC) +#define STORE_(x) OP_COUNT_(_STORE, (x)/WMOPS_BOOST_FAC) +#define LOGIC_(x) OP_COUNT_(_LOGIC, (x)/WMOPS_BOOST_FAC) +#define SHIFT_(x) OP_COUNT_(_SHIFT, (x)/WMOPS_BOOST_FAC) +#define BRANCH_(x) OP_COUNT_(_BRANCH, (x)/WMOPS_BOOST_FAC) +#define DIV_(x) OP_COUNT_(_DIV, (x)/WMOPS_BOOST_FAC) +#define SQRT_(x) OP_COUNT_(_SQRT, (x)/WMOPS_BOOST_FAC) +#define TRANS_(x) OP_COUNT_(_TRANS, (x)/WMOPS_BOOST_FAC) #define POWER_(x) TRANS_(x) #define LOG_(x) TRANS_(x) -#define LOOP_(x) OP_COUNT_(_LOOP, (x)*WMOPS_BOOST_FAC) -#define INDIRECT_(x) OP_COUNT_(_INDIRECT, (x)*WMOPS_BOOST_FAC) -#define PTR_INIT_(x) OP_COUNT_(_PTR_INIT, (x)*WMOPS_BOOST_FAC) -#define FUNC_(x) (OP_COUNT_(_MOVE, (x)*WMOPS_BOOST_FAC), OP_COUNT_(_FUNC, 1)) +#define LOOP_(x) OP_COUNT_(_LOOP, (x)/WMOPS_BOOST_FAC) +#define INDIRECT_(x) OP_COUNT_(_INDIRECT, (x)/WMOPS_BOOST_FAC) +#define PTR_INIT_(x) OP_COUNT_(_PTR_INIT, (x)/WMOPS_BOOST_FAC) +#define FUNC_(x) (OP_COUNT_(_MOVE, (x)/WMOPS_BOOST_FAC), OP_COUNT_(_FUNC, 1)) #define MISC_(x) ABS_(x) /* Math Operations */ -- GitLab From 15c0170a675386978252dd497e0cd717b1e5bdba Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 29 Nov 2022 09:18:34 +0100 Subject: [PATCH 036/103] fix compilation warnings - bring the branch in line iwth the main --- lib_rend/ivas_rotation.c | 5 +---- lib_rend/lib_rend.c | 2 -- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 2f89c24d2b..e0ee11fac2 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -903,8 +903,6 @@ static float SHrot_v( return p0 * ( 1.0f - d ) + p1 * sqrtf( 1.0f + d ); } } - - return 0; } static float SHrot_w( @@ -937,10 +935,9 @@ static float SHrot_w( return p0 - p1; } } - - return 0; } + #ifdef EXT_RENDERER void SHrotmatgen( #else diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 60a717905d..a134992047 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -470,8 +470,6 @@ AUDIO_CONFIG getIvasAudioConfigFromRendAudioConfig( default: return AUDIO_CONFIG_INVALID; } - - return IVAS_ERR_OK; } static ivas_error initLimiter( -- GitLab From 0545695a7b9677592563d97c4697de8eb5ca1dae Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 29 Nov 2022 09:29:20 +0100 Subject: [PATCH 037/103] introduce INTRAFRAME_HEAP_MANAGEMENT --- lib_com/options.h | 2 ++ lib_dec/ivas_dirac_dec.c | 13 +++++++++++++ lib_dec/ivas_stat_dec.h | 3 ++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 97695c678f..9e5289acb4 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -171,6 +171,8 @@ #define FIX_ISM_METADATA_READER /* Issue 211: make ISM metadata file reader robust against invalid files */ +#define INTRAFRAME_HEAP_MANAGEMENT + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 419fc88b5e..971405d65b 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -774,6 +774,7 @@ ivas_error ivas_dirac_dec_config( /* output synthesis */ ivas_dirac_dec_output_synthesis_init( hDirAC, nchan_out_woLFE ); +#ifndef INTRAFRAME_HEAP_MANAGEMENT /* Allocate stack memory */ if ( flag_config != DIRAC_OPEN ) { @@ -783,6 +784,7 @@ ivas_error ivas_dirac_dec_config( ivas_dirac_alloc_mem( hDirAC, st_ivas->renderer_type, &( hDirAC->stack_mem ) ); #else ivas_dirac_alloc_mem( hDirAC, &( hDirAC->stack_mem ) ); +#endif #endif mvs2s( DirAC_block_grouping, hDirAC->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); @@ -1114,7 +1116,9 @@ void ivas_dirac_dec_close( hDirAC->masa_stereo_type_detect = NULL; } +#ifndef INTRAFRAME_HEAP_MANAGEMENT ivas_dirac_free_mem( &( hDirAC->stack_mem ) ); +#endif free( hDirAC ); @@ -1883,7 +1887,12 @@ void ivas_dirac_dec( /* Initialize aux buffers */ hDirAC = st_ivas->hDirAC; + +#ifdef INTRAFRAME_HEAP_MANAGEMENT + ivas_dirac_alloc_mem( hDirAC, st_ivas->renderer_type, &DirAC_mem ); +#else DirAC_mem = st_ivas->hDirAC->stack_mem; +#endif reference_power = DirAC_mem.reference_power; reference_power_smooth = DirAC_mem.reference_power + hDirAC->num_freq_bands; @@ -2551,6 +2560,10 @@ void ivas_dirac_dec( } } +#ifdef INTRAFRAME_HEAP_MANAGEMENT + ivas_dirac_free_mem( &DirAC_mem ); +#endif + pop_wmops(); return; diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 2393a41f2f..953d741f0b 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -698,8 +698,9 @@ typedef struct ivas_dirac_dec_data_structure float *proto_frame_f; float *proto_frame_dec_f; +#ifndef INTRAFRAME_HEAP_MANAGEMENT DIRAC_DEC_STACK_MEM stack_mem; - +#endif MASA_STEREO_TYPE_DETECT *masa_stereo_type_detect; int16_t num_ele_spk_no_diffuse_rendering; -- GitLab From b591a3108586abb6c2248d10ddbe00117a9cc21b Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 29 Nov 2022 13:56:29 +0100 Subject: [PATCH 038/103] remove #ifdef WMOPS in lib_enc.c and lib_dec.c --- lib_dec/lib_dec.c | 2 -- lib_enc/lib_enc.c | 3 --- 2 files changed, 5 deletions(-) diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 7395eca204..1aca5200f9 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -42,9 +42,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#ifdef WMOPS #include "wmc_auto.h" -#endif /*---------------------------------------------------------------------* * Local structs diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 0606a9aa93..8db1396ffb 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -39,10 +39,7 @@ #ifdef DEBUGGING #include "debug.h" #endif -#ifdef WMOPS #include "wmc_auto.h" -#endif - /*---------------------------------------------------------------------* * Local struct -- GitLab From 1701881c631371deb7d5a001c1fbf792a13d8922 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 29 Nov 2022 14:00:00 +0100 Subject: [PATCH 039/103] run with Linux binary instead of wine --- scripts/prepare_instrumentation.sh | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/scripts/prepare_instrumentation.sh b/scripts/prepare_instrumentation.sh index d9fab685ea..2f0159780a 100755 --- a/scripts/prepare_instrumentation.sh +++ b/scripts/prepare_instrumentation.sh @@ -30,13 +30,9 @@ # the United Nations Convention on Contracts on the International Sales of Goods. # -emulator="" system=`uname -s` if [[ ($system == "Linux") && (`uname -a` =~ (microsoft|Microsoft|wsl|WSL) ) ]]; then - system="WSL" -fi -if [[ ($system == "Linux") || ($system == "Darwin") ]]; then - emulator="wine" + system="Linux" fi coan_exists () { @@ -100,10 +96,8 @@ fi find $targetdir -name "*.[ch]" -exec sed -i.bak -e "s/\(0x[0-9a-fA-F]*\)UL/\(\(unsigned long\)\1\)/" \{\} \; # run wmc_tool using wine -${emulator} ./wmc_tool.exe $targetdir/lib_enc/*.c /ic /op > /dev/null -${emulator} ./wmc_tool.exe $targetdir/lib_com/*.c /ic /op > /dev/null -${emulator} ./wmc_tool.exe $targetdir/lib_dec/*.c /ic /op > /dev/null -${emulator} ./wmc_tool.exe $targetdir/lib_rend/*.c /ic /op > /dev/null +scripts/tools/$system/wmc_tool -m "$targetdir/apps/encoder.c" "$targetdir/lib_enc/*.c" "$targetdir/lib_com/*.c" > /dev/null +scripts/tools/$system/wmc_tool -m "$targetdir/apps/decoder.c" "$targetdir/lib_dec/*.c" "$targetdir/lib_com/*.c" "$targetdir/lib_rend/*.c" > /dev/null # automatically enable #define WMOPS in options.h sed -i.bak -e "s/\/\*\s*\(#define\s*WMOPS\)\s*\*\//\1/g" $targetdir/lib_com/options.h -- GitLab From dca5d5b0de27dd121fdd0c80b35614fee820e390 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 29 Nov 2022 14:54:54 +0100 Subject: [PATCH 040/103] fix dir name --- scripts/prepare_instrumentation.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/prepare_instrumentation.sh b/scripts/prepare_instrumentation.sh index 2f0159780a..aec8eb1e0c 100755 --- a/scripts/prepare_instrumentation.sh +++ b/scripts/prepare_instrumentation.sh @@ -86,7 +86,7 @@ fi # strip switches, to remove the macros if coan_exists; then - coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{com,dec,enc,rend,util,debug}/*.[hc] + coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{com,dec,enc,rend,util,debug}/(?!wmc_auto)*.[hc] coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/apps/*.[hc] else ./strip_defines_cppp.sh $targetdir $ifdef_list @@ -96,8 +96,8 @@ fi find $targetdir -name "*.[ch]" -exec sed -i.bak -e "s/\(0x[0-9a-fA-F]*\)UL/\(\(unsigned long\)\1\)/" \{\} \; # run wmc_tool using wine -scripts/tools/$system/wmc_tool -m "$targetdir/apps/encoder.c" "$targetdir/lib_enc/*.c" "$targetdir/lib_com/*.c" > /dev/null -scripts/tools/$system/wmc_tool -m "$targetdir/apps/decoder.c" "$targetdir/lib_dec/*.c" "$targetdir/lib_com/*.c" "$targetdir/lib_rend/*.c" > /dev/null +"tools/$system/wmc_tool" -m "$targetdir/apps/encoder.c" "$targetdir/lib_enc/*.c" "$targetdir/lib_com/*.c" > /dev/null +"tools/$system/wmc_tool" -m "$targetdir/apps/decoder.c" "$targetdir/lib_dec/*.c" "$targetdir/lib_com/*.c" "$targetdir/lib_rend/*.c" > /dev/null # automatically enable #define WMOPS in options.h sed -i.bak -e "s/\/\*\s*\(#define\s*WMOPS\)\s*\*\//\1/g" $targetdir/lib_com/options.h -- GitLab From ee5e18f9a5637828e02d4aecb88c1872ed128094 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Wed, 30 Nov 2022 16:36:58 +0100 Subject: [PATCH 041/103] Modifications in the complexity CI script --- .../genWebpageData_Ram.csh | 52 +-- .../genWebpageData_Rom.csh | 381 ++++++++++++++++-- ci/complexity_measurements/getWmops.sh | 24 +- .../mergeNewsletterRam.py | 20 +- .../mergeNewsletterRom.py | 88 ++++ .../parseNewsletterRam.py | 108 ++--- .../parseNewsletterRom.py | 121 +++++- 7 files changed, 648 insertions(+), 146 deletions(-) create mode 100644 ci/complexity_measurements/mergeNewsletterRom.py diff --git a/ci/complexity_measurements/genWebpageData_Ram.csh b/ci/complexity_measurements/genWebpageData_Ram.csh index a8dbc0e2f9..f5cc50aab4 100755 --- a/ci/complexity_measurements/genWebpageData_Ram.csh +++ b/ci/complexity_measurements/genWebpageData_Ram.csh @@ -77,10 +77,10 @@ foreach line ( "`cat ${tmpFile}`" ) set fullDate = `echo $tmp[3] | sed -e "s/_/\ /g"` set maxTotalRamEnc = $tmp[5] set maxTotalRamDec = $tmp[7] - set maxDynamicRamEnc = $tmp[10] - set maxDynamicRamDec = $tmp[12] - set maxStaticRamEnc = $tmp[15] - set maxStaticRamDec = $tmp[17] + set maxStackEnc = $tmp[10] + set maxStackDec = $tmp[12] + set maxHeapEnc = $tmp[15] + set maxHeapDec = $tmp[17] set logFile = $tmp[19] echo ' {' >> $file @@ -89,10 +89,10 @@ foreach line ( "`cat ${tmpFile}`" ) echo ' revision: "'${revision}'",' >> $file echo ' maxTotalRamEnc: "'${maxTotalRamEnc}'",' >> $file echo ' maxTotalRamDec: "'${maxTotalRamDec}'",' >> $file - echo ' maxDynamicRamEnc: "'${maxDynamicRamEnc}'",' >> $file - echo ' maxDynamicRamDec: "'${maxDynamicRamDec}'",' >> $file - echo ' maxStaticRamEnc: "'${maxStaticRamEnc}'",' >> $file - echo ' maxStaticRamDec: "'${maxStaticRamDec}'",' >> $file + echo ' maxStackEnc: "'${maxStackEnc}'",' >> $file + echo ' maxStackDec: "'${maxStackDec}'",' >> $file + echo ' maxHeapEnc: "'${maxHeapEnc}'",' >> $file + echo ' maxHeapDec: "'${maxHeapDec}'",' >> $file echo ' logFile: "'${logFile}'"' >> $file echo ' }'${separator} >> $file @@ -259,7 +259,7 @@ echo ' ]' >> $file echo ' },' >> $file # maxTotalRamDecScore -# maxDynamicRamCodecScore +# maxStackCodecScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -270,7 +270,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#004000",' >> $file -echo ' id: "maxDynamicRamCodecScore",' >> $file +echo ' id: "maxStackCodecScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -296,10 +296,10 @@ end echo ' ]' >> $file echo ' },' >> $file -# maxDynamicRamCodecScore +# maxStackCodecScore -# maxDynamicRamEncScore +# maxStackEncScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -310,7 +310,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#008000",' >> $file -echo ' id: "maxDynamicRamEncScore",' >> $file +echo ' id: "maxStackEncScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -336,9 +336,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# maxDynamicRamEncScore +# maxStackEncScore -# maxDynamicRamDecScore +# maxStackDecScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -349,7 +349,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#00FF00",' >> $file -echo ' id: "maxDynamicRamDecScore",' >> $file +echo ' id: "maxStackDecScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -375,9 +375,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# maxDynamicRamDecScore +# maxStackDecScore -# maxStaticRamCodecScore +# maxHeapCodecScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -388,7 +388,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#800080",' >> $file -echo ' id: "maxStaticRamCodecScore",' >> $file +echo ' id: "maxHeapCodecScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -414,9 +414,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# maxStaticRamCodecScore +# maxHeapCodecScore -# maxStaticRamEncScore +# maxHeapEncScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -427,7 +427,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#0000FF",' >> $file -echo ' id: "maxStaticRamEncScore",' >> $file +echo ' id: "maxHeapEncScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -453,9 +453,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# maxStaticRamEncScore +# maxHeapEncScore -# maxStaticRamDecScore +# maxHeapDecScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -466,7 +466,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#0080C0",' >> $file -echo ' id: "maxStaticRamDecScore",' >> $file +echo ' id: "maxHeapDecScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -492,7 +492,7 @@ end echo ' ]' >> $file echo ' }' >> $file -# maxStaticRamDecScore +# maxHeapDecScore echo ' ]' >> $file # end displays diff --git a/ci/complexity_measurements/genWebpageData_Rom.csh b/ci/complexity_measurements/genWebpageData_Rom.csh index d2ef2daf15..fb4d24528b 100755 --- a/ci/complexity_measurements/genWebpageData_Rom.csh +++ b/ci/complexity_measurements/genWebpageData_Rom.csh @@ -31,61 +31,68 @@ set maxValues = 40 if (${#argv} != 3) then - echo usage: $0 \ \ \ \ + echo usage: $0 \ \ \ exit endif -set srcFile1 = $1 - +set srcFile = $1 set file_final = $2 set file = ${file_final}_new_$$ set graphName = $3 set tmpBase = `basename $0` -set tmpFile1 = /tmp/${tmpBase}1_$$ -set tmpFile2 = /tmp/${tmpBase}2_$$ -rm -f ${tmpFile1} ${tmpFile2} -cat ${srcFile1} | tail -n ${maxValues} > ${tmpFile1} -set nLines1 = `cat ${tmpFile1} | wc -l` -set maxNumWordsLine1 = 5 -set maxNumWordsLine2 = 5 +set tmpFile = /tmp/${tmpBase}_$$ +rm -f ${tmpFile} +cat ${srcFile} | tail -n ${maxValues} > ${tmpFile} +set nLines = `cat ${tmpFile} | wc -l` +set maxNumWordsLine = 19 rm -f $file touch $file echo "var $graphName = {" >> $file echo ' rom_worstcase: {' >> $file -echo ' description: "Worst Case ROM",' >> $file +echo ' description: "ROM",' >> $file echo ' direction: -1,' >> $file echo ' runs: [' >> $file - @ i = 0 -foreach line ( "`cat ${tmpFile1}`" ) +foreach line ( "`cat ${tmpFile}`" ) @ i++ set separator = "," - if ( $i == $nLines1 ) then + if ( $i == $nLines ) then set separator = "" endif set tmp = ( $line ) set numWords = `echo $tmp | wc -w` - if ( $numWords < $maxNumWordsLine1 ) then + if ( $numWords < $maxNumWordsLine ) then continue endif set revision = $tmp[1] set shortDate = `echo $tmp[2] | sed -e "s/_/\ /g"` set fullDate = `echo $tmp[3] | sed -e "s/_/\ /g"` - set logFileFlc = $tmp[5] + set TotalRomEnc = $tmp[5] + set TotalRomDec = $tmp[7] + set PromEnc = $tmp[10] + set PromDec = $tmp[12] + set TromEnc = $tmp[15] + set TromDec = $tmp[17] + set logFile = $tmp[19] echo ' {' >> $file echo ' fullDate: "'${fullDate}'",' >> $file echo ' shortDate: "'${shortDate}'",' >> $file echo ' revision: "'${revision}'",' >> $file - echo ' logFileFlc: "'${logFileFlc}'",' >> $file -# echo ' logFileBasop: "'${logFileBasop[$i]}'"' >> $file + echo ' TotalRomEnc: "'${TotalRomEnc}'",' >> $file + echo ' TotalRomDec: "'${TotalRomDec}'",' >> $file + echo ' PromEnc: "'${PromEnc}'",' >> $file + echo ' PromDec: "'${PromDec}'",' >> $file + echo ' TromEnc: "'${TromEnc}'",' >> $file + echo ' TromDec: "'${TromDec}'",' >> $file + echo ' logFile: "'${logFile}'"' >> $file echo ' }'${separator} >> $file end @@ -94,7 +101,7 @@ echo ' ],' >> $file # begin displays echo ' displays: [' >> $file -# requirement ROM +# requirement ROM echo ' {' >> $file echo ' lines: { show: false },' >> $file echo ' points: { show: false, fillColor: "#ffffff" },' >> $file @@ -109,16 +116,16 @@ echo ' id: "requirementRom",' >> $file echo ' data: [' >> $file @ i = 0 -foreach line ( "`cat ${tmpFile1}`" ) +foreach line ( "`cat ${tmpFile}`" ) set separator = "," - if ( $i == $nLines1 - 1 ) then + if ( $i == $nLines - 1 ) then set separator = "" endif set tmp = ( $line ) set numWords = `echo $tmp | wc -w` - if ( $numWords < $maxNumWordsLine1 ) then + if ( $numWords < $maxNumWordsLine ) then continue endif @@ -134,7 +141,7 @@ echo ' ]' >> $file echo ' },' >> $file # requirement ROM -# maxTablesizeCodecScore FLC +# TotalRomCodecScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -144,21 +151,21 @@ echo ' markingsLineWidth: .75,' >> $file echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file -echo ' color: "#FF8000",' >> $file -echo ' id: "maxRomFlc",' >> $file +echo ' color: "#FF0000",' >> $file +echo ' id: "TotalRomCodecScore",' >> $file echo ' data: [' >> $file @ i = 0 -foreach line ( "`cat ${tmpFile1}`" ) +foreach line ( "`cat ${tmpFile}`" ) set separator = "," - if ( $i == $nLines1 - 1 ) then + if ( $i == $nLines - 1 ) then set separator = "" endif set tmp = ( $line ) set numWords = `echo $tmp | wc -w` - if ( $numWords < $maxNumWordsLine1 ) then + if ( $numWords < $maxNumWordsLine ) then continue endif @@ -169,9 +176,323 @@ foreach line ( "`cat ${tmpFile1}`" ) end +echo ' ]' >> $file +echo ' },' >> $file +# TotalRomCodecScore + +# TotalRomEncScore +echo ' {' >> $file +echo ' lines: { show: true },' >> $file +echo ' points: { show: true, fillColor: "#ffffff" },' >> $file +echo ' borderWidth: 1.5,' >> $file +echo ' borderColor: "#BEBEBE",' >> $file +echo ' markingsLineWidth: .75,' >> $file +echo ' hoverable: true,' >> $file +echo ' clickable: true,' >> $file +echo ' shadowSize: 0,' >> $file +echo ' color: "#FF8000",' >> $file +echo ' id: "TotalRomEncScore",' >> $file +echo ' data: [' >> $file + +@ i = 0 +foreach line ( "`cat ${tmpFile}`" ) + set separator = "," + if ( $i == $nLines - 1 ) then + set separator = "" + endif + + set tmp = ( $line ) + + set numWords = `echo $tmp | wc -w` + if ( $numWords < $maxNumWordsLine ) then + continue + endif + + set score = $tmp[6] + + echo ' ['"${i}, ${score}"']'${separator} >> $file + @ i++ + +end + +echo ' ]' >> $file +echo ' },' >> $file +# TotalRomEncScore + +# TotalRomDecScore +echo ' {' >> $file +echo ' lines: { show: true },' >> $file +echo ' points: { show: true, fillColor: "#ffffff" },' >> $file +echo ' borderWidth: 1.5,' >> $file +echo ' borderColor: "#BEBEBE",' >> $file +echo ' markingsLineWidth: .75,' >> $file +echo ' hoverable: true,' >> $file +echo ' clickable: true,' >> $file +echo ' shadowSize: 0,' >> $file +echo ' color: "#FFFF00",' >> $file +echo ' id: "TotalRomDecScore",' >> $file +echo ' data: [' >> $file + +@ i = 0 +foreach line ( "`cat ${tmpFile}`" ) + set separator = "," + if ( $i == $nLines - 1 ) then + set separator = "" + endif + + set tmp = ( $line ) + + set numWords = `echo $tmp | wc -w` + if ( $numWords < $maxNumWordsLine ) then + continue + endif + + set score = $tmp[8] + + echo ' ['"${i}, ${score}"']'${separator} >> $file + @ i++ + +end + +echo ' ]' >> $file +echo ' },' >> $file +# TotalRomDecScore + +# PROMCodecScore +echo ' {' >> $file +echo ' lines: { show: true },' >> $file +echo ' points: { show: true, fillColor: "#ffffff" },' >> $file +echo ' borderWidth: 1.5,' >> $file +echo ' borderColor: "#BEBEBE",' >> $file +echo ' markingsLineWidth: .75,' >> $file +echo ' hoverable: true,' >> $file +echo ' clickable: true,' >> $file +echo ' shadowSize: 0,' >> $file +echo ' color: "#004000",' >> $file +echo ' id: "PROMCodecScore",' >> $file +echo ' data: [' >> $file + +@ i = 0 +foreach line ( "`cat ${tmpFile}`" ) + set separator = "," + if ( $i == $nLines - 1 ) then + set separator = "" + endif + + set tmp = ( $line ) + + set numWords = `echo $tmp | wc -w` + if ( $numWords < $maxNumWordsLine ) then + continue + endif + + set score = $tmp[9] + + echo ' ['"${i}, ${score}"']'${separator} >> $file + @ i++ + +end + +echo ' ]' >> $file +echo ' },' >> $file +# PROMCodecScore + + +# PROMEncScore +echo ' {' >> $file +echo ' lines: { show: true },' >> $file +echo ' points: { show: true, fillColor: "#ffffff" },' >> $file +echo ' borderWidth: 1.5,' >> $file +echo ' borderColor: "#BEBEBE",' >> $file +echo ' markingsLineWidth: .75,' >> $file +echo ' hoverable: true,' >> $file +echo ' clickable: true,' >> $file +echo ' shadowSize: 0,' >> $file +echo ' color: "#008000",' >> $file +echo ' id: "PROMEncScore",' >> $file +echo ' data: [' >> $file + +@ i = 0 +foreach line ( "`cat ${tmpFile}`" ) + set separator = "," + if ( $i == $nLines - 1 ) then + set separator = "" + endif + + set tmp = ( $line ) + + set numWords = `echo $tmp | wc -w` + if ( $numWords < $maxNumWordsLine ) then + continue + endif + + set score = $tmp[11] + + echo ' ['"${i}, ${score}"']'${separator} >> $file + @ i++ + +end + +echo ' ]' >> $file +echo ' },' >> $file +# PROMEncScore + +# PROMDecScore +echo ' {' >> $file +echo ' lines: { show: true },' >> $file +echo ' points: { show: true, fillColor: "#ffffff" },' >> $file +echo ' borderWidth: 1.5,' >> $file +echo ' borderColor: "#BEBEBE",' >> $file +echo ' markingsLineWidth: .75,' >> $file +echo ' hoverable: true,' >> $file +echo ' clickable: true,' >> $file +echo ' shadowSize: 0,' >> $file +echo ' color: "#00FF00",' >> $file +echo ' id: "PROMDecScore",' >> $file +echo ' data: [' >> $file + +@ i = 0 +foreach line ( "`cat ${tmpFile}`" ) + set separator = "," + if ( $i == $nLines - 1 ) then + set separator = "" + endif + + set tmp = ( $line ) + + set numWords = `echo $tmp | wc -w` + if ( $numWords < $maxNumWordsLine ) then + continue + endif + + set score = $tmp[13] + + echo ' ['"${i}, ${score}"']'${separator} >> $file + @ i++ + +end + +echo ' ]' >> $file +echo ' },' >> $file +# PROMDecScore + +# TROMCodecScore +echo ' {' >> $file +echo ' lines: { show: true },' >> $file +echo ' points: { show: true, fillColor: "#ffffff" },' >> $file +echo ' borderWidth: 1.5,' >> $file +echo ' borderColor: "#BEBEBE",' >> $file +echo ' markingsLineWidth: .75,' >> $file +echo ' hoverable: true,' >> $file +echo ' clickable: true,' >> $file +echo ' shadowSize: 0,' >> $file +echo ' color: "#800080",' >> $file +echo ' id: "TROMCodecScore",' >> $file +echo ' data: [' >> $file + +@ i = 0 +foreach line ( "`cat ${tmpFile}`" ) + set separator = "," + if ( $i == $nLines - 1 ) then + set separator = "" + endif + + set tmp = ( $line ) + + set numWords = `echo $tmp | wc -w` + if ( $numWords < $maxNumWordsLine ) then + continue + endif + + set score = $tmp[14] + + echo ' ['"${i}, ${score}"']'${separator} >> $file + @ i++ + +end + +echo ' ]' >> $file +echo ' },' >> $file +# TROMCodecScore + +# TROMEncScore +echo ' {' >> $file +echo ' lines: { show: true },' >> $file +echo ' points: { show: true, fillColor: "#ffffff" },' >> $file +echo ' borderWidth: 1.5,' >> $file +echo ' borderColor: "#BEBEBE",' >> $file +echo ' markingsLineWidth: .75,' >> $file +echo ' hoverable: true,' >> $file +echo ' clickable: true,' >> $file +echo ' shadowSize: 0,' >> $file +echo ' color: "#0000FF",' >> $file +echo ' id: "TROMEncScore",' >> $file +echo ' data: [' >> $file + +@ i = 0 +foreach line ( "`cat ${tmpFile}`" ) + set separator = "," + if ( $i == $nLines - 1 ) then + set separator = "" + endif + + set tmp = ( $line ) + + set numWords = `echo $tmp | wc -w` + if ( $numWords < $maxNumWordsLine ) then + continue + endif + + set score = $tmp[16] + + echo ' ['"${i}, ${score}"']'${separator} >> $file + @ i++ + +end + +echo ' ]' >> $file +echo ' },' >> $file +# TROMEncScore + +# TROMDecScore +echo ' {' >> $file +echo ' lines: { show: true },' >> $file +echo ' points: { show: true, fillColor: "#ffffff" },' >> $file +echo ' borderWidth: 1.5,' >> $file +echo ' borderColor: "#BEBEBE",' >> $file +echo ' markingsLineWidth: .75,' >> $file +echo ' hoverable: true,' >> $file +echo ' clickable: true,' >> $file +echo ' shadowSize: 0,' >> $file +echo ' color: "#0080C0",' >> $file +echo ' id: "TROMDecScore",' >> $file +echo ' data: [' >> $file + +@ i = 0 +foreach line ( "`cat ${tmpFile}`" ) + set separator = "," + if ( $i == $nLines - 1 ) then + set separator = "" + endif + + set tmp = ( $line ) + + set numWords = `echo $tmp | wc -w` + if ( $numWords < $maxNumWordsLine ) then + continue + endif + + set score = $tmp[18] + + echo ' ['"${i}, ${score}"']'${separator} >> $file + @ i++ + +end + echo ' ]' >> $file echo ' }' >> $file -# maxTablesizeCodecScore FLC +# TROMDecScore + echo ' ]' >> $file # end displays @@ -179,4 +500,4 @@ echo ' }' >> $file echo '};' >> $file mv -f $file $file_final -rm -f $tmpFile1 +rm -f $tmpFile diff --git a/ci/complexity_measurements/getWmops.sh b/ci/complexity_measurements/getWmops.sh index b14933c91e..9c4c8a4835 100755 --- a/ci/complexity_measurements/getWmops.sh +++ b/ci/complexity_measurements/getWmops.sh @@ -55,8 +55,9 @@ wmopsFilenameFlc=${destDir}/wmops/logs/${wmopsFilenameFlcLast} # instrument and build ./scripts/IvasBuildAndRunChecks.py -p $config_file --checks COMPLEXITY --create_complexity_tables ${wmopsFilenameFlc} -C $ivas_format -f ${ep} --oc $output_format +# ./scripts/IvasBuildAndRunChecks.py -z debug -p $config_file --checks COMPLEXITY --create_complexity_tables ${wmopsFilenameFlc} -m stereo_b24_4_swb_cbr -C stereo -f ${ep} --oc stereo -# now get the info on worst case operating point: WMOPS number, enc-operating mode, dec-operating mode +# get the info on worst-case operating point: WMOPS number, enc-operating mode, dec-operating mode ### WMOPS ${scriptDir}/parseNewsletterWmops.py ${wmopsFilenameFlc}_WMOPS.csv ${wmopsFilenameFlcLast}_WMOPS.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_wmops_all.txt @@ -66,27 +67,24 @@ tcsh ${scriptDir}/genWebpageData_WMOPS.csh ${destDir}/wmops/log_wmops_all.txt # per mode graph tcsh ${scriptDir}/genWebpageData_WmopPerOperatingpoint.csh ${wmopsFilenameFlc}_WMOPS.csv ${destDir}/wmops/graphs_wmops_flc_perOP.js Graphs_WMOPS_perOP + # get memory info for webpage ### RAM -${scriptDir}/mergeNewsletterRam.py ${wmopsFilenameFlc}_SRAM.csv ${wmopsFilenameFlc}_DRAM.csv > ${wmopsFilenameFlc}_RAM.csv -${scriptDir}/parseNewsletterRam.py ${wmopsFilenameFlc}_SRAM.csv ${wmopsFilenameFlc}_DRAM.csv ${wmopsFilenameFlcLast}_RAM.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_ram_all.txt +${scriptDir}/mergeNewsletterRam.py ${wmopsFilenameFlc}_HEAP.csv ${wmopsFilenameFlc}_STACK.csv > ${wmopsFilenameFlc}_RAM.csv +${scriptDir}/parseNewsletterRam.py ${wmopsFilenameFlc}_HEAP.csv ${wmopsFilenameFlc}_STACK.csv ${wmopsFilenameFlcLast}_RAM.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_ram_all.txt # generate java script from database tcsh ${scriptDir}/genWebpageData_Ram.csh ${destDir}/wmops/log_ram_all.txt ${destDir}/wmops/graphs_ram_flc.js Graphs_RAM ### ROM -${scriptDir}/parseNewsletterRom.py ${wmopsFilenameFlc}_TABLES.csv ${wmopsFilenameFlcLast}_TABLES.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_rom_all.txt - -# generate java script from database -tcsh ${scriptDir}/genWebpageData_Rom.csh ${destDir}/wmops/log_rom_all.txt ${destDir}/wmops/graphs_rom_flc.js Graphs_ROM - # now go on with BASOP -promFilenameBasopLast="null" -promScoreBasop=0 +# promFilenameBasopLast="null" +# promScoreBasop=0 -### PROM -${scriptDir}/parseNewsletterProm.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlcLast}_PROM.csv ${commit_sha} ${shortDate} ${fullDate} ${promScoreBasop} ${promFilenameBasopLast} >> ${destDir}/wmops/log_prom_all.txt +${scriptDir}/mergeNewsletterRom.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlc}_TROM.csv > ${wmopsFilenameFlc}_ROM.csv +${scriptDir}/parseNewsletterRom.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlc}_TROM.csv ${wmopsFilenameFlcLast}_ROM.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_rom_all.txt # generate java script from database -tcsh ${scriptDir}/genWebpageData_Prom.csh ${destDir}/wmops/log_prom_all.txt ${destDir}/wmops/graphs_prom_flc.js Graphs_PROM +tcsh ${scriptDir}/genWebpageData_Rom.csh ${destDir}/wmops/log_rom_all.txt ${destDir}/wmops/graphs_rom_flc.js Graphs_ROM + diff --git a/ci/complexity_measurements/mergeNewsletterRam.py b/ci/complexity_measurements/mergeNewsletterRam.py index c5e61a9854..34b70a306c 100755 --- a/ci/complexity_measurements/mergeNewsletterRam.py +++ b/ci/complexity_measurements/mergeNewsletterRam.py @@ -39,23 +39,23 @@ shortDate = "" fullDate = "" if __name__ == "__main__": - newsletterFilenameSram = sys.argv[1] - newsletterFilenameDram = sys.argv[2] + newsletterFilenameHEAP = sys.argv[1] + newsletterFilenameSTACK = sys.argv[2] ram_table = {} -with open(newsletterFilenameSram, "r") as csvfile: - SRAM = csv.reader(csvfile, delimiter=";") - for row in SRAM: +with open(newsletterFilenameHEAP, "r") as csvfile: + HEAP = csv.reader(csvfile, delimiter=";") + for row in HEAP: if row[0] == "conf": continue key = row[0] lst = row[1:] ram_table[key] = lst -with open(newsletterFilenameDram, "r") as csvfile: - DRAM = csv.reader(csvfile, delimiter=";") - for row in DRAM: +with open(newsletterFilenameSTACK, "r") as csvfile: + STACK = csv.reader(csvfile, delimiter=";") + for row in STACK: if row[0] == "conf": continue key = row[0] @@ -63,9 +63,9 @@ with open(newsletterFilenameDram, "r") as csvfile: ram_table[key] += lst # now we have the following format -# SRAM enc, SRAM dec, SRAM total, DRAM enc, DRAM dec, DRAM max(enc, dec) +# HEAP enc, HEAP dec, HEAP total, STACK enc, STACK dec, STACK max(enc, dec) -print("conf;sram enc;sram dec;sram total;dram enc;dram dec;dram max;total") +print("conf;HEAP enc;HEAP dec;HEAP total;STACK enc;STACK dec;STACK max;total") for key in ram_table: ram = ram_table[key] diff --git a/ci/complexity_measurements/mergeNewsletterRom.py b/ci/complexity_measurements/mergeNewsletterRom.py new file mode 100644 index 0000000000..3ed69a8e09 --- /dev/null +++ b/ci/complexity_measurements/mergeNewsletterRom.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# coding: utf-8 + +# (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. +import csv +import sys +import re + +newsletterFilename = "" +newsletterFilenameLast = "" +revision = "" +shortDate = "" +fullDate = "" + +if __name__ == "__main__": + newsletterFilenamePROM = sys.argv[1] + newsletterFilenameTROM = sys.argv[2] + +rom_table = {} + +with open(newsletterFilenamePROM, "r") as csvfile: + PROM = csv.reader(csvfile, delimiter=";") + for row in PROM: + if row[0] == "conf": + continue + key = row[0] + lst = row[1:] + rom_table[key] = lst + +with open(newsletterFilenameTROM, "r") as csvfile: + TROM = csv.reader(csvfile, delimiter=";") + for row in TROM: + if row[0] == "conf": + continue + key = row[0] + lst = row[1:] + rom_table[key] += lst + +# now we have the following format +# PROM enc, PROM dec, PROM total, TROM enc, TROM dec, TROM total + +print("conf;PROM enc;PROM dec;PROM total;TROM enc;TROM dec;TROM total") + +for key in rom_table: + ram = rom_table[key] + total = int(ram[1]) + int(ram[2]) + int(ram[5]) + print( + key, + ";", + ram[0], + ";", + ram[1], + ";", + ram[2], + ";", + ram[3], + ";", + ram[4], + ";", + ram[5], + sep="", + ) diff --git a/ci/complexity_measurements/parseNewsletterRam.py b/ci/complexity_measurements/parseNewsletterRam.py index b099fb450f..ee0a9c3f75 100755 --- a/ci/complexity_measurements/parseNewsletterRam.py +++ b/ci/complexity_measurements/parseNewsletterRam.py @@ -41,8 +41,8 @@ shortDate = "" fullDate = "" if __name__ == "__main__": - newsletterFilenameSram = sys.argv[1] - newsletterFilenameDram = sys.argv[2] + newsletterFilenameHEAP = sys.argv[1] + newsletterFilenameSTACK = sys.argv[2] newsletterFilenameLast = sys.argv[3] revision = sys.argv[4] shortDate = sys.argv[5] @@ -52,28 +52,28 @@ max_total_enc = ["", 0] max_total_dec = ["", 0] max_total_encdec = ["", 0] -max_dynamic_enc = ["", 0] -max_dynamic_dec = ["", 0] -max_dynamic_encdec = ["", 0] +max_stack_enc = ["", 0] +max_stack_dec = ["", 0] +max_stack_encdec = ["", 0] -max_static_enc = ["", 0] -max_static_dec = ["", 0] -max_static_encdec = ["", 0] +max_heap_enc = ["", 0] +max_heap_dec = ["", 0] +max_heap_encdec = ["", 0] ram_table = {} -with open(newsletterFilenameSram, "r") as csvfile: - SRAM = csv.reader(csvfile, delimiter=";") - for row in SRAM: +with open(newsletterFilenameHEAP, "r") as csvfile: + HEAP = csv.reader(csvfile, delimiter=";") + for row in HEAP: if row[0] == "conf": continue key = row[0] lst = row[1:] ram_table[key] = lst -with open(newsletterFilenameDram, "r") as csvfile: - DRAM = csv.reader(csvfile, delimiter=";") - for row in DRAM: +with open(newsletterFilenameSTACK, "r") as csvfile: + STACK = csv.reader(csvfile, delimiter=";") + for row in STACK: if row[0] == "conf": continue key = row[0] @@ -81,55 +81,55 @@ with open(newsletterFilenameDram, "r") as csvfile: ram_table[key] += lst # now we have the following format -# SRAM enc, SRAM dec, SRAM total, DRAM enc, DRAM dec, DRAM max(enc, dec) +# HEAP enc, HEAP dec, HEAP total, STACK enc, STACK dec, STACK max(enc, dec) for key in ram_table: ram = ram_table[key] - static_enc = int(ram[0]) - static_dec = int(ram[1]) - static_encdec = static_enc + static_dec + heap_enc = int(ram[0]) + heap_dec = int(ram[1]) + heap_encdec = heap_enc + heap_dec - dynamic_enc = int(ram[3]) - dynamic_dec = int(ram[4]) - dynamic_encdec = int(ram[5]) + stack_enc = int(ram[3]) + stack_dec = int(ram[4]) + stack_encdec = int(ram[5]) - total_enc = static_enc + dynamic_enc - total_dec = static_dec + dynamic_dec - total_encdec = static_encdec + dynamic_encdec + total_enc = heap_enc + stack_enc + total_dec = heap_dec + stack_dec + total_encdec = heap_encdec + stack_encdec - if static_enc > max_static_enc[1]: - max_static_enc[0] = re.sub(" ", "_", key) - max_static_enc[1] = static_enc + if heap_enc > max_heap_enc[1]: + max_heap_enc[0] = re.sub(" ", "_", key) + max_heap_enc[1] = heap_enc - if static_dec > max_static_dec[1]: - max_static_dec[0] = re.sub(" ", "_", key) - max_static_dec[1] = static_dec + if heap_dec > max_heap_dec[1]: + max_heap_dec[0] = re.sub(" ", "_", key) + max_heap_dec[1] = heap_dec - if static_encdec > max_static_encdec[1]: - max_static_encdec[0] = re.sub(" ", "_", key) - max_static_encdec[1] = static_encdec + if heap_encdec > max_heap_encdec[1]: + max_heap_encdec[0] = re.sub(" ", "_", key) + max_heap_encdec[1] = heap_encdec - if dynamic_enc > max_dynamic_enc[1]: - max_dynamic_enc[0] = re.sub(" ", "_", key) - max_dynamic_enc[1] = dynamic_enc + if stack_enc > max_stack_enc[1]: + max_stack_enc[0] = re.sub(" ", "_", key) + max_stack_enc[1] = stack_enc - if dynamic_dec > max_dynamic_dec[1]: - max_dynamic_dec[0] = re.sub(" ", "_", key) - max_dynamic_dec[1] = dynamic_dec + if stack_dec > max_stack_dec[1]: + max_stack_dec[0] = re.sub(" ", "_", key) + max_stack_dec[1] = stack_dec - if dynamic_encdec > max_dynamic_encdec[1]: - max_dynamic_encdec[0] = re.sub(" ", "_", key) - max_dynamic_encdec[1] = dynamic_encdec + if stack_encdec > max_stack_encdec[1]: + max_stack_encdec[0] = re.sub(" ", "_", key) + max_stack_encdec[1] = stack_encdec if total_enc > max_total_enc[1]: max_total_enc[0] = re.sub(" ", "_", key) max_total_enc[1] = total_enc - if total_dec > max_static_dec[1]: + if total_dec > max_heap_dec[1]: max_total_dec[0] = re.sub(" ", "_", key) max_total_dec[1] = total_dec - if total_encdec > max_static_encdec[1]: + if total_encdec > max_heap_encdec[1]: max_total_encdec[0] = re.sub(" ", "_", key) max_total_encdec[1] = total_encdec @@ -142,15 +142,15 @@ print( max_total_enc[1], max_total_dec[0], max_total_dec[1], - max_dynamic_encdec[1], - max_dynamic_encdec[0], - max_dynamic_enc[1], - max_dynamic_dec[0], - max_dynamic_dec[1], - max_static_enc[1] + max_static_dec[1], - max_static_enc[0], - max_static_enc[1], - max_static_dec[0], - max_static_dec[1], + max_stack_encdec[1], + max_stack_encdec[0], + max_stack_enc[1], + max_stack_dec[0], + max_stack_dec[1], + max_heap_enc[1] + max_heap_dec[1], + max_heap_enc[0], + max_heap_enc[1], + max_heap_dec[0], + max_heap_dec[1], newsletterFilenameLast, ) diff --git a/ci/complexity_measurements/parseNewsletterRom.py b/ci/complexity_measurements/parseNewsletterRom.py index aeb7ee2650..3dae8893ea 100755 --- a/ci/complexity_measurements/parseNewsletterRom.py +++ b/ci/complexity_measurements/parseNewsletterRom.py @@ -42,21 +42,116 @@ shortDate = "" fullDate = "" if __name__ == "__main__": - newsletterFilename = sys.argv[1] - newsletterFilenameLast = sys.argv[2] - revision = sys.argv[3] - shortDate = sys.argv[4] - fullDate = sys.argv[5] + newsletterFilenamePROM = sys.argv[1] + newsletterFilenameTROM = sys.argv[2] + newsletterFilenameLast = sys.argv[3] + revision = sys.argv[4] + shortDate = sys.argv[5] + fullDate = sys.argv[6] -max_total = ["", 0] +max_total_enc = ["", 0] +max_total_dec = ["", 0] +max_total_encdec = ["", 0] -with open(newsletterFilename, "r") as csvfile: - rom = csv.reader(csvfile, delimiter=";") - for row in rom: +max_prom_enc = ["", 0] +max_prom_dec = ["", 0] +max_prom_encdec = ["", 0] + +max_trom_enc = ["", 0] +max_trom_dec = ["", 0] +max_trom_encdec = ["", 0] + +rom_table = {} + +with open(newsletterFilenamePROM, "r") as csvfile: + PROM = csv.reader(csvfile, delimiter=";") + for row in PROM: + if row[0] == "conf": + continue + key = row[0] + lst = row[1:] + rom_table[key] = lst + +with open(newsletterFilenameTROM, "r") as csvfile: + TROM = csv.reader(csvfile, delimiter=";") + for row in TROM: if row[0] == "conf": continue - if int(row[4]) > max_total[1]: - max_total[0] = re.sub(" ", "_", row[0]) - max_total[1] = int(row[4]) + key = row[0] + lst = row[1:] + rom_table[key] += lst + +# now we have the following format +# PROM enc, PROM dec, PROM total, TROM enc, TROM dec, TROM total + +for key in rom_table: + rom = rom_table[key] + prom_enc = int(rom[0]) + prom_dec = int(rom[1]) + prom_encdec = int(rom[2]) + + trom_enc = int(rom[3]) + trom_dec = int(rom[4]) + trom_encdec = int(rom[5]) + + total_enc = prom_enc + trom_enc + total_dec = prom_dec + trom_dec + total_encdec = prom_encdec + trom_encdec + + if prom_enc > max_prom_enc[1]: + max_prom_enc[0] = re.sub(" ", "_", key) + max_prom_enc[1] = prom_enc + + if prom_dec > max_prom_dec[1]: + max_prom_dec[0] = re.sub(" ", "_", key) + max_prom_dec[1] = prom_dec + + if prom_encdec > max_prom_encdec[1]: + max_prom_encdec[0] = re.sub(" ", "_", key) + max_prom_encdec[1] = prom_encdec + + if trom_enc > max_trom_enc[1]: + max_trom_enc[0] = re.sub(" ", "_", key) + max_trom_enc[1] = trom_enc + + if trom_dec > max_trom_dec[1]: + max_trom_dec[0] = re.sub(" ", "_", key) + max_trom_dec[1] = trom_dec + + if trom_encdec > max_trom_encdec[1]: + max_trom_encdec[0] = re.sub(" ", "_", key) + max_trom_encdec[1] = trom_encdec + + if total_enc > max_total_enc[1]: + max_total_enc[0] = re.sub(" ", "_", key) + max_total_enc[1] = total_enc + + if total_dec > max_prom_dec[1]: + max_total_dec[0] = re.sub(" ", "_", key) + max_total_dec[1] = total_dec + + if total_encdec > max_prom_encdec[1]: + max_total_encdec[0] = re.sub(" ", "_", key) + max_total_encdec[1] = total_encdec -print(revision, shortDate, fullDate, max_total[1], newsletterFilenameLast) +print( + revision, #set revision = $tmp[1] + shortDate, #set shortDate = `echo $tmp[2] | sed -e "s/_/\ /g"` + fullDate, #set fullDate = `echo $tmp[3] | sed -e "s/_/\ /g"` + max_total_encdec[1], #TotalRomCodecScore + max_total_enc[0], #set TotalRomEnc = $tmp[5] + max_total_enc[1], #TotalRomEncScore + max_total_dec[0], #set TotalRomDec = $tmp[7] + max_total_dec[1], #TotalRomDecScore + max_prom_encdec[1], #PROMCodecScore + max_prom_enc[0], #set PromEnc = $tmp[10] + max_prom_enc[1], #PROMEncScore + max_prom_dec[0], #set PromDec = $tmp[12] + max_prom_dec[1], #PROMDecScore + max_trom_encdec[1], #TROMCodecScore + max_trom_enc[0], #set TromEnc = $tmp[15] + max_trom_enc[1], #TROMEncScore + max_trom_dec[0], #set TromDec = $tmp[17] + max_trom_dec[1], #TROMDecScore + newsletterFilenameLast, #set logFile = $tmp[19] +) -- GitLab From bc5a0f8539dce7473228c74e1e4fdf6278ad3458 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 30 Nov 2022 18:15:52 +0100 Subject: [PATCH 042/103] Further modifications to the complexity scripts --- .../genWebpageData_Prom.csh | 220 ------------------ .../parseNewsletterProm.py | 73 ------ scripts/pyivastest/IvasModeAnalyzer.py | 70 +++--- 3 files changed, 42 insertions(+), 321 deletions(-) delete mode 100755 ci/complexity_measurements/genWebpageData_Prom.csh delete mode 100755 ci/complexity_measurements/parseNewsletterProm.py diff --git a/ci/complexity_measurements/genWebpageData_Prom.csh b/ci/complexity_measurements/genWebpageData_Prom.csh deleted file mode 100755 index d6e716f0c5..0000000000 --- a/ci/complexity_measurements/genWebpageData_Prom.csh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/tcsh - -# (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. - -set maxValues = 40 - -if (${#argv} != 3) then - echo usage: $0 \ \ \ - exit -endif - -set srcFile1 = $1 - -set file_final = $2 -set file = ${file_final}_new_$$ - -set graphName = $3 - -set tmpBase = `basename $0` -set tmpFile1 = /tmp/${tmpBase}1_$$ -rm -f ${tmpFile1} -cat ${srcFile1} | tail -n ${maxValues} > ${tmpFile1} -set nLines1 = `cat ${tmpFile1} | wc -l` -set maxNumWordsLine = 7 - -rm -f $file -touch $file - -echo "var $graphName = {" >> $file -echo ' prom_worstcase: {' >> $file -echo ' description: "Worst Case PROM",' >> $file -echo ' direction: -1,' >> $file -echo ' runs: [' >> $file - - -@ i = 0 -foreach line ( "`cat ${tmpFile1}`" ) - @ i++ - set separator = "," - if ( $i == $nLines1 ) then - set separator = "" - endif - - set tmp = ( $line ) - - set numWords = `echo $tmp | wc -w` - if ( $numWords < $maxNumWordsLine ) then - continue - endif - - set revision = $tmp[1] - set shortDate = `echo $tmp[2] | sed -e "s/_/\ /g"` - set fullDate = `echo $tmp[3] | sed -e "s/_/\ /g"` - set logFileFlc = $tmp[5] - set logFileBasop = $tmp[7] - - echo ' {' >> $file - echo ' fullDate: "'${fullDate}'",' >> $file - echo ' shortDate: "'${shortDate}'",' >> $file - echo ' revision: "'${revision}'",' >> $file - echo ' logFileFlc: "'${logFileFlc}'",' >> $file - echo ' logFileBasop: "'${logFileBasop}'",' >> $file - echo ' }'${separator} >> $file - -end -echo ' ],' >> $file - -# begin displays -echo ' displays: [' >> $file - -# requirement PROM -echo ' {' >> $file -echo ' lines: { show: false },' >> $file -echo ' points: { show: false, fillColor: "#ffffff" },' >> $file -echo ' borderWidth: 1.5,' >> $file -echo ' borderColor: "#BEBEBE",' >> $file -echo ' markingsLineWidth: .75,' >> $file -echo ' hoverable: true,' >> $file -echo ' clickable: true,' >> $file -echo ' shadowSize: 0,' >> $file -echo ' color: "#000000",' >> $file -echo ' id: "requirementProm",' >> $file -echo ' data: [' >> $file - -@ i = 0 -foreach line ( "`cat ${tmpFile1}`" ) - set separator = "," - if ( $i == $nLines1 - 1 ) then - set separator = "" - endif - - set tmp = ( $line ) - - set numWords = `echo $tmp | wc -w` - if ( $numWords < $maxNumWordsLine ) then - continue - endif - - # TODO: add real requirement once decided on - set score = 0 - - echo ' ['"${i}, ${score}"']'${separator} >> $file - @ i++ - -end - -echo ' ]' >> $file -echo ' },' >> $file -# requirement ROM - -# measured ops FLC -echo ' {' >> $file -echo ' lines: { show: true },' >> $file -echo ' points: { show: true, fillColor: "#ffffff" },' >> $file -echo ' borderWidth: 1.5,' >> $file -echo ' borderColor: "#BEBEBE",' >> $file -echo ' markingsLineWidth: .75,' >> $file -echo ' hoverable: true,' >> $file -echo ' clickable: true,' >> $file -echo ' shadowSize: 0,' >> $file -echo ' color: "#FF8000",' >> $file -echo ' id: "promOpsFlc",' >> $file -echo ' data: [' >> $file - -@ i = 0 -foreach line ( "`cat ${tmpFile1}`" ) - set separator = "," - if ( $i == $nLines1 - 1 ) then - set separator = "" - endif - - set tmp = ( $line ) - - set numWords = `echo $tmp | wc -w` - if ( $numWords < $maxNumWordsLine ) then - continue - endif - - set score = $tmp[4] - - echo ' ['"${i}, ${score}"']'${separator} >> $file - @ i++ - -end - -echo ' ]' >> $file -echo ' },' >> $file -# measured ops FLC - -# measured ops BASOP -echo ' {' >> $file -echo ' lines: { show: false },' >> $file -echo ' points: { show: false, fillColor: "#ffffff" },' >> $file -echo ' borderWidth: 1.5,' >> $file -echo ' borderColor: "#BEBEBE",' >> $file -echo ' markingsLineWidth: .75,' >> $file -echo ' hoverable: true,' >> $file -echo ' clickable: true,' >> $file -echo ' shadowSize: 0,' >> $file -echo ' color: "#0080FF",' >> $file -echo ' id: "promOpsBasop",' >> $file -echo ' data: [' >> $file - -@ i = 0 -foreach line ( "`cat ${tmpFile1}`" ) - set separator = "," - if ( $i == $nLines1 - 1 ) then - set separator = "" - endif - - set tmp = ( $line ) - - set numWords = `echo $tmp | wc -w` - if ( $numWords < $maxNumWordsLine ) then - continue - endif - - set score = $tmp[6] - - echo ' ['"${i}, ${score}"']'${separator} >> $file - @ i++ - -end - -echo ' ]' >> $file -echo ' }' >> $file - -echo ' ]' >> $file - -echo ' }' >> $file -echo '};' >> $file - -mv -f $file $file_final -rm -f ${tmpFile1} diff --git a/ci/complexity_measurements/parseNewsletterProm.py b/ci/complexity_measurements/parseNewsletterProm.py deleted file mode 100755 index 072cb03c21..0000000000 --- a/ci/complexity_measurements/parseNewsletterProm.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env python3 -# coding: utf-8 -""" - (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. -""" - -import csv -import sys -import re - -newsletterFilename = "" -newsletterFilenameLast = "" -revision = "" -shortDate = "" -fullDate = "" -maxPromOpsBasop = "" -logfileBasop = "" - -if __name__ == "__main__": - newsletterFilename = sys.argv[1] - newsletterFilenameLast = sys.argv[2] - revision = sys.argv[3] - shortDate = sys.argv[4] - fullDate = sys.argv[5] - maxPromOpsBasop = sys.argv[6] - logfileBasop = sys.argv[7] - -max_total = ["", 0] - -with open(newsletterFilename, "r") as csvfile: - prom = csv.reader(csvfile, delimiter=";") - for row in prom: - if row[0] == "conf": - continue - if int(row[4]) > max_total[1]: - max_total[0] = re.sub(" ", "_", row[0]) - max_total[1] = int(row[4]) - -print( - revision, - shortDate, - fullDate, - max_total[1], - newsletterFilenameLast, - maxPromOpsBasop, - logfileBasop, -) diff --git a/scripts/pyivastest/IvasModeAnalyzer.py b/scripts/pyivastest/IvasModeAnalyzer.py index 678af1906a..178b2faa35 100644 --- a/scripts/pyivastest/IvasModeAnalyzer.py +++ b/scripts/pyivastest/IvasModeAnalyzer.py @@ -52,45 +52,43 @@ INSTRUMENTED_RESULTS = { "strip_suffix": False, "encdec": 2, }, - "SRAM": { - "keyword": "Static RAM size", + "HEAP": { + "keyword": "Maximum inter-frame heap size:", "number_format": "{:.0f}", - "position": 4, + "position": 0, "max_or_add": "add", - "keyword_suffix": True, - "strip_suffix": True, + "keyword_suffix": False, + "strip_suffix": False, "encdec": 2, }, - "DRAM": { - "keyword": "Stack size", + "STACK": { + "keyword": "Maximum stack size:", "number_format": "{:.0f}", - "position": 3, + "position": 0, "max_or_add": "max", - "keyword_suffix": True, - "strip_suffix": True, + "keyword_suffix": False, + "strip_suffix": False, "encdec": 2, }, "PROM": { - "keyword": "PROM size", + "keyword": "Program ROM size", "number_format": "{:.0f}", - "position": 3, + "position": 0, "max_or_add": "add", "keyword_suffix": True, "strip_suffix": True, "encdec": 4, }, - "TABLES": { - "keyword": "Table ROM size", + "TROM": { + "keyword": "Table ROM (const data) size", "number_format": "{:.0f}", - "position": 4, + "position": 0, "max_or_add": "add", "keyword_suffix": True, "strip_suffix": True, "encdec": 4, }, } - - HTML_DOCTYPE = """""" HTML_META = ( @@ -254,32 +252,44 @@ class IvasModeAnalyzer(IvasModeCollector): @staticmethod def get_log_value_from_file( - filename: str, keyword: str, position: int, strip_suffix=0 + filename: str, keywords: list, position: int, strip_suffix=0 ): """ Parameters ---------- - filename : + filename : log filename - keyword : + keywords : list of keywords to be searched in the log file (must be present on a single line) - position : + position : index to the list of extracted values strip_suffix : (Default value = 0) Returns ------- + + First value extracted from the line in the log file containing all keywords """ - loglines = [] + + if type(keywords) != list: + keywords = [keywords] + if os.path.exists(filename): fp = open(filename) loglines = fp.readlines() - return IvasModeAnalyzer.get_log_value( - loglines, keyword, position, strip_suffix=strip_suffix - ) + fp.close() + matching_lines = [line for line in loglines if all(keyword in line for keyword in keywords)] + + for line in matching_lines: + all_values_on_line = [float(s) for s in line.split() if re.match(r'^[0-9\.]*$', s)] + if all_values_on_line: + return all_values_on_line[position] + + return -1.0 + def sort_log_modes(self): list_to_sort = [] @@ -389,7 +399,7 @@ class IvasModeAnalyzer(IvasModeCollector): enc_value, self.get_log_value_from_file( enc_log_name, - " ".join([keyword, "\(encoder\)"]), + [keyword, "lib_enc"], position, strip_suffix=strip_suffix, ), @@ -411,7 +421,7 @@ class IvasModeAnalyzer(IvasModeCollector): com_value, self.get_log_value_from_file( enc_log_name, - " ".join([keyword, "\(common\)"]), + [keyword, "lib_com"], position, strip_suffix=strip_suffix, ), @@ -435,7 +445,7 @@ class IvasModeAnalyzer(IvasModeCollector): dec_value, self.get_log_value_from_file( dec_log_name, - " ".join([keyword, "\(decoder\)"]), + [keyword, "lib_dec"], position, strip_suffix=strip_suffix, ), @@ -885,6 +895,10 @@ class IvasModeAnalyzer(IvasModeCollector): ------- """ + + if not os.path.exists(os.path.dirname(csv_file_name)): + os.makedirs(os.path.dirname(csv_file_name)) + with open(csv_file_name + ".csv", "w", newline="\n") as f: header = result_table.pop(0) # write header -- GitLab From 440e8dd515e11c1f4259a4e4fe4283bca703f881 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 1 Dec 2022 08:32:20 +0100 Subject: [PATCH 043/103] avoid warning command within array index --- lib_enc/ivas_agc_enc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib_enc/ivas_agc_enc.c b/lib_enc/ivas_agc_enc.c index 791e3a225e..146cf2597a 100644 --- a/lib_enc/ivas_agc_enc.c +++ b/lib_enc/ivas_agc_enc.c @@ -360,8 +360,7 @@ void ivas_agc_enc_process( #ifndef CLEANUP_185_NO_AGC_EXCEPTION pState->gain_data[i].gainException = FALSE; #endif - idx = min( offset - 1, MaxAbsValIdx ); - pState->gain_state[i].gainExpVal = (int16_t) ceilf( -logf( actualMaxAbsVal * MDFT_NORM_SCALING ) / logf( pState->agc_com.winFunc[idx] ) ); + pState->gain_state[i].gainExpVal = (int16_t) ceilf( -logf( actualMaxAbsVal * MDFT_NORM_SCALING ) / logf( pState->agc_com.winFunc[min( offset - 1, MaxAbsValIdx )] ) ); while ( !isCompensated ) { -- GitLab From ab61a7ce313fbcaaec64215186027742bfcd7a1f Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 1 Dec 2022 14:08:02 +0100 Subject: [PATCH 044/103] add executable bit for UNIX systems --- ci/complexity_measurements/mergeNewsletterRom.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 ci/complexity_measurements/mergeNewsletterRom.py diff --git a/ci/complexity_measurements/mergeNewsletterRom.py b/ci/complexity_measurements/mergeNewsletterRom.py old mode 100644 new mode 100755 -- GitLab From 4844800400a1ba432071e55662db7f5db18b45cf Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 1 Dec 2022 15:44:45 +0100 Subject: [PATCH 045/103] change permissions for tools as well --- scripts/tools/Darwin/wmc_tool | Bin scripts/tools/Linux/wmc_tool | Bin scripts/tools/Win32/wmc_tool.exe | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/tools/Darwin/wmc_tool mode change 100644 => 100755 scripts/tools/Linux/wmc_tool mode change 100644 => 100755 scripts/tools/Win32/wmc_tool.exe diff --git a/scripts/tools/Darwin/wmc_tool b/scripts/tools/Darwin/wmc_tool old mode 100644 new mode 100755 diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool old mode 100644 new mode 100755 diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe old mode 100644 new mode 100755 -- GitLab From ee8d6615ebfd844b92c0d0687730d669e38c8df3 Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 1 Dec 2022 16:03:10 +0100 Subject: [PATCH 046/103] add qoutation marks around glob expression --- scripts/prepare_instrumentation.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/prepare_instrumentation.sh b/scripts/prepare_instrumentation.sh index aec8eb1e0c..2e1e408596 100755 --- a/scripts/prepare_instrumentation.sh +++ b/scripts/prepare_instrumentation.sh @@ -86,8 +86,8 @@ fi # strip switches, to remove the macros if coan_exists; then - coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{com,dec,enc,rend,util,debug}/(?!wmc_auto)*.[hc] - coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/apps/*.[hc] + coan source --replace --no-transients -E -K --file $ifdef_list "$targetdir/lib_{com,dec,enc,rend,util,debug}/(?!wmc_auto)*.[hc]" + coan source --replace --no-transients -E -K --file $ifdef_list "$targetdir/apps/*.[hc]" else ./strip_defines_cppp.sh $targetdir $ifdef_list fi -- GitLab From 525d885ce069c7a7cc5d0d976caa7f5fab0cc4f1 Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 1 Dec 2022 16:03:35 +0100 Subject: [PATCH 047/103] add check=True in instrumentation subprocess call --- scripts/pyivastest/IvasSvnBuilder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/pyivastest/IvasSvnBuilder.py b/scripts/pyivastest/IvasSvnBuilder.py index f12e714286..919ec6ae89 100644 --- a/scripts/pyivastest/IvasSvnBuilder.py +++ b/scripts/pyivastest/IvasSvnBuilder.py @@ -275,7 +275,7 @@ class IvasBuilder(IvasBaseClass): build_log.write(" ".join(instrument_cmd)) build_log.write("\n") build_result = subprocess.run( - instrument_cmd, capture_output=True, text=True + instrument_cmd, capture_output=True, text=True, check=True ) build_log.write(build_result.stderr) build_log.write(build_result.stdout) -- GitLab From 017aad175d63588ce51d729b250b65e2e753ddd2 Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 1 Dec 2022 22:53:32 +0100 Subject: [PATCH 048/103] changes to the html page --- .../index_complexity.html | 262 ++++-------------- 1 file changed, 47 insertions(+), 215 deletions(-) diff --git a/ci/complexity_measurements/index_complexity.html b/ci/complexity_measurements/index_complexity.html index a131f56662..33c458fa11 100755 --- a/ci/complexity_measurements/index_complexity.html +++ b/ci/complexity_measurements/index_complexity.html @@ -52,7 +52,6 @@ - @@ -103,30 +102,6 @@ - - - -
  • PROM - - - - - -
  • - - -
  • FAQ
  • @@ -284,8 +259,17 @@
      -
    • Measured ROM table size, 32 - bit words (Float)
    • +
    • Max. total ROM Codec: Encoder + Decoder
    • +
    • Max. total ROM Encoder: Encoder only
    • +
    • Max. total ROM Decoder: Decoder only
    • + +
    • Max. Table ROM Codec: Encoder + Decoder
    • +
    • Max. Table ROM Encoder: Encoder only
    • +
    • Max. Table ROM Decoder: Decoder only
    • + +
    • Max. PROM Codec: Encoder + Decoder
    • +
    • Max. PROM Encoder: Encoder only
    • +
    • Max. PROM Decoder: Decoder only
    @@ -308,22 +292,6 @@
    --> -

    IVAS FORMAT - Worst Case PROM Demand

    - -
    -
    -
    - -
    -
      -
    • Measured PROM (Float, - trunk)
    • - -
    -
    - -
    -

    FAQ

    Q:
    What is the meaning of these funny symbols in the navigation box, in the left upper corner of this page?
    @@ -941,7 +909,8 @@ function ROM() { previousPoint = item.datapoint; $("#tooltip").remove(); - if(item.series.id != "requirementRom"){ + if(item.series.id != "requirementRom") + { var x = item.datapoint[0]; var y = item.datapoint[1]; var text = 'Score: ' + y; @@ -971,13 +940,47 @@ function ROM() { } } + if( item.series.id == "TotalRomCodecScore" ){ + text += "Worst case enc: " + graph.runs[x].TotalRomEnc + "
    "; + text += "Worst case dec: " + graph.runs[x].TotalRomDec + "
    "; + } + if( item.series.id == "TotalRomEncScore" ){ + text += "Worst case enc: " + graph.runs[x].TotalRomEnc + "
    "; + } + if( item.series.id == "TotalRomDecScore" ){ + text += "Worst case dec: " + graph.runs[x].TotalRomDec + "
    "; + } + if( item.series.id == "PROMCodecScore" ){ + text += "Worst case enc: " + graph.runs[x].PromEnc + "
    "; + text += "Worst case dec: " + graph.runs[x].PromDec + "
    "; + } + if( item.series.id == "PROMEncScore" ){ + text += "Worst case enc: " + graph.runs[x].PromEnc + "
    "; + } + if( item.series.id == "PROMDecScore" ){ + text += "Worst case dec: " + graph.runs[x].PromDec + "
    "; + } + if( item.series.id == "TROMCodecScore" ){ + text += "Worst case enc: " + graph.runs[x].TromEnc + "
    "; + text += "Worst case dec: " + graph.runs[x].TromDec + "
    "; + } + if( item.series.id == "TROMEncScore" ){ + text += "Worst case enc: " + graph.runs[x].TromEnc + "
    "; + } + if( item.series.id == "TROMDecScore" ){ + text += "Worst case dec: " + graph.runs[x].TromDec + "
    "; + } + text += "
    " text += "Revision: " + graph.runs[x].revision + "
    "; text += "Date: " + graph.runs[x].fullDate + "

    "; + text += "Logfile
    "; + /* if( item.series.id == "maxRomFlc" ){ text += "Logfile
    "; } + */ /* if( item.series.id == "maxRomBasop" ){ @@ -1056,182 +1059,11 @@ function ROM() { */ } - - -function PROM() { - - var previousPoint = null; - - function drawGraph(elt, graph, max_val) { - var options = { - yaxis: { - min: 0, - max: max_val, - tickFormatter: function (v, axis) { - if (graph.direction == -1) - return v + " Ops"; - return v; - }, - invert: graph.direction == 1 - }, - xaxis: { - tickFormatter: function (v, axis) { - v = Math.round(v); - if (!(v in graph.runs)) - return ''; - return graph.runs[v].shortDate; - } - }, - legend: { show: false }, - grid: { - hoverable: true, - clickable: true - } - }; - - $.plot(elt, graph.displays, options); - - elt.bind("plothover", function (event, pos, item) { - if (!item) { - // only remove if not in tooltip anymore - if ($('#tooltip:hover').length == 0) { - $("#tooltip").remove(); - } - previousPoint = null; - return; - } - - if (previousPoint && - (previousPoint[0] == item.datapoint[0]) && - (previousPoint[1] == item.datapoint[1])) { - return; - } - - previousPoint = item.datapoint; - $("#tooltip").remove(); - - if(item.series.id != "requirementProm"){ - var x = item.datapoint[0]; - var y = item.datapoint[1]; - var text = 'Score: ' + y; - - if (graph.direction == -1) - text += " Ops"; - text += "
    "; - - if (x > 0) { - var thisValue = parseFloat(y); - var prevValue = parseFloat(item.series.data[x - 1, x - 1][1]); - var diff = Math.round((thisValue - prevValue) * 100) / 100; - var pdiff = calcPercentDiff(thisValue, prevValue); - var better; - if ((pdiff < 0 && graph.direction == -1) || - (pdiff > 0 && graph.direction == 1)) { - better = "worse"; - } else { - better = "better"; - } - pdiff = Math.abs(pdiff); - if (diff === diff) { - text += String.fromCharCode(916) + ": " + diff; - if (graph.direction == -1) - text += " Ops"; - text += " (" + pdiff + "% " + better + ")
    "; - } - } - - text += "
    " - text += "Revision: " + graph.runs[x].revision + "
    "; - text += "Date: " + graph.runs[x].fullDate + "

    "; - - if( item.series.id == "promOpsFlc" ){ - text += "Logfile
    "; - } - - if( item.series.id == "promOpsBasop" ){ - text += "Logfile
    "; - } - if( item.series.id == "promOpsBasopFlc" ){ - text += "Logfile
    "; - } - - } else { - text = "PROM requirement: 54260 Ops"; - } - - showToolTip(item.pageX, item.pageY, text); - - }); - } - - $(document).ready(function () { - var max = get_max_y_val_for_plotting(Graphs_PROM.prom_worstcase.displays, 50000); - drawGraph($("#prom-graph"), Graphs_PROM.prom_worstcase, max); - }); - - - /* FLC */ - var testData = Graphs_PROM.prom_worstcase.displays[1]; - var refData = Graphs_PROM.prom_worstcase.displays[0]; - var nEntries = testData.data.length; - - if( testData.data[nEntries-1][1] > refData.data[nEntries-1][1] ) { - document.getElementById("prom_tl_l").style.color="#FF0000"; - } else if( testData.data[nEntries-1][1] > 0.97 * refData.data[nEntries-1][1] ) { - document.getElementById("prom_tl_c").style.color="#FFFF00"; - } else { - document.getElementById("prom_tl_r").style.color="#00FF00"; - } - - if(nEntries > 1) { - if( testData.data[nEntries-1][1] > 1.01 * testData.data[nEntries-2][1] ) { - document.getElementById("prom_trend").innerHTML="↑"; - document.getElementById("prom_trend").style.color="#FF0000"; - } else if( testData.data[nEntries-1][1] < 0.99 * testData.data[nEntries-2][1] ) { - document.getElementById("prom_trend").innerHTML="↓"; - document.getElementById("prom_trend").style.color="#00FF00"; - } else { - document.getElementById("prom_trend").innerHTML="→"; - document.getElementById("prom_trend").style.color="#FFFFFF"; - } - } - - - /* BASOP */ - var testData = Graphs_PROM.prom_worstcase.displays[2]; - var refData = Graphs_PROM.prom_worstcase.displays[0]; - var nEntries = testData.data.length; - - if( testData.data[nEntries-1][1] > refData.data[nEntries-1][1] ) { - document.getElementById("prom_basop_tl_l").style.color="#FF0000"; - } else if( testData.data[nEntries-1][1] > 0.97 * refData.data[nEntries-1][1] ) { - document.getElementById("prom_basop_tl_c").style.color="#FFFF00"; - } else { - document.getElementById("prom_basop_tl_r").style.color="#00FF00"; - } - - if(nEntries > 1) { - if( testData.data[nEntries-1][1] > 1.01 * testData.data[nEntries-2][1] ) { - document.getElementById("prom_basop_trend").innerHTML="↑"; - document.getElementById("prom_basop_trend").style.color="#FF0000"; - } else if( testData.data[nEntries-1][1] < 0.99 * testData.data[nEntries-2][1] ) { - document.getElementById("prom_basop_trend").innerHTML="↓"; - document.getElementById("prom_basop_trend").style.color="#00FF00"; - } else { - document.getElementById("prom_basop_trend").innerHTML="→"; - document.getElementById("prom_basop_trend").style.color="#FFFFFF"; - } - } - -} - - WMOPS(); WMOPS_perOP(); RAM(); ROM(); - PROM(); -- GitLab From 28238e80666ee21cb6f3e8176fadc2a87bdd2f52 Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 1 Dec 2022 23:00:46 +0100 Subject: [PATCH 049/103] small cleanup --- ci/complexity_measurements/getWmops.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ci/complexity_measurements/getWmops.sh b/ci/complexity_measurements/getWmops.sh index 9c4c8a4835..6136192374 100755 --- a/ci/complexity_measurements/getWmops.sh +++ b/ci/complexity_measurements/getWmops.sh @@ -55,7 +55,6 @@ wmopsFilenameFlc=${destDir}/wmops/logs/${wmopsFilenameFlcLast} # instrument and build ./scripts/IvasBuildAndRunChecks.py -p $config_file --checks COMPLEXITY --create_complexity_tables ${wmopsFilenameFlc} -C $ivas_format -f ${ep} --oc $output_format -# ./scripts/IvasBuildAndRunChecks.py -z debug -p $config_file --checks COMPLEXITY --create_complexity_tables ${wmopsFilenameFlc} -m stereo_b24_4_swb_cbr -C stereo -f ${ep} --oc stereo # get the info on worst-case operating point: WMOPS number, enc-operating mode, dec-operating mode ### WMOPS @@ -77,9 +76,6 @@ ${scriptDir}/parseNewsletterRam.py ${wmopsFilenameFlc}_HEAP.csv ${wmopsFilenameF tcsh ${scriptDir}/genWebpageData_Ram.csh ${destDir}/wmops/log_ram_all.txt ${destDir}/wmops/graphs_ram_flc.js Graphs_RAM ### ROM -# now go on with BASOP -# promFilenameBasopLast="null" -# promScoreBasop=0 ${scriptDir}/mergeNewsletterRom.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlc}_TROM.csv > ${wmopsFilenameFlc}_ROM.csv ${scriptDir}/parseNewsletterRom.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlc}_TROM.csv ${wmopsFilenameFlcLast}_ROM.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_rom_all.txt -- GitLab From f1bcb2a38a00cf16d1bdf384c153c1a29299c6d7 Mon Sep 17 00:00:00 2001 From: knj Date: Thu, 1 Dec 2022 23:06:59 +0100 Subject: [PATCH 050/103] remove remaining "wmops.h" include --- .../object_renderer_standalone/renderer_standalone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c index 0b386dd419..e33ee38839 100644 --- a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c +++ b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c @@ -43,7 +43,7 @@ #include "ivas_cnst.h" #include "ivas_stat_dec.h" #include "cnst.h" -#include "wmops.h" +#include "wmc_auto.h" #include "hrtf_file_reader.h" #include "ivas_error.h" -- GitLab From c050195db4a353a61847fde972ee49191cbaba3f Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 5 Dec 2022 13:16:02 +0100 Subject: [PATCH 051/103] removal of reset_stack() fix of intra-frame and inter-frame memory printout --- apps/decoder.c | 3 - apps/encoder.c | 1 - lib_debug/wmc_auto.c | 729 ++++++++++++++++++++++++++++--------------- lib_debug/wmc_auto.h | 24 +- 4 files changed, 483 insertions(+), 274 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 8cae229dc5..ff01e6e429 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -449,7 +449,6 @@ int main( #ifdef WMOPS reset_wmops(); - reset_stack(); #endif /*-----------------------------------------------------------------* @@ -1129,7 +1128,6 @@ static ivas_error decodeG192( } #ifdef WMOPS - reset_stack(); reset_wmops(); #endif @@ -1641,7 +1639,6 @@ static ivas_error decodeVoIP( } #ifdef WMOPS - reset_stack(); reset_wmops(); #endif diff --git a/apps/encoder.c b/apps/encoder.c index a5cbdd1fa9..d67a37c881 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -552,7 +552,6 @@ int main( #ifdef WMOPS reset_wmops(); - reset_stack(); #endif /*------------------------------------------------------------------------------------------* diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 1f01fb0a1e..8191daefd7 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -82,6 +82,8 @@ static double min_cnt; static double inst_cnt_wc[NUM_INST]; static long fnum_cnt_wc; +static int *heap_allocation_call_tree = NULL, heap_allocation_call_tree_size = 0, heap_allocation_call_tree_max_size = 0; + void reset_wmops(void) { @@ -338,6 +340,14 @@ void update_wmops(void) } start_cnt = ops_cnt; + + if ( heap_allocation_call_tree_size > 0 ) + { + /* update intra-frame heap memory and inter-frame heap memory*/ + update_mem(); + } + + /* increment frame counter */ update_cnt++; return; @@ -524,7 +534,7 @@ void print_wmops(void) #define MAX_FUNCTION_NAME_LENGTH 35 /* Maximum length that the function string will be truncated to */ #define MAX_PARAMS_LENGTH 50 /* Maximum length that the parameter string will be truncated to */ #define MAX_NUM_RECORDS 300 /* Initial maximum number of memory records -> mightb be increased during runtime, if needed */ -#define MAX_NUM_RECORDS_REALLOC_STEP 10 /* When re-allocating the list of memory records, increase the number of records by this number */ +#define MAX_NUM_RECORDS_REALLOC_STEP 50 /* When re-allocating the list of memory records, increase the number of records by this number */ /* This is the value (in bytes) towards which the block size is rounded. For example, a block of 123 bytes, when using a 32 bits system, will end up taking 124 bytes since the last unused byte cannot be used for another block. */ @@ -560,33 +570,35 @@ typedef struct int lineno; void* block_ptr; int block_size; - int max_block_size; /* Maximum block size allocated */ - int32_t wc_heap_size[3]; /* Worst-Case Heap [Frame#, Size, Count] */ - int32_t wc_heap_size_intra_frame[3]; /* Worst-Case Intra-Frame Heap [Frame#, Size, Count] */ - int32_t wc_heap_size_inter_frame[3]; /* Worst-Case Inter-Frame Heap [Frame#, Size, Count] */ - int frame_allocated; /* Frame number in which the Memory Block has been allocated */ - float ave_usage; /* Average Usage of memory block calculated as ratio of used size and allocated size */ + unsigned long total_block_size; /* Cumulative sum of the allocated size in the session */ + unsigned long total_used_size; /* Cumulative sum of the used size in the session */ + int wc_heap_size_intra_frame; /* Worst-Case Intra-Frame Heap Size */ + int wc_heap_size_inter_frame; /* Worst-Case Inter-Frame Heap Size */ + int frame_allocated; /* Frame number in which the Memory Block has been allocated (-1 if not allocated at the moment) */ int OOB_Flag; - int noccurances; /* Numer of times that the Memory Block Was Allocated */ + int noccurances; /* Number of times that the memory block has been allocated in a frame */ } allocator_record; -allocator_record* allocation_list = NULL, * peak_allocations, * peak_allocations_one_frame, * peak_allocations_state; +allocator_record *allocation_list = NULL; static int16_t* ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ static int16_t* ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ -static int32_t wc_frame = 0; /* Frame corresponding to the worst-case stack usage */ +static int32_t wc_stack_frame = 0; /* Frame corresponding to the worst-case stack usage */ static int32_t wc_ram_size, wc_ram_frame; -static int32_t current_heap_size, wc_heap_size[2], wc_heap_size_intra_frame[2], wc_heap_size_inter_frame[2]; +static int32_t current_heap_size; static int current_calls = 0; static char location_max_stack[256] = "undefined"; -static int Num_Records; +static int Num_Records, Max_Num_Records; static size_t Stat_Cnt_Size = USE_BYTES; -static int Max_Num_Records; static const char* Count_Unit[] = { "bytes", "words", "words" }; +static int *list_wc_intra_frame_heap, n_items_wc_intra_frame_heap, max_items_wc_intra_frame_heap, size_wc_intra_frame_heap, location_wc_intra_frame_heap; +static int *list_current_inter_frame_heap, n_items_current_inter_frame_heap, max_items_current_inter_frame_heap, size_current_inter_frame_heap; +static int *list_wc_inter_frame_heap, n_items_wc_inter_frame_heap, max_items_wc_inter_frame_heap, size_wc_inter_frame_heap, location_wc_inter_frame_heap; + /* Local Functions */ static unsigned long malloc_hash(const char* func_name, int func_lineno, char* size_str); -allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int func_lineno, char* size_str); +allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int func_lineno, char* size_str, int *index_record); static void* mem_alloc_block(size_t size, const char* size_str); /*-------------------------------------------------------------------* @@ -632,12 +644,47 @@ void reset_mem(Counting_Size cnt_size) wc_ram_size = 0; wc_ram_frame = -1; current_heap_size = 0; - wc_heap_size[0] = -1; - wc_heap_size[1] = 0; - wc_heap_size_intra_frame[0] = -1; - wc_heap_size_intra_frame[1] = 0; - wc_heap_size_inter_frame[0] = -1; - wc_heap_size_inter_frame[1] = 0; + + /* heap allocation tree */ + heap_allocation_call_tree_max_size = MAX_NUM_RECORDS; + if ( heap_allocation_call_tree == NULL ) + { + heap_allocation_call_tree = (int *) malloc( heap_allocation_call_tree_max_size * sizeof( int ) ); + memset( heap_allocation_call_tree, -1, heap_allocation_call_tree_max_size * sizeof( int ) ); + } + heap_allocation_call_tree_size = 0; + + /* wc intra-frame heap */ + max_items_wc_intra_frame_heap = MAX_NUM_RECORDS; + if ( list_wc_intra_frame_heap == NULL ) + { + list_wc_intra_frame_heap = (int *) malloc( max_items_wc_intra_frame_heap * sizeof( int ) ); + memset( list_wc_intra_frame_heap, -1, max_items_wc_intra_frame_heap * sizeof( int ) ); + } + n_items_wc_intra_frame_heap = 0; + size_wc_intra_frame_heap = 0; + location_wc_intra_frame_heap = -1; + + /* current inter-frame heap */ + max_items_current_inter_frame_heap = MAX_NUM_RECORDS; + if ( list_current_inter_frame_heap == NULL ) + { + list_current_inter_frame_heap = (int *) malloc( max_items_current_inter_frame_heap * sizeof( int ) ); + memset( list_current_inter_frame_heap, -1, max_items_current_inter_frame_heap * sizeof( int ) ); + } + n_items_current_inter_frame_heap = 0; + size_current_inter_frame_heap = 0; + + /* wc inter-frame heap */ + max_items_wc_inter_frame_heap = MAX_NUM_RECORDS; + if ( list_wc_inter_frame_heap == NULL ) + { + list_wc_inter_frame_heap = (int *) malloc( max_items_wc_inter_frame_heap * sizeof( int ) ); + memset( list_wc_inter_frame_heap, -1, max_items_wc_inter_frame_heap * sizeof( int ) ); + } + n_items_wc_inter_frame_heap = 0; + size_wc_inter_frame_heap = 0; + location_wc_inter_frame_heap = -1; return; } @@ -702,7 +749,7 @@ int push_stack(const char* filename, const char* fctname) /* Save Info about it */ ptr_max_stack = &something; - wc_frame = update_cnt; /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ + wc_stack_frame = update_cnt; /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ strncpy(location_max_stack, fctname, sizeof(location_max_stack) - 1); location_max_stack[sizeof(location_max_stack) - 1] = '\0'; @@ -822,7 +869,7 @@ void* mem_alloc( size_t size, char* size_str /* the first char indicates m-alloc or c-alloc */) { - int i; + int index_record; int32_t current_stack_size; unsigned long hash; allocator_record* ptr_record; @@ -833,8 +880,22 @@ void* mem_alloc( exit(-1); } - /* Create new record, if not existing */ - if ((ptr_record = get_mem_record(&hash, func_name, func_lineno, size_str)) == NULL) + /* Search for an existing record (that has been de-allocated before) */ + index_record = 0; + while ((ptr_record = get_mem_record(&hash, func_name, func_lineno, size_str, &index_record)) != NULL) + { + if ( ptr_record->frame_allocated == -1 ) + { + break; + } + else + { + index_record++; + } + } + + /* Create new record */ + if ( ptr_record == NULL ) { if (Num_Records >= Max_Num_Records) { @@ -847,21 +908,15 @@ void* mem_alloc( /* Initialize new record */ ptr_record->hash = hash; - ptr_record->ave_usage = 0; ptr_record->noccurances = 0; - ptr_record->max_block_size = 0; + ptr_record->total_block_size = 0; + ptr_record->total_used_size = 0; ptr_record->frame_allocated = -1; ptr_record->OOB_Flag = 0; - ptr_record->wc_heap_size[0] = -1; - ptr_record->wc_heap_size[1] = 0; - ptr_record->wc_heap_size[2] = 1; - ptr_record->wc_heap_size_intra_frame[0] = -1; - ptr_record->wc_heap_size_intra_frame[1] = 0; - ptr_record->wc_heap_size_intra_frame[2] = 1; - ptr_record->wc_heap_size_inter_frame[0] = -1; - ptr_record->wc_heap_size_inter_frame[1] = 0; - ptr_record->wc_heap_size_inter_frame[2] = 1; + ptr_record->wc_heap_size_intra_frame = -1; + ptr_record->wc_heap_size_inter_frame = -1; + index_record = Num_Records; Num_Records++; } @@ -881,11 +936,7 @@ void* mem_alloc( ptr_record->params[MAX_PARAMS_LENGTH] = '\0'; ptr_record->lineno = func_lineno; ptr_record->block_size = size; - - if (ptr_record->block_size > ptr_record->max_block_size) - { - ptr_record->max_block_size = ptr_record->block_size; - } + ptr_record->total_block_size += size; if (ptr_record->frame_allocated != -1) { @@ -894,32 +945,10 @@ void* mem_alloc( } ptr_record->frame_allocated = update_cnt; /* Store the current frame number -> later it will be used to determine the total duration */ - ptr_record->noccurances++; /* Update Heap Size in the current frame */ current_heap_size += ptr_record->block_size; - /* Update Worst-Case Heap Size, if Exceeded */ - if (current_heap_size > wc_heap_size[1]) - { - for (i = 0; i < Num_Records; i++) - { - if (allocation_list[i].block_ptr != NULL) - { - allocation_list[i].wc_heap_size[0] = update_cnt; - allocation_list[i].wc_heap_size[1] = allocation_list[i].block_size; - } - else - { - allocation_list[i].wc_heap_size[0] = -1; - allocation_list[i].wc_heap_size[1] = 0; - } - } - - wc_heap_size[0] = update_cnt; - wc_heap_size[1] = current_heap_size; - } - /* Check, if this is the new Worst-Case RAM (stack + heap) */ current_stack_size = (int32_t)(((ptr_base_stack - ptr_max_stack) * sizeof(int16_t))); if (current_stack_size + current_heap_size > wc_ram_size) @@ -928,6 +957,23 @@ void* mem_alloc( wc_ram_frame = update_cnt; } + /* Add new entry to the heap allocation call tree */ + if (heap_allocation_call_tree == NULL) + { + fprintf( stderr, "Error: Heap allocation call tree not created!" ); + exit( -1 ); + } + + /* check, if the maximum size of the call tree has been reached -> resize if so */ + if ( heap_allocation_call_tree_size >= heap_allocation_call_tree_max_size ) + { + heap_allocation_call_tree_max_size += MAX_NUM_RECORDS_REALLOC_STEP; + heap_allocation_call_tree = (int *) realloc( heap_allocation_call_tree, heap_allocation_call_tree_max_size * sizeof( int ) ); + } + + /* push new entry (positive number means push op, neagtive number means pop op; zero index must be converted to 0.01 :-) */ + heap_allocation_call_tree[heap_allocation_call_tree_size++] = index_record; + return ptr_record->block_ptr; } @@ -1153,25 +1199,33 @@ static unsigned long malloc_hash(const char* func_name, int func_lineno, char* s * get_mem_record() * * Search for memory record in the internal list, return NULL if not found + * Start from index_record *--------------------------------------------------------------------*/ -allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int func_lineno, char* size_str) +allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int func_lineno, char* size_str, int *index_record) { int i; + if (*index_record < 0 || *index_record > Num_Records) + { + return NULL; + } + /* calculate hash */ *hash = malloc_hash(func_name, func_lineno, size_str); - for (i = 0; i < Num_Records; i++) + for (i = *index_record; i < Num_Records; i++) { /* check, if memory block is not allocated at the moment and the hash matches */ if (allocation_list[i].block_ptr == NULL && *hash == allocation_list[i].hash) { - return &(allocation_list[i]); + *index_record = i; + return &( allocation_list[i] ); } } /* not found */ + *index_record = -1; return NULL; } @@ -1179,27 +1233,27 @@ allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int /*-------------------------------------------------------------------* * mem_free() * - * This function updates worst-case intra-frame memory and worst-case inter-frame memory. It also updates actual and average usage of - * the memory block and finally, it de-allocates the physical memory with free() + * This function de-allocatesd the memory block and frees the mphysical memory with free(). + * It also updates actual and average usage of the memory block. * * Note: The record is not removed from the list and may be reused later on in mem_alloc()! *--------------------------------------------------------------------*/ void mem_free(const char* func_name, int func_lineno, void* ptr) { - int i; - int32_t current_heap_size_intra_frame, current_heap_size_inter_frame; - float current_usage; + int i, index_record; char* tmp_ptr; allocator_record* ptr_record; /* Search for the Block Pointer in the List */ ptr_record = NULL; + index_record = -1; for (i = 0; i < Num_Records; i++) { if (ptr == allocation_list[i].block_ptr) { /* Yes, Found it */ ptr_record = &(allocation_list[i]); + index_record = i; break; } } @@ -1213,83 +1267,215 @@ void mem_free(const char* func_name, int func_lineno, void* ptr) /* Update the Heap Size */ current_heap_size -= ptr_record->block_size; - /* Calculate Intra-Frame Heap Size and Inter-Frame Heap Size in the Current Frame */ - current_heap_size_intra_frame = 0; - current_heap_size_inter_frame = 0; - for (i = 0; i < Num_Records; i++) + /* Calculate the Actual Usage of the Memory Block (Look for Signature) */ + ptr_record->total_used_size += mem_set_usage(ptr_record); + + /* Check, if Out-Of-Bounds Access has been Detected */ + ptr_record->OOB_Flag = mem_check_OOB(ptr_record); + + /* De-Allocate Memory Block */ + tmp_ptr = (char*)ptr; + tmp_ptr -= BLOCK_ROUNDING; + ptr = (void*)tmp_ptr; + free(ptr); + + /* Add new entry to the heap allocation call tree */ + if ( heap_allocation_call_tree == NULL ) { - if (allocation_list[i].block_ptr != NULL) + fprintf( stderr, "Error: Heap allocation call tree not created!" ); + exit( -1 ); + } + + /* check, if the maximum size of the call tree has been reached -> resize if so */ + if ( heap_allocation_call_tree_size >= heap_allocation_call_tree_max_size ) + { + heap_allocation_call_tree_max_size += MAX_NUM_RECORDS_REALLOC_STEP; + heap_allocation_call_tree = (int *) realloc( heap_allocation_call_tree, heap_allocation_call_tree_max_size * sizeof( int ) ); + } + + heap_allocation_call_tree[heap_allocation_call_tree_size++] = -index_record; + + /* Reset memory block pointer (this is checked when updating wc intra-frame and inter-frame memory) */ + ptr_record->block_ptr = NULL; + + return; +} + + +/*-------------------------------------------------------------------* + * update_mem() + * + * This function updates the worst-case intra-frame memory and the worst-case inter-frame memory. + *--------------------------------------------------------------------*/ + +void update_mem( void ) +{ + int i, j, flag_alloc = -1, i_record; + int32_t size_current_intra_frame_heap; + int *list_current_intra_frame_heap = NULL, n_items_current_intra_frame_heap; + allocator_record *ptr_record; + + /* process the heap allocation call tree */ + n_items_current_intra_frame_heap = 0; + size_current_intra_frame_heap = 0; + for ( i = 0; i < heap_allocation_call_tree_size; i++ ) + { + /* get the record */ + i_record = heap_allocation_call_tree[i]; + + if (i_record > 0) + { + flag_alloc = 1; + } + else if (i_record < 0) + { + flag_alloc = 0; + i_record = -i_record; + } + ptr_record = &( allocation_list[i_record] ); + + if ( ptr_record->frame_allocated == update_cnt && ptr_record->block_ptr == NULL ) { - if (allocation_list[i].frame_allocated == update_cnt) + /* intra-frame heap memory */ + if ( list_current_intra_frame_heap == NULL ) { - current_heap_size_intra_frame += allocation_list[i].block_size; + list_current_intra_frame_heap = (int *) malloc( heap_allocation_call_tree_size * sizeof( int ) ); + memset( list_current_intra_frame_heap, -1, heap_allocation_call_tree_size * sizeof( int ) ); } - else + + /* zero index doesn't have sign to determine whether it's allocated or de-allocated -> we need to search the list */ + if ( i_record == 0 ) { - current_heap_size_inter_frame += allocation_list[i].block_size; + flag_alloc = 1; + for ( j = 0; j < n_items_current_intra_frame_heap; j++) + { + if (list_current_intra_frame_heap[j] == i_record) + { + flag_alloc = 0; + break; + } + } } - } - } - /* Update Worst-Case Intra-Frame Heap Size, if Exceeded */ - if (current_heap_size_intra_frame > wc_heap_size_intra_frame[1]) - { - for (i = 0; i < Num_Records; i++) - { - if ( allocation_list[i].frame_allocated == update_cnt ) + if ( flag_alloc ) { - allocation_list[i].wc_heap_size_intra_frame[0] = update_cnt; - allocation_list[i].wc_heap_size_intra_frame[1] = allocation_list[i].block_size; + /* add to list */ + list_current_intra_frame_heap[n_items_current_intra_frame_heap++] = i_record; + size_current_intra_frame_heap += ptr_record->block_size; + + /* check, if this is the new worst-case */ + if ( size_current_intra_frame_heap > size_wc_intra_frame_heap ) + { + if ( n_items_current_intra_frame_heap >= max_items_wc_intra_frame_heap) + { + /* resize list, if needed */ + max_items_wc_intra_frame_heap = n_items_current_intra_frame_heap + MAX_NUM_RECORDS_REALLOC_STEP; + list_wc_intra_frame_heap = realloc( list_wc_intra_frame_heap, max_items_wc_intra_frame_heap * sizeof( int ) ); + } + + /* save to wc list */ + memmove( list_wc_intra_frame_heap, list_current_intra_frame_heap, n_items_current_intra_frame_heap * sizeof( int ) ); + n_items_wc_intra_frame_heap = n_items_current_intra_frame_heap; + size_wc_intra_frame_heap = size_current_intra_frame_heap; + location_wc_intra_frame_heap = update_cnt; + ptr_record->wc_heap_size_intra_frame = ptr_record->block_size; + } } else { - allocation_list[i].wc_heap_size_intra_frame[0] = -1; - allocation_list[i].wc_heap_size_intra_frame[1] = 0; + /* remove from list */ + for ( j = 0; j < n_items_current_intra_frame_heap; j++ ) + { + if ( list_current_intra_frame_heap[j] == i_record ) + { + break; + } + } + memmove( &list_current_intra_frame_heap[j], &list_current_intra_frame_heap[j + 1], ( n_items_current_intra_frame_heap - j ) * sizeof( int ) ); + n_items_current_intra_frame_heap--; + size_current_intra_frame_heap -= ptr_record->block_size; + + /* reset block size */ + ptr_record->frame_allocated = -1; + ptr_record->block_size = 0; } } + else + { + /* inter-frame heap memory */ - wc_heap_size_intra_frame[0] = update_cnt; - wc_heap_size_intra_frame[1] = current_heap_size_intra_frame; - } + /* zero index doesn't have sign to determine whether it's allocated or de-allocated -> we need to search the list */ + if ( i_record == 0 ) + { + flag_alloc = 1; + for ( j = 0; j < n_items_current_inter_frame_heap; j++ ) + { + if ( list_current_inter_frame_heap[j] == i_record ) + { + flag_alloc = 0; + break; + } + } + } - /* Update Worst-Case Inter-Frame Heap Size, if Exceeded */ - if (current_heap_size_inter_frame > wc_heap_size_inter_frame[1]) - { - for (i = 0; i < Num_Records; i++) - { - if ( allocation_list[i].frame_allocated < update_cnt ) + if ( flag_alloc ) { - allocation_list[i].wc_heap_size_inter_frame[0] = update_cnt; - allocation_list[i].wc_heap_size_inter_frame[1] = allocation_list[i].block_size; + /* add to list */ + if ( n_items_current_inter_frame_heap >= max_items_current_inter_frame_heap ) + { + /* resize list, if needed */ + max_items_current_inter_frame_heap = n_items_current_inter_frame_heap + MAX_NUM_RECORDS_REALLOC_STEP; + list_current_inter_frame_heap = realloc( list_current_inter_frame_heap, max_items_current_inter_frame_heap * sizeof( int ) ); + } + + list_current_inter_frame_heap[n_items_current_inter_frame_heap++] = i_record; + size_current_inter_frame_heap += ptr_record->block_size; + + /* check, if this is the new worst-case */ + if ( size_current_inter_frame_heap > size_wc_inter_frame_heap ) + { + if ( n_items_current_inter_frame_heap >= max_items_wc_inter_frame_heap ) + { + /* resize list, if needed */ + max_items_wc_inter_frame_heap = n_items_current_inter_frame_heap + MAX_NUM_RECORDS_REALLOC_STEP; + list_wc_inter_frame_heap = realloc( list_wc_inter_frame_heap, max_items_wc_inter_frame_heap * sizeof( int ) ); + } + + memmove( list_wc_inter_frame_heap, list_current_inter_frame_heap, n_items_current_inter_frame_heap * sizeof(int) ); + n_items_wc_inter_frame_heap = n_items_current_inter_frame_heap; + size_wc_inter_frame_heap = size_current_inter_frame_heap; + location_wc_inter_frame_heap = update_cnt; + ptr_record->wc_heap_size_inter_frame = ptr_record->block_size; + } } else { - allocation_list[i].wc_heap_size_inter_frame[0] = -1; - allocation_list[i].wc_heap_size_inter_frame[1] = 0; + /* remove from list */ + for ( j = 0; j < n_items_current_inter_frame_heap; j++ ) + { + if ( list_current_inter_frame_heap[j] == i_record ) + { + break; + } + } + memmove( &list_current_inter_frame_heap[j], &list_current_inter_frame_heap[j + 1], ( n_items_current_inter_frame_heap - j ) * sizeof( int ) ); + n_items_current_inter_frame_heap--; + size_current_inter_frame_heap -= ptr_record->block_size; + + /* reset block size */ + ptr_record->frame_allocated = -1; + ptr_record->block_size = 0; } } - - wc_heap_size_inter_frame[0] = update_cnt; - wc_heap_size_inter_frame[1] = current_heap_size_inter_frame; } - /* Update the Average Usage of Memory Block (Look for Signature) */ - current_usage = (float)mem_set_usage(ptr_record) / ptr_record->block_size; - ptr_record->ave_usage = ((ptr_record->noccurances - 1.0f) / ptr_record->noccurances) * ptr_record->ave_usage + (1.0f / ptr_record->noccurances) * current_usage; - - /* Check, if Out-Of-Bounds Access has been Detected */ - ptr_record->OOB_Flag = mem_check_OOB(ptr_record); - - /* De-Allocate Memory Block */ - tmp_ptr = (char*)ptr; - tmp_ptr -= BLOCK_ROUNDING; - ptr = (void*)tmp_ptr; - free(ptr); + /* reset heap allocation call tree */ + heap_allocation_call_tree_size = 0; - /* Reset some properties of the memory record */ - ptr_record->frame_allocated = -1; - ptr_record->block_ptr = NULL; - ptr_record->block_size = 0; + if ( list_current_intra_frame_heap ) + { + free( list_current_intra_frame_heap ); + } return; } @@ -1320,159 +1506,182 @@ static void subst(char* s, char from, char to) static void mem_count_summary(void) { - int i, j, flag_intra_frame_memory; + int i, j, index, index_record; size_t length; - char format_str[50], name_str[MAX_FUNCTION_NAME_LENGTH + 3], parms_str[MAX_PARAMS_LENGTH + 1], type_str[10], usage_str[20], size_str[20], line_str[10]; - char buf[300]; - allocator_record* record_ptr, *ptr; + char buf[300], format_str[50], name_str[MAX_FUNCTION_NAME_LENGTH + 3], parms_str[MAX_PARAMS_LENGTH + 1], type_str[10], usage_str[20], size_str[20], line_str[10]; + allocator_record* ptr_record, *ptr; /* Prepare format string */ sprintf(format_str, "%%-%ds %%5s %%6s %%-%ds %%20s %%6s ", MAX_FUNCTION_NAME_LENGTH, MAX_PARAMS_LENGTH); - /* Check, if we have at least one Intra-Frame Heap memory block in the list */ - flag_intra_frame_memory = 0; - for (i = 0; i < Num_Records; i++) + if ( n_items_wc_intra_frame_heap > 0 ) { - record_ptr = &(allocation_list[i]); - if (record_ptr->wc_heap_size_intra_frame[1] > 0) - { - flag_intra_frame_memory = 1; - break; - } - } + /* Intra-Frame Heap Size */ + fprintf( stdout, "\nList of memory blocks when maximum intra-frame heap size is reached:\n\n" ); - /* Find duplicate records (same hash and worst-case heap size) */ - /* Note: average usage is not re-calculated */ - for ( i = 0; i < Num_Records; i++ ) - { - record_ptr = &( allocation_list[i] ); - for ( j = i + 1; j < Num_Records; j++ ) + /* Find duplicate records (same hash and worst-case heap size) */ + for ( i = 0; i < n_items_wc_intra_frame_heap; i++ ) { - ptr = &( allocation_list[j] ); - - if ( ptr->hash != 0 && ptr->hash == record_ptr->hash && ptr->wc_heap_size[1] == record_ptr->wc_heap_size[1] ) + index_record = list_wc_intra_frame_heap[i]; + if ( index_record == -1 ) { - ptr->wc_heap_size[0] = -1; - ptr->wc_heap_size[1] = 0; - record_ptr->wc_heap_size[2]++; + continue; } - if ( ptr->hash != 0 && ptr->hash == record_ptr->hash && ptr->wc_heap_size_intra_frame[1] == record_ptr->wc_heap_size_intra_frame[1] ) + ptr_record = &( allocation_list[index_record] ); + for ( j = i + 1; j < n_items_wc_intra_frame_heap; j++ ) { - ptr->wc_heap_size_intra_frame[0] = -1; - ptr->wc_heap_size_intra_frame[1] = 0; - record_ptr->wc_heap_size_intra_frame[2]++; + index = list_wc_intra_frame_heap[j]; + if ( index == -1 ) + { + continue; + } + ptr = &( allocation_list[index] ); + + if ( ptr->hash == ptr_record->hash && ptr->wc_heap_size_intra_frame == ptr_record->wc_heap_size_intra_frame ) + { + ptr_record->noccurances++; + list_wc_intra_frame_heap[j] = -1; + } } + } + + /* Print Header */ + sprintf( buf, format_str, "Function Name", "Line", "Type", "Function Parameters", "Maximum Size", "Usage" ); + puts( buf ); + length = strlen( buf ); + sprintf( buf, "%0*d\n", (int) length - 1, 0 ); + subst( buf, '0', '-' ); + puts( buf ); + + for ( i = 0; i < n_items_wc_intra_frame_heap; i++ ) + { + index_record = list_wc_intra_frame_heap[i]; - if ( ptr->hash != 0 && ptr->hash == record_ptr->hash && ptr->wc_heap_size_inter_frame[1] == record_ptr->wc_heap_size_inter_frame[1] ) + if ( index_record != -1 ) { - ptr->wc_heap_size_inter_frame[0] = -1; - ptr->wc_heap_size_inter_frame[1] = 0; - record_ptr->wc_heap_size_inter_frame[2]++; + /* get the record */ + ptr_record = &( allocation_list[index_record] ); + + /* prepare information strings */ + strncpy( name_str, ptr_record->name, MAX_FUNCTION_NAME_LENGTH ); + strcat( name_str, "()" ); + name_str[MAX_FUNCTION_NAME_LENGTH] = '\0'; + strncpy( parms_str, &( ptr_record->params[2] ), MAX_PARAMS_LENGTH ); + parms_str[MAX_PARAMS_LENGTH] = '\0'; + + if ( ptr_record->params[0] == 'm' ) + { + strcpy( type_str, "malloc" ); + } + else + { + strcpy( type_str, "calloc" ); + } + + sprintf( line_str, "%d", ptr_record->lineno ); + + /* prepare average usage & memory size strings */ + sprintf( usage_str, "%d%%", (int) ( ((float)ptr_record->total_used_size / (ptr_record->total_block_size + 1)) * 100.0f ) ); + + if ( ptr_record->noccurances > 1 ) + { + sprintf( size_str, "%dx%d %s", ptr_record->noccurances, (int) ( (ptr_record->noccurances * ptr_record->wc_heap_size_intra_frame) >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + } + else + { + sprintf( size_str, "%d %s", (int) ( ptr_record->wc_heap_size_intra_frame >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + } + + sprintf( buf, format_str, name_str, line_str, type_str, parms_str, size_str, usage_str ); + puts( buf ); } } + + fprintf( stdout, "\n" ); } - for (j = 0; j < 2; j++) + if ( n_items_wc_inter_frame_heap > 0 ) { - if ( !flag_intra_frame_memory ) + /* Inter-Frame Heap Size */ + fprintf( stdout, "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); + + /* Find duplicate records (same hash and worst-case heap size) */ + for ( i = 0; i < n_items_wc_inter_frame_heap; i++ ) { - if ( j == 0 ) - { - /* Total Heap Size */ - fprintf( stdout, "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); - } - else + index_record = list_wc_inter_frame_heap[i]; + if (index_record == -1) { continue; } - } - else - { - if ( j == 0 ) - { - /* Intra-Frame Heap Size */ - fprintf( stdout, "\nList of memory blocks when maximum intra-frame heap size is reached:\n\n" ); - } - else + ptr_record = &( allocation_list[index_record] ); + ptr_record->noccurances = 1; /* reset the counter because som blocks may be both, intra-frame and inter-frame */ + for ( j = i + 1; j < n_items_wc_inter_frame_heap; j++ ) { - /* Inter-Frame Heap Size */ - fprintf( stdout, "\nList of memory blocks when maximum inter-frame heap size is reached:\n\n" ); + index = list_wc_inter_frame_heap[j]; + if (index == -1) + { + continue; + } + ptr = &( allocation_list[index] ); + + if ( ptr->hash == ptr_record->hash && ptr->wc_heap_size_inter_frame == ptr_record->wc_heap_size_inter_frame ) + { + ptr_record->noccurances++; + list_wc_inter_frame_heap[j] = -1; + } } } /* Print Header */ - sprintf(buf, format_str, "Function Name", "Line", "Type", "Function Parameters", "Maximum Size", "Usage"); - puts(buf); - length = strlen(buf); - sprintf(buf, "%0*d\n", (int)length - 1, 0); - subst(buf, '0', '-'); - puts(buf); - - /* Print all Records */ - for (i = 0; i < Num_Records; i++) + sprintf( buf, format_str, "Function Name", "Line", "Type", "Function Parameters", "Maximum Size", "Usage" ); + puts( buf ); + length = strlen( buf ); + sprintf( buf, "%0*d\n", (int) length - 1, 0 ); + subst( buf, '0', '-' ); + puts( buf ); + + for ( i = 0; i < n_items_wc_inter_frame_heap; i++ ) { - record_ptr = &(allocation_list[i]); + index_record = list_wc_inter_frame_heap[i]; - if ( ( !flag_intra_frame_memory && j == 0 && record_ptr->wc_heap_size[1] > 0 ) || - ( flag_intra_frame_memory && j == 0 && record_ptr->wc_heap_size_intra_frame[1] > 0 ) || - ( flag_intra_frame_memory && j == 1 && record_ptr->wc_heap_size_inter_frame[1] > 0 ) - ) + if ( index_record != -1 ) { - strncpy(name_str, record_ptr->name, MAX_FUNCTION_NAME_LENGTH); + /* get the record */ + ptr_record = &( allocation_list[index_record] ); + + /* prepare information strings */ + strncpy( name_str, ptr_record->name, MAX_FUNCTION_NAME_LENGTH ); strcat( name_str, "()" ); name_str[MAX_FUNCTION_NAME_LENGTH] = '\0'; - strncpy(parms_str, &(record_ptr->params[2]), MAX_PARAMS_LENGTH); + strncpy( parms_str, &( ptr_record->params[2] ), MAX_PARAMS_LENGTH ); parms_str[MAX_PARAMS_LENGTH] = '\0'; - if (record_ptr->params[0] == 'm') + if ( ptr_record->params[0] == 'm' ) { - strcpy(type_str, "malloc"); + strcpy( type_str, "malloc" ); } else { - strcpy(type_str, "calloc"); + strcpy( type_str, "calloc" ); } - sprintf(usage_str, "%d%%", (int)(record_ptr->ave_usage * 100.0f)); - sprintf(line_str, "%d", record_ptr->lineno); + sprintf( line_str, "%d", ptr_record->lineno ); + + /* prepare average usage & memory size strings */ + sprintf( usage_str, "%d%%", (int) ( ( (float) ptr_record->total_used_size / ( ptr_record->total_block_size + 1 ) ) * 100.0f ) ); - if ( !flag_intra_frame_memory && j == 0 && record_ptr->wc_heap_size[1] > 0 ) + if ( ptr_record->noccurances > 1 ) { - if ( record_ptr->wc_heap_size[2] > 1 ) - { - sprintf( size_str, "%dx%d %s", record_ptr->wc_heap_size[2], ( int )( record_ptr->wc_heap_size[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); - } - else - { - sprintf( size_str, "%d %s", (int) ( record_ptr->wc_heap_size[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); - } + sprintf( size_str, "%dx%d %s", ptr_record->noccurances, (int) ( ( ptr_record->noccurances * ptr_record->wc_heap_size_inter_frame ) >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); } - else if ( flag_intra_frame_memory && j == 0 && record_ptr->wc_heap_size_intra_frame[1] > 0 ) + else { - if ( record_ptr->wc_heap_size_intra_frame[2] > 1 ) - { - sprintf( size_str, "%dx%d %s", record_ptr->wc_heap_size_intra_frame[2], ( int )( record_ptr->wc_heap_size_intra_frame[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); - } - else - { - sprintf( size_str, "%d %s", (int) ( record_ptr->wc_heap_size_intra_frame[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); - } - } - else if ( flag_intra_frame_memory && j == 1 && record_ptr->wc_heap_size_inter_frame[1] > 0 ) - { - if ( record_ptr->wc_heap_size_inter_frame[2] > 1 ) - { - sprintf( size_str, "%dx%d %s", record_ptr->wc_heap_size_inter_frame[2], ( int )( record_ptr->wc_heap_size_inter_frame[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); - } - else - { - sprintf( size_str, "%d %s", (int) ( record_ptr->wc_heap_size_inter_frame[1] >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); - } + sprintf( size_str, "%d %s", (int) ( ptr_record->wc_heap_size_inter_frame >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); } - sprintf(buf, format_str, name_str, line_str, type_str, parms_str, size_str, usage_str); - puts(buf); + sprintf( buf, format_str, name_str, line_str, type_str, parms_str, size_str, usage_str ); + puts( buf ); } } @@ -1573,15 +1782,21 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) if (ptr_base_stack - ptr_max_stack > 0) { fprintf(stdout, "Maximum stack size: %lu %s in frame %d\n", ((ptr_base_stack - ptr_max_stack) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], - wc_frame); + wc_stack_frame); } else { fprintf( stdout, "Maximum stack size: not available\n" ); } + /* last update of intra-frame memory and inter-frame memory, if needed */ + if ( heap_allocation_call_tree_size > 0 ) + { + update_mem(); + } + /* check, if all memory blocks have been deallocated (freed) */ - for (i = 0; i < Num_Records; i++) + for ( i = 0; i < Num_Records; i++ ) { if (allocation_list[i].block_ptr != NULL) { @@ -1590,23 +1805,22 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) } } - if ( wc_heap_size[1] > 0 ) + if ( n_items_wc_intra_frame_heap > 0 ) { - if ( wc_heap_size_intra_frame[1] > 0 ) - { - fprintf( stdout, "Maximum intra-frame heap size: %d %s in frame %d\n", wc_heap_size_intra_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_intra_frame[0] ); - fprintf( stdout, "Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size_inter_frame[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size_inter_frame[0] ); - } - else - { - fprintf( stdout, "Maximum intra-frame heap size: 0\n" ); - fprintf( stdout, "Maximum inter-frame heap size: %d %s in frame %d\n", wc_heap_size[1] >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_heap_size[0] ); - } + fprintf( stdout, "Maximum intra-frame heap size: %d %s in frame %d\n", size_wc_intra_frame_heap >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], location_wc_intra_frame_heap ); } else { - fprintf( stdout, "Maximum intra-frame heap size: not available\n" ); - fprintf( stdout, "Maximum inter-frame heap size: not available\n" ); + fprintf( stdout, "Maximum intra-frame heap size: 0\n" ); + } + + if ( n_items_wc_inter_frame_heap > 0 ) + { + fprintf( stdout, "Maximum inter-frame heap size: %d %s in frame %d\n", size_wc_inter_frame_heap >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], location_wc_inter_frame_heap ); + } + else + { + fprintf( stdout, "Maximum inter-frame heap size: 0\n" ); } #ifdef MEM_COUNT_DETAILS @@ -1617,10 +1831,7 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) } /* Print detailed information about worst-case heap usage */ - if ( wc_heap_size[1] > 0 ) - { - mem_count_summary(); - } + mem_count_summary(); #endif if (Stat_Cnt_Size > 0) @@ -1629,7 +1840,7 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) fprintf( stdout, "This is an optimistic estimate of memory consumption assuming that each variable type is stored with sizeof(type) bits\n" ); } - if ( wc_heap_size[1] > 0 ) + if ( n_items_wc_intra_frame_heap > 0 ) { fprintf( stdout, "Intra-frame heap memory is allocated and de-allocated in the same frame\n" ); } @@ -1640,6 +1851,28 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) free(allocation_list); } + /* De-allocate heap allocation call tree */ + if ( heap_allocation_call_tree != NULL ) + { + free( heap_allocation_call_tree ); + } + + /* De-allocate intra-frame and inter-frame heap lists */ + if ( list_wc_intra_frame_heap != NULL ) + { + free( list_wc_intra_frame_heap ); + } + + if ( list_current_inter_frame_heap != NULL ) + { + free( list_current_inter_frame_heap ); + } + + if ( list_wc_inter_frame_heap != NULL ) + { + free( list_wc_inter_frame_heap ); + } + return; } diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 1b774e4247..9973afc3df 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -28,28 +28,6 @@ #define NUM_INST 20 /* Total number of instruction types (in enum below) */ -/* inline function for memset in combination with float pointer */ -#define SET_FLOAT(ptr,value,num) \ -{ \ - int i; \ - LOOP(1); MOVE(num); \ - for (i=0; i < num; i++) \ - { \ - ptr[i] = value; \ - } \ -} - -/* inline function for memset in combination with integer */ -#define SET_INT(ptr,value,num) \ -{ \ - int i; \ - LOOP(1); MOVE(num); \ - for (i=0; i < num; i++) \ - { \ - ptr[i] = value; \ - } \ -} - #ifdef WMOPS enum instructions {_ADD,_ABS, _MULT, _MAC, _MOVE, _STORE, _LOGIC, _SHIFT, _BRANCH, _DIV, _SQRT, _TRANS, _FUNC, _LOOP, _INDIRECT, _PTR_INIT, _TEST, _POWER, _LOG, _MISC}; @@ -137,6 +115,7 @@ void reset_wmops (void); void push_wmops (const char *label); void pop_wmops (void); void update_wmops (void); +void update_mem( void ); void print_wmops (void); #else /* WMOPS counting disabled */ @@ -146,6 +125,7 @@ extern int cntr_push_pop; #define push_wmops(x) (cntr_push_pop++) #define pop_wmops() (cntr_push_pop--) #define update_wmops() (assert(cntr_push_pop == 0)) +#define update_mem() #define print_wmops() #define ADD(x) -- GitLab From b8241ded67089c5d88aa8ff510dd8a91c6f36e8c Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 5 Dec 2022 14:49:16 +0100 Subject: [PATCH 052/103] fixing TD object renderer --- .../renderer_standalone.c | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c index e33ee38839..e4572d3b91 100644 --- a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c +++ b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c @@ -137,9 +137,13 @@ int main( int argc, char *argv[] ) Decoder_Struct st_ivas_static; Decoder_Struct *st_ivas = &st_ivas_static; - MixFrame = count_malloc( 2 * L_FRAME48k * sizeof( float ) ); - MixFrameWav = count_malloc( 2 * L_FRAME48k * sizeof( int16_t ) ); - input_buff = count_malloc( MAX_CICP_CHANNELS * L_FRAME48k * sizeof( int16_t ) ); +#ifdef WMOPS + reset_mem( USE_32BITS ); +#endif + + MixFrame = malloc_( 2 * L_FRAME48k * sizeof( float ) ); + MixFrameWav = malloc_( 2 * L_FRAME48k * sizeof( int16_t ) ); + input_buff = malloc_( MAX_CICP_CHANNELS * L_FRAME48k * sizeof( int16_t ) ); nChannels = 0; #ifdef FIX_I214_CLIPPING_STANDALONE_REND noClipping = 0; @@ -155,7 +159,6 @@ int main( int argc, char *argv[] ) f_metadata[i] = NULL; } - /*------------------------------------------------------------------------------------------* * Struct initializations *------------------------------------------------------------------------------------------*/ @@ -164,7 +167,7 @@ int main( int argc, char *argv[] ) st_ivas->hHeadTrackData = NULL; st_ivas->ivas_format = ISM_FORMAT; f_quat_traj = NULL; - if ( ( st_ivas->hDecoderConfig = (DECODER_CONFIG_HANDLE) count_malloc( sizeof( DECODER_CONFIG ) ) ) == NULL ) + if ( ( st_ivas->hDecoderConfig = (DECODER_CONFIG_HANDLE) malloc_( sizeof( DECODER_CONFIG ) ) ) == NULL ) { return IVAS_ERR_FAILED_ALLOC; } @@ -283,7 +286,7 @@ int main( int argc, char *argv[] ) fprintf( stderr, "\nError: Unable to open metadata file %s \n\n", argv[i] ); exit( -1 ); } - st_ivas->hIsmMetaData[j] = (ISM_METADATA_HANDLE) count_malloc( sizeof( ISM_METADATA_FRAME ) ); + st_ivas->hIsmMetaData[j] = (ISM_METADATA_HANDLE) malloc_( sizeof( ISM_METADATA_FRAME ) ); i++; } } @@ -316,11 +319,10 @@ int main( int argc, char *argv[] ) usage_rend(); } - if ( f_quat_traj != NULL ) { st_ivas->hDecoderConfig->Opt_Headrotation = 1; - if ( ( st_ivas->hHeadTrackData = (HEAD_TRACK_DATA_HANDLE) count_malloc( sizeof( HEAD_TRACK_DATA ) ) ) == NULL ) + if ( ( st_ivas->hHeadTrackData = (HEAD_TRACK_DATA_HANDLE) malloc_( sizeof( HEAD_TRACK_DATA ) ) ) == NULL ) { fprintf( stderr, "Can not allocate memory for head-tracking\n" ); exit( -1 ); @@ -354,6 +356,7 @@ int main( int argc, char *argv[] ) /*------------------------------------------------------------------------------------------* * Main rendering loop *------------------------------------------------------------------------------------------*/ + fprintf( stdout, "Rendering...\n" ); while ( 1 ) { @@ -511,6 +514,10 @@ int main( int argc, char *argv[] ) fwrite( MixFrameWav, sizeof( int16_t ), ( currFrameLength - offset ) * NumLdspks, f_output ); #endif +#ifdef WMOPS + update_wmops(); +#endif + nFrameCount++; frame++; @@ -527,12 +534,12 @@ int main( int argc, char *argv[] ) fclose( f_input ); fclose( f_output ); - count_free( MixFrame ); - count_free( MixFrameWav ); - count_free( input_buff ); + free_( MixFrame ); + free_( MixFrameWav ); + free_( input_buff ); ivas_td_binaural_close( &st_ivas->hBinRendererTd ); - count_free( st_ivas->hDecoderConfig ); + free_( st_ivas->hDecoderConfig ); st_ivas->hHrtfTD = NULL; /* ISM metadata handles */ @@ -540,23 +547,19 @@ int main( int argc, char *argv[] ) { if ( st_ivas->hIsmMetaData[n] != NULL ) { - count_free( st_ivas->hIsmMetaData[n] ); + free_( st_ivas->hIsmMetaData[n] ); st_ivas->hIsmMetaData[n] = NULL; } } if ( st_ivas->hHeadTrackData != NULL ) { - count_free( st_ivas->hHeadTrackData ); + free_( st_ivas->hHeadTrackData ); fclose( f_quat_traj ); } ivas_limiter_close( &st_ivas->hLimiter ); -#ifdef RAM_COUNTING_TOOL - mem_count_summary( USE_DEFAULT ); -#endif - #ifdef DEBUGGING dbgclose(); #endif @@ -568,6 +571,11 @@ int main( int argc, char *argv[] ) fprintf( stderr, "*** Clipping on %d samples.\n", noClipping ); } #endif + +#ifdef WMOPS + print_mem( NULL ); +#endif + /* system( "pause" ); */ return 0; } -- GitLab From e4b8599597ec0798107ad2f02a2af4debb67821f Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 5 Dec 2022 15:06:04 +0100 Subject: [PATCH 053/103] fixing CREND unit test --- .../tests/unit_tests/crend/ivas_crend_unit_test.c | 5 +++-- .../tests/unit_tests/crend/ivas_crend_utest_utils.c | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c index 82d365ea26..882ccec11c 100644 --- a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_unit_test.c @@ -51,6 +51,7 @@ #include "ivas_prox_mix.h" #include "prot.h" #include "ivas_prot.h" +#include "wmc_auto.h" #if defined( __unix__ ) || defined( __unix ) || defined( __APPLE__ ) || defined( __CYGWIN__ ) #define USE_DIRENT @@ -702,7 +703,7 @@ int main( int argc, char **argv ) } #ifdef WMOPS - rest_mem( USE_32BITS ); + reset_mem( USE_32BITS ); #endif switch ( io_params.test ) @@ -727,7 +728,7 @@ int main( int argc, char **argv ) FILES_CLOSE; #ifdef WMOPS - print_mem(); + print_mem( NULL ); #endif return 0; diff --git a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c index 69f5f99556..b4d283e0bc 100644 --- a/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c +++ b/scripts/ivas_pytests/tests/unit_tests/crend/ivas_crend_utest_utils.c @@ -62,6 +62,7 @@ #include "head_rotation_file_reader.h" #include "options.h" #include "render_config_reader.h" +#include "wmc_auto.h" static ivas_result_t ivas_dec_default_io_params( ivas_dec_io_params_t *pIO_params ) @@ -1556,6 +1557,10 @@ ivas_result_t ivas_common_mixer_renderer( ivas_crend_io_params_t *pIo_params, fl fprintf( stdout, "Processed frame: %ld\r", (long) frame_count ); frame_count++; + +#ifdef WMOPS + update_wmops(); +#endif } int16_t pcm[MAX_OUTPUT_CHANNELS] = { 0 }; -- GitLab From 8651f70dcceed57581a78ce4144adf229d100da0 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 12:15:53 +0100 Subject: [PATCH 054/103] inclusion of stdio.h and stdlib.h --- lib_debug/wmc_auto.c | 2 +- lib_debug/wmc_auto.h | 179 +++++++++++++++++++++++++++++-------------- 2 files changed, 124 insertions(+), 57 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 8191daefd7..00ef4f1ade 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -519,7 +519,7 @@ void print_wmops(void) * Maximum heap is measured by summing the sizes of all memory blocks allocated by malloc() or calloc() and deallocated by free(). The maximum heap size is * updated each time when the macros malloc_() or calloc_() is invoked. The macros 'malloc_ and calloc_' are inserted automatically during the instrumentation process. * As part of heap measurements, intra-frame heap and inter-frame heap are measured separately. Intra-frame heap refers to heap memory which is allocated and deallocated - * within a single frame. Inter-frame heap, on the contrary, refers to heap memory which is preserved for more than one frame. + * within a single frame. Inter-frame heap, on the contrary, refers to heap memory which is reserved for more than one frame. * * In order to run the memory counting tool the function reset_mem(cnt_size) must be called at the beginning of the encoding/decoding process. * The unit in which memory consumption is reported is set via the parameter 'cnt_size'. It can be set to 0 (bytes), 1 (32b words) or 2 (64b words). diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 9973afc3df..96e7b581d9 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -14,6 +14,15 @@ #ifndef WMOPS_H #define WMOPS_H + +#ifndef EXIT_FAILURE +#include /* stdlib is needed for exit() */ +#endif + +#ifndef EOF +#include /* stdio is needed for fprintf() */ +#endif + /* To Prevent "warning: '$' in identifier or number" message under GCC */ #ifdef __GNUC__ @@ -189,14 +198,6 @@ extern int cntr_push_pop; static double* ops_cnt_ptr = &ops_cnt; #define OP_COUNT_(op, x) (*ops_cnt_ptr+=(op##_C*(x)), inst_cnt[op]+=(x)) -/* #pragma GCC diagnostic is Available from gcc V4.2.4 */ -#if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) >= 40204 -/* Disable Some Warnings with Cygwin gcc Compiler (Only when WMOPS are Activated) */ -/* To Avoid: "warning: suggest parentheses around && within ||" and - "warning: suggest explicit braces to avoid ambiguous else" */ -#pragma GCC diagnostic ignored "-Wparentheses" /* Otherwise use : "-Wno-parentheses" */ -#endif - /******************************************************************/ /* NOTES: */ /* The 'wmc_flag_' flag is global to avoid declaration in every */ @@ -327,60 +328,126 @@ static int wmc_flag_ = 0; #ifdef WMOPS -/* Check if EOF is defined */ -#ifndef EOF -#include /* required for 'fprintf' */ -#endif +#define ACC 2 +#define MUL 1 -/* Counter Function (should not be called externally!) */ +/* Counting Function (should not be called externally!) */ static void wops_(const char* ops) { char lm = 0; /* lm: Last Operation is Math */ static char lo = 0; /* Last Operation */ -#define ACC 2 -#define MUL 1 + void (*fct)(const char* ops) = wops_; -st: while (*ops != '\0') { - switch (*ops++) { - int cnt; - case '-': for (cnt = 0; ops[cnt] == '>'; cnt++); if (cnt & 1) goto ind; - case '+': lm = 2; if (lo & MUL) { MULT_(-1); MAC_(1); break; } - lo = ACC << 2; case 'U': case 'D': ADD_(1); break; - case '*': lm = 2; if (lo & ACC) { ADD_(-1); MAC_(1); break; } - lo = MUL << 2; MULT_(1); break; - case '/': case '%': lm = 2; DIV_(1); break; - case '&': case '|': case '^': lm = 2; case '~': LOGIC_(1); break; - case '<': case '>': if (*ops != ops[-1]) goto error; ops++; - case -85: case -69: lm = 2; SHIFT_(1); break; - case 'L': case 'G': if (*ops == 't') goto comp; - case 'E': case 'N': if (*ops != 'e') goto error; - comp: ops++; ADD_(1); break; - case '!': MISC_(2); break; - case 'M': MOVE_(1); break; - case 'S': STORE_(1); break; - case 'P': PTR_INIT_(1); break; - case '[': case ']': goto st; - ind: ops++; - case 'I': case '.': INDIRECT_(1); break; - case '=': if (lm) goto st; - case '\0': /* This Cannot Happen */ - /* These are Used to Avoid: "warning: 'name' defined but not used" - with Cygwin gcc Compiler */ - wmc_flag_ = wmc_flag_; - ops_cnt_ptr = ops_cnt_ptr; - fct(""); - error: default: - /* The Following Checks are made instead of Including the Required Files to - avoid generating warnings if they are already Included in the Source File */ -#ifdef EOF /* Will exist if is Included */ - fprintf(stderr, "\r wops: Invalid Counting Operation '%s'\n", ops - 1); -#ifdef EXIT_FAILURE /* Will exist if is Included */ - exit(EXIT_FAILURE); -#endif -#endif - return; /* If no Exit Mechanism, just continue */ - } lm >>= 1; lo >>= 2; -} + +st: + while ( *ops != '\0' ) + { + switch ( *ops++ ) + { + int cnt; + case '-': + for ( cnt = 0; ops[cnt] == '>'; cnt++ ) + ; + if ( cnt & 1 ) + goto ind; + case '+': + lm = 2; + if ( lo & MUL ) + { + MULT_( -1 ); + MAC_( 1 ); + break; + } + lo = ACC << 2; + case 'U': + case 'D': + ADD_( 1 ); + break; + case '*': + lm = 2; + if ( lo & ACC ) + { + ADD_( -1 ); + MAC_( 1 ); + break; + } + lo = MUL << 2; + MULT_( 1 ); + break; + case '/': + case '%': + lm = 2; + DIV_( 1 ); + break; + case '&': + case '|': + case '^': + lm = 2; + case '~': + LOGIC_( 1 ); + break; + case '<': + case '>': + if ( *ops != ops[-1] ) + goto error; + ops++; + case -85: + case -69: + lm = 2; + SHIFT_( 1 ); + break; + case 'L': + case 'G': + if ( *ops == 't' ) + goto comp; + case 'E': + case 'N': + if ( *ops != 'e' ) + goto error; + comp: + ops++; + ADD_( 1 ); + break; + case '!': + MISC_( 2 ); + break; + case 'M': + MOVE_( 1 ); + break; + case 'S': + STORE_( 1 ); + break; + case 'P': + PTR_INIT_( 1 ); + break; + case '[': + case ']': + goto st; + ind: + ops++; + case 'I': + case '.': + INDIRECT_( 1 ); + break; + case '=': + if ( lm ) + goto st; + case '\0': + /* This Shouldn't Happen */ + /* These are Used to Avoid: "warning: 'name' defined but not used" with Cygwin gcc Compiler */ + wmc_flag_ = wmc_flag_; + ops_cnt_ptr = ops_cnt_ptr; + fct( "" ); +error: + default: + fprintf( stderr, "\r wops: Invalid Counting Operation '%s'\n", ops - 1 ); + exit( -1 ); + } + lm >>= 1; + lo >>= 2; + } + + return; } #endif -- GitLab From ecc1306a384d2a030fa04779e9437a24f2e3f26c Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 12:17:36 +0100 Subject: [PATCH 055/103] update of wmc_tool binaries to reflect latest fixes --- scripts/tools/Linux/wmc_tool | Bin 204224 -> 220608 bytes scripts/tools/Win32/wmc_tool.exe | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool index 6d8f0f709007a2c2d66bd71821602a081d11bec3..674946491221379fd8c7a611ae23adb023f7cb39 100755 GIT binary patch delta 48265 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 HWmW|M*@_$) delta 35228 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 diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe index 2db486e5e9..bc39ab105d 100755 --- a/scripts/tools/Win32/wmc_tool.exe +++ b/scripts/tools/Win32/wmc_tool.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d7f079929453621229f2792937e65f0c71de4f747acd1db4ed61f29fbe8c169 -size 159744 +oid sha256:2059a1e251389164de4aa311e941a7e8c406efa67fd01052a6ea43bba863b5c1 +size 176128 -- GitLab From 253792a65c58f578a1ebc037e82df581c17241b2 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 12:37:51 +0100 Subject: [PATCH 056/103] convert '-' to '_' in Const_Data_Size_xxx strings --- scripts/tools/Linux/wmc_tool | Bin 220608 -> 220608 bytes scripts/tools/Win32/wmc_tool.exe | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool index 674946491221379fd8c7a611ae23adb023f7cb39..fa197f0647c5d4fc951fc688cd07695c6b66f1cd 100755 GIT binary patch delta 17163 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%0DE0gM--nxlA=dxz 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 FOaLK$dv^c; delta 17158 zcmX@GoA}I#pcE+FbF z^%)%}zhu`pbd!Rpl!2;LV}_{Qp#~98fQp+!#a$Pr{P=&|_LuD(VvelCha_BS8 zocxhPoavwBWG+rO#^%X^oZ^g(lQTKp8BHc{{z*cl zO(C)jy=)K%BtdO%fr@X2YCA47S&3hdv2t=CzdmEbZIk`(9PHGvN^g^ighq%d1f_;n|CQlU9XH4IGP*6~q|3jQ3gU9iM z4Pff{%*hW`E;1Ty-mJQYS;q7a14HLwk8al&9-YTuRDpPhJi1*Ubl%*jFu7VYgWDj* zkzohO2`>UBztfE6Nr3ZTe4hMXQ+INUmOghYT(DvCJ}q6Q1u2uQwbdpIYpXFGNSWNJ ztu{GPTaEh#T-BP%le9g!IZ|OpM^1jK9nNO}=YRjmz%bb`KxT53KJR2cbKc1fI_?rX z{xUFlbROz<{nL4De*#=>{O0>QPnjfk|H3MpwE2#H5VK_9cdW8MUTtLV_y5UcaVIrK#mRO~S|GVBCqEFi%jqxE z_q547ohLA6Pxf-L4`WD&h3=}G3=A(1GBPlDbh}>g==EUq=nj40(d)Xwqw^fdM9HgQ zA8r7#3$HRT?9)w$Se0=9|9_9x1N>7DLsTDskuv$diy^lG+-T*=(ym5~v6KB=r5JT5 zXS&94C&1kh`&$y?k~xjW#JQj=BO>zFpDPhR3)2BKs<{CIZ2Wlvt6 zT;{Qu`vqJ;YO;!F7D(L$Paj6z&38Q~GBSNQx4FPuh8ZN<=Qo{^Ve*+k=gpb^9~l{0 zCPxPrOjh-G*~}j#$H>SrSuePTTOb1#9-Wi720MYm>}T+15VbC3wvy;kP-MD(@aT5^ z;L&`5(WBFKgGaaPhJ6+pkg!-aIXhI2(<2kYYu-F5bQ&W!M;6RX?#agCQA`WsC-;YU zGp&f9EEAyx;(0_gFs+H7d@4c##CsFr!n-Ekk)fNxb~!@>L#g{@!w6B3L`dXukTTgQ zJrLy^6%V4;MVWwH_av$h#4Cw50`XQvtAltKqxC@)Q;ZWR&A7#sGwM&?7Zc8H0e6tx zWQEuykdBsEb*7c^lh?)?fOz*~O}SUbJ2LQZW3V__VhVP^%J|7{$4U@kln=($Atd*k5*fKdF zMS-zna$$-&W6$K3De{axlTW5h0I7{mEVYZ18?!_v z2WK7w*(seB!wHjlGTAU&cyf9b@8ktpW}KyY5JSu+-_Md`Oq~2L3!Iy@vUh;=J;^=< zqE_T&F;-6&&IRYNwxcVRBlr708W? ziY*z#Cf_Lr=Lv-pZN{9*J|$qzgpy`Z_7W}i1gT3XZ3ppQmb!u{gRQ&F1GjGVDJf zp3LyVeChxH{M%SrrYJGA94O@nXW9J=M3Wg_$S(c=-=o|0$G#m<^CKqjZIsc2N;ljzL zt@?Z!Q^4i@0+8560wm@L=*fayT$rXF*Ud7CYJSr{3E zCfoHjbBDu~7EM0W7s41cS+V~d(}Kj!ANy+=84D)oPpk*|>cd1M#-h#2lhPR(OEz~; z762JDdF~WTrp@V_Z%kRq0?+!l7ED%{qc(ZtObd`>UeDYOqE^iM0HS8iu7MW>u9Fwe zmY-}lrvsFhPRyxg1SMzpdF6}?Chwo81>(G(H<4*u@#MPs^O<%QPnKWM4B{1 z)f3?v_JGH6*Bb(xf3DzVW>lTbzGfPu?&NuE7K5yJUhC&?odb%b)`I{4|AXRbLJkAN zzRl2jd0QDY*&X)ig{x@DVPI&vU83*N-D&~S)O^6AJM@Z2cj<}Fi@Q`OKUk~C7&)0~ zogdSu?8!mv;y~fNX&pDCD1R0M!){QM)}y!e!#{{^@slsD4`5W-th}KN6cMvF8XNsj z2fIfAWOV287aO0IJXfq|gAW@GZy?Xgj18rov(}_vR4eT!=PUFda%`VAy8@)s~K| z4W?pK+T=-_oj5I^YOE&T-R#Nb4CTEjo@}rsOvf!1wa|HSE3% z68f+^4U~c-_AF)u+4y(wFYb&ISk|`L%(TCSk+E-b`vG6>32@=~$@dSeW!h6bx$mGN zW5MJN2WK-%O!hhC#&jZi@{~gwj1rUg9y$%myIqGBxOc#{c~0JXIFRXG$!3ltr@)q7 zIa<$HJvro<8z?W&IaUY~+{}MMg^g)b>Soh(7K}{aOD5-^*JotdJpa51D4%ZLdclbq zfMzlsdp}DswAPRx;J-SRRA|l)?9C4 z)Y@!#L!A*`NH|SSys0j$R|*S>)h-MSFZ&>6`v*{*ZTFeH^yXfWLsM>PFmi@LYnar@ zQ*T#+tQNcz56a6$clr$DY~e0=0P0-rgSp_hCpbNoih)I8u7Bz|+3@Z{kQrC*dKs^? z21h(NF|ye(FzmC0I)AkdDE+uz@Mx~RzyN8ZgB5+Yo*Z~jnCX}G|$kLVA$s{dDA^`o$>RYD`VYc`}@g^Zj%?^cLurq#rG!9xs&+g}P$08MwOpu2c9y9p2wXib$`TyTWuS5`4K)+NF6oVeU0gN7%(spmszPrghFMtw&iq#roBIt<3C$-!BV(@ z`{X5`)j2sTz@B-rW%8BJ-lCsf7#O;zzWEJq2VQ_U>i%StFAhxXRg=rUm~;MtHmsLU z-u6X-M**xE+$#>7{OC&<+on`Uh8K4x+kI7MET5eARgXz#=j3T$-5J+RzW3FOF>$iy zH(z*HqGfXZw-P2nhsj^R<#Xm4g3|W!7yXlSzxylpDuH6W^#LgDcOHMSMTvpIv-5~Y zx9fs#2cFL3FTPE_`(3r(9ioZ>nv?QC+|GmDr48Mo8$5bjH~jhk-!arNB;!M#BSWxb z=SR;@P~9F-;mEL0g9#MS$01SpP#c`r6*^t_c=Wcyj57oo*9&)pk`e<$bL}363eLvb zJ?cyh40Rkr`@!CwIJxtOHe>VTtv~b_-%ft=LxJ(vWY(YhOgyh9oBcEaHFI))>N0+q zJnLsFytrIFnd8?icuS1KVe*<^8cgPzldt`92`|?J1;wFm*E^jzJCE&esDPEJk;)7V zFE8+y2U_-iDg6T@%T1_T8e-#o_kd5udt%QGD`)zjCVgp{iq%RXcQx zHX>A)fmBOOw*Dul`UI+)2~D*hLbWqQ^|XI-sxP3bmun!o#GzaCz8KskSH!?R|M*W% z^(|Dj51Q&0gz8F&YM=jds-K~%KdPgeZHZ8=2T{HJzntn%sOo8Gs&9$HU2Ms;09sGs?5K#5*#)FtD7i!^|kjcbfBHsdM$zdzSs0B3 z3`D^eJ3uXNo&KAJQJ!6@(vjhXwfS^KRz^w2@afj9jQSF-R-h6A+H@%u@#uyOy{1fW zVr4XfoBeJ2URK6gj6KsM*cf#=tDyyT{q#OIMlD9|={wmN{lr9s!FDD3XNR_70?p)CyDSJl&t2(Uema+Oq#Wy_cO)lT#iV4JW7XXJ<@u zFAxHis^BJiybQ?6pcXyMf58YzC%7cccr%2gs?78Z4n})ORgyb>EeE42?>9|wg#;dS zpECVE2crq60@Nir(`7grH!|5tOh3=bI9ceXI9TNec;~NTdI=Y!GQ8H~5ud)0i!qB6 zRtw&kF2c)`K;J#x7nQ21y?PNw0=WgDnP)&%9U)lKlXZ?M0OZ4a~e~ z2gxebI5ND*7ytkNxa%K~#%|X?9y2_;S&lL!I)X;pO0-Z#IuGqr)@NW~*za2d3zbVE z|Nl3;{$YH5WEX=_GQ&P)RO!tk)BAWB4J{EG%HSIIM}Vw9CWhi~&;Zek1AqSi-`@d} zT`@g`mr<2zP5ks~UPdLR1@Y78^D@e@Z2-wx!sT8;<@op*GEfC9~&XM7T0*J-Mz`*cg z+4N_8j4n*Z3e$D?8H1U)G`BbMGdeLzfKnWI;^s-`vHh8KFc%k1zb(iZz!*1OM~KlC zo}Mi=rdJCwstDAuqh#!h)7J|zN|>Ay1LeYF-L6kOxyZo-D%X#g_+abM(44fC{5ytkX9LF^a427lGO40d5f)z%?a+ z8beUkGpGL)VeIE9hzE_t@2;LcL6lKc`i(HE)^NDi-suNK8671iz!h{J+g|~fHJL6c z#@NKyzzhl-SMbo^4Q7aIE()Oz97w$B4l<0>EsB3Af@k%#*+9iSZw`pt3mL%c-l_qv)ed=d zo_|pdmS^<=$#))q@n<@}ETcIS3+r?bS;l`%E-c$UAXcz2fqDhCKNvv64Xk!x(PR4=B$63k++_U!|FxJ$x2Oh4wA=NE2c)NT zkP+l6Rw0mR=kXVZwtFfv-ezPho35(N7%F_>qauSxZ)*U!Qv>eq~5U`vLzp2L62qI*-3#`ZGONi_vKM8x6)3xEVn|z-B-O zXJBU3PS4Y1bl`+>zf9k*$!HDdewhASlhIeC=of|!@zZ0p813a@`q;l?G27_-^j%tv zhEmTUo`7`Q4t@IvnymmgH@)#$#)#>Mbr_WxpH6?K!)Rk( z@%7(-kLKJTj2^wMH~xa6%J;`EP*LpBc?^_jGQRx-MQd~I3x*ON&;S{z5OV%HJyMs^ z5^i$C^x3+M#!NonreDxyRAsz6{hKbM9LuxM|Nc)uAjK#--B6FQfbr+_MS6^?jLFka z=rQU_Ed2~}XzPi;|Nldp5c?P!9U1m>Oy|{SOq00(6qMc$?h*ktB*3-3REs0Si-hUj z`ixeb`Yn*yd^`P|KBE$+5tMsq`cHkv+47c9uH2`8|631~h=QhL_gO;)IX_L`Y`|zD z=M3ea{)nW=6)L!GI;$b0hFma|+X_)52{tGcDp)Yx+mO+miR0t+7DGlC#-`~f4H*ri z89w~`?_tZr$iPq*(?g9Im2`za{QLj%B_p^G`eEO0u!`d^bUz^ZVlPxs;=}YMMvUrm z$D#b^?~xRpgbH4o{?dq1L+&z^yAYxV;?=8A!Jg^*#*F4nD(|Of7&E#s&YQm0n9;Ca z<{jLtVIJMKsSh!|`U39N_3xoxeVyyk&1;EJ3-YH%D=0dl{%i%QRAOLYc!Wv{@cdNm_|Npxgc&5jiFggmxy#4pT6I78y8vnj;r>{3*)M4zOe#eB-mN9U< zlqq8(lkoc2|Nb|-zF~ZQ88oT{O2Bic_n9-QF}b~(zRjGml*#_}bX^NZ1IEA8<184Z z^={sQq(0C>pMBue7trd+@FMEXzyJF|LzFKTyaFX&S8y&1nZDeDQH62-^fMNW+KiK@ z|FB?e5Z?3>WaA&k*V|!PX2JAsOGXVt$8#b5Z>1gm1vwUWyR~5wzPI%PXw*`t4HWywUldJW>A)z*s6YLL1EY=fv&aAbdsw=DfQ;J6cyzZO z096s)4Eyw_%R4ekGA2#8bY#@wgy~*8Jmm{Mb7vx10LNB`%I?Kc4D*;QGf97|G^jXEeA?KsU9lx+=(%b$@l(re`iL2$u$>2 z$>Cz>r+uanw?c9x>x1drof#wRtu87u?6X9cnQ{N$|IhqUu5&!PS!F=7ZctfJT6$4+ zACzW)cyzNefDJyjp99qL{e17=e^5ExT>FCo;!>v9w>`R9Z(jh}e*DGcd;k77)NWuX zvGwQ<1=UnLAQkNNeiueDzNKJQ$M%Ct?iVwrZ+2nS;LArAOPc=Dh0#>yLj|ZW`=`0~ z57ZJFk8W0RWQAP!raQSZDk*>Lz@qZvd5~kE)*PAM?#gJa?64k-!fIrNdDHK@GTQJ( zLPG)6&3Z9qy1E;qav%dp9eCB$!F^e6u#z$A?!W*1+guN{94M6o1;IIxtp_39N>CW? zuWEB-c#(1slnYt+f@Ps@+Aw{#8)GErwA;{Z0%^l2xHBrllgjz&KJJWioa-JqF?1f= zzqNIGu{)!#Yy-$d*Sp}9@&Xe6GSC8OpUL#S?u^omho;|jXO!ifatqyTj_Fz+jM8um z&QAC9V3gzB3AdosgHcQNzyn8y7jAcuEs#W5u*ZW@g7Mh)s~(KTjO^f=@Wg}Z{9cTb z^-8B9p4Wm`g%(eo7+$Qt_3!_S#)JR=gA?P+Vi5+0Zr20N4_I0c@V97yD+t!-ryyEw z;94_4S_^Ld`wv#D&(jj4pH zQ-rH~08+;UQ^yEZ7YJ2{a2Cf?Cx#cdZi1bq+Q7iT(0ZUm*`u3R{gk2gyPjF2cj zsmQSF3nK%=z6)R-&|&Xm)4zH%s)^pe`tLtz@YMB7x9b;=8K9!p=K6F4A4WYUp6k;S zd>Hi@?@aIaVboz>f9>D&gMo}H(;xXTrZBl&oxUNMQF{6WUq<%nS-y<9jK$M$_%ix1 zE}O3E$JoPEc^M?HH2ta{qZMQIbOC?HLKe=;|Nc+s4q;T7zSN)bGLz6HkP<~UaFaf2 z`@#UmTt;D+!-@?1^qzry4|V9Q>54&&hKv={gM%2W823&;7sS}acx!rKFk>v^9T26= z4{F4(1@#t=d30WXk+uC{Fe4kIaP|R3hJ8-RMjf2~D}>QhPWb>NwWz?OFX5RJ!;2;7 z|NVcd&py2_j8S`fMJS^wlkb`7>q8k$_|o@-G(dwjYWl}eMoVFZ{fZ3xT9Hk!n{FG% zc#X6CG&t8VKzkMT;f$UlLT5qcq?YfG&-?5QR_^3!)kGFnT9?p9>*1kGgp*f#;$=C#xL zq8Rh|&h0{S=E3P*QH3FDMoq@9>Ebbr)_gy9AgO;nJt2m%iYee2I4-CEjbYSc zVg_@hr!NR*F4N~I6&;Tk{Kum^~>57Sr_F6X*ATGZLr5&KkVLo~a6@Qg5y(^K?Y zqrmirL`I3p_ZTI%B{4b(S%QYjKt}E_h8P7JCIj&gL-|UY3`&~SwbmdpFfM_pV{Wf3 zVccF>!t}nV-o)zf{~A^Xh9kCr|NF2qFif-i`=5oKfx*rG?|&6`28IaxzyDp>85p|l z|Nc*5XJD9X|M!0jI|IW7`@jE}urn}ZIQ;#8gq?w5ox|V%PuLk4Tpj=ZXW?LA=yv@3 zUxkB#;hy8)|1KO13|>xu|EF*;FwAoL`@e^Sfq}{S@Bb|v4D}3I&VT>k;b366ew0!o|Sw z!|U(=C0q;)joyF%AK|KJVA$mS_x}?v28NYBfB&m+Gca8B`}^OAn}K1k|KI;P+zbrw z{Qv&%;bvgC9Ps!58g2##r@+7e&u}v^@CE(-|Aw1^!9VEle;ytNhV0)-2 z{qMuWz#t#;_kRu#1A}nr-~T;43=HX^fB&!HVPM!D`uG1C9tMWk@W21x)blVftcdvg zpNE%$!8-Eqe;r;1hNY2z|NHPVFqB9A{h!0j!0;gY@BbcN28Q04zyH_pGBD)D|NVc3 zmw~}J;qU)1ybKK9$$$Tg@G&rCr2YMG!pFeCmhtz02p!oFatv-!mRkP%-y_Pvz-smH{~A#S22Y!R|IdgrFw`%#`S<^gC95DulId=d4_lPktytn)Je~lOeLz4Z!|7XM) z81~rz`~OCafkDRM-+vx)1_n9DfB$vF85nGw{{0UTXJ9z!^zVO(I0Hkw^S}Rd#2FZR zT>kyvBhJ7e=KAmd9dU+w1~IpP|Nn?HFzj&u_g_YWf#I_IzyCH83=G!3|Nh5FFfarL z{QKV`!N9OT;NSlx5)2Hd1ONR$Bf-Gn9rW-28wm!6v%&xV^GGrZXD-$aUmVQ%8T{~=Ng3@zpV{+CEGFnlTh_kWKR0|QIN^sYBdYK#TbH@;!g zXWTIT;TtA(#uw8$-!jQFap+FhddnooC^p^mEt5Q>&h$(WB{#hjL`h9w38Lzzp9E2p zroRMH7pHT+W0GgQH(e7%y`Js~qPnJMzGISSlCqfI^^Qr7iN|94DiAGiG5r*X7POfD z3Ph_|Oy_#fB*!>sy5@T(dB#K2J>N6QGg(?r&w9@!#}scly$d8eY5Gc#?7itH-!rK* zvQ2mVz$8Ci-~$r}qZ^#f!dk=3z|aQbt1}*(p80`Ep7GlB&JRrTOf1&ZSAAfTV=}Uy ze(D309AoPAmmt~Y(>Xsf$us6m*91{}rh9&5l4mlpou2iPNscMpc6!%GCOO7a(^rCI zZ%;o7qP9$b2~y6)LIm!qtst+3j zgS_kC|M{Rw4rT;X7F>G{8v{e$bi>a~@{Uq&fB%CkL71`{uqv=EYuFeVtlj?pmjN{< zVDil3j35;tSDayEU@)J)@iUV&>l-!(hC&cio^kc`i=Ua~8SAHi1W}u(3w~jeXM8^0 z5JY884+K$DrWbx;lCNj?`TIW$#fhmPqrrB+VP{|n^!fY$5{mp;xI7OB0|T?~-~X8? zZcBl?O^1Vl!N>3K|FtOkSAg|{8q_`<3``6+rwe{%QfHhr-SR7wJd=6Q^r){)a!mT6 z)2l$VPQ>(CUzy|>S54pfl}Vm)-}IXxRRS^7e}QCGVy8=eW0GS$Fx~PSlRT4K;`FF* zOlpkH(;L4r$us_+zVI89yrN6N-~T=A3=HsiWNv2%IRO-UGF%J{8>T-5DRZp)``-`6 zBc5=N#Beb%br?39bB+H~Zar&w6Oma*Clc&G>&Lqe9W;*8&CV9qL(=|cV>FJ(7nBmd*)@OvKj36wU=d_OO{|wWLH=X_+1bO!z;Jcz-~XV* z%c45{7s!+?(<9n; zmqqcJ1lVVw;Jm}bz`%0o@BcL@^2_1!e|Q)eCQLv0lS!U&>GX#nYS(neUrh3h=cg-z zs3+4Me=(^u9+;j9;?+&>1W|{lul&U%uX*hL-~V2q%A^q0namDsV0VJ-*WqJecrpFs zFD7|Mt>=ILOQSeL4DO5^J_ZKW7k~d3fR<{)^Heq~$Q+O{J$wudrPBj{Gs$bZz5Dxr zK4|<1rp&vaxsQdpp9`dx0a6fvnk{>$&-~3K&lU0W@BcDk1_qY4>4$zZsWHx*{_;1I zJfr_~&Oc1@jNhhff~d*UJ^wJtYfcsV_x}?Y0|U!uBoBegn5PiKK`uGN&%khD`b3bf z^648v)Wzu+|1ilb3ab4358i4Da~D%I*hL^sJ^~C3fzt*5GRZTRPB#Qm8>a{UWs+Cq zR{!_k2PH4M!!?}|0F@&XL8`;1Zv;`j(=YyIl4s`7_&2@#J(DD>k01ks^>o31O!AC< z(+xq?iRpp=nB)~XH2?i)LJn%CzhGlQ>F$gm1H-H76aO)(Gd`HU6Qs#?`b`k;@pQ)j zO!AB;rYnLdqv?(yN@#i_h?+9J5k&P*UkIYEPe1sdNuBZN^p_x>@KjD_b;j>g4VmQ` z!>0x^%QNnrTF5NVcxmcHW_8BNQ+G1UGrCQ^$t=%!X6jF7dB!KxB^jCJ8UIYT1W~`I zM}nvi( z3`T+NfqcyGnH@o^1VN$5zyK=$7#P0gfeUX2FrSfu0W`}Gk!Rol?P+Dthsm=rFfcPP zNK9`OVpf-|hIWWRNvTn7W^u`OWNGlOUWnnH(*r@$-N@1m3=G0h-M!NrLDKzb(qd5QiPJZNq^F=sJ42R_@#rDsnU6k!&xpNk|73PBdA^a5mY1_lOJsQ4l@aYd;35+rd02GE{h zh!>Y5iGxz5DpdU{h`2K-v_R3qpazv#3z2|}D?`OMpoyzM#Wxpke-hYEoyW(FaKH;mgqi7~HZlw1JqW?O*V%fP^} ziGhKEk%6CqVfs!9W__uIL`VYC0PAF6_zRU@khq;mlDUn8v0;0sBC|S^h7MDC}1<_^+)pi}KjcNKvRc3L|*VYi}%TV8lib71?XA2Qu1{DV_ zYXg~@Vh<6wfEowtB7nr_Ob=9J7WcdYm6nHUYk(T}*#V+W6td@^VL4Qs!x0TPlZcMw)r%%#g1|20Z{g4K;8>7T@PEBTgMxp7Jn#}qb zrwOP?KsL1dPHzOMQkcFGL^)1>2%_Ak3u-ZoOQN42Fd3@Hb-JS#b3EgW=?k@(#Tl!o z@6=+}mzwDT@!|tfh#&MNLCK$&;h*GmCT(Un$!0BxJS#NF$|NBUV4R+)&Fs!-GJPe8 zlA8Wen^{~^8hZ8txMpBrV6c&bC|)>SQHNPvQUIDZAvQ5E_(7!^rU!zg7b-xk0#`;1 z3=DZt>A2~QI?UpX7Sm_yFuOA@oBmLTS)WmDx}YwzIMW5m=~}wXm}dv%OGCUdVS1r1 zGwASu>5Fuk;~3{oXVhcXXY816sK>mY(QW!iJ?7<-?v@aHo1k7ymxZ`mYWhZf=6FV- z>4FB#;!IyZPuDVF-Y1EEhCr?y#HOU_jE2nOOvh!WOBpijF;-6ZG-TFiY?xkY$P79) zVEQLRW~%E83U#-jAYj5goUQS^qY~)=9~)9z*U$o8O3bQ1uH;6sV<7yj1yLH7)+lDk_L4~ PK+*7qar><(=4VU*QxD28 diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe index bc39ab105d..2c4859e0e5 100755 --- a/scripts/tools/Win32/wmc_tool.exe +++ b/scripts/tools/Win32/wmc_tool.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2059a1e251389164de4aa311e941a7e8c406efa67fd01052a6ea43bba863b5c1 +oid sha256:85947566be9633b14ed4c2cf0b822333a2820ce02a3675ab837bc32b791790dc size 176128 -- GitLab From 6eb71868be8df78086b1baa155cbe58cc3d2bd64 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 12:43:38 +0100 Subject: [PATCH 057/103] =?UTF-8?q?fix=20warning=20/home/gitlab-runner/bui?= =?UTF-8?q?lds/tCBFNnUz/0/rep/ivas-codec-pc/ivas-codec/lib=5Frend/lib=5Fre?= =?UTF-8?q?nd.c:444:5:=20warning:=20enumeration=20value=20=E2=80=98IVAS=5F?= =?UTF-8?q?REND=5FAUDIO=5FCONFIG=5FLS=5FCUSTOM=E2=80=99=20not=20handled=20?= =?UTF-8?q?in=20switch=20[-Wswitch]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib_rend/lib_rend.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 6827a0f007..cd51a9bf17 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -467,6 +467,8 @@ AUDIO_CONFIG getIvasAudioConfigFromRendAudioConfig( return AUDIO_CONFIG_HOA2; case IVAS_REND_AUDIO_CONFIG_HOA3: return AUDIO_CONFIG_HOA3; + default: + return AUDIO_CONFIG_INVALID; } return AUDIO_CONFIG_INVALID; -- GitLab From 6bf45de52bfaaf59b83701dd4eff0554da283c69 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 13:00:32 +0100 Subject: [PATCH 058/103] removing INTERFRAME_HEAP_MANAGEMENT --- lib_com/options.h | 1 - lib_dec/ivas_dirac_dec.c | 12 ------------ lib_dec/ivas_stat_dec.h | 2 -- 3 files changed, 15 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 1511bb0882..52277eaf6d 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -174,7 +174,6 @@ #define FIX_ISM_DECODER_PRINTOUT /* Issue 229: fix ISM decoder printout */ -#define INTRAFRAME_HEAP_MANAGEMENT /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 971405d65b..7851acdf7b 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -774,7 +774,6 @@ ivas_error ivas_dirac_dec_config( /* output synthesis */ ivas_dirac_dec_output_synthesis_init( hDirAC, nchan_out_woLFE ); -#ifndef INTRAFRAME_HEAP_MANAGEMENT /* Allocate stack memory */ if ( flag_config != DIRAC_OPEN ) { @@ -784,7 +783,6 @@ ivas_error ivas_dirac_dec_config( ivas_dirac_alloc_mem( hDirAC, st_ivas->renderer_type, &( hDirAC->stack_mem ) ); #else ivas_dirac_alloc_mem( hDirAC, &( hDirAC->stack_mem ) ); -#endif #endif mvs2s( DirAC_block_grouping, hDirAC->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); @@ -1116,9 +1114,7 @@ void ivas_dirac_dec_close( hDirAC->masa_stereo_type_detect = NULL; } -#ifndef INTRAFRAME_HEAP_MANAGEMENT ivas_dirac_free_mem( &( hDirAC->stack_mem ) ); -#endif free( hDirAC ); @@ -1888,11 +1884,7 @@ void ivas_dirac_dec( /* Initialize aux buffers */ hDirAC = st_ivas->hDirAC; -#ifdef INTRAFRAME_HEAP_MANAGEMENT - ivas_dirac_alloc_mem( hDirAC, st_ivas->renderer_type, &DirAC_mem ); -#else DirAC_mem = st_ivas->hDirAC->stack_mem; -#endif reference_power = DirAC_mem.reference_power; reference_power_smooth = DirAC_mem.reference_power + hDirAC->num_freq_bands; @@ -2560,10 +2552,6 @@ void ivas_dirac_dec( } } -#ifdef INTRAFRAME_HEAP_MANAGEMENT - ivas_dirac_free_mem( &DirAC_mem ); -#endif - pop_wmops(); return; diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 62151d812c..e06b62778a 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -698,9 +698,7 @@ typedef struct ivas_dirac_dec_data_structure float *proto_frame_f; float *proto_frame_dec_f; -#ifndef INTRAFRAME_HEAP_MANAGEMENT DIRAC_DEC_STACK_MEM stack_mem; -#endif MASA_STEREO_TYPE_DETECT *masa_stereo_type_detect; int16_t num_ele_spk_no_diffuse_rendering; -- GitLab From 96d8de9f51d1e1ddd89aa9cdc06e56d7f9df74d9 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 13:04:43 +0100 Subject: [PATCH 059/103] activate TEMP_FIX_BSPLINE_MALLOC - temporary fix for CI builds --- lib_com/options.h | 2 +- lib_rend/ivas_objectRenderer_hrFilt.c | 3 ++ lib_rend/ivas_objectRenderer_mix.c | 17 +++++++ lib_util/hrtf_file_reader.c | 66 +++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 52277eaf6d..e3be8caad3 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -173,7 +173,7 @@ #define NTT_REDUC_COMP_POC /* NTT Contribution 10: Complexity reduction of phase spectrum in stereo downmix*/ #define FIX_ISM_DECODER_PRINTOUT /* Issue 229: fix ISM decoder printout */ - +#define TEMP_FIX_BSPLINE_MALLOC /* temporary fix for malloc_() free() mismatch reported by the WMC tool */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_rend/ivas_objectRenderer_hrFilt.c b/lib_rend/ivas_objectRenderer_hrFilt.c index c887ae30e6..6b8bc4b07f 100644 --- a/lib_rend/ivas_objectRenderer_hrFilt.c +++ b/lib_rend/ivas_objectRenderer_hrFilt.c @@ -1189,6 +1189,7 @@ void HRTF_model_precalc( return; } +#ifndef TEMP_FIX_BSPLINE_MALLOC /*-------------------------------------------------------------------* * BSplineModelEvalDealloc() @@ -1262,6 +1263,8 @@ void BSplineModelEvalITDDealloc( return; } +#endif + /*-------------------------------------------------------------------* * SkipSmallest_ValueIndex() diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index 8c39670d9b..e25c179924 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -135,6 +135,23 @@ void TDREND_MIX_Dealloc( BSplineModelEvalITDDealloc( &hBinRendererTd->HrFiltSet_p->ModelParamsITD ); } BSplineModelEvalDealloc( &hBinRendererTd->HrFiltSet_p->ModelParams, &hBinRendererTd->HrFiltSet_p->ModelEval ); + +#ifdef TEMP_FIX_BSPLINE_MALLOC + { + ModelParams_t *model = &hBinRendererTd->HrFiltSet_p->ModelParams; + ModelEval_t *modelEval = &hBinRendererTd->HrFiltSet_p->ModelEval; + if ( !model->modelROM ) + { + free_( model->EL_dyn ); + free_( model->ER_dyn ); + } + if ( modelEval != NULL ) + { + free_( modelEval->hrfModL ); + free_( modelEval->hrfModR ); + } + } +#endif } else { diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index a4ea39b298..7fda364291 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -305,6 +305,72 @@ static ivas_error LoadBSplineBinary( return IVAS_ERR_OK; } +#ifdef TEMP_FIX_BSPLINE_MALLOC +/*-------------------------------------------------------------------* + * BSplineModelEvalDealloc() + * + * Deallocate BSpline HR Filter model + --------------------------------------------------------------------*/ + +void BSplineModelEvalDealloc( + ModelParams_t *model, /* i : Model parameters */ + ModelEval_t *modelEval /* i : Model evaluation structure */ +) +{ + /* Allocated in LoadBSplineBinary() */ + int16_t i; + + if ( !model->modelROM ) + { + free( model->elevKSeq_dyn ); + free( model->azim_start_idx_dyn ); + free( model->azimDim2_dyn ); + free( model->azimDim3_dyn ); + free( model->AlphaL_dyn ); + free( model->AlphaR_dyn ); + free( model->azimSegSamples_dyn ); + + free( model->azimShapeIdx_dyn ); + free( model->azimShapeSampFactor_dyn ); + free( model->elevBsShape_dyn ); + + for ( i = 0; i < model->num_unique_azim_splines; i++ ) + { + free( model->azimBsShape_dyn[i] ); + } + free( model->azimBsShape_dyn ); + } + free( (void *) model->azimBsShape ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */ + for ( i = 0; i < model->elevDim3; i++ ) + { + free( model->azimKSeq[i] ); + } + free( model->azimKSeq ); + + return; +} + + +/*-------------------------------------------------------------------* + * BSplineModelEvalITDDealloc() + * + * Deallocates the ITD model. + --------------------------------------------------------------------*/ + +void BSplineModelEvalITDDealloc( + ModelParamsITD_t *model /* i : Model parameters */ +) +{ + free( model->elevKSeq_dyn ); + free( model->azimKSeq_dyn ); + free( model->W_dyn ); + free( model->azimBsShape_dyn ); + free( model->elevBsShape_dyn ); + + return; +} + +#endif /*-------------------------------------------------------------------* * TDREND_MIX_LoadHRTF() -- GitLab From 31b662b10ee47f9075d6a983292bef944d1b04cc Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 13:16:07 +0100 Subject: [PATCH 060/103] fix warnings inside TEMP_FIX_BSPLINE_MALLOC --- lib_com/ivas_prot.h | 6 ++++-- lib_dec/ivas_init_dec.c | 22 +++++++++++++++++++++- lib_dec/ivas_sba_dec.c | 22 +++++++++++++++++++++- lib_rend/ivas_objectRenderer_mix.c | 6 +++++- lib_util/hrtf_file_reader.c | 3 +-- 5 files changed, 52 insertions(+), 7 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 4dfc6c0dfd..80baee2de3 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5018,8 +5018,10 @@ void HRTF_model_precalc( ); void BSplineModelEvalDealloc( - ModelParams_t *model, /* i : Model parameters */ - ModelEval_t *modelEval /* i : Model evaluation structure */ + ModelParams_t *model /* i : Model parameters */ +#ifndef TEMP_FIX_BSPLINE_MALLOC + ,ModelEval_t *modelEval /* i : Model evaluation structure */ +#endif ); void BSplineModelEvalITDDealloc( diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 601efc3b7d..749d050bff 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1691,8 +1691,28 @@ void ivas_destroy_dec( BSplineModelEvalITDDealloc( &st_ivas->hHrtfTD->ModelParamsITD ); } - BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams, &st_ivas->hHrtfTD->ModelEval ); + BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams +#ifndef TEMP_FIX_BSPLINE_MALLOC + ,&st_ivas->hHrtfTD->ModelEval +#endif + ); +#ifdef TEMP_FIX_BSPLINE_MALLOC + { + ModelParams_t *model = &st_ivas->hHrtfTD->ModelParams; + ModelEval_t *modelEval = &st_ivas->hHrtfTD->ModelEval; + if ( !model->modelROM ) + { + free_( model->EL_dyn ); + free_( model->ER_dyn ); + } + if ( modelEval != NULL ) + { + free_( modelEval->hrfModL ); + free_( modelEval->hrfModR ); + } + } +#endif ivas_HRTF_binary_close( &st_ivas->hHrtfTD ); } diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 77d1fef233..360c92d4dd 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -210,8 +210,28 @@ ivas_error ivas_sba_dec_reinit( BSplineModelEvalITDDealloc( &st_ivas->hHrtfTD->ModelParamsITD ); } - BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams, &st_ivas->hHrtfTD->ModelEval ); + BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams +#ifndef TEMP_FIX_BSPLINE_MALLOC + , &st_ivas->hHrtfTD->ModelEval +#endif + ); +#ifdef TEMP_FIX_BSPLINE_MALLOC + { + ModelParams_t *model = &st_ivas->hHrtfTD->ModelParams; + ModelEval_t *modelEval = &st_ivas->hHrtfTD->ModelEval; + if ( !model->modelROM ) + { + free_( model->EL_dyn ); + free_( model->ER_dyn ); + } + if ( modelEval != NULL ) + { + free_( modelEval->hrfModL ); + free_( modelEval->hrfModR ); + } + } +#endif ivas_HRTF_binary_close( &st_ivas->hHrtfTD ); } diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index e25c179924..c72790f275 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -134,7 +134,11 @@ void TDREND_MIX_Dealloc( { BSplineModelEvalITDDealloc( &hBinRendererTd->HrFiltSet_p->ModelParamsITD ); } - BSplineModelEvalDealloc( &hBinRendererTd->HrFiltSet_p->ModelParams, &hBinRendererTd->HrFiltSet_p->ModelEval ); + BSplineModelEvalDealloc( &hBinRendererTd->HrFiltSet_p->ModelParams +#ifndef TEMP_FIX_BSPLINE_MALLOC + , &hBinRendererTd->HrFiltSet_p->ModelEval +#endif + ); #ifdef TEMP_FIX_BSPLINE_MALLOC { diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 7fda364291..827d5d9baa 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -313,8 +313,7 @@ static ivas_error LoadBSplineBinary( --------------------------------------------------------------------*/ void BSplineModelEvalDealloc( - ModelParams_t *model, /* i : Model parameters */ - ModelEval_t *modelEval /* i : Model evaluation structure */ + ModelParams_t *model /* i : Model parameters */ ) { /* Allocated in LoadBSplineBinary() */ -- GitLab From a17f8a352f699cc3565c587ed6531665458934c5 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 13:37:13 +0100 Subject: [PATCH 061/103] removal of TEMP_FIX_BSPLINE_MALLOC - needs to be resolved in another way --- lib_com/ivas_prot.h | 6 +-- lib_dec/ivas_init_dec.c | 22 +-------- lib_dec/ivas_sba_dec.c | 23 +--------- lib_rend/ivas_objectRenderer_hrFilt.c | 4 -- lib_rend/ivas_objectRenderer_mix.c | 24 +--------- lib_util/hrtf_file_reader.c | 66 --------------------------- lib_util/hrtf_file_reader.h | 1 + 7 files changed, 8 insertions(+), 138 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 80baee2de3..4dfc6c0dfd 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5018,10 +5018,8 @@ void HRTF_model_precalc( ); void BSplineModelEvalDealloc( - ModelParams_t *model /* i : Model parameters */ -#ifndef TEMP_FIX_BSPLINE_MALLOC - ,ModelEval_t *modelEval /* i : Model evaluation structure */ -#endif + ModelParams_t *model, /* i : Model parameters */ + ModelEval_t *modelEval /* i : Model evaluation structure */ ); void BSplineModelEvalITDDealloc( diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 749d050bff..601efc3b7d 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1691,28 +1691,8 @@ void ivas_destroy_dec( BSplineModelEvalITDDealloc( &st_ivas->hHrtfTD->ModelParamsITD ); } - BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams -#ifndef TEMP_FIX_BSPLINE_MALLOC - ,&st_ivas->hHrtfTD->ModelEval -#endif - ); + BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams, &st_ivas->hHrtfTD->ModelEval ); -#ifdef TEMP_FIX_BSPLINE_MALLOC - { - ModelParams_t *model = &st_ivas->hHrtfTD->ModelParams; - ModelEval_t *modelEval = &st_ivas->hHrtfTD->ModelEval; - if ( !model->modelROM ) - { - free_( model->EL_dyn ); - free_( model->ER_dyn ); - } - if ( modelEval != NULL ) - { - free_( modelEval->hrfModL ); - free_( modelEval->hrfModR ); - } - } -#endif ivas_HRTF_binary_close( &st_ivas->hHrtfTD ); } diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 360c92d4dd..b70ba464b5 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -45,6 +45,7 @@ #include "wmc_auto.h" + #ifdef SBA_BR_SWITCHING /*-------------------------------------------------------------------* * ivas_sba_dec_reinit() @@ -210,28 +211,8 @@ ivas_error ivas_sba_dec_reinit( BSplineModelEvalITDDealloc( &st_ivas->hHrtfTD->ModelParamsITD ); } - BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams -#ifndef TEMP_FIX_BSPLINE_MALLOC - , &st_ivas->hHrtfTD->ModelEval -#endif - ); + BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams, &st_ivas->hHrtfTD->ModelEval ); -#ifdef TEMP_FIX_BSPLINE_MALLOC - { - ModelParams_t *model = &st_ivas->hHrtfTD->ModelParams; - ModelEval_t *modelEval = &st_ivas->hHrtfTD->ModelEval; - if ( !model->modelROM ) - { - free_( model->EL_dyn ); - free_( model->ER_dyn ); - } - if ( modelEval != NULL ) - { - free_( modelEval->hrfModL ); - free_( modelEval->hrfModR ); - } - } -#endif ivas_HRTF_binary_close( &st_ivas->hHrtfTD ); } diff --git a/lib_rend/ivas_objectRenderer_hrFilt.c b/lib_rend/ivas_objectRenderer_hrFilt.c index 6b8bc4b07f..839a80b0d5 100644 --- a/lib_rend/ivas_objectRenderer_hrFilt.c +++ b/lib_rend/ivas_objectRenderer_hrFilt.c @@ -1189,8 +1189,6 @@ void HRTF_model_precalc( return; } -#ifndef TEMP_FIX_BSPLINE_MALLOC - /*-------------------------------------------------------------------* * BSplineModelEvalDealloc() * @@ -1263,8 +1261,6 @@ void BSplineModelEvalITDDealloc( return; } -#endif - /*-------------------------------------------------------------------* * SkipSmallest_ValueIndex() diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index c72790f275..b5c6acbdfc 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -40,6 +40,7 @@ #endif + /*-------------------------------------------------------------------* * TDREND_MIX_LIST_SetPos() * @@ -134,28 +135,7 @@ void TDREND_MIX_Dealloc( { BSplineModelEvalITDDealloc( &hBinRendererTd->HrFiltSet_p->ModelParamsITD ); } - BSplineModelEvalDealloc( &hBinRendererTd->HrFiltSet_p->ModelParams -#ifndef TEMP_FIX_BSPLINE_MALLOC - , &hBinRendererTd->HrFiltSet_p->ModelEval -#endif - ); - -#ifdef TEMP_FIX_BSPLINE_MALLOC - { - ModelParams_t *model = &hBinRendererTd->HrFiltSet_p->ModelParams; - ModelEval_t *modelEval = &hBinRendererTd->HrFiltSet_p->ModelEval; - if ( !model->modelROM ) - { - free_( model->EL_dyn ); - free_( model->ER_dyn ); - } - if ( modelEval != NULL ) - { - free_( modelEval->hrfModL ); - free_( modelEval->hrfModR ); - } - } -#endif + BSplineModelEvalDealloc( &hBinRendererTd->HrFiltSet_p->ModelParams, &hBinRendererTd->HrFiltSet_p->ModelEval ); } else { diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 827d5d9baa..9eddcdf305 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -305,72 +305,6 @@ static ivas_error LoadBSplineBinary( return IVAS_ERR_OK; } -#ifdef TEMP_FIX_BSPLINE_MALLOC -/*-------------------------------------------------------------------* - * BSplineModelEvalDealloc() - * - * Deallocate BSpline HR Filter model - --------------------------------------------------------------------*/ - -void BSplineModelEvalDealloc( - ModelParams_t *model /* i : Model parameters */ -) -{ - /* Allocated in LoadBSplineBinary() */ - int16_t i; - - if ( !model->modelROM ) - { - free( model->elevKSeq_dyn ); - free( model->azim_start_idx_dyn ); - free( model->azimDim2_dyn ); - free( model->azimDim3_dyn ); - free( model->AlphaL_dyn ); - free( model->AlphaR_dyn ); - free( model->azimSegSamples_dyn ); - - free( model->azimShapeIdx_dyn ); - free( model->azimShapeSampFactor_dyn ); - free( model->elevBsShape_dyn ); - - for ( i = 0; i < model->num_unique_azim_splines; i++ ) - { - free( model->azimBsShape_dyn[i] ); - } - free( model->azimBsShape_dyn ); - } - free( (void *) model->azimBsShape ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */ - for ( i = 0; i < model->elevDim3; i++ ) - { - free( model->azimKSeq[i] ); - } - free( model->azimKSeq ); - - return; -} - - -/*-------------------------------------------------------------------* - * BSplineModelEvalITDDealloc() - * - * Deallocates the ITD model. - --------------------------------------------------------------------*/ - -void BSplineModelEvalITDDealloc( - ModelParamsITD_t *model /* i : Model parameters */ -) -{ - free( model->elevKSeq_dyn ); - free( model->azimKSeq_dyn ); - free( model->W_dyn ); - free( model->azimBsShape_dyn ); - free( model->elevBsShape_dyn ); - - return; -} - -#endif - /*-------------------------------------------------------------------* * TDREND_MIX_LoadHRTF() * diff --git a/lib_util/hrtf_file_reader.h b/lib_util/hrtf_file_reader.h index ed3d572d56..c7b751ad76 100644 --- a/lib_util/hrtf_file_reader.h +++ b/lib_util/hrtf_file_reader.h @@ -36,6 +36,7 @@ #include #include "common_api_types.h" #include "ivas_error.h" +#include "options.h" typedef struct hrtfFileReader hrtfFileReader; -- GitLab From e993f46a7c811d66a3551aeb244ebaaab5f9ea90 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 15:20:35 +0100 Subject: [PATCH 062/103] turn on extended globing to allow !(pattern*) matching --- scripts/prepare_instrumentation.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/prepare_instrumentation.sh b/scripts/prepare_instrumentation.sh index 2e1e408596..c8e6247135 100755 --- a/scripts/prepare_instrumentation.sh +++ b/scripts/prepare_instrumentation.sh @@ -84,13 +84,15 @@ if [ $? -ne 0 ]; then exit -1 fi -# strip switches, to remove the macros +# strip switches, to remove the macros (turn on extended globing to allow !(pattern*) matching) +shopt -s extglob if coan_exists; then - coan source --replace --no-transients -E -K --file $ifdef_list "$targetdir/lib_{com,dec,enc,rend,util,debug}/(?!wmc_auto)*.[hc]" - coan source --replace --no-transients -E -K --file $ifdef_list "$targetdir/apps/*.[hc]" + coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{com,dec,enc,rend,util,debug}/!(wmc_auto*).[hc] + coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/apps/*.[hc] else ./strip_defines_cppp.sh $targetdir $ifdef_list fi +shopt -u extglob # patch code before wmc_tool: replace hexadecimal unsigned long constants (0x...UL) by regular integer constant + cast to unsigned long find $targetdir -name "*.[ch]" -exec sed -i.bak -e "s/\(0x[0-9a-fA-F]*\)UL/\(\(unsigned long\)\1\)/" \{\} \; -- GitLab From 7c4d8a7305c3a9ef2d74a13a0474e7b125435fb4 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Tue, 6 Dec 2022 15:38:27 +0100 Subject: [PATCH 063/103] Extend the timeout from 2m to 4m to allow for a complete instrumentation by the WMC tool --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f0cb125fd9..46b51657f0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -147,7 +147,7 @@ stages: .build-job-linux: stage: build - timeout: "2 minutes" + timeout: "4 minutes" tags: - ivas-linux -- GitLab From 86f8ddd067b7afa15d2a452d4eb5499705bceacb Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Tue, 6 Dec 2022 15:44:50 +0100 Subject: [PATCH 064/103] Do not instrument lib_com as part of the decoder to shorten the job --- scripts/prepare_instrumentation.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/prepare_instrumentation.sh b/scripts/prepare_instrumentation.sh index c8e6247135..4a89d1018b 100755 --- a/scripts/prepare_instrumentation.sh +++ b/scripts/prepare_instrumentation.sh @@ -97,9 +97,9 @@ shopt -u extglob # patch code before wmc_tool: replace hexadecimal unsigned long constants (0x...UL) by regular integer constant + cast to unsigned long find $targetdir -name "*.[ch]" -exec sed -i.bak -e "s/\(0x[0-9a-fA-F]*\)UL/\(\(unsigned long\)\1\)/" \{\} \; -# run wmc_tool using wine -"tools/$system/wmc_tool" -m "$targetdir/apps/encoder.c" "$targetdir/lib_enc/*.c" "$targetdir/lib_com/*.c" > /dev/null -"tools/$system/wmc_tool" -m "$targetdir/apps/decoder.c" "$targetdir/lib_dec/*.c" "$targetdir/lib_com/*.c" "$targetdir/lib_rend/*.c" > /dev/null +# run wmc_tool +"tools/$system/wmc_tool" -m "$targetdir/apps/encoder.c" "$targetdir/lib_enc/*.c" "$targetdir/lib_com/*.c" +"tools/$system/wmc_tool" -m "$targetdir/apps/decoder.c" "$targetdir/lib_dec/*.c" "$targetdir/lib_rend/*.c" # automatically enable #define WMOPS in options.h sed -i.bak -e "s/\/\*\s*\(#define\s*WMOPS\)\s*\*\//\1/g" $targetdir/lib_com/options.h -- GitLab From 8a67bc005ccbf3a5260a035e6bc30a9b149c9c30 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Tue, 6 Dec 2022 16:55:56 +0100 Subject: [PATCH 065/103] Keep #define WMOPS in options.h because coan crashes on wmc_auto.h --- scripts/prepare_instrumentation.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/prepare_instrumentation.sh b/scripts/prepare_instrumentation.sh index 4a89d1018b..70385e971c 100755 --- a/scripts/prepare_instrumentation.sh +++ b/scripts/prepare_instrumentation.sh @@ -87,6 +87,9 @@ fi # strip switches, to remove the macros (turn on extended globing to allow !(pattern*) matching) shopt -s extglob if coan_exists; then + # remove WMOPS from the list -> otherwise it will be removed with coan and wmc_auto.h will not see it + sed -i "/-DWMOPS/d" $ifdef_list + coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{com,dec,enc,rend,util,debug}/!(wmc_auto*).[hc] coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/apps/*.[hc] else @@ -98,8 +101,8 @@ shopt -u extglob find $targetdir -name "*.[ch]" -exec sed -i.bak -e "s/\(0x[0-9a-fA-F]*\)UL/\(\(unsigned long\)\1\)/" \{\} \; # run wmc_tool -"tools/$system/wmc_tool" -m "$targetdir/apps/encoder.c" "$targetdir/lib_enc/*.c" "$targetdir/lib_com/*.c" -"tools/$system/wmc_tool" -m "$targetdir/apps/decoder.c" "$targetdir/lib_dec/*.c" "$targetdir/lib_rend/*.c" +"tools/$system/wmc_tool" -m "$targetdir/apps/encoder.c" "$targetdir/lib_enc/*.c" "$targetdir/lib_com/*.c" >> /dev/null +"tools/$system/wmc_tool" -m "$targetdir/apps/decoder.c" "$targetdir/lib_dec/*.c" "$targetdir/lib_rend/*.c" >> /dev/null # automatically enable #define WMOPS in options.h sed -i.bak -e "s/\/\*\s*\(#define\s*WMOPS\)\s*\*\//\1/g" $targetdir/lib_com/options.h -- GitLab From 301047b3bc4acf964c83515e559a154bf4c44dac Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 17:36:38 +0100 Subject: [PATCH 066/103] add options.h to encoder.c and decoder.c do not instrument free() when reading HRTF data from external file --- apps/decoder.c | 1 + apps/encoder.c | 1 + lib_rend/ivas_objectRenderer_hrFilt.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/apps/decoder.c b/apps/decoder.c index ff01e6e429..c2e3aee4c2 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -33,6 +33,7 @@ #include #include #include +#include "options.h" #include "lib_dec.h" #include "cmdl_tools.h" #include "audio_file_writer.h" diff --git a/apps/encoder.c b/apps/encoder.c index d67a37c881..b94272cd11 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -33,6 +33,7 @@ #include #include #include +#include "options.h" #include "lib_enc.h" #include "cmdl_tools.h" #include "audio_file_reader.h" diff --git a/lib_rend/ivas_objectRenderer_hrFilt.c b/lib_rend/ivas_objectRenderer_hrFilt.c index 839a80b0d5..ff6f08575e 100644 --- a/lib_rend/ivas_objectRenderer_hrFilt.c +++ b/lib_rend/ivas_objectRenderer_hrFilt.c @@ -1203,6 +1203,7 @@ void BSplineModelEvalDealloc( /* Allocated in LoadBSplineBinary() */ int16_t i; +#define WMC_TOOL_SKIP if ( !model->modelROM ) { free( model->elevKSeq_dyn ); @@ -1237,6 +1238,7 @@ void BSplineModelEvalDealloc( free( modelEval->hrfModL ); free( modelEval->hrfModR ); } +#undef WMC_TOOL_SKIP return; } @@ -1252,11 +1254,13 @@ void BSplineModelEvalITDDealloc( ModelParamsITD_t *model /* i : Model parameters */ ) { +#define WMC_TOOL_SKIP free( model->elevKSeq_dyn ); free( model->azimKSeq_dyn ); free( model->W_dyn ); free( model->azimBsShape_dyn ); free( model->elevBsShape_dyn ); +#undef WMC_TOOL_SKIP return; } -- GitLab From b6a626aecd7209b203e4104d7fa384e256fcc7fe Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 17:47:57 +0100 Subject: [PATCH 067/103] disable WMOPS by default in options.h --- 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 e3be8caad3..b3a0851217 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -50,7 +50,7 @@ #ifndef RELEASE #define DEBUGGING /* Activate debugging part of the code */ #endif -#define WMOPS /* Activate complexity and memory counters */ +/*#define WMOPS*/ /* Activate complexity and memory counters */ /*#define WMOPS_PER_FRAME*/ /* Output complexity in WMOPS per frame to the file "res/wmops" (one float value per frame) */ /*#define WMOPS_DETAIL*/ /* Output detailed complexity printout for every function. Increases runtime overhead */ /*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output detailed complexity analysis for the worst-case frame */ -- GitLab From 611d89d9a6c0d0447450f7e34bc41a6de099e796 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 18:36:50 +0100 Subject: [PATCH 068/103] add LIB_LIBREND to Makefile --- .../td_object_renderer/object_renderer_standalone/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/td_object_renderer/object_renderer_standalone/Makefile b/scripts/td_object_renderer/object_renderer_standalone/Makefile index 42b762bcfe..5f27f599b3 100644 --- a/scripts/td_object_renderer/object_renderer_standalone/Makefile +++ b/scripts/td_object_renderer/object_renderer_standalone/Makefile @@ -157,8 +157,8 @@ $(LIB_LIBREND): $(OBJS_LIBREND) $(LIB_LIBUTIL): $(OBJS_LIBUTIL) $(QUIET_AR)$(AR) rcs $@ $^ -$(CLI_REN): $(LIB_LIBENC) $(LIB_LIBDEC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBUTIL) $(OBJS_REN) - $(QUIET_LINK)$(CC) $(LDFLAGS) $(OBJS_REN) -L. -livasdebug -livasutil -livasenc -livasdec -livascom $(LDLIBS) -o $(CLI_REN) +$(CLI_REN): $(OBJS_REN) $(LIB_LIBENC) $(LIB_LIBDEC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBUTIL) $(LIB_LIBREND) + $(QUIET_LINK)$(CC) $(LDFLAGS) $(OBJS_REN) -L. -livasrend -livasdebug -livasutil -livasenc -livasdec -livascom $(LDLIBS) -o $(CLI_REN) libs: $(LIB_LIBENC) $(LIB_LIBDEBUG) $(LIB_LIBCOM) $(LIB_LIBDEC) $(LIB_LIBREND) $(LIB_LIBUTIL) -- GitLab From 56b7ec21196de0af21e4c37c48abfad3bcacc96c Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 20:43:51 +0100 Subject: [PATCH 069/103] small correction of comment --- lib_com/options.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 3589dafa25..d3f61f16be 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -51,10 +51,10 @@ #define DEBUGGING /* Activate debugging part of the code */ #endif /*#define WMOPS*/ /* Activate complexity and memory counters */ -/*#define WMOPS_PER_FRAME*/ /* Output complexity in WMOPS per frame to the file "res/wmops" (one float value per frame) */ +/*#define WMOPS_PER_FRAME*/ /* Output per-frame complexity (writes one float value per frame to the file "wmops_analysis") */ /*#define WMOPS_DETAIL*/ /* Output detailed complexity printout for every function. Increases runtime overhead */ /*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output detailed complexity analysis for the worst-case frame */ -/*#define MEM_COUNT_DETAILS*/ /* Output detailed memory analysis for the worst-case frame (write to the file "mem_analysis.csv") */ +/*#define MEM_COUNT_DETAILS*/ /* Output detailed memory analysis for the worst-case frame (writes to the file "mem_analysis.csv") */ #ifdef DEBUGGING @@ -176,7 +176,6 @@ #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 TEMP_FIX_BSPLINE_MALLOC /* temporary fix for malloc_() free() mismatch reported by the WMC tool */ /* ################## End DEVELOPMENT switches ######################### */ -- GitLab From 3d79bb39c69980c559ab4ff67204ab69a0b8f091 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 21:44:12 +0100 Subject: [PATCH 070/103] apply clang-format --- lib_debug/wmc_auto.c | 714 ++++++++-------- lib_debug/wmc_auto.h | 889 +++++++++++++++----- lib_dec/ivas_dirac_dec_binaural_functions.c | 28 +- lib_dec/ivas_sba_dec.c | 1 - lib_rend/ivas_objectRenderer_mix.c | 1 - 5 files changed, 1045 insertions(+), 588 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 00ef4f1ade..602d94b4cf 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -29,7 +29,7 @@ #include "wmc_auto.h" -#define WMC_TOOL_SKIP /* Skip the instrumentation of this file, if invoked by accident */ +#define WMC_TOOL_SKIP /* Skip the instrumentation of this file, if invoked by accident */ #ifdef WMOPS @@ -37,23 +37,23 @@ * Complexity counting tool *--------------------------------------------------------------------*/ -#define MAX_RECORDS 1024 -#define MAX_CHAR 64 -#define MAX_STACK 64 -#define DOUBLE_MAX 0x80000000 +#define MAX_RECORDS 1024 +#define MAX_CHAR 64 +#define MAX_STACK 64 +#define DOUBLE_MAX 0x80000000 struct wmops_record { - char label[MAX_CHAR]; - long call_number; - long update_cnt; - int call_tree[MAX_RECORDS]; + char label[MAX_CHAR]; + long call_number; + long update_cnt; + int call_tree[MAX_RECORDS]; double start_selfcnt; double current_selfcnt; double max_selfcnt; double min_selfcnt; double tot_selfcnt; - double start_cnt; /* The following take into account the decendants */ + double start_cnt; /* The following take into account the decendants */ double current_cnt; double max_cnt; double min_cnt; @@ -85,16 +85,16 @@ static long fnum_cnt_wc; static int *heap_allocation_call_tree = NULL, heap_allocation_call_tree_size = 0, heap_allocation_call_tree_max_size = 0; -void reset_wmops(void) +void reset_wmops( void ) { int i, j; - for (i = 0; i < MAX_RECORDS; i++) + for ( i = 0; i < MAX_RECORDS; i++ ) { - strcpy(&wmops[i].label[0], "\0"); + strcpy( &wmops[i].label[0], "\0" ); wmops[i].call_number = 0; wmops[i].update_cnt = 0; - for (j = 0; j < MAX_RECORDS; j++) + for ( j = 0; j < MAX_RECORDS; j++ ) { wmops[i].call_tree[j] = -1; } @@ -115,7 +115,7 @@ void reset_wmops(void) #endif } - for (i = 0; i < MAX_STACK; i++) + for ( i = 0; i < MAX_STACK; i++ ) { stack[i] = -1; } @@ -131,16 +131,16 @@ void reset_wmops(void) } -void push_wmops(const char* label) +void push_wmops( const char *label ) { int new_flag; int i, j; /* Check if new function record label */ new_flag = 1; - for (i = 0; i < num_records; i++) + for ( i = 0; i < num_records; i++ ) { - if (strcmp(wmops[i].label, label) == 0) + if ( strcmp( wmops[i].label, label ) == 0 ) { new_flag = 0; break; @@ -148,24 +148,24 @@ void push_wmops(const char* label) } /* Configure new record */ - if (new_flag) + if ( new_flag ) { - if (num_records >= MAX_RECORDS) + if ( num_records >= MAX_RECORDS ) { - fprintf(stdout, "push_wmops(): exceeded MAX_RECORDS count.\n\n"); - exit(-1); + fprintf( stdout, "push_wmops(): exceeded MAX_RECORDS count.\n\n" ); + exit( -1 ); } - strcpy(wmops[i].label, label); + strcpy( wmops[i].label, label ); num_records++; } /* Push current context onto stack */ - if (current_record >= 0) + if ( current_record >= 0 ) { - if (sptr >= MAX_STACK) + if ( sptr >= MAX_STACK ) { - fprintf(stdout, "\r push_wmops(): stack exceeded, try inreasing MAX_STACK\n"); - exit(-1); + fprintf( stdout, "\r push_wmops(): stack exceeded, try inreasing MAX_STACK\n" ); + exit( -1 ); } stack[sptr++] = current_record; @@ -173,13 +173,13 @@ void push_wmops(const char* label) wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; /* update call tree */ - for (j = 0; j < MAX_RECORDS; j++) + for ( j = 0; j < MAX_RECORDS; j++ ) { - if (wmops[i].call_tree[j] == current_record) + if ( wmops[i].call_tree[j] == current_record ) { break; } - else if (wmops[i].call_tree[j] == -1) + else if ( wmops[i].call_tree[j] == -1 ) { wmops[i].call_tree[j] = current_record; break; @@ -200,14 +200,14 @@ void push_wmops(const char* label) } -void pop_wmops(void) +void pop_wmops( void ) { /* Check for underflow */ - if (current_record < 0) + if ( current_record < 0 ) { - fprintf(stdout, "\r pop_wmops(): stack underflow, too many calls to pop_wmops()\n"); - exit(-1); + fprintf( stdout, "\r pop_wmops(): stack underflow, too many calls to pop_wmops()\n" ); + exit( -1 ); } /* update count of current record */ @@ -215,7 +215,7 @@ void pop_wmops(void) wmops[current_record].current_cnt += ops_cnt - wmops[current_record].start_cnt; /* Get back previous context from stack */ - if (sptr > 0) + if ( sptr > 0 ) { current_record = stack[--sptr]; wmops[current_record].start_selfcnt = ops_cnt; @@ -229,11 +229,11 @@ void pop_wmops(void) } -void update_wmops(void) +void update_wmops( void ) { int i; double current_cnt; -#ifdef WMOPS_PER_FRAME +#ifdef WMOPS_PER_FRAME static FILE *fid = NULL; const char filename[] = "wmops_analysis"; float tmpF; @@ -260,7 +260,7 @@ void update_wmops(void) /* Write current complexity to the external file */ tmpF = (float) ( FAC * wmops[0].current_cnt ); - fwrite( &tmpF, sizeof(float), 1, fid ); + fwrite( &tmpF, sizeof( float ), 1, fid ); #endif #ifdef WMOPS_WC_FRAME_ANALYSIS @@ -275,19 +275,19 @@ void update_wmops(void) } #endif - for (i = 0; i < num_records; i++) + for ( i = 0; i < num_records; i++ ) { wmops[i].tot_selfcnt += wmops[i].current_selfcnt; wmops[i].tot_cnt += wmops[i].current_cnt; - if (wmops[i].current_selfcnt > 0) + if ( wmops[i].current_selfcnt > 0 ) { - if (wmops[i].current_selfcnt > wmops[i].max_selfcnt) + if ( wmops[i].current_selfcnt > wmops[i].max_selfcnt ) { wmops[i].max_selfcnt = wmops[i].current_selfcnt; } - if (wmops[i].current_selfcnt < wmops[i].min_selfcnt) + if ( wmops[i].current_selfcnt < wmops[i].min_selfcnt ) { wmops[i].min_selfcnt = wmops[i].current_selfcnt; } @@ -295,14 +295,14 @@ void update_wmops(void) wmops[i].current_selfcnt = 0; - if (wmops[i].current_cnt > 0) + if ( wmops[i].current_cnt > 0 ) { - if (wmops[i].current_cnt > wmops[i].max_cnt) + if ( wmops[i].current_cnt > wmops[i].max_cnt ) { wmops[i].max_cnt = wmops[i].current_cnt; } - if (wmops[i].current_cnt < wmops[i].min_cnt) + if ( wmops[i].current_cnt < wmops[i].min_cnt ) { wmops[i].min_cnt = wmops[i].current_cnt; } @@ -317,11 +317,11 @@ void update_wmops(void) } current_cnt = ops_cnt - start_cnt; - if (current_cnt > max_cnt) + if ( current_cnt > max_cnt ) { max_cnt = current_cnt; - for (i = 0; i < NUM_INST; i++) + for ( i = 0; i < NUM_INST; i++ ) { inst_cnt_wc[i] = inst_cnt[i]; } @@ -329,12 +329,12 @@ void update_wmops(void) fnum_cnt_wc = update_cnt + 1; } - if (current_cnt < min_cnt) + if ( current_cnt < min_cnt ) { min_cnt = current_cnt; } - for (i = 0; i < NUM_INST; i++) + for ( i = 0; i < NUM_INST; i++ ) { inst_cnt[i] = 0.0; } @@ -354,41 +354,41 @@ void update_wmops(void) } -void print_wmops(void) +void print_wmops( void ) { int i; - char* sfmts = "%20s %8s %8s %7s %7s\n"; - char* dfmts = "%20s %8.2f %8.3f %7.3f %7.3f\n"; - char* sfmt = "%20s %8s %8s %7s %7s %7s %7s %7s\n"; - char* dfmt = "%20s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; + char *sfmts = "%20s %8s %8s %7s %7s\n"; + char *dfmts = "%20s %8.2f %8.3f %7.3f %7.3f\n"; + char *sfmt = "%20s %8s %8s %7s %7s %7s %7s %7s\n"; + char *dfmt = "%20s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; #ifdef WMOPS_WC_FRAME_ANALYSIS int j, label_len, max_label_len; - char* sfmtt = "%20s %4s %15s\n"; - char* dfmtt = "%20s %4d "; + char *sfmtt = "%20s %4s %15s\n"; + char *dfmtt = "%20s %4d "; #endif - fprintf(stdout, "\n\n --- Complexity analysis [WMOPS] --- \n\n"); + fprintf( stdout, "\n\n --- Complexity analysis [WMOPS] --- \n\n" ); - fprintf(stdout, "%54s %23s\n", "|------ SELF ------|", "|--- CUMULATIVE ---|"); - fprintf(stdout, sfmt, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg "); - fprintf(stdout, sfmt, "---------------", "------", "------", "------", "------", "------", "------", "------"); + fprintf( stdout, "%54s %23s\n", "|------ SELF ------|", "|--- CUMULATIVE ---|" ); + fprintf( stdout, sfmt, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg " ); + fprintf( stdout, sfmt, "---------------", "------", "------", "------", "------", "------", "------", "------" ); - for (i = 0; i < num_records; i++) + for ( i = 0; i < num_records; i++ ) { - fprintf(stdout, dfmt, wmops[i].label, update_cnt == 0 ? 0 : (float)wmops[i].call_number / update_cnt, - wmops[i].min_selfcnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_selfcnt, - FAC * wmops[i].max_selfcnt, - wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_selfcnt / wmops[i].update_cnt, - wmops[i].min_cnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_cnt, - FAC * wmops[i].max_cnt, - wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_cnt / wmops[i].update_cnt); + fprintf( stdout, dfmt, wmops[i].label, update_cnt == 0 ? 0 : (float) wmops[i].call_number / update_cnt, + wmops[i].min_selfcnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_selfcnt, + FAC * wmops[i].max_selfcnt, + wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_selfcnt / wmops[i].update_cnt, + wmops[i].min_cnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_cnt, + FAC * wmops[i].max_cnt, + wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_cnt / wmops[i].update_cnt ); } - fprintf(stdout, sfmts, "---------------", "------", "------", "------", "------"); - fprintf(stdout, dfmts, "total", (float)update_cnt, FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt / update_cnt); - fprintf(stdout, "\n"); + fprintf( stdout, sfmts, "---------------", "------", "------", "------", "------" ); + fprintf( stdout, dfmts, "total", (float) update_cnt, FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt / update_cnt ); + fprintf( stdout, "\n" ); #ifdef WMOPS_WC_FRAME_ANALYSIS /* calculate maximum label length for compact prinout */ @@ -403,7 +403,7 @@ void print_wmops(void) } max_label_len += 4; - fprintf( stdout, "\nComplexity analysis for the worst-case frame %ld:\n", fnum_cnt_wc); + fprintf( stdout, "\nComplexity analysis for the worst-case frame %ld:\n", fnum_cnt_wc ); fprintf( stdout, "%*s %8s %10s %12s\n", max_label_len, " routine", " calls", " SELF", " CUMULATIVE" ); fprintf( stdout, "%*s %8s %10s %10s\n", max_label_len, "---------------", "------", "------", "----------" ); @@ -412,94 +412,94 @@ void print_wmops(void) fprintf( stdout, "%*s %8d %10.3f %12.3f\n", max_label_len, wmops[i].label, wmops[i].wc_call_number, FAC * wmops[i].wc_selfcnt, FAC * wmops[i].wc_cnt ); } - fprintf(stdout, "\nCall Tree:\n\n"); - fprintf(stdout, sfmtt, " function", "num", "called by: "); - fprintf(stdout, sfmtt, "---------------", "---", "--------------"); + fprintf( stdout, "\nCall Tree:\n\n" ); + fprintf( stdout, sfmtt, " function", "num", "called by: " ); + fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); - for (i = 0; i < num_records; i++) + for ( i = 0; i < num_records; i++ ) { - fprintf(stdout, dfmtt, wmops[i].label, i); - for (j = 0; wmops[i].call_tree[j] != -1; j++) + fprintf( stdout, dfmtt, wmops[i].label, i ); + for ( j = 0; wmops[i].call_tree[j] != -1; j++ ) { - if (j != 0) + if ( j != 0 ) { - fprintf(stdout, ", "); + fprintf( stdout, ", " ); } - fprintf(stdout, "%d", wmops[i].call_tree[j]); + fprintf( stdout, "%d", wmops[i].call_tree[j] ); } - fprintf(stdout, "\n"); + fprintf( stdout, "\n" ); } - fprintf(stdout, sfmtt, "---------------", "---", "--------------"); - fprintf(stdout, "\n\n"); + fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); + fprintf( stdout, "\n\n" ); - fprintf(stdout, "\nInstruction type analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc); /* added -- JPA */ - for (i = 0; i < NUM_INST; i++) + fprintf( stdout, "\nInstruction type analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc ); /* added -- JPA */ + for ( i = 0; i < NUM_INST; i++ ) { - switch ((enum instructions)i) + switch ( (enum instructions) i ) { - case _ADD: - fprintf(stdout, "\tAdds: %12.1f\n", inst_cnt_wc[i]); - break; - case _ABS: - fprintf(stdout, "\tAbsolutes: %12.1f\n", inst_cnt_wc[i]); - break; - case _MULT: - fprintf(stdout, "\tMultiplies: %12.1f\n", inst_cnt_wc[i]); - break; - case _MAC: - fprintf(stdout, "\tMACs: %12.1f\n", inst_cnt_wc[i]); - break; - case _MOVE: - fprintf(stdout, "\tMoves: %12.1f\n", inst_cnt_wc[i]); - break; - case _STORE: - fprintf(stdout, "\tStores: %12.1f\n", inst_cnt_wc[i]); - break; - case _LOGIC: - fprintf(stdout, "\tLogicals: %12.1f\n", inst_cnt_wc[i]); - break; - case _SHIFT: - fprintf(stdout, "\tShifts: %12.1f\n", inst_cnt_wc[i]); - break; - case _BRANCH: - fprintf(stdout, "\tBranches: %12.1f\n", inst_cnt_wc[i]); - break; - case _DIV: - fprintf(stdout, "\tDivisions: %12.1f\n", inst_cnt_wc[i]); - break; - case _SQRT: - fprintf(stdout, "\tSquare Root: %12.1f\n", inst_cnt_wc[i]); - break; - case _TRANS: - fprintf(stdout, "\tTrans: %12.1f\n", inst_cnt_wc[i]); - break; - case _FUNC: - fprintf(stdout, "\tFunc Call: %12.1f\n", inst_cnt_wc[i]); - break; - case _LOOP: - fprintf(stdout, "\tLoop Init: %12.1f\n", inst_cnt_wc[i]); - break; - case _INDIRECT: - fprintf(stdout, "\tIndirect Addr: %12.1f\n", inst_cnt_wc[i]); - break; - case _PTR_INIT: - fprintf(stdout, "\tPointer Init: %12.1f\n", inst_cnt_wc[i]); - break; - case _TEST: - fprintf(stdout, "\tExtra condit.: %12.1f\n", inst_cnt_wc[i]); - break; - case _POWER: - fprintf(stdout, "\tExponential: %12.1f\n", inst_cnt_wc[i]); - break; - case _LOG: - fprintf(stdout, "\tLogarithm: %12.1f\n", inst_cnt_wc[i]); - break; - case _MISC: - fprintf(stdout, "\tAll other op.: %12.1f\n", inst_cnt_wc[i]); - break; - default: - fprintf(stdout, "\tERROR: Invalid instruction type: %d\n\n", i); + case _ADD: + fprintf( stdout, "\tAdds: %12.1f\n", inst_cnt_wc[i] ); + break; + case _ABS: + fprintf( stdout, "\tAbsolutes: %12.1f\n", inst_cnt_wc[i] ); + break; + case _MULT: + fprintf( stdout, "\tMultiplies: %12.1f\n", inst_cnt_wc[i] ); + break; + case _MAC: + fprintf( stdout, "\tMACs: %12.1f\n", inst_cnt_wc[i] ); + break; + case _MOVE: + fprintf( stdout, "\tMoves: %12.1f\n", inst_cnt_wc[i] ); + break; + case _STORE: + fprintf( stdout, "\tStores: %12.1f\n", inst_cnt_wc[i] ); + break; + case _LOGIC: + fprintf( stdout, "\tLogicals: %12.1f\n", inst_cnt_wc[i] ); + break; + case _SHIFT: + fprintf( stdout, "\tShifts: %12.1f\n", inst_cnt_wc[i] ); + break; + case _BRANCH: + fprintf( stdout, "\tBranches: %12.1f\n", inst_cnt_wc[i] ); + break; + case _DIV: + fprintf( stdout, "\tDivisions: %12.1f\n", inst_cnt_wc[i] ); + break; + case _SQRT: + fprintf( stdout, "\tSquare Root: %12.1f\n", inst_cnt_wc[i] ); + break; + case _TRANS: + fprintf( stdout, "\tTrans: %12.1f\n", inst_cnt_wc[i] ); + break; + case _FUNC: + fprintf( stdout, "\tFunc Call: %12.1f\n", inst_cnt_wc[i] ); + break; + case _LOOP: + fprintf( stdout, "\tLoop Init: %12.1f\n", inst_cnt_wc[i] ); + break; + case _INDIRECT: + fprintf( stdout, "\tIndirect Addr: %12.1f\n", inst_cnt_wc[i] ); + break; + case _PTR_INIT: + fprintf( stdout, "\tPointer Init: %12.1f\n", inst_cnt_wc[i] ); + break; + case _TEST: + fprintf( stdout, "\tExtra condit.: %12.1f\n", inst_cnt_wc[i] ); + break; + case _POWER: + fprintf( stdout, "\tExponential: %12.1f\n", inst_cnt_wc[i] ); + break; + case _LOG: + fprintf( stdout, "\tLogarithm: %12.1f\n", inst_cnt_wc[i] ); + break; + case _MISC: + fprintf( stdout, "\tAll other op.: %12.1f\n", inst_cnt_wc[i] ); + break; + default: + fprintf( stdout, "\tERROR: Invalid instruction type: %d\n\n", i ); } } #endif @@ -530,34 +530,34 @@ void print_wmops(void) * #define WMC_TOOL_SKIP ... #undef WMC_TOOL_SKIP macro pair around the malloc(), calloc() and free(). *--------------------------------------------------------------------*/ -#define MAX_RECORDABLE_CALLS 100 -#define MAX_FUNCTION_NAME_LENGTH 35 /* Maximum length that the function string will be truncated to */ -#define MAX_PARAMS_LENGTH 50 /* Maximum length that the parameter string will be truncated to */ -#define MAX_NUM_RECORDS 300 /* Initial maximum number of memory records -> mightb be increased during runtime, if needed */ -#define MAX_NUM_RECORDS_REALLOC_STEP 50 /* When re-allocating the list of memory records, increase the number of records by this number */ +#define MAX_RECORDABLE_CALLS 100 +#define MAX_FUNCTION_NAME_LENGTH 35 /* Maximum length that the function string will be truncated to */ +#define MAX_PARAMS_LENGTH 50 /* Maximum length that the parameter string will be truncated to */ +#define MAX_NUM_RECORDS 300 /* Initial maximum number of memory records -> mightb be increased during runtime, if needed */ +#define MAX_NUM_RECORDS_REALLOC_STEP 50 /* When re-allocating the list of memory records, increase the number of records by this number */ - /* This is the value (in bytes) towards which the block size is rounded. For example, a block of 123 bytes, when using - a 32 bits system, will end up taking 124 bytes since the last unused byte cannot be used for another block. */ +/* This is the value (in bytes) towards which the block size is rounded. For example, a block of 123 bytes, when using + a 32 bits system, will end up taking 124 bytes since the last unused byte cannot be used for another block. */ #ifdef MEM_ALIGN_64BITS -#define BLOCK_ROUNDING 8 /* Align on 64 Bits */ -#else -#define BLOCK_ROUNDING 4 /* Align on 32 Bits */ +#define BLOCK_ROUNDING 8 /* Align on 64 Bits */ +#else +#define BLOCK_ROUNDING 4 /* Align on 32 Bits */ #endif #define N_32BITS_BLOCKS ( BLOCK_ROUNDING / sizeof( int32_t ) ) -#define MAGIC_VALUE_OOB 0x12A534F0 /* Signature value which is inserted before and after each allocated memory block, used to detect out-of-bound access */ -#define MAGIC_VALUE_USED ( ~MAGIC_VALUE_OOB ) /* Value used to pre-fill allocated memory blocks, used to calculate actual memory usage */ -#define OOB_START 0x1 /* Flag indicating out-of-bounds access before memory block */ -#define OOB_END 0x2 /* Flag indicating out-of-bounds access after memory block */ +#define MAGIC_VALUE_OOB 0x12A534F0 /* Signature value which is inserted before and after each allocated memory block, used to detect out-of-bound access */ +#define MAGIC_VALUE_USED ( ~MAGIC_VALUE_OOB ) /* Value used to pre-fill allocated memory blocks, used to calculate actual memory usage */ +#define OOB_START 0x1 /* Flag indicating out-of-bounds access before memory block */ +#define OOB_END 0x2 /* Flag indicating out-of-bounds access after memory block */ -#define ROUND_BLOCK_SIZE( n ) ( ( ( n ) + BLOCK_ROUNDING - 1 ) & ~( BLOCK_ROUNDING - 1 ) ) -#define IS_CALLOC( str ) ( str[0] == 'c' ) +#define ROUND_BLOCK_SIZE( n ) ( ( ( n ) + BLOCK_ROUNDING - 1 ) & ~( BLOCK_ROUNDING - 1 ) ) +#define IS_CALLOC( str ) ( str[0] == 'c' ) typedef struct { char function_name[MAX_FUNCTION_NAME_LENGTH + 1]; - int16_t* stack_ptr; + int16_t *stack_ptr; } caller_info; caller_info stack_callers[2][MAX_RECORDABLE_CALLS]; @@ -568,38 +568,38 @@ typedef struct char params[1 + MAX_PARAMS_LENGTH + 1]; /* +1 for 'm'/'c' alloc & +1 for NUL */ unsigned long hash; int lineno; - void* block_ptr; + void *block_ptr; int block_size; - unsigned long total_block_size; /* Cumulative sum of the allocated size in the session */ - unsigned long total_used_size; /* Cumulative sum of the used size in the session */ - int wc_heap_size_intra_frame; /* Worst-Case Intra-Frame Heap Size */ - int wc_heap_size_inter_frame; /* Worst-Case Inter-Frame Heap Size */ - int frame_allocated; /* Frame number in which the Memory Block has been allocated (-1 if not allocated at the moment) */ + unsigned long total_block_size; /* Cumulative sum of the allocated size in the session */ + unsigned long total_used_size; /* Cumulative sum of the used size in the session */ + int wc_heap_size_intra_frame; /* Worst-Case Intra-Frame Heap Size */ + int wc_heap_size_inter_frame; /* Worst-Case Inter-Frame Heap Size */ + int frame_allocated; /* Frame number in which the Memory Block has been allocated (-1 if not allocated at the moment) */ int OOB_Flag; - int noccurances; /* Number of times that the memory block has been allocated in a frame */ + int noccurances; /* Number of times that the memory block has been allocated in a frame */ } allocator_record; allocator_record *allocation_list = NULL; -static int16_t* ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ -static int16_t* ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ -static int32_t wc_stack_frame = 0; /* Frame corresponding to the worst-case stack usage */ +static int16_t *ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ +static int16_t *ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ +static int32_t wc_stack_frame = 0; /* Frame corresponding to the worst-case stack usage */ static int32_t wc_ram_size, wc_ram_frame; static int32_t current_heap_size; static int current_calls = 0; static char location_max_stack[256] = "undefined"; static int Num_Records, Max_Num_Records; static size_t Stat_Cnt_Size = USE_BYTES; -static const char* Count_Unit[] = { "bytes", "words", "words" }; +static const char *Count_Unit[] = { "bytes", "words", "words" }; static int *list_wc_intra_frame_heap, n_items_wc_intra_frame_heap, max_items_wc_intra_frame_heap, size_wc_intra_frame_heap, location_wc_intra_frame_heap; static int *list_current_inter_frame_heap, n_items_current_inter_frame_heap, max_items_current_inter_frame_heap, size_current_inter_frame_heap; static int *list_wc_inter_frame_heap, n_items_wc_inter_frame_heap, max_items_wc_inter_frame_heap, size_wc_inter_frame_heap, location_wc_inter_frame_heap; /* Local Functions */ -static unsigned long malloc_hash(const char* func_name, int func_lineno, char* size_str); -allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int func_lineno, char* size_str, int *index_record); -static void* mem_alloc_block(size_t size, const char* size_str); +static unsigned long malloc_hash( const char *func_name, int func_lineno, char *size_str ); +allocator_record *get_mem_record( unsigned long *hash, const char *func_name, int func_lineno, char *size_str, int *index_record ); +static void *mem_alloc_block( size_t size, const char *size_str ); /*-------------------------------------------------------------------* * reset_mem() @@ -607,7 +607,7 @@ static void* mem_alloc_block(size_t size, const char* size_str); * Initialize/reset memory counting tool (stack and heap) *--------------------------------------------------------------------*/ -void reset_mem(Counting_Size cnt_size) +void reset_mem( Counting_Size cnt_size ) { int16_t something; size_t tmp_size; @@ -619,23 +619,23 @@ void reset_mem(Counting_Size cnt_size) Stat_Cnt_Size = cnt_size; /* Check, if sizeof(int32_t) is 4 bytes */ - tmp_size = sizeof(int32_t); - if (tmp_size != 4) + tmp_size = sizeof( int32_t ); + if ( tmp_size != 4 ) { fprintf( stderr, "Error: Expecting 'int32_t' to be a 32 Bits Integer!" ); - exit(-1); + exit( -1 ); } /* create allocation list for malloc() memory blocks */ - if (allocation_list == NULL) + if ( allocation_list == NULL ) { - allocation_list = malloc(MAX_NUM_RECORDS * sizeof(allocator_record)); + allocation_list = malloc( MAX_NUM_RECORDS * sizeof( allocator_record ) ); } - if (allocation_list == NULL) + if ( allocation_list == NULL ) { fprintf( stderr, "Error: Unable to Create List of Memory Blocks!" ); - exit(-1); + exit( -1 ); } Num_Records = 0; @@ -695,7 +695,7 @@ void reset_mem(Counting_Size cnt_size) * Reset stack pointer *--------------------------------------------------------------------*/ -void reset_stack(void) +void reset_stack( void ) { int16_t something; @@ -712,29 +712,29 @@ void reset_stack(void) * Check the current stack pointer and update the maximum stack pointer, if new maximum found. *--------------------------------------------------------------------*/ -int push_stack(const char* filename, const char* fctname) +int push_stack( const char *filename, const char *fctname ) { int16_t something; int32_t current_stack_size; - (void)*filename; /* to avoid compilation warning */ + (void) *filename; /* to avoid compilation warning */ /* Is there room to save the caller's information? */ - if (current_calls >= MAX_RECORDABLE_CALLS) + if ( current_calls >= MAX_RECORDABLE_CALLS ) { /* No */ - fprintf(stderr, "No more room to store call stack info. Please increase MAX_RECORDABLE_CALLS"); - exit(-1); + fprintf( stderr, "No more room to store call stack info. Please increase MAX_RECORDABLE_CALLS" ); + exit( -1 ); } /* Valid Function Name? */ - if (fctname[0] == 0) + if ( fctname[0] == 0 ) { /* No */ - fprintf(stderr, "Invalid function name for call stack info."); - exit(-1); + fprintf( stderr, "Invalid function name for call stack info." ); + exit( -1 ); } /* Save the Name of the Calling Function in the Table */ - strncpy(stack_callers[0][current_calls].function_name, fctname, MAX_FUNCTION_NAME_LENGTH); + strncpy( stack_callers[0][current_calls].function_name, fctname, MAX_FUNCTION_NAME_LENGTH ); stack_callers[0][current_calls].function_name[MAX_FUNCTION_NAME_LENGTH] = 0; /* Nul Terminate */ /* Save the Stack Pointer */ @@ -744,28 +744,28 @@ int push_stack(const char* filename, const char* fctname) current_calls++; /* Is this the First Time or the Worst Case? */ - if (&something < ptr_max_stack || ptr_max_stack == NULL) + if ( &something < ptr_max_stack || ptr_max_stack == NULL ) { /* Yes */ /* Save Info about it */ ptr_max_stack = &something; - wc_stack_frame = update_cnt; /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ - strncpy(location_max_stack, fctname, sizeof(location_max_stack) - 1); - location_max_stack[sizeof(location_max_stack) - 1] = '\0'; + wc_stack_frame = update_cnt; /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ + strncpy( location_max_stack, fctname, sizeof( location_max_stack ) - 1 ); + location_max_stack[sizeof( location_max_stack ) - 1] = '\0'; /* Save Call Tree */ - memmove(stack_callers[1], stack_callers[0], sizeof(caller_info) * current_calls); + memmove( stack_callers[1], stack_callers[0], sizeof( caller_info ) * current_calls ); /* Terminate the List (Unless Full) */ - if (current_calls < MAX_RECORDABLE_CALLS) + if ( current_calls < MAX_RECORDABLE_CALLS ) { stack_callers[1][current_calls].function_name[0] = 0; } } /* Check, if This is the New Worst-Case RAM (stack + heap) */ - current_stack_size = (int32_t)(((ptr_base_stack - ptr_max_stack) * sizeof(int16_t))); - if (current_stack_size + current_heap_size > wc_ram_size) + current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) ); + if ( current_stack_size + current_heap_size > wc_ram_size ) { wc_ram_size = current_stack_size + current_heap_size; wc_ram_frame = update_cnt; @@ -780,11 +780,11 @@ int push_stack(const char* filename, const char* fctname) * Remove stack caller entry from the list *--------------------------------------------------------------------*/ -int pop_stack(const char* filename, const char* fctname) +int pop_stack( const char *filename, const char *fctname ) { - caller_info* caller_info_ptr; + caller_info *caller_info_ptr; - (void)*filename; /* to avoid compilation warning */ + (void) *filename; /* to avoid compilation warning */ /* Decrease Stack Calling */ current_calls--; @@ -793,10 +793,10 @@ int pop_stack(const char* filename, const char* fctname) caller_info_ptr = &stack_callers[0][current_calls]; /* Check, if Names Match */ - if (strncmp(caller_info_ptr->function_name, fctname, MAX_FUNCTION_NAME_LENGTH) != 0) + if ( strncmp( caller_info_ptr->function_name, fctname, MAX_FUNCTION_NAME_LENGTH ) != 0 ) { - fprintf(stderr, "Invalid usage of pop_stack()"); - exit(-1); + fprintf( stderr, "Invalid usage of pop_stack()" ); + exit( -1 ); } /* Erase Entry */ @@ -812,16 +812,16 @@ int pop_stack(const char* filename, const char* fctname) * Print detailed information about worst-case stack usage *--------------------------------------------------------------------*/ -static void print_stack_call_tree(void) +static void print_stack_call_tree( void ) { - caller_info* caller_info_ptr; + caller_info *caller_info_ptr; int call_level; - char fctname[MAX_FUNCTION_NAME_LENGTH+1]; + char fctname[MAX_FUNCTION_NAME_LENGTH + 1]; - fprintf(stdout, "\nList of functions when maximum stack size is reached:\n\n"); + fprintf( stdout, "\nList of functions when maximum stack size is reached:\n\n" ); caller_info_ptr = &stack_callers[1][0]; - for (call_level = 0; call_level < MAX_RECORDABLE_CALLS; call_level++) + for ( call_level = 0; call_level < MAX_RECORDABLE_CALLS; call_level++ ) { /* Done? */ if ( caller_info_ptr->function_name[0] == 0 ) @@ -830,25 +830,25 @@ static void print_stack_call_tree(void) } /* Print Name */ - strncpy(fctname, caller_info_ptr->function_name, MAX_FUNCTION_NAME_LENGTH); - strcat(fctname, "()"); - fprintf(stdout, "%-42s", fctname); + strncpy( fctname, caller_info_ptr->function_name, MAX_FUNCTION_NAME_LENGTH ); + strcat( fctname, "()" ); + fprintf( stdout, "%-42s", fctname ); /* Print Stack Usage (Based on Difference) */ - if (call_level != 0) + if ( call_level != 0 ) { - fprintf(stdout, "%lu %s\n", (((caller_info_ptr - 1)->stack_ptr - caller_info_ptr->stack_ptr) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size]); + fprintf( stdout, "%lu %s\n", ( ( ( caller_info_ptr - 1 )->stack_ptr - caller_info_ptr->stack_ptr ) * sizeof( int16_t ) ) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size] ); } else { - fprintf(stdout, "%lu %s\n", ((ptr_base_stack - caller_info_ptr->stack_ptr) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size]); + fprintf( stdout, "%lu %s\n", ( ( ptr_base_stack - caller_info_ptr->stack_ptr ) * sizeof( int16_t ) ) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size] ); } /* Advance */ caller_info_ptr++; } - fprintf(stdout, "\n"); + fprintf( stdout, "\n" ); return; } @@ -863,26 +863,26 @@ static void print_stack_call_tree(void) * The function also updates worst-case heap size and worst-case RAM size *--------------------------------------------------------------------*/ -void* mem_alloc( - const char* func_name, +void *mem_alloc( + const char *func_name, int func_lineno, size_t size, - char* size_str /* the first char indicates m-alloc or c-alloc */) + char *size_str /* the first char indicates m-alloc or c-alloc */ ) { int index_record; int32_t current_stack_size; unsigned long hash; - allocator_record* ptr_record; + allocator_record *ptr_record; - if (size == 0) + if ( size == 0 ) { fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Size of Zero not Supported" ); - exit(-1); + exit( -1 ); } /* Search for an existing record (that has been de-allocated before) */ index_record = 0; - while ((ptr_record = get_mem_record(&hash, func_name, func_lineno, size_str, &index_record)) != NULL) + while ( ( ptr_record = get_mem_record( &hash, func_name, func_lineno, size_str, &index_record ) ) != NULL ) { if ( ptr_record->frame_allocated == -1 ) { @@ -897,14 +897,14 @@ void* mem_alloc( /* Create new record */ if ( ptr_record == NULL ) { - if (Num_Records >= Max_Num_Records) + if ( Num_Records >= Max_Num_Records ) { /* There is no room for a new record -> reallocate memory */ Max_Num_Records += MAX_NUM_RECORDS_REALLOC_STEP; - allocation_list = realloc(allocation_list, Max_Num_Records * sizeof(allocator_record)); + allocation_list = realloc( allocation_list, Max_Num_Records * sizeof( allocator_record ) ); } - ptr_record = &(allocation_list[Num_Records]); + ptr_record = &( allocation_list[Num_Records] ); /* Initialize new record */ ptr_record->hash = hash; @@ -921,44 +921,44 @@ void* mem_alloc( } /* Allocate memory block for the new record, add signature before the beginning and after the memory block and fill it with magic value */ - ptr_record->block_ptr = mem_alloc_block(size, size_str); + ptr_record->block_ptr = mem_alloc_block( size, size_str ); - if (ptr_record->block_ptr == NULL) + if ( ptr_record->block_ptr == NULL ) { fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Cannot Allocate Memory!" ); - exit(-1); + exit( -1 ); } /* Save all auxiliary information about the memory block */ - strncpy(ptr_record->name, func_name, MAX_FUNCTION_NAME_LENGTH); + strncpy( ptr_record->name, func_name, MAX_FUNCTION_NAME_LENGTH ); ptr_record->name[MAX_FUNCTION_NAME_LENGTH] = '\0'; - strncpy(ptr_record->params, size_str, MAX_PARAMS_LENGTH); /* Note: The size string starts with either 'm' or 'c' to indicate 'm'alloc or 'c'alloc */ + strncpy( ptr_record->params, size_str, MAX_PARAMS_LENGTH ); /* Note: The size string starts with either 'm' or 'c' to indicate 'm'alloc or 'c'alloc */ ptr_record->params[MAX_PARAMS_LENGTH] = '\0'; ptr_record->lineno = func_lineno; ptr_record->block_size = size; ptr_record->total_block_size += size; - if (ptr_record->frame_allocated != -1) + if ( ptr_record->frame_allocated != -1 ) { fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Attempt to Allocate the Same Memory Block with Freeing it First!" ); - exit(-1); + exit( -1 ); } - ptr_record->frame_allocated = update_cnt; /* Store the current frame number -> later it will be used to determine the total duration */ + ptr_record->frame_allocated = update_cnt; /* Store the current frame number -> later it will be used to determine the total duration */ /* Update Heap Size in the current frame */ current_heap_size += ptr_record->block_size; /* Check, if this is the new Worst-Case RAM (stack + heap) */ - current_stack_size = (int32_t)(((ptr_base_stack - ptr_max_stack) * sizeof(int16_t))); - if (current_stack_size + current_heap_size > wc_ram_size) + current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) ); + if ( current_stack_size + current_heap_size > wc_ram_size ) { wc_ram_size = current_stack_size + current_heap_size; wc_ram_frame = update_cnt; } /* Add new entry to the heap allocation call tree */ - if (heap_allocation_call_tree == NULL) + if ( heap_allocation_call_tree == NULL ) { fprintf( stderr, "Error: Heap allocation call tree not created!" ); exit( -1 ); @@ -984,75 +984,75 @@ void* mem_alloc( * pre-fills memory block with magic value *--------------------------------------------------------------------*/ -static void* mem_alloc_block(size_t size, const char* size_str) +static void *mem_alloc_block( size_t size, const char *size_str ) { size_t rounded_size; - void* block_ptr; - char* tmp_ptr; + void *block_ptr; + char *tmp_ptr; size_t n, f; int32_t fill_value; - int32_t* ptr32; + int32_t *ptr32; int32_t mask, temp; /* Round Up Block Size */ - rounded_size = ROUND_BLOCK_SIZE(size); + rounded_size = ROUND_BLOCK_SIZE( size ); /* Allocate memory using the standard malloc() by adding room for Signature Values */ - block_ptr = malloc(rounded_size + BLOCK_ROUNDING * 2); + block_ptr = malloc( rounded_size + BLOCK_ROUNDING * 2 ); - if (block_ptr == NULL) + if ( block_ptr == NULL ) { return NULL; } /* Add Signature Before the Start of the Block */ - ptr32 = (int32_t*)block_ptr; + ptr32 = (int32_t *) block_ptr; n = N_32BITS_BLOCKS; do { *ptr32++ = MAGIC_VALUE_OOB; - } while (--n); + } while ( --n ); /* Fill Memory Block with Magic Value or 0 */ fill_value = MAGIC_VALUE_USED; - if (IS_CALLOC(size_str)) + if ( IS_CALLOC( size_str ) ) { fill_value = 0x00000000; } - n = size / sizeof(int32_t); - while (n--) + n = size / sizeof( int32_t ); + while ( n-- ) { *ptr32++ = fill_value; } /* Fill the Reminder of the Memory Block - After Rounding */ n = rounded_size - size; - f = n % sizeof(int32_t); - if (f != 0) + f = n % sizeof( int32_t ); + if ( f != 0 ) { /* when filling with '0' need to adapt the magic value */ /* shift by [1->24, 2->16, 3->8] */ - mask = 0xFFFFFFFF << ((sizeof(int32_t) - f) * 8); /* (1) */ + mask = 0xFFFFFFFF << ( ( sizeof( int32_t ) - f ) * 8 ); /* (1) */ temp = MAGIC_VALUE_OOB & mask; - if (fill_value != 0x0) + if ( fill_value != 0x0 ) { /* for malloc merge fill value */ - temp += (~mask) & MAGIC_VALUE_USED; + temp += ( ~mask ) & MAGIC_VALUE_USED; } /* for calloc the code in (1) above already introduces zeros */ *ptr32++ = temp; } - n /= sizeof(int32_t); + n /= sizeof( int32_t ); n += N_32BITS_BLOCKS; /* Add Signature After the End of Block */ do { *ptr32++ = MAGIC_VALUE_OOB; - } while (--n); + } while ( --n ); /* Adjust the Memory Block Pointer (Magic Value Before and After the Memory Block Requested) */ - tmp_ptr = (char*)block_ptr; + tmp_ptr = (char *) block_ptr; tmp_ptr += BLOCK_ROUNDING; - block_ptr = (void*)tmp_ptr; + block_ptr = (void *) tmp_ptr; return block_ptr; } @@ -1064,18 +1064,18 @@ static void* mem_alloc_block(size_t size, const char* size_str) * each memory block during its allocation *--------------------------------------------------------------------*/ -static int mem_set_usage(allocator_record* record_ptr) +static int mem_set_usage( allocator_record *record_ptr ) { int total_bytes_used; size_t n; - int32_t* ptr32; - char* ptr8; + int32_t *ptr32; + char *ptr8; size_t total_bytes; int32_t fill_value; fill_value = MAGIC_VALUE_USED; - if ((record_ptr->params[0]) == 'c') + if ( ( record_ptr->params[0] ) == 'c' ) { fill_value = 0x00000000; } @@ -1083,21 +1083,21 @@ static int mem_set_usage(allocator_record* record_ptr) total_bytes = record_ptr->block_size; /* Check 4 bytes at a time */ - ptr32 = (int32_t*)record_ptr->block_ptr; + ptr32 = (int32_t *) record_ptr->block_ptr; total_bytes_used = 0; - for (n = total_bytes / sizeof(int32_t); n > 0; n--) + for ( n = total_bytes / sizeof( int32_t ); n > 0; n-- ) { - if (*ptr32++ != fill_value) + if ( *ptr32++ != fill_value ) { - total_bytes_used += sizeof(int32_t); + total_bytes_used += sizeof( int32_t ); } } /* Check remaining bytes (If Applicable) 1 byte at a time */ - ptr8 = (char*)ptr32; - for (n = total_bytes % sizeof(int32_t); n > 0; n--) + ptr8 = (char *) ptr32; + for ( n = total_bytes % sizeof( int32_t ); n > 0; n-- ) { - if (*ptr8++ != (char)fill_value) + if ( *ptr8++ != (char) fill_value ) { total_bytes_used++; } @@ -1116,53 +1116,53 @@ static int mem_set_usage(allocator_record* record_ptr) * taht has been added before and after the memory block during its allocation *--------------------------------------------------------------------*/ -static unsigned int mem_check_OOB(allocator_record* record_ptr) +static unsigned int mem_check_OOB( allocator_record *record_ptr ) { - int32_t* ptr32; + int32_t *ptr32; unsigned int OOB_Flag = 0x0; int32_t mask; size_t i; int f; - ptr32 = (int32_t*)record_ptr->block_ptr - N_32BITS_BLOCKS; + ptr32 = (int32_t *) record_ptr->block_ptr - N_32BITS_BLOCKS; /* Check the Signature at the Beginning of Memory Block */ i = N_32BITS_BLOCKS; do { - if (*ptr32++ ^ MAGIC_VALUE_OOB) + if ( *ptr32++ ^ MAGIC_VALUE_OOB ) { OOB_Flag |= OOB_START; } - } while (--i); + } while ( --i ); /* Advance to End (Snap to lowest 32 Bits) */ - ptr32 += record_ptr->block_size / sizeof(int32_t); + ptr32 += record_ptr->block_size / sizeof( int32_t ); /* Calculate Unused Space That has been added to get to the rounded Block Size */ - i = ROUND_BLOCK_SIZE(record_ptr->block_size) - record_ptr->block_size; + i = ROUND_BLOCK_SIZE( record_ptr->block_size ) - record_ptr->block_size; /* Partial Check of Signature at the End of Memory Block (for block size that has been rounded) */ - f = i % sizeof(int32_t); - if (f != 0) + f = i % sizeof( int32_t ); + if ( f != 0 ) { - mask = 0xFFFFFFFF << ((sizeof(int32_t) - f) * 8); - if ((*ptr32++ ^ MAGIC_VALUE_OOB) & mask) + mask = 0xFFFFFFFF << ( ( sizeof( int32_t ) - f ) * 8 ); + if ( ( *ptr32++ ^ MAGIC_VALUE_OOB ) & mask ) { OOB_Flag |= OOB_END; } } /* Full Check of Signature at the End of Memory Block, i.e. all 32 Bits (for the remainder after rounding) */ - i /= sizeof(int32_t); + i /= sizeof( int32_t ); i += N_32BITS_BLOCKS; do { - if (*ptr32++ ^ MAGIC_VALUE_OOB) + if ( *ptr32++ ^ MAGIC_VALUE_OOB ) { OOB_Flag |= OOB_END; } - } while (--i); + } while ( --i ); return OOB_Flag; } @@ -1173,18 +1173,18 @@ static unsigned int mem_check_OOB(allocator_record* record_ptr) * Calculate hash from function name, line number and malloc size *--------------------------------------------------------------------*/ -static unsigned long malloc_hash(const char* func_name, int func_lineno, char* size_str) +static unsigned long malloc_hash( const char *func_name, int func_lineno, char *size_str ) { unsigned long hash = 5381; - const char* ptr_str; + const char *ptr_str; ptr_str = func_name; while ( ptr_str != NULL && *ptr_str != '\0' ) { - hash = ((hash << 5) + hash) + *ptr_str++; /* hash * 33 + char */ + hash = ( ( hash << 5 ) + hash ) + *ptr_str++; /* hash * 33 + char */ } - hash = ((hash << 5) + hash) + func_lineno; /* hash * 33 + func_lineno */ + hash = ( ( hash << 5 ) + hash ) + func_lineno; /* hash * 33 + func_lineno */ ptr_str = size_str; while ( ptr_str != NULL && *ptr_str != '\0' ) @@ -1202,22 +1202,22 @@ static unsigned long malloc_hash(const char* func_name, int func_lineno, char* s * Start from index_record *--------------------------------------------------------------------*/ -allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int func_lineno, char* size_str, int *index_record) +allocator_record *get_mem_record( unsigned long *hash, const char *func_name, int func_lineno, char *size_str, int *index_record ) { int i; - if (*index_record < 0 || *index_record > Num_Records) + if ( *index_record < 0 || *index_record > Num_Records ) { return NULL; } /* calculate hash */ - *hash = malloc_hash(func_name, func_lineno, size_str); + *hash = malloc_hash( func_name, func_lineno, size_str ); - for (i = *index_record; i < Num_Records; i++) + for ( i = *index_record; i < Num_Records; i++ ) { /* check, if memory block is not allocated at the moment and the hash matches */ - if (allocation_list[i].block_ptr == NULL && *hash == allocation_list[i].hash) + if ( allocation_list[i].block_ptr == NULL && *hash == allocation_list[i].hash ) { *index_record = i; return &( allocation_list[i] ); @@ -1237,47 +1237,47 @@ allocator_record* get_mem_record(unsigned long* hash, const char* func_name, int * It also updates actual and average usage of the memory block. * * Note: The record is not removed from the list and may be reused later on in mem_alloc()! - *--------------------------------------------------------------------*/ + *--------------------------------------------------------------------*/ -void mem_free(const char* func_name, int func_lineno, void* ptr) +void mem_free( const char *func_name, int func_lineno, void *ptr ) { int i, index_record; - char* tmp_ptr; - allocator_record* ptr_record; + char *tmp_ptr; + allocator_record *ptr_record; /* Search for the Block Pointer in the List */ ptr_record = NULL; index_record = -1; - for (i = 0; i < Num_Records; i++) + for ( i = 0; i < Num_Records; i++ ) { - if (ptr == allocation_list[i].block_ptr) + if ( ptr == allocation_list[i].block_ptr ) { /* Yes, Found it */ - ptr_record = &(allocation_list[i]); + ptr_record = &( allocation_list[i] ); index_record = i; break; } } - if (ptr_record == NULL) + if ( ptr_record == NULL ) { fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", func_name, func_lineno, "Error: Unable to Find Record Corresponding to the Allocated Memory Block!" ); - exit(-1); + exit( -1 ); } /* Update the Heap Size */ current_heap_size -= ptr_record->block_size; /* Calculate the Actual Usage of the Memory Block (Look for Signature) */ - ptr_record->total_used_size += mem_set_usage(ptr_record); + ptr_record->total_used_size += mem_set_usage( ptr_record ); /* Check, if Out-Of-Bounds Access has been Detected */ - ptr_record->OOB_Flag = mem_check_OOB(ptr_record); + ptr_record->OOB_Flag = mem_check_OOB( ptr_record ); /* De-Allocate Memory Block */ - tmp_ptr = (char*)ptr; + tmp_ptr = (char *) ptr; tmp_ptr -= BLOCK_ROUNDING; - ptr = (void*)tmp_ptr; - free(ptr); + ptr = (void *) tmp_ptr; + free( ptr ); /* Add new entry to the heap allocation call tree */ if ( heap_allocation_call_tree == NULL ) @@ -1305,8 +1305,8 @@ void mem_free(const char* func_name, int func_lineno, void* ptr) /*-------------------------------------------------------------------* * update_mem() * - * This function updates the worst-case intra-frame memory and the worst-case inter-frame memory. - *--------------------------------------------------------------------*/ + * This function updates the worst-case intra-frame memory and the worst-case inter-frame memory. + *--------------------------------------------------------------------*/ void update_mem( void ) { @@ -1323,11 +1323,11 @@ void update_mem( void ) /* get the record */ i_record = heap_allocation_call_tree[i]; - if (i_record > 0) + if ( i_record > 0 ) { flag_alloc = 1; } - else if (i_record < 0) + else if ( i_record < 0 ) { flag_alloc = 0; i_record = -i_record; @@ -1347,9 +1347,9 @@ void update_mem( void ) if ( i_record == 0 ) { flag_alloc = 1; - for ( j = 0; j < n_items_current_intra_frame_heap; j++) + for ( j = 0; j < n_items_current_intra_frame_heap; j++ ) { - if (list_current_intra_frame_heap[j] == i_record) + if ( list_current_intra_frame_heap[j] == i_record ) { flag_alloc = 0; break; @@ -1366,7 +1366,7 @@ void update_mem( void ) /* check, if this is the new worst-case */ if ( size_current_intra_frame_heap > size_wc_intra_frame_heap ) { - if ( n_items_current_intra_frame_heap >= max_items_wc_intra_frame_heap) + if ( n_items_current_intra_frame_heap >= max_items_wc_intra_frame_heap ) { /* resize list, if needed */ max_items_wc_intra_frame_heap = n_items_current_intra_frame_heap + MAX_NUM_RECORDS_REALLOC_STEP; @@ -1441,7 +1441,7 @@ void update_mem( void ) list_wc_inter_frame_heap = realloc( list_wc_inter_frame_heap, max_items_wc_inter_frame_heap * sizeof( int ) ); } - memmove( list_wc_inter_frame_heap, list_current_inter_frame_heap, n_items_current_inter_frame_heap * sizeof(int) ); + memmove( list_wc_inter_frame_heap, list_current_inter_frame_heap, n_items_current_inter_frame_heap * sizeof( int ) ); n_items_wc_inter_frame_heap = n_items_current_inter_frame_heap; size_wc_inter_frame_heap = size_current_inter_frame_heap; location_wc_inter_frame_heap = update_cnt; @@ -1487,9 +1487,9 @@ void update_mem( void ) * Substitute character in string *--------------------------------------------------------------------*/ -static void subst(char* s, char from, char to) +static void subst( char *s, char from, char to ) { - while (*s == from) + while ( *s == from ) { *s++ = to; } @@ -1504,15 +1504,15 @@ static void subst(char* s, char from, char to) * Print detailed (per-item) information about heap memory usage *--------------------------------------------------------------------*/ -static void mem_count_summary(void) +static void mem_count_summary( void ) { int i, j, index, index_record; size_t length; char buf[300], format_str[50], name_str[MAX_FUNCTION_NAME_LENGTH + 3], parms_str[MAX_PARAMS_LENGTH + 1], type_str[10], usage_str[20], size_str[20], line_str[10]; - allocator_record* ptr_record, *ptr; + allocator_record *ptr_record, *ptr; /* Prepare format string */ - sprintf(format_str, "%%-%ds %%5s %%6s %%-%ds %%20s %%6s ", MAX_FUNCTION_NAME_LENGTH, MAX_PARAMS_LENGTH); + sprintf( format_str, "%%-%ds %%5s %%6s %%-%ds %%20s %%6s ", MAX_FUNCTION_NAME_LENGTH, MAX_PARAMS_LENGTH ); if ( n_items_wc_intra_frame_heap > 0 ) { @@ -1582,11 +1582,11 @@ static void mem_count_summary(void) sprintf( line_str, "%d", ptr_record->lineno ); /* prepare average usage & memory size strings */ - sprintf( usage_str, "%d%%", (int) ( ((float)ptr_record->total_used_size / (ptr_record->total_block_size + 1)) * 100.0f ) ); + sprintf( usage_str, "%d%%", (int) ( ( (float) ptr_record->total_used_size / ( ptr_record->total_block_size + 1 ) ) * 100.0f ) ); if ( ptr_record->noccurances > 1 ) { - sprintf( size_str, "%dx%d %s", ptr_record->noccurances, (int) ( (ptr_record->noccurances * ptr_record->wc_heap_size_intra_frame) >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); + sprintf( size_str, "%dx%d %s", ptr_record->noccurances, (int) ( ( ptr_record->noccurances * ptr_record->wc_heap_size_intra_frame ) >> Stat_Cnt_Size ), Count_Unit[Stat_Cnt_Size] ); } else { @@ -1610,7 +1610,7 @@ static void mem_count_summary(void) for ( i = 0; i < n_items_wc_inter_frame_heap; i++ ) { index_record = list_wc_inter_frame_heap[i]; - if (index_record == -1) + if ( index_record == -1 ) { continue; } @@ -1619,7 +1619,7 @@ static void mem_count_summary(void) for ( j = i + 1; j < n_items_wc_inter_frame_heap; j++ ) { index = list_wc_inter_frame_heap[j]; - if (index == -1) + if ( index == -1 ) { continue; } @@ -1703,7 +1703,7 @@ void export_mem( const char *csv_filename ) static FILE *fid = NULL; allocator_record *record_ptr; - if (csv_filename == NULL || strcmp( csv_filename, "" ) == 0 ) + if ( csv_filename == NULL || strcmp( csv_filename, "" ) == 0 ) { return; } @@ -1738,51 +1738,52 @@ void export_mem( const char *csv_filename ) * Print information about ROM and RAM memory usage *--------------------------------------------------------------------*/ -void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) +void print_mem( ROM_Size_Lookup_Table Const_Data_PROM_Table[] ) { int i, nElem; fprintf( stdout, "\n\n --- Memory usage --- \n\n" ); - if (Const_Data_PROM_Table != NULL) + if ( Const_Data_PROM_Table != NULL ) { nElem = 0; - while (strcmp(Const_Data_PROM_Table[nElem].file_spec, "") != 0) nElem++; + while ( strcmp( Const_Data_PROM_Table[nElem].file_spec, "" ) != 0 ) + nElem++; - for (i = 0; i < nElem; i++) + for ( i = 0; i < nElem; i++ ) { - fprintf(stdout, "Program ROM size (%s): %d instruction words\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size); + fprintf( stdout, "Program ROM size (%s): %d instruction words\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size ); } - for (i = 0; i < nElem; i++) + for ( i = 0; i < nElem; i++ ) { - if (Const_Data_PROM_Table[i].Get_Const_Data_Size_Func == NULL) + if ( Const_Data_PROM_Table[i].Get_Const_Data_Size_Func == NULL ) { - fprintf(stdout, "Error: Cannot retrieve or calculate Table ROM size of (%s)!\n", Const_Data_PROM_Table[i].file_spec); + fprintf( stdout, "Error: Cannot retrieve or calculate Table ROM size of (%s)!\n", Const_Data_PROM_Table[i].file_spec ); } - fprintf(stdout, "Table ROM (const data) size (%s): %d %s\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].Get_Const_Data_Size_Func() >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size]); + fprintf( stdout, "Table ROM (const data) size (%s): %d %s\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].Get_Const_Data_Size_Func() >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size] ); } } else { - fprintf( stdout, "Program ROM size: not available\n"); - fprintf( stdout, "Table ROM (const data) size: not available\n"); + fprintf( stdout, "Program ROM size: not available\n" ); + fprintf( stdout, "Table ROM (const data) size: not available\n" ); } - if (wc_ram_size > 0) + if ( wc_ram_size > 0 ) { - fprintf(stdout, "Maximum RAM (stack + heap) size: %d %s in frame %d\n", wc_ram_size >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_ram_frame); + fprintf( stdout, "Maximum RAM (stack + heap) size: %d %s in frame %d\n", wc_ram_size >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], wc_ram_frame ); } else { fprintf( stdout, "Maximum RAM (stack + heap) size: not available\n" ); } - if (ptr_base_stack - ptr_max_stack > 0) + if ( ptr_base_stack - ptr_max_stack > 0 ) { - fprintf(stdout, "Maximum stack size: %lu %s in frame %d\n", ((ptr_base_stack - ptr_max_stack) * sizeof(int16_t)) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], - wc_stack_frame); + fprintf( stdout, "Maximum stack size: %lu %s in frame %d\n", ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], + wc_stack_frame ); } else { @@ -1798,10 +1799,10 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) /* check, if all memory blocks have been deallocated (freed) */ for ( i = 0; i < Num_Records; i++ ) { - if (allocation_list[i].block_ptr != NULL) + if ( allocation_list[i].block_ptr != NULL ) { fprintf( stderr, "Fct=%s, Ln=%i: %s!\n", allocation_list[i].name, allocation_list[i].lineno, "Error: Memory Block has not been De-Allocated with free()!" ); - exit(-1); + exit( -1 ); } } @@ -1834,9 +1835,9 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) mem_count_summary(); #endif - if (Stat_Cnt_Size > 0) + if ( Stat_Cnt_Size > 0 ) { - fprintf(stdout, "\nNote: 1 word = %d bits\n", 8 << Stat_Cnt_Size); + fprintf( stdout, "\nNote: 1 word = %d bits\n", 8 << Stat_Cnt_Size ); fprintf( stdout, "This is an optimistic estimate of memory consumption assuming that each variable type is stored with sizeof(type) bits\n" ); } @@ -1846,9 +1847,9 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) } /* De-allocate list of heap memory blocks */ - if (allocation_list != NULL) + if ( allocation_list != NULL ) { - free(allocation_list); + free( allocation_list ); } /* De-allocate heap allocation call tree */ @@ -1879,8 +1880,5 @@ void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]) #endif /* WMOPS */ #ifndef WMOPS -int cntr_push_pop = 0; /* global counter for checking balanced push_wmops()/pop_wmops() pairs when WMOPS is not activated */ +int cntr_push_pop = 0; /* global counter for checking balanced push_wmops()/pop_wmops() pairs when WMOPS is not activated */ #endif - - - diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 96e7b581d9..79017022ce 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -14,13 +14,13 @@ #ifndef WMOPS_H #define WMOPS_H - + #ifndef EXIT_FAILURE -#include /* stdlib is needed for exit() */ +#include /* stdlib is needed for exit() */ #endif #ifndef EOF -#include /* stdio is needed for fprintf() */ +#include /* stdio is needed for fprintf() */ #endif @@ -30,15 +30,37 @@ #endif /* Real-time relationships */ -#define FRAMES_PER_SECOND 50.0 -#define MILLION_CYCLES 1e6 -#define WMOPS_BOOST_FAC (1.0f) /* scaling factor for equalizing the difference between automatic and manual instrumentation */ -#define FAC (FRAMES_PER_SECOND/MILLION_CYCLES*WMOPS_BOOST_FAC) -#define NUM_INST 20 /* Total number of instruction types (in enum below) */ +#define FRAMES_PER_SECOND 50.0 +#define MILLION_CYCLES 1e6 +#define WMOPS_BOOST_FAC ( 1.0f ) /* scaling factor for equalizing the difference between automatic and manual instrumentation */ +#define FAC ( FRAMES_PER_SECOND / MILLION_CYCLES * WMOPS_BOOST_FAC ) +#define NUM_INST 20 /* Total number of instruction types (in enum below) */ #ifdef WMOPS -enum instructions {_ADD,_ABS, _MULT, _MAC, _MOVE, _STORE, _LOGIC, _SHIFT, _BRANCH, _DIV, _SQRT, _TRANS, _FUNC, _LOOP, _INDIRECT, _PTR_INIT, _TEST, _POWER, _LOG, _MISC}; +enum instructions +{ + _ADD, + _ABS, + _MULT, + _MAC, + _MOVE, + _STORE, + _LOGIC, + _SHIFT, + _BRANCH, + _DIV, + _SQRT, + _TRANS, + _FUNC, + _LOOP, + _INDIRECT, + _PTR_INIT, + _TEST, + _POWER, + _LOG, + _MISC +}; #define _ADD_C 1 #define _ABS_C 1 @@ -49,16 +71,16 @@ enum instructions {_ADD,_ABS, _MULT, _MAC, _MOVE, _STORE, _LOGIC, _SHIFT, _BRANC #define _LOGIC_C 1 #define _SHIFT_C 1 #define _BRANCH_C 4 -#define _DIV_C 18 -#define _SQRT_C 10 -#define _TRANS_C 25 -#define _FUNC_C 2 /* need to add number of arguments */ +#define _DIV_C 18 +#define _SQRT_C 10 +#define _TRANS_C 25 +#define _FUNC_C 2 /* need to add number of arguments */ #define _LOOP_C 3 #define _INDIRECT_C 2 #define _PTR_INIT_C 1 #define _TEST_C 2 -#define _POWER_C 25 -#define _LOG_C 25 +#define _POWER_C 25 +#define _LOG_C 25 #define _MISC_C 1 #define _ADD_P 1 @@ -73,7 +95,7 @@ enum instructions {_ADD,_ABS, _MULT, _MAC, _MOVE, _STORE, _LOGIC, _SHIFT, _BRANC #define _DIV_P 2 #define _SQRT_P 2 #define _TRANS_P 2 -#define _FUNC_P 2 /* need to add number of arguments */ +#define _FUNC_P 2 /* need to add number of arguments */ #define _LOOP_P 1 #define _INDIRECT_P 2 #define _PTR_INIT_P 1 @@ -82,111 +104,532 @@ enum instructions {_ADD,_ABS, _MULT, _MAC, _MOVE, _STORE, _LOGIC, _SHIFT, _BRANC #define _LOG_P 2 #define _MISC_P 1 -#define ADD(x) { {ops_cnt+=(_ADD_C*(x)); inst_cnt[_ADD]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_ADD_P*(x)); }}}} -#define ABS(x) { {ops_cnt+=(_ABS_C*(x)); inst_cnt[_ABS]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_ABS_P*(x)); }}}} -#define MULT(x) { {ops_cnt+=(_MULT_C*(x)); inst_cnt[_MULT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MULT_P*(x)); }}}} -#define MAC(x) { {ops_cnt+=(_MAC_C*(x)); inst_cnt[_MAC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MAC_P*(x)); }}}} -#define MOVE(x) { {ops_cnt+=(_MOVE_C*(x)); inst_cnt[_MOVE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MOVE_P*(x)); }}}} -#define STORE(x) { {ops_cnt+=(_STORE_C*(x)); inst_cnt[_STORE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_STORE_P*(x)); }}}} -#define LOGIC(x) { {ops_cnt+=(_LOGIC_C*(x)); inst_cnt[_LOGIC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_LOGIC_P*(x)); }}}} -#define SHIFT(x) { {ops_cnt+=(_SHIFT_C*(x)); inst_cnt[_SHIFT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_SHIFT_P*(x)); }}}} -#define BRANCH(x) { {ops_cnt+=(_BRANCH_C*(x)); inst_cnt[_BRANCH]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_BRANCH_P*(x)); }}}} -#define DIV(x) { {ops_cnt+=(_DIV_C*(x)); inst_cnt[_DIV]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_DIV_P*(x)); }}}} -#define SQRT(x) { {ops_cnt+=(_SQRT_C*(x)); inst_cnt[_SQRT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_SQRT_P*(x)); }}}} -#define TRANS(x) { {ops_cnt+=(_TRANS_C*(x)); inst_cnt[_TRANS]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_TRANS_P*(x)); }}}} -#define LOOP(x) { {ops_cnt+=(_LOOP_C*(x)); inst_cnt[_LOOP]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_LOOP_P*(x)); }}}} -#define INDIRECT(x) { {ops_cnt+=(_INDIRECT_C*(x)); inst_cnt[_INDIRECT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_INDIRECT_P*(x)); }}}} -#define PTR_INIT(x) { {ops_cnt+=(_PTR_INIT_C*(x)); inst_cnt[_PTR_INIT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_PTR_INIT_P*(x)); }}}} -#define TEST(x) { {ops_cnt+=(_TEST_C*(x)); inst_cnt[_TEST]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_TEST_P*(x)); }}}} -#define POWER(x) { {ops_cnt+=(_POWER_C*(x)); inst_cnt[_POWER]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_POWER_P*(x)); }}}} -#define LOG(x) { {ops_cnt+=(_LOG_C*(x)); inst_cnt[_LOG]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_LOG_P*(x)); }}}} -#define MISC(x) { {ops_cnt+=(_MISC_C*(x)); inst_cnt[_MISC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MISC_P*(x)); }}}} - -#define FUNC(x) { {ops_cnt+=(_FUNC_C+_MOVE_C*(x)); inst_cnt[_FUNC]++; inst_cnt[_MOVE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_FUNC_P+_MOVE_P*(x)); }}}} - -#define DADD(x) { {ops_cnt+=(2*_ADD_C*(x)); inst_cnt[_ADD]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_ADD_P*(x)); }}}} -#define DMULT(x) { {ops_cnt+=(2*_MULT_C*(x)); inst_cnt[_MULT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MULT_P*(x)); }}}} -#define DMAC(x) { {ops_cnt+=(2*_MAC_C*(x)); inst_cnt[_MAC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MAC_P*(x)); }}}} -#define DMOVE(x) { {ops_cnt+=(2*_MOVE_C*(x)); inst_cnt[_MOVE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_MOVE_P*(x)); }}}} -#define DSTORE(x) { {ops_cnt+=(2*_STORE_C*(x)); inst_cnt[_STORE]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_STORE_P*(x)); }}}} -#define DLOGIC(x) { {ops_cnt+=(2*_LOGIC_C*(x)); inst_cnt[_LOGIC]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_LOGIC_P*(x)); }}}} -#define DSHIFT(x) { {ops_cnt+=(2*_SHIFT_C*(x)); inst_cnt[_SHIFT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_SHIFT_P*(x)); }}}} -#define DDIV(x) { {ops_cnt+=(2*_DIV_C*(x)); inst_cnt[_DIV]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_DIV_P*(x)); }}}} -#define DSQRT(x) { {ops_cnt+=(2*_SQRT_C*(x)); inst_cnt[_SQRT]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_SQRT_P*(x)); }}}} -#define DTRANS(x) { {ops_cnt+=(2*_TRANS_C*(x)); inst_cnt[_TRANS]+=(x); { static int pcnt; if (!pcnt) { pcnt=1; prom_cnt+=(_TRANS_P*(x)); }}}} +#define ADD( x ) \ + { \ + { \ + ops_cnt += ( _ADD_C * ( x ) ); \ + inst_cnt[_ADD] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _ADD_P * ( x ) ); \ + } \ + } \ + } \ + } +#define ABS( x ) \ + { \ + { \ + ops_cnt += ( _ABS_C * ( x ) ); \ + inst_cnt[_ABS] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _ABS_P * ( x ) ); \ + } \ + } \ + } \ + } +#define MULT( x ) \ + { \ + { \ + ops_cnt += ( _MULT_C * ( x ) ); \ + inst_cnt[_MULT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MULT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define MAC( x ) \ + { \ + { \ + ops_cnt += ( _MAC_C * ( x ) ); \ + inst_cnt[_MAC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MAC_P * ( x ) ); \ + } \ + } \ + } \ + } +#define MOVE( x ) \ + { \ + { \ + ops_cnt += ( _MOVE_C * ( x ) ); \ + inst_cnt[_MOVE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MOVE_P * ( x ) ); \ + } \ + } \ + } \ + } +#define STORE( x ) \ + { \ + { \ + ops_cnt += ( _STORE_C * ( x ) ); \ + inst_cnt[_STORE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _STORE_P * ( x ) ); \ + } \ + } \ + } \ + } +#define LOGIC( x ) \ + { \ + { \ + ops_cnt += ( _LOGIC_C * ( x ) ); \ + inst_cnt[_LOGIC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _LOGIC_P * ( x ) ); \ + } \ + } \ + } \ + } +#define SHIFT( x ) \ + { \ + { \ + ops_cnt += ( _SHIFT_C * ( x ) ); \ + inst_cnt[_SHIFT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _SHIFT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define BRANCH( x ) \ + { \ + { \ + ops_cnt += ( _BRANCH_C * ( x ) ); \ + inst_cnt[_BRANCH] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _BRANCH_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DIV( x ) \ + { \ + { \ + ops_cnt += ( _DIV_C * ( x ) ); \ + inst_cnt[_DIV] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _DIV_P * ( x ) ); \ + } \ + } \ + } \ + } +#define SQRT( x ) \ + { \ + { \ + ops_cnt += ( _SQRT_C * ( x ) ); \ + inst_cnt[_SQRT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _SQRT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define TRANS( x ) \ + { \ + { \ + ops_cnt += ( _TRANS_C * ( x ) ); \ + inst_cnt[_TRANS] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _TRANS_P * ( x ) ); \ + } \ + } \ + } \ + } +#define LOOP( x ) \ + { \ + { \ + ops_cnt += ( _LOOP_C * ( x ) ); \ + inst_cnt[_LOOP] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _LOOP_P * ( x ) ); \ + } \ + } \ + } \ + } +#define INDIRECT( x ) \ + { \ + { \ + ops_cnt += ( _INDIRECT_C * ( x ) ); \ + inst_cnt[_INDIRECT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _INDIRECT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define PTR_INIT( x ) \ + { \ + { \ + ops_cnt += ( _PTR_INIT_C * ( x ) ); \ + inst_cnt[_PTR_INIT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _PTR_INIT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define TEST( x ) \ + { \ + { \ + ops_cnt += ( _TEST_C * ( x ) ); \ + inst_cnt[_TEST] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _TEST_P * ( x ) ); \ + } \ + } \ + } \ + } +#define POWER( x ) \ + { \ + { \ + ops_cnt += ( _POWER_C * ( x ) ); \ + inst_cnt[_POWER] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _POWER_P * ( x ) ); \ + } \ + } \ + } \ + } +#define LOG( x ) \ + { \ + { \ + ops_cnt += ( _LOG_C * ( x ) ); \ + inst_cnt[_LOG] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _LOG_P * ( x ) ); \ + } \ + } \ + } \ + } +#define MISC( x ) \ + { \ + { \ + ops_cnt += ( _MISC_C * ( x ) ); \ + inst_cnt[_MISC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MISC_P * ( x ) ); \ + } \ + } \ + } \ + } + +#define FUNC( x ) \ + { \ + { \ + ops_cnt += ( _FUNC_C + _MOVE_C * ( x ) ); \ + inst_cnt[_FUNC]++; \ + inst_cnt[_MOVE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _FUNC_P + _MOVE_P * ( x ) ); \ + } \ + } \ + } \ + } + +#define DADD( x ) \ + { \ + { \ + ops_cnt += ( 2 * _ADD_C * ( x ) ); \ + inst_cnt[_ADD] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _ADD_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DMULT( x ) \ + { \ + { \ + ops_cnt += ( 2 * _MULT_C * ( x ) ); \ + inst_cnt[_MULT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MULT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DMAC( x ) \ + { \ + { \ + ops_cnt += ( 2 * _MAC_C * ( x ) ); \ + inst_cnt[_MAC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MAC_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DMOVE( x ) \ + { \ + { \ + ops_cnt += ( 2 * _MOVE_C * ( x ) ); \ + inst_cnt[_MOVE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _MOVE_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DSTORE( x ) \ + { \ + { \ + ops_cnt += ( 2 * _STORE_C * ( x ) ); \ + inst_cnt[_STORE] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _STORE_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DLOGIC( x ) \ + { \ + { \ + ops_cnt += ( 2 * _LOGIC_C * ( x ) ); \ + inst_cnt[_LOGIC] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _LOGIC_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DSHIFT( x ) \ + { \ + { \ + ops_cnt += ( 2 * _SHIFT_C * ( x ) ); \ + inst_cnt[_SHIFT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _SHIFT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DDIV( x ) \ + { \ + { \ + ops_cnt += ( 2 * _DIV_C * ( x ) ); \ + inst_cnt[_DIV] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _DIV_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DSQRT( x ) \ + { \ + { \ + ops_cnt += ( 2 * _SQRT_C * ( x ) ); \ + inst_cnt[_SQRT] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _SQRT_P * ( x ) ); \ + } \ + } \ + } \ + } +#define DTRANS( x ) \ + { \ + { \ + ops_cnt += ( 2 * _TRANS_C * ( x ) ); \ + inst_cnt[_TRANS] += ( x ); \ + { \ + static int pcnt; \ + if ( !pcnt ) \ + { \ + pcnt = 1; \ + prom_cnt += ( _TRANS_P * ( x ) ); \ + } \ + } \ + } \ + } extern double ops_cnt; extern double prom_cnt; -extern double inst_cnt [NUM_INST]; +extern double inst_cnt[NUM_INST]; extern int ops_cnt_activ; -void reset_wmops (void); -void push_wmops (const char *label); -void pop_wmops (void); -void update_wmops (void); +void reset_wmops( void ); +void push_wmops( const char *label ); +void pop_wmops( void ); +void update_wmops( void ); void update_mem( void ); -void print_wmops (void); +void print_wmops( void ); #else /* WMOPS counting disabled */ #define reset_wmops() extern int cntr_push_pop; -#define push_wmops(x) (cntr_push_pop++) -#define pop_wmops() (cntr_push_pop--) -#define update_wmops() (assert(cntr_push_pop == 0)) +#define push_wmops( x ) ( cntr_push_pop++ ) +#define pop_wmops() ( cntr_push_pop-- ) +#define update_wmops() ( assert( cntr_push_pop == 0 ) ) #define update_mem() #define print_wmops() -#define ADD(x) -#define ABS(x) -#define MULT(x) -#define MAC(x) -#define MOVE(x) -#define STORE(x) -#define LOGIC(x) -#define SHIFT(x) -#define BRANCH(x) -#define DIV(x) -#define SQRT(x) -#define TRANS(x) -#define FUNC(x) -#define LOOP(x) -#define INDIRECT(x) -#define PTR_INIT(x) -#define TEST(x) -#define POWER(x) -#define LOG(x) -#define MISC(x) - -#define DADD(x) -#define DMULT(x) -#define DMAC(x) -#define DMOVE(x) -#define DSTORE(x) -#define DLOGIC(x) -#define DSHIFT(x) -#define DDIV(x) -#define DSQRT(x) -#define DTRANS(x) +#define ADD( x ) +#define ABS( x ) +#define MULT( x ) +#define MAC( x ) +#define MOVE( x ) +#define STORE( x ) +#define LOGIC( x ) +#define SHIFT( x ) +#define BRANCH( x ) +#define DIV( x ) +#define SQRT( x ) +#define TRANS( x ) +#define FUNC( x ) +#define LOOP( x ) +#define INDIRECT( x ) +#define PTR_INIT( x ) +#define TEST( x ) +#define POWER( x ) +#define LOG( x ) +#define MISC( x ) + +#define DADD( x ) +#define DMULT( x ) +#define DMAC( x ) +#define DMOVE( x ) +#define DSTORE( x ) +#define DLOGIC( x ) +#define DSHIFT( x ) +#define DDIV( x ) +#define DSQRT( x ) +#define DTRANS( x ) #endif /* mac & msu (Non Instrumented Versions) */ #ifndef mac -#define mac(a, b, c) ((a)+(b)*(c)) +#define mac( a, b, c ) ( ( a ) + ( b ) * ( c ) ) #endif #ifndef mac -#define msu(a, b, c) ((a)-(b)*(c)) +#define msu( a, b, c ) ( ( a ) - ( b ) * ( c ) ) #endif #ifndef WMOPS /* DESACTIVATE the Counting Mechanism */ -#define OP_COUNT_(op, n) +#define OP_COUNT_( op, n ) /* DESACTIVATE Operation Counter Wrappers */ -#define OP_COUNT_WRAPPER1_(op, val) (val) -#define OP_COUNT_WRAPPER2_(expr) -#define OP_COUNT_WRAPPER3_(op, expr) expr +#define OP_COUNT_WRAPPER1_( op, val ) ( val ) +#define OP_COUNT_WRAPPER2_( expr ) +#define OP_COUNT_WRAPPER3_( op, expr ) expr /* DESACTIVATE Logical & Ternary Operators */ #define __ @@ -195,8 +638,8 @@ extern int cntr_push_pop; #else /* '*ops_cnt_ptr' is Used to Avoid: "warning: operation on 'ops_cnt' may be undefined" with Cygwin gcc Compiler */ -static double* ops_cnt_ptr = &ops_cnt; -#define OP_COUNT_(op, x) (*ops_cnt_ptr+=(op##_C*(x)), inst_cnt[op]+=(x)) +static double *ops_cnt_ptr = &ops_cnt; +#define OP_COUNT_( op, x ) ( *ops_cnt_ptr += ( op##_C * ( x ) ), inst_cnt[op] += ( x ) ) /******************************************************************/ /* NOTES: */ @@ -212,119 +655,133 @@ static double* ops_cnt_ptr = &ops_cnt; static int wmc_flag_ = 0; /* Operation Counter Wrappers */ -#define OP_COUNT_WRAPPER1_(op, val) (op, val) -#define OP_COUNT_WRAPPER2_(expr) if (expr, 0); else -#define OP_COUNT_WRAPPER3_(op, expr) if ( op , 0); else expr +#define OP_COUNT_WRAPPER1_( op, val ) ( op, val ) +#define OP_COUNT_WRAPPER2_( expr ) \ + if ( expr, 0 ) \ + ; \ + else +#define OP_COUNT_WRAPPER3_( op, expr ) \ + if ( op, 0 ) \ + ; \ + else \ + expr #endif /* Define all Macros without '{' & '}' (None of these should be called externally!) */ -#define ABS_(x) OP_COUNT_(_ABS, (x)/WMOPS_BOOST_FAC) -#define ADD_(x) OP_COUNT_(_ADD, (x)/WMOPS_BOOST_FAC) -#define MULT_(x) OP_COUNT_(_MULT, (x)/WMOPS_BOOST_FAC) -#define MAC_(x) OP_COUNT_(_MAC, (x)/WMOPS_BOOST_FAC) -#define MOVE_(x) OP_COUNT_(_MOVE, (x)/WMOPS_BOOST_FAC) -#define STORE_(x) OP_COUNT_(_STORE, (x)/WMOPS_BOOST_FAC) -#define LOGIC_(x) OP_COUNT_(_LOGIC, (x)/WMOPS_BOOST_FAC) -#define SHIFT_(x) OP_COUNT_(_SHIFT, (x)/WMOPS_BOOST_FAC) -#define BRANCH_(x) OP_COUNT_(_BRANCH, (x)/WMOPS_BOOST_FAC) -#define DIV_(x) OP_COUNT_(_DIV, (x)/WMOPS_BOOST_FAC) -#define SQRT_(x) OP_COUNT_(_SQRT, (x)/WMOPS_BOOST_FAC) -#define TRANS_(x) OP_COUNT_(_TRANS, (x)/WMOPS_BOOST_FAC) -#define POWER_(x) TRANS_(x) -#define LOG_(x) TRANS_(x) -#define LOOP_(x) OP_COUNT_(_LOOP, (x)/WMOPS_BOOST_FAC) -#define INDIRECT_(x) OP_COUNT_(_INDIRECT, (x)/WMOPS_BOOST_FAC) -#define PTR_INIT_(x) OP_COUNT_(_PTR_INIT, (x)/WMOPS_BOOST_FAC) -#define FUNC_(x) (OP_COUNT_(_MOVE, (x)/WMOPS_BOOST_FAC), OP_COUNT_(_FUNC, 1)) -#define MISC_(x) ABS_(x) +#define ABS_( x ) OP_COUNT_( _ABS, ( x ) / WMOPS_BOOST_FAC ) +#define ADD_( x ) OP_COUNT_( _ADD, ( x ) / WMOPS_BOOST_FAC ) +#define MULT_( x ) OP_COUNT_( _MULT, ( x ) / WMOPS_BOOST_FAC ) +#define MAC_( x ) OP_COUNT_( _MAC, ( x ) / WMOPS_BOOST_FAC ) +#define MOVE_( x ) OP_COUNT_( _MOVE, ( x ) / WMOPS_BOOST_FAC ) +#define STORE_( x ) OP_COUNT_( _STORE, ( x ) / WMOPS_BOOST_FAC ) +#define LOGIC_( x ) OP_COUNT_( _LOGIC, ( x ) / WMOPS_BOOST_FAC ) +#define SHIFT_( x ) OP_COUNT_( _SHIFT, ( x ) / WMOPS_BOOST_FAC ) +#define BRANCH_( x ) OP_COUNT_( _BRANCH, ( x ) / WMOPS_BOOST_FAC ) +#define DIV_( x ) OP_COUNT_( _DIV, ( x ) / WMOPS_BOOST_FAC ) +#define SQRT_( x ) OP_COUNT_( _SQRT, ( x ) / WMOPS_BOOST_FAC ) +#define TRANS_( x ) OP_COUNT_( _TRANS, ( x ) / WMOPS_BOOST_FAC ) +#define POWER_( x ) TRANS_( x ) +#define LOG_( x ) TRANS_( x ) +#define LOOP_( x ) OP_COUNT_( _LOOP, ( x ) / WMOPS_BOOST_FAC ) +#define INDIRECT_( x ) OP_COUNT_( _INDIRECT, ( x ) / WMOPS_BOOST_FAC ) +#define PTR_INIT_( x ) OP_COUNT_( _PTR_INIT, ( x ) / WMOPS_BOOST_FAC ) +#define FUNC_( x ) ( OP_COUNT_( _MOVE, ( x ) / WMOPS_BOOST_FAC ), OP_COUNT_( _FUNC, 1 ) ) +#define MISC_( x ) ABS_( x ) /* Math Operations */ -#define abs_ OP_COUNT_WRAPPER1_( ABS_(1), abs) -#define fabs_ OP_COUNT_WRAPPER1_( ABS_(1), fabs) -#define labs_ OP_COUNT_WRAPPER1_( ABS_(1), labs) -#define floor_ OP_COUNT_WRAPPER1_( MISC_(1), floor) -#define sqrt_ OP_COUNT_WRAPPER1_( SQRT_(1), sqrt) -#define pow_ OP_COUNT_WRAPPER1_(POWER_(1), pow) -#define exp_ OP_COUNT_WRAPPER1_(POWER_(1), exp) -#define log_ OP_COUNT_WRAPPER1_( LOG_(1), log) -#define log10_ OP_COUNT_WRAPPER1_( LOG_(1), log10) -#define cos_ OP_COUNT_WRAPPER1_(TRANS_(1), cos) -#define sin_ OP_COUNT_WRAPPER1_(TRANS_(1), sin) -#define tan_ OP_COUNT_WRAPPER1_(TRANS_(1), tan) -#define acos_ OP_COUNT_WRAPPER1_(TRANS_(1), acos) -#define asin_ OP_COUNT_WRAPPER1_(TRANS_(1), asin) -#define atan_ OP_COUNT_WRAPPER1_(TRANS_(1), atan) -#define atan2_ OP_COUNT_WRAPPER1_(TRANS_(1), atan2) -#define cosh_ OP_COUNT_WRAPPER1_(TRANS_(1), cosh) -#define sinh_ OP_COUNT_WRAPPER1_(TRANS_(1), sinh) -#define tanh_ OP_COUNT_WRAPPER1_(TRANS_(1), tanh) -#define fmod_ OP_COUNT_WRAPPER1_( DIV_(1), fmod) +#define abs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), abs ) +#define fabs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), fabs ) +#define labs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), labs ) +#define floor_ OP_COUNT_WRAPPER1_( MISC_( 1 ), floor ) +#define sqrt_ OP_COUNT_WRAPPER1_( SQRT_( 1 ), sqrt ) +#define pow_ OP_COUNT_WRAPPER1_( POWER_( 1 ), pow ) +#define exp_ OP_COUNT_WRAPPER1_( POWER_( 1 ), exp ) +#define log_ OP_COUNT_WRAPPER1_( LOG_( 1 ), log ) +#define log10_ OP_COUNT_WRAPPER1_( LOG_( 1 ), log10 ) +#define cos_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), cos ) +#define sin_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), sin ) +#define tan_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), tan ) +#define acos_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), acos ) +#define asin_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), asin ) +#define atan_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), atan ) +#define atan2_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), atan2 ) +#define cosh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), cosh ) +#define sinh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), sinh ) +#define tanh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), tanh ) +#define fmod_ OP_COUNT_WRAPPER1_( DIV_( 1 ), fmod ) /* these macros use any local macros already defined */ /* min/max and their Variants */ -#define min_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), min((a),(b))) -#define max_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), max((a),(b))) -#define MIN_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), MIN((a),(b))) -#define MAX_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), MAX((a),(b))) -#define Min_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), Min((a),(b))) -#define Max_(a, b) OP_COUNT_WRAPPER1_(MISC_(1), Max((a),(b))) +#define min_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), min( ( a ), ( b ) ) ) +#define max_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), max( ( a ), ( b ) ) ) +#define MIN_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), MIN( ( a ), ( b ) ) ) +#define MAX_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), MAX( ( a ), ( b ) ) ) +#define Min_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), Min( ( a ), ( b ) ) ) +#define Max_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), Max( ( a ), ( b ) ) ) /* Square and its Variants */ -#define sqr_(x) OP_COUNT_WRAPPER1_(MULT_(1), sqr((x))) -#define Sqr_(x) OP_COUNT_WRAPPER1_(MULT_(1), Sqr((x))) -#define SQR_(x) OP_COUNT_WRAPPER1_(MULT_(1), SQR((x))) -#define square_(x) OP_COUNT_WRAPPER1_(MULT_(1),square((x))) -#define Square_(x) OP_COUNT_WRAPPER1_(MULT_(1),Square((x))) -#define SQUARE_(x) OP_COUNT_WRAPPER1_(MULT_(1),SQUARE((x))) +#define sqr_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), sqr( ( x ) ) ) +#define Sqr_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), Sqr( ( x ) ) ) +#define SQR_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), SQR( ( x ) ) ) +#define square_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), square( ( x ) ) ) +#define Square_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), Square( ( x ) ) ) +#define SQUARE_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), SQUARE( ( x ) ) ) /* Sign and its Variants */ -#define sign_(x) OP_COUNT_WRAPPER1_(MOVE_(1), sign((x))) -#define Sign_(x) OP_COUNT_WRAPPER1_(MOVE_(1), Sign((x))) -#define SIGN_(x) OP_COUNT_WRAPPER1_(MOVE_(1), SIGN((x))) +#define sign_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), sign( ( x ) ) ) +#define Sign_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), Sign( ( x ) ) ) +#define SIGN_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), SIGN( ( x ) ) ) /* Square Root and its Variants */ -#define sqrtf_(x) OP_COUNT_WRAPPER1_(SQRT_(1), sqrtf((x))) +#define sqrtf_( x ) OP_COUNT_WRAPPER1_( SQRT_( 1 ), sqrtf( ( x ) ) ) /* Invert Square Root and its Variants */ -#define inv_sqrt_(x) OP_COUNT_WRAPPER1_(SQRT_(1), inv_sqrt((x))) +#define inv_sqrt_( x ) OP_COUNT_WRAPPER1_( SQRT_( 1 ), inv_sqrt( ( x ) ) ) /* Others */ -#define log_base_2_(x) OP_COUNT_WRAPPER1_(( LOG_(1),MULT_(1)), log_base_2((x))) -#define log2_f_(x) OP_COUNT_WRAPPER1_(( LOG_(1),MULT_(1)), log2_f((x))) +#define log_base_2_( x ) OP_COUNT_WRAPPER1_( ( LOG_( 1 ), MULT_( 1 ) ), log_base_2( ( x ) ) ) +#define log2_f_( x ) OP_COUNT_WRAPPER1_( ( LOG_( 1 ), MULT_( 1 ) ), log2_f( ( x ) ) ) /* The 'wmc_flag_=wmc_flag_' is Used to Avoid: "warning: left-hand operand of comma expression has no effect" with Cygwin gcc Compiler */ -#define _round_(x) OP_COUNT_WRAPPER1_(wmc_flag_=wmc_flag_, _round((x))) -#define round_f_(x) OP_COUNT_WRAPPER1_(wmc_flag_=wmc_flag_, round_f((x))) -#define _squant_(x) OP_COUNT_WRAPPER1_(wmc_flag_=wmc_flag_, _squant((x))) +#define _round_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, _round( ( x ) ) ) +#define round_f_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, round_f( ( x ) ) ) +#define _squant_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, _squant( ( x ) ) ) /* Set Min/Max */ -#define set_min_(a, b) OP_COUNT_WRAPPER3_((ADD_(1),BRANCH_(1),MOVE_(1)), set_min((a),(b))) -#define set_max_(a, b) OP_COUNT_WRAPPER3_((ADD_(1),BRANCH_(1),MOVE_(1)), set_max((a),(b))) +#define set_min_( a, b ) OP_COUNT_WRAPPER3_( ( ADD_( 1 ), BRANCH_( 1 ), MOVE_( 1 ) ), set_min( ( a ), ( b ) ) ) +#define set_max_( a, b ) OP_COUNT_WRAPPER3_( ( ADD_( 1 ), BRANCH_( 1 ), MOVE_( 1 ) ), set_max( ( a ), ( b ) ) ) /* mac & msu (Instrumented Versions) */ -#define mac_(a, b, c) OP_COUNT_WRAPPER1_(MAC_(1), mac(a, b, c)) -#define msu_(a, b, c) OP_COUNT_WRAPPER1_(MAC_(1), msu(a, b, c)) +#define mac_( a, b, c ) OP_COUNT_WRAPPER1_( MAC_( 1 ), mac( a, b, c ) ) +#define msu_( a, b, c ) OP_COUNT_WRAPPER1_( MAC_( 1 ), msu( a, b, c ) ) /* Functions */ -#define func_(name, x) OP_COUNT_WRAPPER1_(FUNC_(x), name) +#define func_( name, x ) OP_COUNT_WRAPPER1_( FUNC_( x ), name ) /* Logical Operators */ #ifndef __ -#define __ (BRANCH_(1), 1) && +#define __ ( BRANCH_( 1 ), 1 ) && #endif /* Ternary Operators (? and :) */ #ifndef _ -#define _ (BRANCH_(1), 0)?0: +#define _ ( BRANCH_( 1 ), 0 ) ? 0: #endif /* Flow Control keywords */ -#define if_ OP_COUNT_WRAPPER2_(BRANCH_(1)) if -#define for_ OP_COUNT_WRAPPER2_( LOOP_(1)) for -#define while_(c) while OP_COUNT_WRAPPER1_(BRANCH_(1), (c)) /* needs extra "()" if ',' encountered */ -#define do_ do { -#define _while BRANCH_(1);} while +#define if_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) if +#define for_ OP_COUNT_WRAPPER2_( LOOP_(1)) for +#define while_( c ) \ + while \ + OP_COUNT_WRAPPER1_( BRANCH_( 1 ), ( c ) ) /* needs extra "()" if ',' encountered */ +#define do_ \ + do \ + { +#define _while \ + BRANCH_( 1 ); \ + } \ + while -#define goto_ OP_COUNT_WRAPPER2_(BRANCH_(1)) goto -#define break_ OP_COUNT_WRAPPER2_(BRANCH_(1)) break -#define continue_ OP_COUNT_WRAPPER2_(BRANCH_(1)) continue -#define return_ OP_COUNT_WRAPPER2_((wmc_flag_=stack_tree_level_, STACK_DEPTH_FCT_RETURN)) return +#define goto_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) goto +#define break_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) break +#define continue_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) continue +#define return_ OP_COUNT_WRAPPER2_( ( wmc_flag_ = stack_tree_level_, STACK_DEPTH_FCT_RETURN ) ) return -#define switch_ OP_COUNT_WRAPPER2_((BRANCH_(1),wmc_flag_=1)) switch -#define cost_(n) OP_COUNT_WRAPPER2_(wmc_flag_?(ADD_(n),BRANCH_(n),wmc_flag_=0):0); +#define switch_ OP_COUNT_WRAPPER2_( ( BRANCH_( 1 ), wmc_flag_ = 1 ) ) switch +#define cost_( n ) OP_COUNT_WRAPPER2_( wmc_flag_ ? ( ADD_( n ), BRANCH_( n ), wmc_flag_ = 0 ) : 0 ); #ifdef WMOPS @@ -332,12 +789,12 @@ static int wmc_flag_ = 0; #define MUL 1 /* Counting Function (should not be called externally!) */ -static void wops_(const char* ops) +static void wops_( const char *ops ) { char lm = 0; /* lm: Last Operation is Math */ static char lo = 0; /* Last Operation */ - void (*fct)(const char* ops) = wops_; + void ( *fct )( const char *ops ) = wops_; st: while ( *ops != '\0' ) @@ -432,13 +889,13 @@ st: case '=': if ( lm ) goto st; - case '\0': + case '\0': /* This Shouldn't Happen */ /* These are Used to Avoid: "warning: 'name' defined but not used" with Cygwin gcc Compiler */ wmc_flag_ = wmc_flag_; ops_cnt_ptr = ops_cnt_ptr; fct( "" ); -error: + error: default: fprintf( stderr, "\r wops: Invalid Counting Operation '%s'\n", ops - 1 ); exit( -1 ); @@ -453,7 +910,7 @@ error: #endif /* All Other Operations */ -#define $(str) OP_COUNT_WRAPPER2_(wops_(str)) +#define $( str ) OP_COUNT_WRAPPER2_( wops_( str ) ) /*-------------------------------------------------------------------* @@ -461,18 +918,26 @@ error: *-------------------------------------------------------------------*/ /* Enhanced Const Data Size Counting (Rounding Up to the Nearest 'Integer' Size) */ -#define rsize(item) ((sizeof(item) + sizeof(int) - 1) / sizeof(int) * sizeof(int)) +#define rsize( item ) ( ( sizeof( item ) + sizeof( int ) - 1 ) / sizeof( int ) * sizeof( int ) ) #ifdef _MSC_VER /* Disable "warning C4210: nonstandard extension used : function given file scope" with Visual Studio Compiler */ -#pragma warning(disable: 4210) +#pragma warning( disable : 4210 ) #endif /* Const Data Size and PROM Size Wrapper Functions */ -#define Const_Data_Size_Func(file) Const_Data_Size_##file(void) -#define Get_Const_Data_Size(file, val_ptr) { extern int Const_Data_Size_##file(void); *(val_ptr) = Const_Data_Size_##file(); } -#define PROM_Size_Func(file) PROM_Size_##file(void) -#define Get_PROM_Size(file, val_ptr) { int PROM_Size_##file(void); *(val_ptr) = PROM_Size_##file(); } +#define Const_Data_Size_Func( file ) Const_Data_Size_##file( void ) +#define Get_Const_Data_Size( file, val_ptr ) \ + { \ + extern int Const_Data_Size_##file( void ); \ + *( val_ptr ) = Const_Data_Size_##file(); \ + } +#define PROM_Size_Func( file ) PROM_Size_##file( void ) +#define Get_PROM_Size( file, val_ptr ) \ + { \ + int PROM_Size_##file( void ); \ + *( val_ptr ) = PROM_Size_##file(); \ + } /* ROM Size Lookup Table - contains information about PROM size and Const Data Size in all source files */ /* The print_mem() function looks for this table to print the results of Const Data usage and PROM usage */ @@ -480,7 +945,7 @@ typedef struct ROM_Size_Lookup_Table { const char file_spec[255]; int PROM_size; - int (*Get_Const_Data_Size_Func) (void); + int ( *Get_Const_Data_Size_Func )( void ); } ROM_Size_Lookup_Table; /* The WMC tool inserts the following declaration during the innstrumentation process in the .c file where the function print_mem() is located */ @@ -521,50 +986,46 @@ typedef enum #ifdef WMOPS -void* mem_alloc(const char* func_name, int func_lineno, size_t size, char* alloc_str); -void mem_free(const char* func_name, int func_lineno, void* ptr); +void *mem_alloc( const char *func_name, int func_lineno, size_t size, char *alloc_str ); +void mem_free( const char *func_name, int func_lineno, void *ptr ); -#define malloc_(size) mem_alloc( __func__, __LINE__, size, "m:" #size ) -#define calloc_(n,size) mem_alloc( __func__, __LINE__, ( n ) * ( size ), "c:" #n ", " #size ) -#define free_(ptr) mem_free( __func__, __LINE__, ptr ) +#define malloc_( size ) mem_alloc( __func__, __LINE__, size, "m:" #size ) +#define calloc_( n, size ) mem_alloc( __func__, __LINE__, ( n ) * ( size ), "c:" #n ", " #size ) +#define free_( ptr ) mem_free( __func__, __LINE__, ptr ) -void reset_mem(Counting_Size cnt_size); -void print_mem(ROM_Size_Lookup_Table Const_Data_PROM_Table[]); +void reset_mem( Counting_Size cnt_size ); +void print_mem( ROM_Size_Lookup_Table Const_Data_PROM_Table[] ); #ifdef MEM_COUNT_DETAILS void export_mem( const char *csv_filename ); #endif -int push_stack(const char* filename, const char* fctname); -int pop_stack(const char* filename, const char* fctname); +int push_stack( const char *filename, const char *fctname ); +int pop_stack( const char *filename, const char *fctname ); #ifdef WMOPS_DETAIL -#define STACK_DEPTH_FCT_CALL (push_wmops(__FUNCTION__), push_stack(__FILE__,__FUNCTION__)) /* add push_wmops() in all function calls */ -#define STACK_DEPTH_FCT_RETURN (pop_wmops(), pop_stack(__FILE__,__FUNCTION__)) /* add pop_wmops() in all function returns */ +#define STACK_DEPTH_FCT_CALL ( push_wmops( __FUNCTION__ ), push_stack( __FILE__, __FUNCTION__ ) ) /* add push_wmops() in all function calls */ +#define STACK_DEPTH_FCT_RETURN ( pop_wmops(), pop_stack( __FILE__, __FUNCTION__ ) ) /* add pop_wmops() in all function returns */ #else -#define STACK_DEPTH_FCT_CALL push_stack(__FILE__,__FUNCTION__) -#define STACK_DEPTH_FCT_RETURN pop_stack(__FILE__,__FUNCTION__) +#define STACK_DEPTH_FCT_CALL push_stack( __FILE__, __FUNCTION__ ) +#define STACK_DEPTH_FCT_RETURN pop_stack( __FILE__, __FUNCTION__ ) #endif -void reset_stack(void); -#define func_start_ int stack_tree_level_=STACK_DEPTH_FCT_CALL; +void reset_stack( void ); +#define func_start_ int stack_tree_level_ = STACK_DEPTH_FCT_CALL; #else -#define malloc_(n1) malloc( n1 ) -#define calloc_(n1,n2) calloc( n1, n2 ) -#define free_(ptr) free( ptr ) +#define malloc_( n1 ) malloc( n1 ) +#define calloc_( n1, n2 ) calloc( n1, n2 ) +#define free_( ptr ) free( ptr ) #define reset_mem( cnt_size ) #define print_mem( Const_Data_PROM_Table ) #define export_mem( csv_filename ) -#define push_stack(file,fct) -#define pop_stack(file,fct) +#define push_stack( file, fct ) +#define pop_stack( file, fct ) #define reset_stack() #define func_start_ #endif #endif /* WMOPS_H */ - - - - diff --git a/lib_dec/ivas_dirac_dec_binaural_functions.c b/lib_dec/ivas_dirac_dec_binaural_functions.c index 07838490ac..5643de5df5 100644 --- a/lib_dec/ivas_dirac_dec_binaural_functions.c +++ b/lib_dec/ivas_dirac_dec_binaural_functions.c @@ -105,9 +105,9 @@ ivas_error ivas_dirac_dec_init_binaural_data( #endif { if ( ( hBinaural = (DIRAC_DEC_BIN_HANDLE) malloc( sizeof( DIRAC_DEC_BIN_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC binaural handle " ); - } + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC binaural handle " ); + } #ifdef BRATE_SWITCHING_RENDERING hBinaural->hTdDecorr = NULL; @@ -213,22 +213,22 @@ ivas_error ivas_dirac_dec_init_binaural_data( if ( hBinaural->hReverb == NULL ) #endif { - if ( hBinaural->useSubframeMode ) - { - if ( ( error = ivas_binaural_reverb_open( &hBinaural->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, st_ivas->hIntSetup.output_config, output_Fs, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) != IVAS_ERR_OK ) + if ( hBinaural->useSubframeMode ) { - return error; + if ( ( error = ivas_binaural_reverb_open( &hBinaural->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, st_ivas->hIntSetup.output_config, output_Fs, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) != IVAS_ERR_OK ) + { + return error; + } } - } - else - { - if ( ( error = ivas_binaural_reverb_open( &hBinaural->hReverb, nBins, CLDFB_NO_COL_MAX, NULL, st_ivas->hIntSetup.output_config, output_Fs, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) != IVAS_ERR_OK ) + else { - return error; + if ( ( error = ivas_binaural_reverb_open( &hBinaural->hReverb, nBins, CLDFB_NO_COL_MAX, NULL, st_ivas->hIntSetup.output_config, output_Fs, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) != IVAS_ERR_OK ) + { + return error; + } } } } - } else if ( renderer_type == RENDERER_STEREO_PARAMETRIC ) { set_f( hBinaural->earlyPartEneCorrection, 1.0f, CLDFB_NO_CHANNELS_MAX ); @@ -248,7 +248,7 @@ ivas_error ivas_dirac_dec_init_binaural_data( if ( hBinaural->hTdDecorr == NULL ) #endif { - ivas_spar_td_decorr_dec_open( &( hBinaural->hTdDecorr ), output_Fs, 3, 1 ); + ivas_spar_td_decorr_dec_open( &( hBinaural->hTdDecorr ), output_Fs, 3, 1 ); } if ( st_ivas->hDecoderConfig->ivas_total_brate < IVAS_24k4 ) diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index b70ba464b5..77d1fef233 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -45,7 +45,6 @@ #include "wmc_auto.h" - #ifdef SBA_BR_SWITCHING /*-------------------------------------------------------------------* * ivas_sba_dec_reinit() diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index b5c6acbdfc..8c39670d9b 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -40,7 +40,6 @@ #endif - /*-------------------------------------------------------------------* * TDREND_MIX_LIST_SetPos() * -- GitLab From 6ba4edae77400e9d01fd7416dab35b352922b2f9 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Tue, 6 Dec 2022 22:01:55 +0100 Subject: [PATCH 071/103] fix formatting in wmc_auto.h --- lib_debug/wmc_auto.h | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 79017022ce..f88cbb9421 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -762,7 +762,8 @@ static int wmc_flag_ = 0; #endif /* Flow Control keywords */ -#define if_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) if +#define if_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ +if #define for_ OP_COUNT_WRAPPER2_( LOOP_(1)) for #define while_( c ) \ while \ @@ -775,12 +776,17 @@ static int wmc_flag_ = 0; } \ while -#define goto_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) goto -#define break_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) break -#define continue_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) continue -#define return_ OP_COUNT_WRAPPER2_( ( wmc_flag_ = stack_tree_level_, STACK_DEPTH_FCT_RETURN ) ) return - -#define switch_ OP_COUNT_WRAPPER2_( ( BRANCH_( 1 ), wmc_flag_ = 1 ) ) switch +#define goto_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ +goto +#define break_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ +break +#define continue_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ +continue +#define return_ OP_COUNT_WRAPPER2_( ( wmc_flag_ = stack_tree_level_, STACK_DEPTH_FCT_RETURN ) ) \ +return + +#define switch_ OP_COUNT_WRAPPER2_( ( BRANCH_( 1 ), wmc_flag_ = 1 ) ) \ +switch #define cost_( n ) OP_COUNT_WRAPPER2_( wmc_flag_ ? ( ADD_( n ), BRANCH_( n ), wmc_flag_ = 0 ) : 0 ); #ifdef WMOPS -- GitLab From b06ddb89f5faa0c0a12e7a11c883142cebb3061a Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 6 Dec 2022 22:07:18 +0100 Subject: [PATCH 072/103] fix no newline at the end of file --- lib_com/ari_hm.c | 2 +- lib_com/arith_coder.c | 2 +- lib_com/basop32.c | 2 +- lib_com/basop_com_lpc.c | 2 +- lib_com/basop_lsf_tools.c | 2 +- lib_com/basop_mpy.c | 2 +- lib_com/basop_tcx_utils.c | 2 +- lib_com/basop_util.c | 2 +- lib_com/bitalloc.c | 2 +- lib_com/bitstream.c | 1 + lib_com/enh1632.c | 2 +- lib_com/enh40.c | 2 +- lib_com/fft.c | 2 +- lib_com/hq2_bit_alloc.c | 2 +- lib_com/pvq_com.c | 2 +- lib_com/window.c | 2 +- lib_debug/segsnr.c | 2 +- lib_dec/FEC.c | 1 + lib_dec/jbm_jb4_inputbuffer.c | 2 +- lib_dec/jbm_jb4sb.c | 2 +- 20 files changed, 20 insertions(+), 18 deletions(-) diff --git a/lib_com/ari_hm.c b/lib_com/ari_hm.c index cbe681263e..1c3961b3ae 100644 --- a/lib_com/ari_hm.c +++ b/lib_com/ari_hm.c @@ -302,4 +302,4 @@ void tcx_hm_modify_envelope( return; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/arith_coder.c b/lib_com/arith_coder.c index b192213aff..67fbb93691 100644 --- a/lib_com/arith_coder.c +++ b/lib_com/arith_coder.c @@ -575,4 +575,4 @@ void tcx_arith_render_envelope( return; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/basop32.c b/lib_com/basop32.c index af94bfaca6..bf369ff33f 100644 --- a/lib_com/basop32.c +++ b/lib_com/basop32.c @@ -3205,4 +3205,4 @@ Word32 L_msu0( Word32 L_var3, Word16 var1, Word16 var2 ) #endif /* ! BASOP_NOGLOB */ #undef WMC_TOOL_SKIP -/* end of file */ + diff --git a/lib_com/basop_com_lpc.c b/lib_com/basop_com_lpc.c index 3b02560719..c0667f96f6 100644 --- a/lib_com/basop_com_lpc.c +++ b/lib_com/basop_com_lpc.c @@ -260,4 +260,4 @@ void basop_lsf2lsp( const Word16 lsf[], Word16 lsp[] ) return; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/basop_lsf_tools.c b/lib_com/basop_lsf_tools.c index 72d5383c2f..eeb42df491 100644 --- a/lib_com/basop_lsf_tools.c +++ b/lib_com/basop_lsf_tools.c @@ -311,4 +311,4 @@ static Word16 E_LPC_f_lsp_pol_get( return Ovf; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/basop_mpy.c b/lib_com/basop_mpy.c index 4641af2211..8c55d25e79 100644 --- a/lib_com/basop_mpy.c +++ b/lib_com/basop_mpy.c @@ -89,4 +89,4 @@ Word32 Mpy_32_32( Word32 x, Word32 y ) return ( mh ); } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/basop_tcx_utils.c b/lib_com/basop_tcx_utils.c index 84b6ffca9b..5e744c2906 100644 --- a/lib_com/basop_tcx_utils.c +++ b/lib_com/basop_tcx_utils.c @@ -438,4 +438,4 @@ void basop_PsychAdaptLowFreqDeemph( Word32 x[], const Word16 lpcGains[], const W } } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/basop_util.c b/lib_com/basop_util.c index 0006971a23..660de7cb9a 100644 --- a/lib_com/basop_util.c +++ b/lib_com/basop_util.c @@ -1109,4 +1109,4 @@ Word32 Sqrt_l( return ( L_y ); } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/bitalloc.c b/lib_com/bitalloc.c index c393bee870..3ee65a036b 100644 --- a/lib_com/bitalloc.c +++ b/lib_com/bitalloc.c @@ -1022,4 +1022,4 @@ int16_t BitAllocWB( return (Word16) t_fx; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c index ff731f13c9..35ec95000f 100644 --- a/lib_com/bitstream.c +++ b/lib_com/bitstream.c @@ -2969,3 +2969,4 @@ void dtx_read_padding_bits( } #undef WMC_TOOL_SKIP + diff --git a/lib_com/enh1632.c b/lib_com/enh1632.c index 402d4a62c9..5a810cab0e 100644 --- a/lib_com/enh1632.c +++ b/lib_com/enh1632.c @@ -631,4 +631,4 @@ Word32 L_rotl( Word32 L_var1, Word16 var2, Word16 *var3 ) } #undef WMC_TOOL_SKIP -/* end of file */ + diff --git a/lib_com/enh40.c b/lib_com/enh40.c index 5da2b0e6fd..9d8fd84b60 100644 --- a/lib_com/enh40.c +++ b/lib_com/enh40.c @@ -1307,4 +1307,4 @@ Word40 L40_shl_r( Word40 L40_var1, Word16 var2 ) #undef WMC_TOOL_SKIP -/* end of file */ + diff --git a/lib_com/fft.c b/lib_com/fft.c index d9edf0ad14..8ce6b73a5f 100644 --- a/lib_com/fft.c +++ b/lib_com/fft.c @@ -6767,4 +6767,4 @@ void BASOP_cfft( return; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/hq2_bit_alloc.c b/lib_com/hq2_bit_alloc.c index 17aff7a017..c1accf0406 100644 --- a/lib_com/hq2_bit_alloc.c +++ b/lib_com/hq2_bit_alloc.c @@ -1031,4 +1031,4 @@ void hq2_bit_alloc( return; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/pvq_com.c b/lib_com/pvq_com.c index af8e3f1bcc..c45217f354 100644 --- a/lib_com/pvq_com.c +++ b/lib_com/pvq_com.c @@ -975,4 +975,4 @@ Word16 atan2_fx( return angle; /* Q14 between 0 and EVS_PI/2 radian. */ } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_com/window.c b/lib_com/window.c index 80797869e0..899ff8e4ce 100644 --- a/lib_com/window.c +++ b/lib_com/window.c @@ -77,4 +77,4 @@ void ham_cos_window( return; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_debug/segsnr.c b/lib_debug/segsnr.c index 51b33f57a9..b7733355fa 100644 --- a/lib_debug/segsnr.c +++ b/lib_debug/segsnr.c @@ -102,4 +102,4 @@ float segsnr( float x[], float xe[], int16_t n, int16_t nseg ) } #endif -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_dec/FEC.c b/lib_dec/FEC.c index f623c265c2..0ea85907e6 100644 --- a/lib_dec/FEC.c +++ b/lib_dec/FEC.c @@ -578,3 +578,4 @@ static void pulseRes_preCalc( return; } #undef WMC_TOOL_SKIP + diff --git a/lib_dec/jbm_jb4_inputbuffer.c b/lib_dec/jbm_jb4_inputbuffer.c index 0959868a61..f8a3d09b52 100644 --- a/lib_dec/jbm_jb4_inputbuffer.c +++ b/lib_dec/jbm_jb4_inputbuffer.c @@ -359,4 +359,4 @@ uint16_t JB4_INPUTBUFFER_Size( return ret; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP diff --git a/lib_dec/jbm_jb4sb.c b/lib_dec/jbm_jb4sb.c index a1d9d3d847..be8caff4b3 100644 --- a/lib_dec/jbm_jb4sb.c +++ b/lib_dec/jbm_jb4sb.c @@ -1509,4 +1509,4 @@ static int16_t JB4_inputBufferCompareFunction( return result; } -#undef WMC_TOOL_SKIP \ No newline at end of file +#undef WMC_TOOL_SKIP -- GitLab From ea81c0f937f1bfad4e15db677e6213e125c5c9a9 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Wed, 7 Dec 2022 08:28:58 +0100 Subject: [PATCH 073/103] fix formatting --- lib_com/basop32.c | 1 - lib_com/bitstream.c | 1 - lib_com/enh1632.c | 1 - lib_com/enh40.c | 1 - lib_debug/wmc_auto.h | 32 +++++++++++++++++++------------- lib_dec/FEC.c | 1 - 6 files changed, 19 insertions(+), 18 deletions(-) diff --git a/lib_com/basop32.c b/lib_com/basop32.c index bf369ff33f..ec66c33281 100644 --- a/lib_com/basop32.c +++ b/lib_com/basop32.c @@ -3205,4 +3205,3 @@ Word32 L_msu0( Word32 L_var3, Word16 var1, Word16 var2 ) #endif /* ! BASOP_NOGLOB */ #undef WMC_TOOL_SKIP - diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c index 35ec95000f..ff731f13c9 100644 --- a/lib_com/bitstream.c +++ b/lib_com/bitstream.c @@ -2969,4 +2969,3 @@ void dtx_read_padding_bits( } #undef WMC_TOOL_SKIP - diff --git a/lib_com/enh1632.c b/lib_com/enh1632.c index 5a810cab0e..4f1373b845 100644 --- a/lib_com/enh1632.c +++ b/lib_com/enh1632.c @@ -631,4 +631,3 @@ Word32 L_rotl( Word32 L_var1, Word16 var2, Word16 *var3 ) } #undef WMC_TOOL_SKIP - diff --git a/lib_com/enh40.c b/lib_com/enh40.c index 9d8fd84b60..1d987ce84c 100644 --- a/lib_com/enh40.c +++ b/lib_com/enh40.c @@ -1307,4 +1307,3 @@ Word40 L40_shl_r( Word40 L40_var1, Word16 var2 ) #undef WMC_TOOL_SKIP - diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index f88cbb9421..578be9b532 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -762,8 +762,9 @@ static int wmc_flag_ = 0; #endif /* Flow Control keywords */ -#define if_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ -if +#define if_ \ + OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ + if #define for_ OP_COUNT_WRAPPER2_( LOOP_(1)) for #define while_( c ) \ while \ @@ -776,17 +777,22 @@ if } \ while -#define goto_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ -goto -#define break_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ -break -#define continue_ OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ -continue -#define return_ OP_COUNT_WRAPPER2_( ( wmc_flag_ = stack_tree_level_, STACK_DEPTH_FCT_RETURN ) ) \ -return - -#define switch_ OP_COUNT_WRAPPER2_( ( BRANCH_( 1 ), wmc_flag_ = 1 ) ) \ -switch +#define goto_ \ + OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ + goto +#define break_ \ + OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ + break +#define continue_ \ + OP_COUNT_WRAPPER2_( BRANCH_( 1 ) ) \ + continue +#define return_ \ + OP_COUNT_WRAPPER2_( ( wmc_flag_ = stack_tree_level_, STACK_DEPTH_FCT_RETURN ) ) \ + return + +#define switch_ \ + OP_COUNT_WRAPPER2_( ( BRANCH_( 1 ), wmc_flag_ = 1 ) ) \ + switch #define cost_( n ) OP_COUNT_WRAPPER2_( wmc_flag_ ? ( ADD_( n ), BRANCH_( n ), wmc_flag_ = 0 ) : 0 ); #ifdef WMOPS diff --git a/lib_dec/FEC.c b/lib_dec/FEC.c index 0ea85907e6..f623c265c2 100644 --- a/lib_dec/FEC.c +++ b/lib_dec/FEC.c @@ -578,4 +578,3 @@ static void pulseRes_preCalc( return; } #undef WMC_TOOL_SKIP - -- GitLab From bbbb73907855a51057da6a1a7a8667b53f6c1fba Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 7 Dec 2022 10:23:09 +0100 Subject: [PATCH 074/103] correction of malloc()/free() instrumentation within FIX_VBR_COMPLEXITY --- lib_com/wi.c | 62 ++++++++++++++++++++++++++++++++++++------ lib_dec/dec_gen_voic.c | 2 -- lib_dec/ppp_dec.c | 2 -- lib_dec/voiced_dec.c | 2 -- lib_enc/ppp_enc.c | 2 -- lib_enc/voiced_enc.c | 24 ++-------------- 6 files changed, 56 insertions(+), 38 deletions(-) diff --git a/lib_com/wi.c b/lib_com/wi.c index 96fa87d3a8..8719988d3b 100644 --- a/lib_com/wi.c +++ b/lib_com/wi.c @@ -42,10 +42,6 @@ #include "rom_com.h" #include "wmc_auto.h" -#ifdef FIX_VBR_COMPLEXITY -#define WMC_TOOL_SKIP -#endif - /*-------------------------------------------------------------------* * Local constants *-------------------------------------------------------------------*/ @@ -85,9 +81,11 @@ ivas_error DTFS_new( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP MOVE( 2 ); LOOP( 1 ); MOVE( 2 ); +#undef WMC_TOOL_SKIP #endif dtfs->lag = 0; dtfs->nH = 0; @@ -120,6 +118,7 @@ void DTFS_copy( { int16_t k; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOOP( 1 ); for ( k = 0; k < MAXLAG_WI; k++ ) { @@ -138,6 +137,7 @@ void DTFS_copy( Xout->nH_4kHz = Xinp.nH_4kHz; Xout->upper_cut_off_freq_of_interest = Xinp.upper_cut_off_freq_of_interest; Xout->upper_cut_off_freq = Xinp.upper_cut_off_freq; +#undef WMC_TOOL_SKIP #else for ( k = 0; k < MAXLAG_WI; k++ ) { @@ -174,6 +174,7 @@ void DTFS_sub( int16_t i; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP MULT( 1 ); LOOP( 1 ); for ( i = 0; i <= X1.lag / 2; i++ ) @@ -199,6 +200,7 @@ void DTFS_sub( tmp->nH_4kHz = max( X1.nH_4kHz, X2.nH_4kHz ); tmp->upper_cut_off_freq_of_interest = X1.upper_cut_off_freq_of_interest; tmp->upper_cut_off_freq = X1.upper_cut_off_freq; +#undef WMC_TOOL_SKIP #else for ( i = 0; i <= X1.lag / 2; i++ ) { @@ -241,6 +243,7 @@ static void DTFS_fast_fs_inv( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP /* Populate the dbuf array */ dbuf[1] = X1_DTFS->a[0]; dbuf[2] = 0.0; @@ -276,6 +279,7 @@ static void DTFS_fast_fs_inv( ADD( 1 ); out[i - 1] = dbuf[i] / N_2; } +#undef WMC_TOOL_SKIP #else /* Populate the dbuf array */ dbuf[1] = X1_DTFS->a[0]; @@ -334,6 +338,7 @@ static float DTFS_alignment_weight( DTFS_STRUCTURE X1_DTFS; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP FUNC( 2 ); DTFS_copy( &X1_DTFS, refX1_DTFS ); FUNC( 2 ); @@ -351,7 +356,6 @@ static float DTFS_alignment_weight( tmplpc[k] = LPC1[k] * ( tmp *= pwf ); } - FUNC( 3 ); DTFS_zeroFilter( &X1_DTFS, tmplpc, M + 1 ); FUNC( 3 ); @@ -421,6 +425,7 @@ static float DTFS_alignment_weight( maxcorr = wcorr; } } +#undef WMC_TOOL_SKIP #else DTFS_copy( &X1_DTFS, refX1_DTFS ); DTFS_adjustLag( &X1_DTFS, X2_DTFS.lag ); @@ -491,6 +496,7 @@ float DTFS_alignment_full( float maxcorr, corr, tmp, tmp1, fshift, n, diff; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOGIC( 1 ); if ( X1_DTFS.lag < X2_DTFS.lag ) { @@ -536,6 +542,7 @@ float DTFS_alignment_full( maxcorr = corr; } } +#undef WMC_TOOL_SKIP #else if ( X1_DTFS.lag < X2_DTFS.lag ) { @@ -587,6 +594,7 @@ void DTFS_phaseShift( float tmp, tmp2 = 0.0f; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP ADD( 1 ); LOOP( 1 ); for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++, tmp2 += ph ) @@ -601,6 +609,7 @@ void DTFS_phaseShift( MAC( 1 ); X->b[k] = (float) ( tmp * sin( tmp2 ) + X->b[k] * cos( tmp2 ) ); } +#undef WMC_TOOL_SKIP #else for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++, tmp2 += ph ) { @@ -629,6 +638,7 @@ void DTFS_zeroPadd( float diff; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOGIC( 1 ); if ( N == X->lag ) { @@ -655,6 +665,7 @@ void DTFS_zeroPadd( { X->nH++; } +#undef WMC_TOOL_SKIP #else if ( N == X->lag ) { @@ -719,6 +730,7 @@ void DTFS_to_fs( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP X->lag = N; MOVE( 1 ); MULT( 1 ); @@ -813,6 +825,7 @@ void DTFS_to_fs( } X->nH = nH_band; X->nH_4kHz = nH_4kHz; +#undef WMC_TOOL_SKIP #else X->lag = N; nH_band = (int16_t) floor( X->upper_cut_off_freq / ( 12800.0 / X->lag ) ); @@ -898,6 +911,7 @@ void DTFS_fs_inv( int16_t k, n; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOOP( 1 ); for ( n = 0; n < N; n++ ) { @@ -915,6 +929,7 @@ void DTFS_fs_inv( x[n] += (float) ( X->a[k] * cos( tmp ) + X->b[k] * sin( tmp ) ); } } +#undef WMC_TOOL_SKIP #else for ( n = 0; n < N; n++ ) { @@ -977,6 +992,7 @@ static void DTFS_transform( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP FUNC( 2 ); DTFS_copy( tmp1_dtfs, X ); FUNC( 2 ); @@ -1087,6 +1103,7 @@ static void DTFS_transform( out[i] = sum1; } +#undef WMC_TOOL_SKIP #else DTFS_copy( tmp1_dtfs, X ); DTFS_copy( tmp2_dtfs, X2 ); @@ -1204,6 +1221,7 @@ void DTFS_zeroFilter( int16_t k, n; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP MOVE( 1 ); MULT( 1 ); tmp1 = (float) ( PI2 / X->lag ); @@ -1239,6 +1257,7 @@ void DTFS_zeroFilter( MAC( 1 ); X->b[k] = X->b[k] * sum1 + tmp * sum2; } +#undef WMC_TOOL_SKIP #else tmp1 = (float) ( PI2 / X->lag ); for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++ ) @@ -1279,6 +1298,7 @@ void DTFS_poleFilter( int16_t k, n; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP MOVE( 1 ); MULT( 1 ); tmp1 = (float) ( PI2 / X->lag ); @@ -1316,6 +1336,7 @@ void DTFS_poleFilter( ADD( 1 ); X->b[k] = ( -tmp * sum2 + X->b[k] * sum1 ) / tmp2; } +#undef WMC_TOOL_SKIP #else tmp1 = (float) ( PI2 / X->lag ); for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++ ) @@ -1356,6 +1377,7 @@ static float DTFS_setEngy( float en1, tmp; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP FUNC( 1 ); MOVE( 1 ); en1 = DTFS_getEngy( *X_DTFS ); @@ -1376,6 +1398,7 @@ static float DTFS_setEngy( MULT( 1 ); X_DTFS->b[k] *= tmp; } +#undef WMC_TOOL_SKIP #else en1 = DTFS_getEngy( *X_DTFS ); if ( en1 == 0.0 ) @@ -1409,6 +1432,7 @@ void DTFS_adjustLag( float en, diff; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOGIC( 1 ); if ( N == X_DTFS->lag ) { @@ -1459,6 +1483,7 @@ void DTFS_adjustLag( X_DTFS->nH_4kHz++; } } +#undef WMC_TOOL_SKIP #else if ( N == X_DTFS->lag ) { @@ -1514,6 +1539,7 @@ float DTFS_getEngy( en = 0.0f; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOOP( 1 ); for ( k = 1; k <= min( ( X.lag - 1 ) >> 1, X.nH ); k++ ) { @@ -1533,6 +1559,7 @@ float DTFS_getEngy( ADD( 1 ); en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; } +#undef WMC_TOOL_SKIP #else for ( k = 1; k <= min( ( X.lag - 1 ) >> 1, X.nH ); k++ ) { @@ -1564,6 +1591,7 @@ void DTFS_car2pol( float tmp; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOOP( 1 ); for ( k = 1; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++ ) { @@ -1587,6 +1615,7 @@ void DTFS_car2pol( MOVE( 1 ); X->b[k] = (float) atan2( X->b[k], tmp ); } +#undef WMC_TOOL_SKIP #else for ( k = 1; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++ ) { @@ -1621,6 +1650,7 @@ void DTFS_pol2car( float tmp; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOOP( 1 ); for ( k = 1; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++ ) { @@ -1645,6 +1675,7 @@ void DTFS_pol2car( MULT( 1 ); X->a[k] = (float) ( X->a[k] * cos( tmp ) ); } +#undef WMC_TOOL_SKIP #else for ( k = 1; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++ ) { @@ -1690,6 +1721,7 @@ float DTFS_setEngyHarm( count = 0; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOGIC( 1 ); if ( f1 == 0.0 ) { @@ -1767,6 +1799,7 @@ float DTFS_setEngyHarm( X->a[k] *= factor; } } +#undef WMC_TOOL_SKIP #else if ( f1 == 0.0 ) { @@ -1844,6 +1877,7 @@ static void cubicPhase( double diff; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP ADD( 1 ); N -= (int16_t) L2; @@ -1911,6 +1945,7 @@ static void cubicPhase( ADD( 2 ); phOut[n] = (float) ( phOut[n - 1] + diff ); } +#undef WMC_TOOL_SKIP #else N -= (int16_t) L2; @@ -1978,6 +2013,7 @@ void DTFS_to_erb( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOOP( 1 ); for ( i = 0; i < num_erb; i++ ) { @@ -2027,6 +2063,7 @@ void DTFS_to_erb( out[i] /= count[i]; } } +#undef WMC_TOOL_SKIP #else for ( i = 0; i < num_erb; i++ ) { @@ -2101,6 +2138,7 @@ void erb_slot( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP MOVE( 1 ); MULT( 1 ); nH_band = (int16_t) floor( upper_cut_off_freq / ( 12800.0 / lag ) ); @@ -2160,6 +2198,7 @@ void erb_slot( mfreq[j] /= out[j]; } } +#undef WMC_TOOL_SKIP #else nH_band = (int16_t) floor( upper_cut_off_freq / ( 12800.0 / lag ) ); @@ -2240,6 +2279,7 @@ void DTFS_erb_inv( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP MOVE( 1 ); f[m] = 0.0; MOVE( 1 ); @@ -2312,6 +2352,7 @@ void DTFS_erb_inv( X->a[0] = 0.0f; } +#undef WMC_TOOL_SKIP #else f[m] = 0.0; amp[m] = 0.0; @@ -2386,6 +2427,7 @@ static void LPCPowSpect( int16_t i, k; #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP LOOP( 1 ); for ( k = 0; k < Nf; k++ ) { @@ -2414,6 +2456,7 @@ static void LPCPowSpect( DIV( 1 ); out[k] = 1.0f / ( Re * Re + Im * Im ); } +#undef WMC_TOOL_SKIP #else for ( k = 0; k < Nf; k++ ) { @@ -2466,6 +2509,7 @@ void erb_diff( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP FUNC( 3 ); erb_slot( l, cslot, mfreq, num_erb ); FUNC( 3 ); @@ -2702,6 +2746,7 @@ void erb_diff( MOVE( 1 ); index[1] = mmseindex; +#undef WMC_TOOL_SKIP #else erb_slot( l, cslot, mfreq, num_erb ); erb_slot( pl, pslot, t_prev_erb, num_erb ); @@ -2894,6 +2939,7 @@ void erb_add( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP FUNC( 3 ); erb_slot( l, cslot, t_prev_erb, num_erb ); FUNC( 3 ); @@ -3000,6 +3046,7 @@ void erb_add( curr_erb[i] = 0.0f; } } +#undef WMC_TOOL_SKIP #else erb_slot( l, cslot, t_prev_erb, num_erb ); erb_slot( pl, pslot, t_prev_erb, num_erb ); @@ -3117,6 +3164,7 @@ ivas_error WIsyn( } #ifdef FIX_VBR_COMPLEXITY +#define WMC_TOOL_SKIP FUNC( 2 ); DTFS_copy( CURRCW_DTFS, *CURRCW_DTFS_out ); @@ -3187,6 +3235,7 @@ ivas_error WIsyn( MOVE( 1 ); DIV( 1 ); *ph_offset = (float) fmod( (double) ( tmp ), PI2 ); +#undef WMC_TOOL_SKIP #else DTFS_copy( CURRCW_DTFS, *CURRCW_DTFS_out ); @@ -3239,6 +3288,3 @@ ivas_error WIsyn( return error; } -#ifdef FIX_VBR_COMPLEXITY -#undef WMC_TOOL_SKIP -#endif diff --git a/lib_dec/dec_gen_voic.c b/lib_dec/dec_gen_voic.c index 4df8a1e63f..e4f3ae9b4f 100644 --- a/lib_dec/dec_gen_voic.c +++ b/lib_dec/dec_gen_voic.c @@ -285,10 +285,8 @@ ivas_error decod_gen_voic( } } -#define WMC_TOOL_SKIP free( PREVP ); free( CURRP ); -#undef WMC_TOOL_SKIP } } diff --git a/lib_dec/ppp_dec.c b/lib_dec/ppp_dec.c index aa650a074a..adea4ea6a9 100644 --- a/lib_dec/ppp_dec.c +++ b/lib_dec/ppp_dec.c @@ -177,9 +177,7 @@ ivas_error ppp_quarter_decoder( tmp = (float) get_next_indice( st, 3 ); DTFS_phaseShift( CURRCW_Q_DTFS, (float) ( PI2 * ( tmp - 3 ) / CURRCW_Q_DTFS->lag ) ); -#define WMC_TOOL_SKIP free( PREVDTFS ); -#undef WMC_TOOL_SKIP return error; } diff --git a/lib_dec/voiced_dec.c b/lib_dec/voiced_dec.c index 94a59818db..2771224ac0 100644 --- a/lib_dec/voiced_dec.c +++ b/lib_dec/voiced_dec.c @@ -233,11 +233,9 @@ ivas_error ppp_voiced_decoder( mvr2r( dtfs_temp->a, hSC_VBR->dtfs_dec_a, MAXLAG_WI ); mvr2r( dtfs_temp->b, hSC_VBR->dtfs_dec_b, MAXLAG_WI ); -#define WMC_TOOL_SKIP free( TMPDTFS ); free( CURRP_Q_D ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } diff --git a/lib_enc/ppp_enc.c b/lib_enc/ppp_enc.c index 24552a0972..5c64049f51 100644 --- a/lib_enc/ppp_enc.c +++ b/lib_enc/ppp_enc.c @@ -355,9 +355,7 @@ ivas_error ppp_quarter_encoder( push_indice( hBstr, IND_GLOBAL_ALIGNMENT, (int16_t) ( tmp + 3 ), 3 ); -#define WMC_TOOL_SKIP free( PREVDTFS ); -#undef WMC_TOOL_SKIP return error; } diff --git a/lib_enc/voiced_enc.c b/lib_enc/voiced_enc.c index 0d5e827093..15fd15d079 100644 --- a/lib_enc/voiced_enc.c +++ b/lib_enc/voiced_enc.c @@ -554,14 +554,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -581,14 +579,13 @@ ivas_error ppp_voiced_encoder( if ( ( l - pl ) > 13 || ( l - pl ) < -11 || ( l < 19 ) || ( pl < 19 ) ) { hSC_VBR->bump_up = 1; -#define WMC_TOOL_SKIP + free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -611,14 +608,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -754,14 +749,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -787,14 +780,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -809,14 +800,12 @@ ivas_error ppp_voiced_encoder( if ( hSC_VBR->bump_up == 1 ) { -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -826,14 +815,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -847,14 +834,13 @@ ivas_error ppp_voiced_encoder( { if ( ( error = ppp_quarter_encoder( &flag, hBstr, CURRP_Q_E, TMPDTFS, dtfs_temp->lag, *CURRP_NQ, lpc2, &( hSC_VBR->lastLgainE ), &( hSC_VBR->lastHgainE ), &( hSC_VBR->lasterbE[0] ), *dtfs_temp ) ) != IVAS_ERR_OK ) { -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP + return error; } } @@ -1040,14 +1026,12 @@ ivas_error ppp_voiced_encoder( { hSC_VBR->bump_up = 1; -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -1062,14 +1046,12 @@ ivas_error ppp_voiced_encoder( PPP_MODE_E = 'B'; hSC_VBR->bump_up = 1; -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } @@ -1101,14 +1083,12 @@ ivas_error ppp_voiced_encoder( mvr2r( dtfs_temp->a, hSC_VBR->dtfs_enc_a, MAXLAG_WI ); mvr2r( dtfs_temp->b, hSC_VBR->dtfs_enc_b, MAXLAG_WI ); -#define WMC_TOOL_SKIP free( CURRP_NQ ); free( TMPDTFS ); free( TMPDTFS2 ); free( TMPDTFS3 ); free( CURRP_Q_E ); free( dtfs_temp ); -#undef WMC_TOOL_SKIP return error; } -- GitLab From 5aeb7a44d49e8a986691b59763dc8ac180e32f62 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 7 Dec 2022 10:31:25 +0100 Subject: [PATCH 075/103] remove superfluous #endif --- .../object_renderer_standalone/renderer_standalone.c | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c index 1bccd10bb8..a3df9f8205 100644 --- a/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c +++ b/scripts/td_object_renderer/object_renderer_standalone/object_renderer_standalone/renderer_standalone.c @@ -550,7 +550,6 @@ int main( int argc, char *argv[] ) { fprintf( stderr, "*** Clipping on %d samples.\n", noClipping ); } -#endif #ifdef WMOPS print_mem( NULL ); -- GitLab From e7cb98443a023f6f2e5bac639ab22b5112c618ef Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Wed, 7 Dec 2022 10:38:59 +0100 Subject: [PATCH 076/103] apply clang-format --- lib_com/wi.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib_com/wi.c b/lib_com/wi.c index 8719988d3b..cb8f7b9863 100644 --- a/lib_com/wi.c +++ b/lib_com/wi.c @@ -3287,4 +3287,3 @@ ivas_error WIsyn( return error; } - -- GitLab From 9873e157920bb9c985379ce79e1d8df8f7ec64a8 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 7 Dec 2022 15:39:24 +0100 Subject: [PATCH 077/103] BE cleanup --- lib_com/options.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 7aa6ac7337..4cd5fc3484 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -151,8 +151,6 @@ #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 TEMP_FIX_BSPLINE_MALLOC /* temporary fix for malloc_() free() mismatch reported by the WMC tool */ - /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif -- GitLab From d47bd93806a44bd2629965d692e2f096bc8669d3 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 7 Dec 2022 16:16:26 +0100 Subject: [PATCH 078/103] correct order of #undef ... #define --- lib_com/wi.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib_com/wi.c b/lib_com/wi.c index cb8f7b9863..2127d07af6 100644 --- a/lib_com/wi.c +++ b/lib_com/wi.c @@ -642,7 +642,9 @@ void DTFS_zeroPadd( LOGIC( 1 ); if ( N == X->lag ) { +#undef WMC_TOOL_SKIP return; +#define WMC_TOOL_SKIP } ADD( 1 ); LOOP( 1 ); @@ -1384,7 +1386,9 @@ static float DTFS_setEngy( LOGIC( 1 ); if ( en1 == 0.0 ) { +#undef WMC_TOOL_SKIP return 0.0; +#define WMC_TOOL_SKIP } MOVE( 1 ); DIV( 1 ); @@ -1436,7 +1440,9 @@ void DTFS_adjustLag( LOGIC( 1 ); if ( N == X_DTFS->lag ) { +#undef WMC_TOOL_SKIP return; +#define WMC_TOOL_SKIP } LOGIC( 1 ); -- GitLab From 28c4242a17deb780e313a110ececc62d2d3e7ed3 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Thu, 8 Dec 2022 09:29:37 +0100 Subject: [PATCH 079/103] Add HEAP_INTRA and RAM into the list of generated newsletters --- scripts/pyivastest/IvasModeAnalyzer.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scripts/pyivastest/IvasModeAnalyzer.py b/scripts/pyivastest/IvasModeAnalyzer.py index 178b2faa35..ba43dc8db8 100644 --- a/scripts/pyivastest/IvasModeAnalyzer.py +++ b/scripts/pyivastest/IvasModeAnalyzer.py @@ -52,6 +52,15 @@ INSTRUMENTED_RESULTS = { "strip_suffix": False, "encdec": 2, }, + "RAM": { + "keyword": "Maximum RAM (stack + heap) size:", + "number_format": "{:.0f}", + "position": 0, + "max_or_add": "add", + "keyword_suffix": False, + "strip_suffix": False, + "encdec": 2, + }, "HEAP": { "keyword": "Maximum inter-frame heap size:", "number_format": "{:.0f}", @@ -61,6 +70,15 @@ INSTRUMENTED_RESULTS = { "strip_suffix": False, "encdec": 2, }, + "HEAP_INTRA": { + "keyword": "Maximum intra-frame heap size:", + "number_format": "{:.0f}", + "position": 0, + "max_or_add": "add", + "keyword_suffix": False, + "strip_suffix": False, + "encdec": 2, + }, "STACK": { "keyword": "Maximum stack size:", "number_format": "{:.0f}", -- GitLab From 9f56389ceae6bd9521ce8417b7dea4e974588491 Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 8 Dec 2022 13:30:59 +0100 Subject: [PATCH 080/103] limit duration of comp measurement for testing --- ci/complexity_measurements/getWmops.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/complexity_measurements/getWmops.sh b/ci/complexity_measurements/getWmops.sh index 6136192374..7f80bfdb81 100755 --- a/ci/complexity_measurements/getWmops.sh +++ b/ci/complexity_measurements/getWmops.sh @@ -54,7 +54,8 @@ wmopsFilenameFlcLast=wmops_newsletter_stereo__${commit_sha}_${date} wmopsFilenameFlc=${destDir}/wmops/logs/${wmopsFilenameFlcLast} # instrument and build -./scripts/IvasBuildAndRunChecks.py -p $config_file --checks COMPLEXITY --create_complexity_tables ${wmopsFilenameFlc} -C $ivas_format -f ${ep} --oc $output_format +# TODO: remove duration limitation +./scripts/IvasBuildAndRunChecks.py -U 2 -p $config_file --checks COMPLEXITY --create_complexity_tables ${wmopsFilenameFlc} -C $ivas_format -f ${ep} --oc $output_format # get the info on worst-case operating point: WMOPS number, enc-operating mode, dec-operating mode ### WMOPS -- GitLab From 84e5151b31db5cab3deb755fbc08eb463f212781 Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 8 Dec 2022 13:37:35 +0100 Subject: [PATCH 081/103] remove delay for testing --- .gitlab-ci.yml | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b778eea6a5..182d9cdf6e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1001,8 +1001,9 @@ complexity-ism-in-binaural-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - when: delayed - start_in: 1 hour + # TODO: activate delay again after testing + #when: delayed + #start_in: 1 hour script: - *print-common-info - *update-ltv-repo @@ -1017,8 +1018,9 @@ complexity-sba-hoa3-in-hoa3-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - when: delayed - start_in: 2 hours 30 minutes + # TODO: activate delay again after testing + #when: delayed + #start_in: 2 hours 30 minutes script: - *print-common-info - *update-ltv-repo @@ -1033,8 +1035,9 @@ complexity-mc-in-7_1_4-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - when: delayed - start_in: 4 hours + # TODO: activate delay again after testing + #when: delayed + #start_in: 4 hours script: - *print-common-info - *update-ltv-repo @@ -1049,8 +1052,9 @@ complexity-masa-in-7_1_4-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - when: delayed - start_in: 7 hours 30 minutes + # TODO: activate delay again after testing + #when: delayed + #start_in: 7 hours 30 minutes script: - *print-common-info - *update-ltv-repo @@ -1065,8 +1069,9 @@ complexity-StereoDmxEVS-stereo-in-mono-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - when: delayed - start_in: 8 hours 30 minutes + # TODO: activate delay again after testing + #when: delayed + #start_in: 8 hours 30 minutes script: - *print-common-info - *update-ltv-repo -- GitLab From 77a047c2d4991769cc04eaf596913f0c08055a25 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 8 Dec 2022 19:37:42 +0100 Subject: [PATCH 082/103] change TROM and PROM newsletters to: conf;enc;dec;com;rend;total --- scripts/pyivastest/IvasModeAnalyzer.py | 32 ++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/scripts/pyivastest/IvasModeAnalyzer.py b/scripts/pyivastest/IvasModeAnalyzer.py index ba43dc8db8..d4ae5efa92 100644 --- a/scripts/pyivastest/IvasModeAnalyzer.py +++ b/scripts/pyivastest/IvasModeAnalyzer.py @@ -391,9 +391,9 @@ class IvasModeAnalyzer(IvasModeCollector): result_table = [["conf", "com"]] else: if max_or_add == "add": - result_table = [["conf", "enc", "dec", "com", "total"]] + result_table = [["conf", "enc", "dec", "com", "rend", "total"]] if max_or_add == "max": - result_table = [["conf", "enc", "dec", "com", "max"]] + result_table = [["conf", "enc", "dec", "com", "rend", "max"]] sorted_modes = self.sort_log_modes() @@ -455,9 +455,11 @@ class IvasModeAnalyzer(IvasModeCollector): for oc in self.selected_logs[mode]["oc_list"]: formatted_name_oc = formatted_name + " to " + oc dec_value = -1 + rend_value = -1 for item in self.selected_logs[mode]["items"]: if oc in self.selected_logs[mode]["items"][item]["dec"]: dec_log_name = self.get_dec_log_file_name(item, mode, oc) + # get dec if keyword_suffix == 1: dec_value = max( dec_value, @@ -478,6 +480,27 @@ class IvasModeAnalyzer(IvasModeCollector): strip_suffix=strip_suffix, ), ) + # get rend + if keyword_suffix == 1: + rend_value = max( + rend_value, + self.get_log_value_from_file( + dec_log_name, + [keyword, "lib_rend"], + position, + strip_suffix=strip_suffix, + ), + ) + else: + rend_value = max( + rend_value, + self.get_log_value_from_file( + dec_log_name, + keyword, + position, + strip_suffix=strip_suffix, + ), + ) if encdec == 2: if max_or_add == "add": total = number_format.format( @@ -503,13 +526,13 @@ class IvasModeAnalyzer(IvasModeCollector): elif encdec == 4: if max_or_add == "add": total = number_format.format( - float(enc_value) + float(dec_value) + float(com_value) + float(enc_value) + float(dec_value) + float(com_value) + float(rend_value) ) elif max_or_add == "max": total = number_format.format( max( float(enc_value) + float(com_value), - float(dec_value) + float(com_value), + float(dec_value) + float(com_value) + float(rend_value), ) ) result_line = [ @@ -517,6 +540,7 @@ class IvasModeAnalyzer(IvasModeCollector): number_format.format(enc_value), number_format.format(float(dec_value)), number_format.format(com_value), + number_format.format(rend_value), total, ] result_table.append(result_line) -- GitLab From 82cc2c624169c2bfd1a9cf88e3ab24b98534bd5e Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Thu, 8 Dec 2022 19:55:17 +0100 Subject: [PATCH 083/103] updated printout of merged PROM and TROM newsletters --- .../mergeNewsletterRom.py | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/ci/complexity_measurements/mergeNewsletterRom.py b/ci/complexity_measurements/mergeNewsletterRom.py index 3ed69a8e09..1dba474082 100755 --- a/ci/complexity_measurements/mergeNewsletterRom.py +++ b/ci/complexity_measurements/mergeNewsletterRom.py @@ -65,24 +65,34 @@ with open(newsletterFilenameTROM, "r") as csvfile: # now we have the following format # PROM enc, PROM dec, PROM total, TROM enc, TROM dec, TROM total -print("conf;PROM enc;PROM dec;PROM total;TROM enc;TROM dec;TROM total") +print("conf;PROM enc;PROM dec;PROM com;PROM rend;PROM total;TROM enc;TROM dec;TROM com;TROM rend;TROM total;total") for key in rom_table: - ram = rom_table[key] - total = int(ram[1]) + int(ram[2]) + int(ram[5]) + rom = rom_table[key] + total = int(rom[4]) + int(rom[9]) print( key, ";", - ram[0], + rom[0], ";", - ram[1], + rom[1], ";", - ram[2], + rom[2], ";", - ram[3], + rom[3], ";", - ram[4], + rom[4], ";", - ram[5], + rom[5], + ";", + rom[6], + ";", + rom[7], + ";", + rom[8], + ";", + rom[9], + ";", + total, sep="", ) -- GitLab From 1e2783c9d0419cc168384142ef8f32bd668efe4c Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Thu, 8 Dec 2022 20:11:07 +0100 Subject: [PATCH 084/103] updated printout of max PROM and TROM numbers --- .../parseNewsletterRom.py | 112 ++++++++++-------- 1 file changed, 62 insertions(+), 50 deletions(-) diff --git a/ci/complexity_measurements/parseNewsletterRom.py b/ci/complexity_measurements/parseNewsletterRom.py index 3dae8893ea..d7cdb3e8ea 100755 --- a/ci/complexity_measurements/parseNewsletterRom.py +++ b/ci/complexity_measurements/parseNewsletterRom.py @@ -49,17 +49,19 @@ if __name__ == "__main__": shortDate = sys.argv[5] fullDate = sys.argv[6] -max_total_enc = ["", 0] -max_total_dec = ["", 0] -max_total_encdec = ["", 0] - max_prom_enc = ["", 0] max_prom_dec = ["", 0] -max_prom_encdec = ["", 0] +max_prom_com = ["", 0] +max_prom_rend = ["", 0] +max_prom_total = ["", 0] max_trom_enc = ["", 0] max_trom_dec = ["", 0] -max_trom_encdec = ["", 0] +max_trom_com = ["", 0] +max_trom_rend = ["", 0] +max_trom_total = ["", 0] + +max_total_encdec = ["", 0] rom_table = {} @@ -82,22 +84,24 @@ with open(newsletterFilenameTROM, "r") as csvfile: rom_table[key] += lst # now we have the following format -# PROM enc, PROM dec, PROM total, TROM enc, TROM dec, TROM total +# PROM enc, PROM dec, PROM com, PROM rend, PROM total, TROM enc, TROM dec, TROM com, TROM rend, TROM total, total for key in rom_table: rom = rom_table[key] prom_enc = int(rom[0]) prom_dec = int(rom[1]) - prom_encdec = int(rom[2]) - - trom_enc = int(rom[3]) - trom_dec = int(rom[4]) - trom_encdec = int(rom[5]) - - total_enc = prom_enc + trom_enc - total_dec = prom_dec + trom_dec - total_encdec = prom_encdec + trom_encdec - + prom_com = int(rom[2]) + prom_rend = int(rom[3]) + prom_total = int(rom[4]) + + trom_enc = int(rom[5]) + trom_dec = int(rom[6]) + trom_com = int(rom[7]) + trom_rend = int(rom[8]) + trom_total = int(rom[9]) + + total_encdec = int(rom[10]) + if prom_enc > max_prom_enc[1]: max_prom_enc[0] = re.sub(" ", "_", key) max_prom_enc[1] = prom_enc @@ -106,9 +110,13 @@ for key in rom_table: max_prom_dec[0] = re.sub(" ", "_", key) max_prom_dec[1] = prom_dec - if prom_encdec > max_prom_encdec[1]: - max_prom_encdec[0] = re.sub(" ", "_", key) - max_prom_encdec[1] = prom_encdec + if prom_com > max_prom_com[1]: + max_prom_com[0] = re.sub(" ", "_", key) + max_prom_com[1] = prom_com + + if prom_rend > max_prom_rend[1]: + max_prom_rend[0] = re.sub(" ", "_", key) + max_prom_rend[1] = prom_rend if trom_enc > max_trom_enc[1]: max_trom_enc[0] = re.sub(" ", "_", key) @@ -118,40 +126,44 @@ for key in rom_table: max_trom_dec[0] = re.sub(" ", "_", key) max_trom_dec[1] = trom_dec - if trom_encdec > max_trom_encdec[1]: - max_trom_encdec[0] = re.sub(" ", "_", key) - max_trom_encdec[1] = trom_encdec - - if total_enc > max_total_enc[1]: - max_total_enc[0] = re.sub(" ", "_", key) - max_total_enc[1] = total_enc + if trom_com > max_trom_com[1]: + max_trom_com[0] = re.sub(" ", "_", key) + max_trom_com[1] = trom_com - if total_dec > max_prom_dec[1]: - max_total_dec[0] = re.sub(" ", "_", key) - max_total_dec[1] = total_dec + if trom_rend > max_trom_rend[1]: + max_trom_rend[0] = re.sub(" ", "_", key) + max_trom_rend[1] = trom_rend - if total_encdec > max_prom_encdec[1]: + if total_encdec > max_total_encdec[1]: max_total_encdec[0] = re.sub(" ", "_", key) max_total_encdec[1] = total_encdec + + print( - revision, #set revision = $tmp[1] - shortDate, #set shortDate = `echo $tmp[2] | sed -e "s/_/\ /g"` - fullDate, #set fullDate = `echo $tmp[3] | sed -e "s/_/\ /g"` - max_total_encdec[1], #TotalRomCodecScore - max_total_enc[0], #set TotalRomEnc = $tmp[5] - max_total_enc[1], #TotalRomEncScore - max_total_dec[0], #set TotalRomDec = $tmp[7] - max_total_dec[1], #TotalRomDecScore - max_prom_encdec[1], #PROMCodecScore - max_prom_enc[0], #set PromEnc = $tmp[10] - max_prom_enc[1], #PROMEncScore - max_prom_dec[0], #set PromDec = $tmp[12] - max_prom_dec[1], #PROMDecScore - max_trom_encdec[1], #TROMCodecScore - max_trom_enc[0], #set TromEnc = $tmp[15] - max_trom_enc[1], #TROMEncScore - max_trom_dec[0], #set TromDec = $tmp[17] - max_trom_dec[1], #TROMDecScore - newsletterFilenameLast, #set logFile = $tmp[19] + revision, + shortDate, + fullDate, + + max_total_encdec[1], + + max_prom_enc[0], + max_prom_enc[1], + max_prom_dec[0], + max_prom_dec[1], + max_prom_com[0], + max_prom_com[1], + max_prom_rend[0], + max_prom_rend[1], + + max_trom_enc[0], + max_trom_enc[1], + max_trom_dec[0], + max_trom_dec[1], + max_trom_com[0], + max_trom_com[1], + max_trom_rend[0], + max_trom_rend[1], + + newsletterFilenameLast, ) -- GitLab From ed82f1839482026f72a45c7de7461196170274a3 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 8 Dec 2022 22:17:22 +0100 Subject: [PATCH 085/103] fix bug in current_stack monitoring --- lib_debug/wmc_auto.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 602d94b4cf..debcc0c157 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -582,8 +582,9 @@ typedef struct allocator_record *allocation_list = NULL; static int16_t *ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ -static int16_t *ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ -static int32_t wc_stack_frame = 0; /* Frame corresponding to the worst-case stack usage */ +static int16_t *ptr_current_stack = 0; /* Pointer to the current stack pointer */ +static int16_t *ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ +static int32_t wc_stack_frame = 0; /* Frame corresponding to the worst-case stack usage */ static int32_t wc_ram_size, wc_ram_frame; static int32_t current_heap_size; static int current_calls = 0; @@ -615,6 +616,7 @@ void reset_mem( Counting_Size cnt_size ) /* initialize stack pointers */ ptr_base_stack = &something; ptr_max_stack = ptr_base_stack; + ptr_current_stack = ptr_base_stack; Stat_Cnt_Size = cnt_size; @@ -702,6 +704,7 @@ void reset_stack( void ) /* initialize/reset stack pointers */ ptr_base_stack = &something; ptr_max_stack = ptr_base_stack; + ptr_current_stack = ptr_base_stack; return; } @@ -717,6 +720,8 @@ int push_stack( const char *filename, const char *fctname ) int16_t something; int32_t current_stack_size; + ptr_current_stack = &something; + (void) *filename; /* to avoid compilation warning */ /* Is there room to save the caller's information? */ @@ -738,16 +743,16 @@ int push_stack( const char *filename, const char *fctname ) stack_callers[0][current_calls].function_name[MAX_FUNCTION_NAME_LENGTH] = 0; /* Nul Terminate */ /* Save the Stack Pointer */ - stack_callers[0][current_calls].stack_ptr = &something; + stack_callers[0][current_calls].stack_ptr = ptr_current_stack; /* Increase Stack Calling Tree Level */ current_calls++; /* Is this the First Time or the Worst Case? */ - if ( &something < ptr_max_stack || ptr_max_stack == NULL ) + if ( ptr_current_stack < ptr_max_stack || ptr_max_stack == NULL ) { /* Yes */ /* Save Info about it */ - ptr_max_stack = &something; + ptr_max_stack = ptr_current_stack; wc_stack_frame = update_cnt; /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ strncpy( location_max_stack, fctname, sizeof( location_max_stack ) - 1 ); @@ -764,7 +769,7 @@ int push_stack( const char *filename, const char *fctname ) } /* Check, if This is the New Worst-Case RAM (stack + heap) */ - current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) ); + current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); if ( current_stack_size + current_heap_size > wc_ram_size ) { wc_ram_size = current_stack_size + current_heap_size; @@ -950,7 +955,7 @@ void *mem_alloc( current_heap_size += ptr_record->block_size; /* Check, if this is the new Worst-Case RAM (stack + heap) */ - current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) ); + current_stack_size = ( int32_t )( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); if ( current_stack_size + current_heap_size > wc_ram_size ) { wc_ram_size = current_stack_size + current_heap_size; -- GitLab From 84cb46631f624fb349b470c9290e6fc8b2bcf9db Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 9 Dec 2022 08:35:16 +0100 Subject: [PATCH 086/103] raise warning if stack is not empty in print_mem() --- lib_debug/wmc_auto.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index debcc0c157..d29f58a2aa 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -807,6 +807,16 @@ int pop_stack( const char *filename, const char *fctname ) /* Erase Entry */ caller_info_ptr->function_name[0] = 0; + /* Retrieve previous stack pointer */ + if ( current_calls == 0 ) + { + ptr_current_stack = ptr_base_stack; + } + else + { + ptr_current_stack = stack_callers[0][current_calls - 1].stack_ptr; + } + return 0 /* for Now */; } @@ -1785,6 +1795,12 @@ void print_mem( ROM_Size_Lookup_Table Const_Data_PROM_Table[] ) fprintf( stdout, "Maximum RAM (stack + heap) size: not available\n" ); } + /* check, if the stack is empty */ + if ( ptr_current_stack != ptr_base_stack ) + { + fprintf( stderr, "Warning: Stack is not empty.\n" ); + } + if ( ptr_base_stack - ptr_max_stack > 0 ) { fprintf( stdout, "Maximum stack size: %lu %s in frame %d\n", ( ( ptr_base_stack - ptr_max_stack ) * sizeof( int16_t ) ) >> Stat_Cnt_Size, Count_Unit[Stat_Cnt_Size], -- GitLab From 0a1827eaad61d67ff311f3f62207623b2f063f57 Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 9 Dec 2022 08:50:14 +0100 Subject: [PATCH 087/103] allow return_; in root_a_over_b (BE change) --- lib_com/tools.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib_com/tools.c b/lib_com/tools.c index 271dc54828..6336de64c1 100644 --- a/lib_com/tools.c +++ b/lib_com/tools.c @@ -1555,14 +1555,16 @@ float root_a_over_b( } #define WMC_TOOL_SKIP if ( isinf( a ) ) +#undef WMC_TOOL_SKIP { return FLT_MAX; } +#define WMC_TOOL_SKIP if ( isinf( b ) ) +#undef WMC_TOOL_SKIP { return 0.f; } -#undef WMC_TOOL_SKIP a += 0x00000001; b += 0x00000001; -- GitLab From 25b3b32e05837bcd54c2cb869a4189d8fc2b5c9e Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 9 Dec 2022 08:51:26 +0100 Subject: [PATCH 088/103] clang format on wmc_auto.c --- lib_debug/wmc_auto.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index d29f58a2aa..c648cfcd0d 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -581,7 +581,7 @@ typedef struct allocator_record *allocation_list = NULL; -static int16_t *ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ +static int16_t *ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ static int16_t *ptr_current_stack = 0; /* Pointer to the current stack pointer */ static int16_t *ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ static int32_t wc_stack_frame = 0; /* Frame corresponding to the worst-case stack usage */ @@ -965,7 +965,7 @@ void *mem_alloc( current_heap_size += ptr_record->block_size; /* Check, if this is the new Worst-Case RAM (stack + heap) */ - current_stack_size = ( int32_t )( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); + current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); if ( current_stack_size + current_heap_size > wc_ram_size ) { wc_ram_size = current_stack_size + current_heap_size; -- GitLab From 95cac43b33a4e9c27c0cf5dae66ba9b4f62f4605 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 14 Dec 2022 08:47:43 +0100 Subject: [PATCH 089/103] small additional correction of WMC_TOOL_SKIP in wi.c --- lib_com/wi.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lib_com/wi.c b/lib_com/wi.c index 2127d07af6..6cfc018aad 100644 --- a/lib_com/wi.c +++ b/lib_com/wi.c @@ -85,8 +85,22 @@ ivas_error DTFS_new( MOVE( 2 ); LOOP( 1 ); MOVE( 2 ); + dtfs->lag = 0; + dtfs->nH = 0; + dtfs->nH_4kHz = 0; + dtfs->upper_cut_off_freq_of_interest = 3300.0; + dtfs->upper_cut_off_freq = 4000.0; + + for ( i = 0; i < MAXLAG_WI; i++ ) + { + dtfs->a[i] = dtfs->b[i] = 0.0; + } + + dtfs->sampling_rate = -1; + + *dtfs_out = dtfs; #undef WMC_TOOL_SKIP -#endif +#else dtfs->lag = 0; dtfs->nH = 0; dtfs->nH_4kHz = 0; @@ -101,6 +115,8 @@ ivas_error DTFS_new( dtfs->sampling_rate = -1; *dtfs_out = dtfs; +#endif + return IVAS_ERR_OK; } -- GitLab From f8942dc8a16efc9483a99307e1896ba99b03ce23 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 15 Dec 2022 13:40:32 +0100 Subject: [PATCH 090/103] fix incorrect position for WMOPS value extracted from the printout --- scripts/pyivastest/IvasModeAnalyzer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/pyivastest/IvasModeAnalyzer.py b/scripts/pyivastest/IvasModeAnalyzer.py index d4ae5efa92..f51ed47ec1 100644 --- a/scripts/pyivastest/IvasModeAnalyzer.py +++ b/scripts/pyivastest/IvasModeAnalyzer.py @@ -46,7 +46,7 @@ INSTRUMENTED_RESULTS = { "WMOPS": { "keyword": "total", "number_format": "{:.5g}", - "position": 3, + "position": 2, "max_or_add": "add", "keyword_suffix": False, "strip_suffix": False, -- GitLab From 39e42296a59dc11ba93f00da27b57b54407b8047 Mon Sep 17 00:00:00 2001 From: knj Date: Thu, 15 Dec 2022 22:45:27 +0100 Subject: [PATCH 091/103] add debug printout in getWmops.sh --- ci/complexity_measurements/getWmops.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/complexity_measurements/getWmops.sh b/ci/complexity_measurements/getWmops.sh index 7f80bfdb81..f0458a8a9e 100755 --- a/ci/complexity_measurements/getWmops.sh +++ b/ci/complexity_measurements/getWmops.sh @@ -81,6 +81,8 @@ tcsh ${scriptDir}/genWebpageData_Ram.csh ${destDir}/wmops/log_ram_all.txt ${dest ${scriptDir}/mergeNewsletterRom.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlc}_TROM.csv > ${wmopsFilenameFlc}_ROM.csv ${scriptDir}/parseNewsletterRom.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlc}_TROM.csv ${wmopsFilenameFlcLast}_ROM.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_rom_all.txt +cat ${destDir}/wmops/log_rom_all.txt + # generate java script from database tcsh ${scriptDir}/genWebpageData_Rom.csh ${destDir}/wmops/log_rom_all.txt ${destDir}/wmops/graphs_rom_flc.js Graphs_ROM -- GitLab From b2fc59d102919d4b9d66d2c83dc1387bc3a2fbf4 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Fri, 16 Dec 2022 11:09:18 +0100 Subject: [PATCH 092/103] Correct indices in newsletter parsers --- ci/complexity_measurements/getWmops.sh | 8 +++----- ci/complexity_measurements/mergeNewsletterRam.py | 2 +- ci/complexity_measurements/mergeNewsletterRom.py | 2 +- ci/complexity_measurements/parseNewsletterRam.py | 15 +++++++++++---- ci/complexity_measurements/parseNewsletterRom.py | 2 +- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ci/complexity_measurements/getWmops.sh b/ci/complexity_measurements/getWmops.sh index f0458a8a9e..d3115dc747 100755 --- a/ci/complexity_measurements/getWmops.sh +++ b/ci/complexity_measurements/getWmops.sh @@ -40,7 +40,7 @@ output_format=$2 date=`date +%Y%m%d` # used for log-file file ending shortDate=`date "+%b %d" | sed -e "s/\ /_/g"` # stored in the log-file fullDate=`date "+%c" | sed -e "s/\ /_/g"` # stored in the log-file - + commit_sha=`git rev-parse --short HEAD` destDir="." @@ -62,10 +62,10 @@ wmopsFilenameFlc=${destDir}/wmops/logs/${wmopsFilenameFlcLast} ${scriptDir}/parseNewsletterWmops.py ${wmopsFilenameFlc}_WMOPS.csv ${wmopsFilenameFlcLast}_WMOPS.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_wmops_all.txt # now update the webpage -tcsh ${scriptDir}/genWebpageData_WMOPS.csh ${destDir}/wmops/log_wmops_all.txt ${destDir}/wmops/graphs_wmops_flc.js Graphs_WMOPS +tcsh ${scriptDir}/genWebpageData_WMOPS.csh ${destDir}/wmops/log_wmops_all.txt ${destDir}/wmops/graphs_wmops_flc.js Graphs_WMOPS # per mode graph -tcsh ${scriptDir}/genWebpageData_WmopPerOperatingpoint.csh ${wmopsFilenameFlc}_WMOPS.csv ${destDir}/wmops/graphs_wmops_flc_perOP.js Graphs_WMOPS_perOP +tcsh ${scriptDir}/genWebpageData_WmopPerOperatingpoint.csh ${wmopsFilenameFlc}_WMOPS.csv ${destDir}/wmops/graphs_wmops_flc_perOP.js Graphs_WMOPS_perOP # get memory info for webpage @@ -81,8 +81,6 @@ tcsh ${scriptDir}/genWebpageData_Ram.csh ${destDir}/wmops/log_ram_all.txt ${dest ${scriptDir}/mergeNewsletterRom.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlc}_TROM.csv > ${wmopsFilenameFlc}_ROM.csv ${scriptDir}/parseNewsletterRom.py ${wmopsFilenameFlc}_PROM.csv ${wmopsFilenameFlc}_TROM.csv ${wmopsFilenameFlcLast}_ROM.csv ${commit_sha} ${shortDate} ${fullDate} >> ${destDir}/wmops/log_rom_all.txt -cat ${destDir}/wmops/log_rom_all.txt - # generate java script from database tcsh ${scriptDir}/genWebpageData_Rom.csh ${destDir}/wmops/log_rom_all.txt ${destDir}/wmops/graphs_rom_flc.js Graphs_ROM diff --git a/ci/complexity_measurements/mergeNewsletterRam.py b/ci/complexity_measurements/mergeNewsletterRam.py index 34b70a306c..44dbe9b848 100755 --- a/ci/complexity_measurements/mergeNewsletterRam.py +++ b/ci/complexity_measurements/mergeNewsletterRam.py @@ -69,7 +69,7 @@ print("conf;HEAP enc;HEAP dec;HEAP total;STACK enc;STACK dec;STACK max;total") for key in ram_table: ram = ram_table[key] - total = int(ram[1]) + int(ram[2]) + int(ram[5]) + total = int(ram[0]) + int(ram[1]) + int(ram[5]) print( key, ";", diff --git a/ci/complexity_measurements/mergeNewsletterRom.py b/ci/complexity_measurements/mergeNewsletterRom.py index 1dba474082..57b3ec1bd4 100755 --- a/ci/complexity_measurements/mergeNewsletterRom.py +++ b/ci/complexity_measurements/mergeNewsletterRom.py @@ -63,7 +63,7 @@ with open(newsletterFilenameTROM, "r") as csvfile: rom_table[key] += lst # now we have the following format -# PROM enc, PROM dec, PROM total, TROM enc, TROM dec, TROM total +# PROM enc, PROM dec, PROM com, PROM rend, PROM total, TROM enc, TROM dec, TROM com, TROM rend, TROM total print("conf;PROM enc;PROM dec;PROM com;PROM rend;PROM total;TROM enc;TROM dec;TROM com;TROM rend;TROM total;total") diff --git a/ci/complexity_measurements/parseNewsletterRam.py b/ci/complexity_measurements/parseNewsletterRam.py index ee0a9c3f75..762ef5dca5 100755 --- a/ci/complexity_measurements/parseNewsletterRam.py +++ b/ci/complexity_measurements/parseNewsletterRam.py @@ -81,7 +81,7 @@ with open(newsletterFilenameSTACK, "r") as csvfile: ram_table[key] += lst # now we have the following format -# HEAP enc, HEAP dec, HEAP total, STACK enc, STACK dec, STACK max(enc, dec) +# HEAP enc, HEAP dec, HEAP total, STACK enc, STACK dec, STACK max(enc, dec), total for key in ram_table: ram = ram_table[key] @@ -125,11 +125,11 @@ for key in ram_table: max_total_enc[0] = re.sub(" ", "_", key) max_total_enc[1] = total_enc - if total_dec > max_heap_dec[1]: + if total_dec > max_total_dec[1]: max_total_dec[0] = re.sub(" ", "_", key) max_total_dec[1] = total_dec - if total_encdec > max_heap_encdec[1]: + if total_encdec > max_total_encdec[1]: max_total_encdec[0] = re.sub(" ", "_", key) max_total_encdec[1] = total_encdec @@ -137,20 +137,27 @@ print( revision, shortDate, fullDate, + max_total_encdec[1], + max_total_enc[0], max_total_enc[1], max_total_dec[0], max_total_dec[1], + max_stack_encdec[1], max_stack_encdec[0], + max_stack_enc[0], max_stack_enc[1], max_stack_dec[0], max_stack_dec[1], - max_heap_enc[1] + max_heap_dec[1], + + max_heap_encdec[1], + max_heap_encdec[0], max_heap_enc[0], max_heap_enc[1], max_heap_dec[0], max_heap_dec[1], + newsletterFilenameLast, ) diff --git a/ci/complexity_measurements/parseNewsletterRom.py b/ci/complexity_measurements/parseNewsletterRom.py index d7cdb3e8ea..3fd079385a 100755 --- a/ci/complexity_measurements/parseNewsletterRom.py +++ b/ci/complexity_measurements/parseNewsletterRom.py @@ -100,7 +100,7 @@ for key in rom_table: trom_rend = int(rom[8]) trom_total = int(rom[9]) - total_encdec = int(rom[10]) + total_encdec = prom_total + trom_total if prom_enc > max_prom_enc[1]: max_prom_enc[0] = re.sub(" ", "_", key) -- GitLab From 28906ecb7a89f0cdbfb6cac23199287ab5752995 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Fri, 16 Dec 2022 11:24:17 +0100 Subject: [PATCH 093/103] Changing [0], [1] order --- ci/complexity_measurements/parseNewsletterRam.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/complexity_measurements/parseNewsletterRam.py b/ci/complexity_measurements/parseNewsletterRam.py index 762ef5dca5..98b215853a 100755 --- a/ci/complexity_measurements/parseNewsletterRam.py +++ b/ci/complexity_measurements/parseNewsletterRam.py @@ -145,15 +145,15 @@ print( max_total_dec[0], max_total_dec[1], - max_stack_encdec[1], max_stack_encdec[0], + max_stack_encdec[1], max_stack_enc[0], max_stack_enc[1], max_stack_dec[0], max_stack_dec[1], - max_heap_encdec[1], max_heap_encdec[0], + max_heap_encdec[1], max_heap_enc[0], max_heap_enc[1], max_heap_dec[0], -- GitLab From 05e3612c264ac64ef611a55bea50761118f921e9 Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 16 Dec 2022 11:46:59 +0100 Subject: [PATCH 094/103] revert part of previous commit to maybe fix ci --- ci/complexity_measurements/parseNewsletterRam.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/complexity_measurements/parseNewsletterRam.py b/ci/complexity_measurements/parseNewsletterRam.py index 98b215853a..95a35697b0 100755 --- a/ci/complexity_measurements/parseNewsletterRam.py +++ b/ci/complexity_measurements/parseNewsletterRam.py @@ -145,8 +145,8 @@ print( max_total_dec[0], max_total_dec[1], - max_stack_encdec[0], max_stack_encdec[1], + max_stack_encdec[0], max_stack_enc[0], max_stack_enc[1], max_stack_dec[0], -- GitLab From 5f210405a3c3ef5893af7e99b86c4d9153354a8b Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Mon, 19 Dec 2022 18:05:59 +0100 Subject: [PATCH 095/103] Fix correct generation of ROM graphs --- .../genWebpageData_Rom.csh | 112 +++++++++++------- .../parseNewsletterRam.py | 43 ++++--- .../parseNewsletterRom.py | 51 ++++---- 3 files changed, 118 insertions(+), 88 deletions(-) diff --git a/ci/complexity_measurements/genWebpageData_Rom.csh b/ci/complexity_measurements/genWebpageData_Rom.csh index fb4d24528b..af46ede417 100755 --- a/ci/complexity_measurements/genWebpageData_Rom.csh +++ b/ci/complexity_measurements/genWebpageData_Rom.csh @@ -45,7 +45,7 @@ set tmpFile = /tmp/${tmpBase}_$$ rm -f ${tmpFile} cat ${srcFile} | tail -n ${maxValues} > ${tmpFile} set nLines = `cat ${tmpFile} | wc -l` -set maxNumWordsLine = 19 +set maxNumWordsLine = 21 rm -f $file touch $file @@ -71,27 +71,59 @@ foreach line ( "`cat ${tmpFile}`" ) continue endif + + # 1 revision, + # 2 shortDate, + # 3 fullDate, + + # 4 max_total_encdec[1], + + # 5 max_prom_enc[0], + # 6 max_prom_enc[1], + # 7 max_prom_dec[0], + # 8 max_prom_dec[1], + # 9 max_prom_com[0], + # 10 max_prom_com[1], + # 11 max_prom_rend[0], + # 12 max_prom_rend[1], + + # 13 max_trom_enc[0], + # 14 max_trom_enc[1], + # 15 max_trom_dec[0], + # 16 max_trom_dec[1], + # 17 max_trom_com[0], + # 18 max_trom_com[1], + # 19 max_trom_rend[0], + # 20 max_trom_rend[1], + + # 21 newsletterFilenameLast, + + set revision = $tmp[1] set shortDate = `echo $tmp[2] | sed -e "s/_/\ /g"` set fullDate = `echo $tmp[3] | sed -e "s/_/\ /g"` - set TotalRomEnc = $tmp[5] - set TotalRomDec = $tmp[7] - set PromEnc = $tmp[10] - set PromDec = $tmp[12] - set TromEnc = $tmp[15] - set TromDec = $tmp[17] - set logFile = $tmp[19] + set PromEnc = $tmp[5] + set PromDec = $tmp[7] + set PromCom = $tmp[9] + set PromRend = $tmp[11] + set TromEnc = $tmp[13] + set TromDec = $tmp[15] + set TromCom = $tmp[17] + set TromRend = $tmp[19] + set logFile = $tmp[21] echo ' {' >> $file echo ' fullDate: "'${fullDate}'",' >> $file echo ' shortDate: "'${shortDate}'",' >> $file echo ' revision: "'${revision}'",' >> $file - echo ' TotalRomEnc: "'${TotalRomEnc}'",' >> $file - echo ' TotalRomDec: "'${TotalRomDec}'",' >> $file echo ' PromEnc: "'${PromEnc}'",' >> $file echo ' PromDec: "'${PromDec}'",' >> $file + echo ' PromCom: "'${PromCom}'",' >> $file + echo ' PromRend: "'${PromRend}'",' >> $file echo ' TromEnc: "'${TromEnc}'",' >> $file echo ' TromDec: "'${TromDec}'",' >> $file + echo ' TromCom: "'${TromCom}'",' >> $file + echo ' TromRend: "'${TromRend}'",' >> $file echo ' logFile: "'${logFile}'"' >> $file echo ' }'${separator} >> $file @@ -180,7 +212,7 @@ echo ' ]' >> $file echo ' },' >> $file # TotalRomCodecScore -# TotalRomEncScore +# maxPROMEncScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -191,7 +223,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#FF8000",' >> $file -echo ' id: "TotalRomEncScore",' >> $file +echo ' id: "maxPROMEncScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -217,9 +249,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# TotalRomEncScore +# maxPROMEncScore -# TotalRomDecScore +# maxPROMDecScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -230,7 +262,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#FFFF00",' >> $file -echo ' id: "TotalRomDecScore",' >> $file +echo ' id: "maxPROMDecScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -256,9 +288,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# TotalRomDecScore +# maxPROMEncScore -# PROMCodecScore +# maxPROMComScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -269,7 +301,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#004000",' >> $file -echo ' id: "PROMCodecScore",' >> $file +echo ' id: "maxPROMComScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -286,7 +318,7 @@ foreach line ( "`cat ${tmpFile}`" ) continue endif - set score = $tmp[9] + set score = $tmp[10] echo ' ['"${i}, ${score}"']'${separator} >> $file @ i++ @@ -295,10 +327,10 @@ end echo ' ]' >> $file echo ' },' >> $file -# PROMCodecScore +# maxPROMComScore -# PROMEncScore +# maxPROMRendScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -309,7 +341,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#008000",' >> $file -echo ' id: "PROMEncScore",' >> $file +echo ' id: "maxPROMRendScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -326,7 +358,7 @@ foreach line ( "`cat ${tmpFile}`" ) continue endif - set score = $tmp[11] + set score = $tmp[12] echo ' ['"${i}, ${score}"']'${separator} >> $file @ i++ @@ -335,9 +367,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# PROMEncScore +# maxPROMRendScore -# PROMDecScore +# maxTROMEncScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -348,7 +380,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#00FF00",' >> $file -echo ' id: "PROMDecScore",' >> $file +echo ' id: "maxTROMEncScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -365,7 +397,7 @@ foreach line ( "`cat ${tmpFile}`" ) continue endif - set score = $tmp[13] + set score = $tmp[14] echo ' ['"${i}, ${score}"']'${separator} >> $file @ i++ @@ -374,9 +406,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# PROMDecScore +# maxTROMEncScore -# TROMCodecScore +# maxTROMDecScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -387,7 +419,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#800080",' >> $file -echo ' id: "TROMCodecScore",' >> $file +echo ' id: "maxTROMDecScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -404,7 +436,7 @@ foreach line ( "`cat ${tmpFile}`" ) continue endif - set score = $tmp[14] + set score = $tmp[16] echo ' ['"${i}, ${score}"']'${separator} >> $file @ i++ @@ -413,9 +445,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# TROMCodecScore +# maxTROMDecScore -# TROMEncScore +# maxTROMComScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -426,7 +458,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#0000FF",' >> $file -echo ' id: "TROMEncScore",' >> $file +echo ' id: "maxTROMComScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -443,7 +475,7 @@ foreach line ( "`cat ${tmpFile}`" ) continue endif - set score = $tmp[16] + set score = $tmp[18] echo ' ['"${i}, ${score}"']'${separator} >> $file @ i++ @@ -452,9 +484,9 @@ end echo ' ]' >> $file echo ' },' >> $file -# TROMEncScore +# maxTROMComScore -# TROMDecScore +# maxTROMRendScore echo ' {' >> $file echo ' lines: { show: true },' >> $file echo ' points: { show: true, fillColor: "#ffffff" },' >> $file @@ -465,7 +497,7 @@ echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file echo ' color: "#0080C0",' >> $file -echo ' id: "TROMDecScore",' >> $file +echo ' id: "maxTROMRendScore",' >> $file echo ' data: [' >> $file @ i = 0 @@ -482,7 +514,7 @@ foreach line ( "`cat ${tmpFile}`" ) continue endif - set score = $tmp[18] + set score = $tmp[20] echo ' ['"${i}, ${score}"']'${separator} >> $file @ i++ @@ -491,7 +523,7 @@ end echo ' ]' >> $file echo ' }' >> $file -# TROMDecScore +# maxTROMRendScore echo ' ]' >> $file # end displays diff --git a/ci/complexity_measurements/parseNewsletterRam.py b/ci/complexity_measurements/parseNewsletterRam.py index 95a35697b0..ccf338ea3c 100755 --- a/ci/complexity_measurements/parseNewsletterRam.py +++ b/ci/complexity_measurements/parseNewsletterRam.py @@ -133,31 +133,30 @@ for key in ram_table: max_total_encdec[0] = re.sub(" ", "_", key) max_total_encdec[1] = total_encdec + print( - revision, - shortDate, - fullDate, + revision, # string revision $tmp[1] + shortDate, # string shortDate $tmp[2] + fullDate, # string fullDate $tmp[3] - max_total_encdec[1], + max_total_encdec[1], # value maxTotalRamCodecScore $tmp[4] - max_total_enc[0], - max_total_enc[1], - max_total_dec[0], - max_total_dec[1], + max_total_enc[0], # string maxTotalRamEnc $tmp[5] + max_total_enc[1], # value maxTotalRamEnc $tmp[6] + max_total_dec[0], # string maxTotalRamDec $tmp[7] + max_total_dec[1], # value maxTotalRamDecScore $tmp[8] + + max_stack_encdec[1], # value maxStackCodecScore $tmp[9] + max_stack_enc[0], # string maxStackEnc $tmp[10] + max_stack_enc[1], # value maxStackEncScore $tmp[11] + max_stack_dec[0], # string maxStackDec $tmp[12] + max_stack_dec[1], # value maxStackDecScore $tmp[13] - max_stack_encdec[1], - max_stack_encdec[0], - max_stack_enc[0], - max_stack_enc[1], - max_stack_dec[0], - max_stack_dec[1], + max_heap_encdec[1], # value maxHeapCodecScore $tmp[14] + max_heap_enc[0], # string maxHeapEnc $tmp[15] + max_heap_enc[1], # value maxHeapEncScore $tmp[16] + max_heap_dec[0], # string maxHeapDec $tmp[17] + max_heap_dec[1], # value maxHeapDecScore $tmp[19] - max_heap_encdec[0], - max_heap_encdec[1], - max_heap_enc[0], - max_heap_enc[1], - max_heap_dec[0], - max_heap_dec[1], - - newsletterFilenameLast, + newsletterFilenameLast, # string logFile $tmp[19] ) diff --git a/ci/complexity_measurements/parseNewsletterRom.py b/ci/complexity_measurements/parseNewsletterRom.py index 3fd079385a..d16de8cb1e 100755 --- a/ci/complexity_measurements/parseNewsletterRom.py +++ b/ci/complexity_measurements/parseNewsletterRom.py @@ -139,31 +139,30 @@ for key in rom_table: max_total_encdec[1] = total_encdec - print( - revision, - shortDate, - fullDate, - - max_total_encdec[1], - - max_prom_enc[0], - max_prom_enc[1], - max_prom_dec[0], - max_prom_dec[1], - max_prom_com[0], - max_prom_com[1], - max_prom_rend[0], - max_prom_rend[1], - - max_trom_enc[0], - max_trom_enc[1], - max_trom_dec[0], - max_trom_dec[1], - max_trom_com[0], - max_trom_com[1], - max_trom_rend[0], - max_trom_rend[1], - - newsletterFilenameLast, + revision, # string revision $tmp[1] + shortDate, # string shortDate $tmp[2] + fullDate, # string fullDate $tmp[3] + + max_total_encdec[1], # value maxTotalRomCodecScore $tmp[4] + + max_prom_enc[0], # string maxPROMEnc $tmp[5] + max_prom_enc[1], # value maxPROMEncScore $tmp[6] + max_prom_dec[0], # string maxPROMDec $tmp[7] + max_prom_dec[1], # value maxPROMDecScore $tmp[8] + max_prom_com[0], # string maxPROMCom $tmp[9] + max_prom_com[1], # value maxPROMComScore $tmp[10] + max_prom_rend[0], # string maxPROMRend $tmp[11] + max_prom_rend[1], # value maxPROMRendScore $tmp[12] + + max_trom_enc[0], # string maxTROMEnc $tmp[13] + max_trom_enc[1], # value maxTROMEncScore $tmp[14] + max_trom_dec[0], # string maxTROMDec $tmp[15] + max_trom_dec[1], # value maxTROMDecScore $tmp[16] + max_trom_com[0], # string maxTROMCom $tmp[17] + max_trom_com[1], # value maxTROMComScore $tmp[18] + max_trom_rend[0], # string maxTROMRend $tmp[19] + max_trom_rend[1], # value maxTROMRendScore $tmp[20] + + newsletterFilenameLast, # string logFile $tmp[21] ) -- GitLab From 2d690529a814d53826bc438eebada2806f1e5458 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 20 Dec 2022 08:35:03 +0100 Subject: [PATCH 096/103] correction of #include wmc_auto.h --- lib_dec/ivas_mcmasa_dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_mcmasa_dec.c b/lib_dec/ivas_mcmasa_dec.c index 83e226f0a0..87ab621ae8 100644 --- a/lib_dec/ivas_mcmasa_dec.c +++ b/lib_dec/ivas_mcmasa_dec.c @@ -38,7 +38,7 @@ the United Nations Convention on Contracts on the International Sales of Goods. #ifdef DEBUGGING #include "debug.h" #endif -#include "wmops.h" +#include "wmc_auto.h" #ifdef MC_BITRATE_SWITCHING -- GitLab From 608c4637e1e105ab798afab241c7885979d232cc Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 20 Dec 2022 08:37:19 +0100 Subject: [PATCH 097/103] fix warning about unused variable --- lib_dec/ivas_qmetadata_dec.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c index 5174e009a4..544a49fe30 100644 --- a/lib_dec/ivas_qmetadata_dec.c +++ b/lib_dec/ivas_qmetadata_dec.c @@ -3132,8 +3132,6 @@ int16_t read_surround_coherence( if ( hQMetaData->no_directions == 2 ) { - int16_t idx; - d += hQMetaData->twoDirBands[j]; idx = max( d - 1, 0 ); error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[idx].energy_ratio[0] * hQMetaData->twoDirBands[j]; -- GitLab From 3b30e0fb7867393e92fc526138f798d563f8d63f Mon Sep 17 00:00:00 2001 From: knj Date: Tue, 20 Dec 2022 09:16:12 +0100 Subject: [PATCH 098/103] fix legends and assignments of colours to values --- .../genWebpageData_Rom.csh | 12 ++--- .../index_complexity.html | 54 +++++++++---------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/ci/complexity_measurements/genWebpageData_Rom.csh b/ci/complexity_measurements/genWebpageData_Rom.csh index af46ede417..ba34df3169 100755 --- a/ci/complexity_measurements/genWebpageData_Rom.csh +++ b/ci/complexity_measurements/genWebpageData_Rom.csh @@ -300,7 +300,7 @@ echo ' markingsLineWidth: .75,' >> $file echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file -echo ' color: "#004000",' >> $file +echo ' color: "#800080",' >> $file echo ' id: "maxPROMComScore",' >> $file echo ' data: [' >> $file @@ -340,7 +340,7 @@ echo ' markingsLineWidth: .75,' >> $file echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file -echo ' color: "#008000",' >> $file +echo ' color: "#0000FF",' >> $file echo ' id: "maxPROMRendScore",' >> $file echo ' data: [' >> $file @@ -379,7 +379,7 @@ echo ' markingsLineWidth: .75,' >> $file echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file -echo ' color: "#00FF00",' >> $file +echo ' color: "#0080C0",' >> $file echo ' id: "maxTROMEncScore",' >> $file echo ' data: [' >> $file @@ -418,7 +418,7 @@ echo ' markingsLineWidth: .75,' >> $file echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file -echo ' color: "#800080",' >> $file +echo ' color: "#004000",' >> $file echo ' id: "maxTROMDecScore",' >> $file echo ' data: [' >> $file @@ -457,7 +457,7 @@ echo ' markingsLineWidth: .75,' >> $file echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file -echo ' color: "#0000FF",' >> $file +echo ' color: "#008000",' >> $file echo ' id: "maxTROMComScore",' >> $file echo ' data: [' >> $file @@ -496,7 +496,7 @@ echo ' markingsLineWidth: .75,' >> $file echo ' hoverable: true,' >> $file echo ' clickable: true,' >> $file echo ' shadowSize: 0,' >> $file -echo ' color: "#0080C0",' >> $file +echo ' color: "#00FF00",' >> $file echo ' id: "maxTROMRendScore",' >> $file echo ' data: [' >> $file diff --git a/ci/complexity_measurements/index_complexity.html b/ci/complexity_measurements/index_complexity.html index 33c458fa11..bac01f858e 100755 --- a/ci/complexity_measurements/index_complexity.html +++ b/ci/complexity_measurements/index_complexity.html @@ -201,25 +201,25 @@
    • Max. total RAM Codec: - Dynamic + Static RAM, 32 bit words, Encoder + Decoder
    • -
    • Max. total RAM - Encoder: Dynamic + Static RAM, 32 bit words, Encoder only
    • -
    • Max. total RAM - Decoder: Dynamic + Static RAM, 32 bit words, Decoder only
    • + 32 bit words, Encoder + Decoder +
    • Max. total RAM Encoder: + 32 bit words, Encoder only
    • +
    • Max. total RAM Decoder: + 32 bit words, Decoder only
    • -
    • Max. static RAM Codec: - Static RAM, 32 bit words, Encoder + Decoder
    • -
    • Max. static RAM - Encoder: Static RAM, 32 bit words,, Encoder only
    • -
    • Max. static RAM - Decoder: Static RAM, 32 bit words, Decoder only
    • +
    • Max. HEAP Codec: + 32 bit words, Encoder + Decoder
    • +
    • Max. HEAP Encoder + 32 bit words, Encoder only
    • +
    • Max. HEAP Decoder + 32 bit words, Decoder only
    • -
    • Max. dynamic RAM - Codec: Dynamic RAM, 32 bit words, Encoder + Decoder
    • -
    • Max. dynamic RAM - Encoder: Dynamic RAM, 32 bit words, Encoder only
    • -
    • Max. dynamic RAM - Decoder: Dynamic RAM, 32 bit words, Decoder only
    • +
    • Max. STACK Codec: + 32 bit words, max(Encoder, Decoder)
    • +
    • Max. STACK Encoder: + 32 bit words, Encoder only
    • +
    • Max. STACK Decoder: + 32 bit words, Decoder only
    @@ -260,16 +260,16 @@
    • Max. total ROM Codec: Encoder + Decoder
    • -
    • Max. total ROM Encoder: Encoder only
    • -
    • Max. total ROM Decoder: Decoder only
    • - -
    • Max. Table ROM Codec: Encoder + Decoder
    • -
    • Max. Table ROM Encoder: Encoder only
    • -
    • Max. Table ROM Decoder: Decoder only
    • - -
    • Max. PROM Codec: Encoder + Decoder
    • -
    • Max. PROM Encoder: Encoder only
    • -
    • Max. PROM Decoder: Decoder only
    • + +
    • Max. max PROM Encoder Library: lib_enc only
    • +
    • Max. max PROM Decoder Library: lib_dec only
    • +
    • Max. max PROM Common Library: lib_com only/li> +
    • Max. max PROM Ext Renderer Library: lib_ren only
    • + +
    • Max. Table ROM Encoder Library: lib_enc only
    • +
    • Max. Table ROM Decoder Library: lib_dec only
    • +
    • Max. Table ROM Common Library: lib_com only
    • +
    • Max. Table ROM Ext Renderer Library: lib_rend only
    -- GitLab From cfcf9b6ddaf025de7ebb9ae347f8051fc8f52a62 Mon Sep 17 00:00:00 2001 From: knj Date: Tue, 20 Dec 2022 10:02:24 +0100 Subject: [PATCH 099/103] adjust tooltips --- .../index_complexity.html | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/ci/complexity_measurements/index_complexity.html b/ci/complexity_measurements/index_complexity.html index bac01f858e..23a1a68aed 100755 --- a/ci/complexity_measurements/index_complexity.html +++ b/ci/complexity_measurements/index_complexity.html @@ -789,25 +789,25 @@ function RAM() { if( item.series.id == "maxTotalRamDecScore" ){ text += "Max. total RAM dec: " + graph.runs[x].maxTotalRamDec + "
    "; } - if( item.series.id == "maxDynamicRamCodecScore" ){ - text += "Max. dynamic RAM enc: " + graph.runs[x].maxDynamicRamEnc + "
    "; - text += "Max. dynamic RAM dec: " + graph.runs[x].maxDynamicRamDec + "
    "; + if( item.series.id == "maxStackCodecScore" ){ + text += "Max. Stack enc: " + graph.runs[x].maxStackEnc + "
    "; + text += "Max. Stack dec: " + graph.runs[x].maxStackDec + "
    "; } - if( item.series.id == "maxDynamicRamEncScore" ){ - text += "Max. dynamic RAM enc: " + graph.runs[x].maxDynamicRamEnc + "
    "; + if( item.series.id == "maxStackEncScore" ){ + text += "Max. Stack enc: " + graph.runs[x].maxStackEnc + "
    "; } - if( item.series.id == "maxDynamicRamDecScore" ){ - text += "Max. dynamic RAM dec: " + graph.runs[x].maxDynamicRamDec + "
    "; + if( item.series.id == "maxStackDecScore" ){ + text += "Max. Stack dec: " + graph.runs[x].maxStackDec + "
    "; } - if( item.series.id == "maxStaticRamCodecScore" ){ - text += "Max. static RAM enc: " + graph.runs[x].maxStaticRamEnc + "
    "; - text += "Max. static RAM dec: " + graph.runs[x].maxStaticRamDec + "
    "; + if( item.series.id == "maxHeapCodecScore" ){ + text += "Max. Heap enc: " + graph.runs[x].maxHeapEnc + "
    "; + text += "Max. Heap dec: " + graph.runs[x].maxHeapDec + "
    "; } - if( item.series.id == "maxStaticRamEncScore" ){ - text += "Max. static RAM enc: " + graph.runs[x].maxStaticRamEnc + "
    "; + if( item.series.id == "maxHeapEncScore" ){ + text += "Max. Heap enc: " + graph.runs[x].maxHeapEnc + "
    "; } - if( item.series.id == "maxStaticRamDecScore" ){ - text += "Max. static RAM dec: " + graph.runs[x].maxStaticRamDec + "
    "; + if( item.series.id == "maxHeapDecScore" ){ + text += "Max. Heap dec: " + graph.runs[x].maxHeapDec + "
    "; } text += "
    " @@ -940,6 +940,7 @@ function ROM() { } } +/* if( item.series.id == "TotalRomCodecScore" ){ text += "Worst case enc: " + graph.runs[x].TotalRomEnc + "
    "; text += "Worst case dec: " + graph.runs[x].TotalRomDec + "
    "; @@ -970,6 +971,7 @@ function ROM() { if( item.series.id == "TROMDecScore" ){ text += "Worst case dec: " + graph.runs[x].TromDec + "
    "; } +*/ text += "
    " text += "Revision: " + graph.runs[x].revision + "
    "; -- GitLab From a7a2fa1a9fe6d34ce1c0c443e94a344a8c1873da Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 21 Dec 2022 12:11:22 +0100 Subject: [PATCH 100/103] restore resst_stack() function, now with correct ptr_max_stack --- apps/decoder.c | 6 ++---- apps/encoder.c | 1 + apps/renderer.c | 15 ++++++++++----- lib_debug/wmc_auto.c | 7 +++++++ 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 649f02edfa..0f21415087 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -437,10 +437,6 @@ int main( } } -#ifdef WMOPS - reset_wmops(); -#endif - /*-----------------------------------------------------------------* * Decoding *-----------------------------------------------------------------*/ @@ -1118,6 +1114,7 @@ static ivas_error decodeG192( } #ifdef WMOPS + reset_stack(); reset_wmops(); #endif @@ -1629,6 +1626,7 @@ static ivas_error decodeVoIP( } #ifdef WMOPS + reset_stack(); reset_wmops(); #endif diff --git a/apps/encoder.c b/apps/encoder.c index 15be5640f2..c5fab82453 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -552,6 +552,7 @@ int main( } #ifdef WMOPS + reset_stack(); reset_wmops(); #endif diff --git a/apps/renderer.c b/apps/renderer.c index 52bb758700..6084b9f46a 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -532,6 +532,11 @@ int main( int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; +#ifdef WMOPS + reset_wmops(); + reset_mem( USE_32BITS ); +#endif + for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { masaReaders[i] = NULL; @@ -757,10 +762,10 @@ int main( inBufferSize = frameSize_smpls * totalNumInChannels; outBufferSize = frameSize_smpls * numOutChannels; - inpInt16Buffer = malloc_( inBufferSize * sizeof( int16_t ) ); - inFloatBuffer = malloc_( inBufferSize * sizeof( float ) ); - outInt16Buffer = malloc_( outBufferSize * sizeof( int16_t ) ); - outFloatBuffer = malloc_( outBufferSize * sizeof( float ) ); + inpInt16Buffer = malloc( inBufferSize * sizeof( int16_t ) ); + inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); + outInt16Buffer = malloc( outBufferSize * sizeof( int16_t ) ); + outFloatBuffer = malloc( outBufferSize * sizeof( float ) ); inBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; inBuffer.config.numChannels = (int16_t) totalNumInChannels; @@ -771,8 +776,8 @@ int main( outBuffer.data = outFloatBuffer; #ifdef WMOPS + reset_stack(); reset_wmops(); - reset_mem( USE_32BITS ); #endif if ( !args.quietModeEnabled ) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index c648cfcd0d..bca49726ce 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -770,6 +770,13 @@ int push_stack( const char *filename, const char *fctname ) /* Check, if This is the New Worst-Case RAM (stack + heap) */ current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); + + if (current_stack_size < 0 ) + { + /* prevent negative stack size */ + current_stack_size = 0; + } + if ( current_stack_size + current_heap_size > wc_ram_size ) { wc_ram_size = current_stack_size + current_heap_size; -- GitLab From b9e62687ab9d0ae5f2ab50e5440f45f7c3924098 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Wed, 21 Dec 2022 13:31:39 +0100 Subject: [PATCH 101/103] clang format --- lib_debug/wmc_auto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index bca49726ce..6c71a6d37d 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -771,7 +771,7 @@ int push_stack( const char *filename, const char *fctname ) /* Check, if This is the New Worst-Case RAM (stack + heap) */ current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); - if (current_stack_size < 0 ) + if ( current_stack_size < 0 ) { /* prevent negative stack size */ current_stack_size = 0; -- GitLab From 3fa316424365a11b706041aeb42779f15242cbd6 Mon Sep 17 00:00:00 2001 From: knj Date: Wed, 21 Dec 2022 14:11:13 +0100 Subject: [PATCH 102/103] Revert "remove delay for testing" This reverts commit 84e5151b31db5cab3deb755fbc08eb463f212781. --- .gitlab-ci.yml | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a0db0c7f76..7ba0eecec4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1017,9 +1017,8 @@ complexity-ism-in-binaural-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - # TODO: activate delay again after testing - #when: delayed - #start_in: 1 hour + when: delayed + start_in: 1 hour script: - *print-common-info - *update-ltv-repo @@ -1034,9 +1033,8 @@ complexity-sba-hoa3-in-hoa3-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - # TODO: activate delay again after testing - #when: delayed - #start_in: 2 hours 30 minutes + when: delayed + start_in: 2 hours 30 minutes script: - *print-common-info - *update-ltv-repo @@ -1051,9 +1049,8 @@ complexity-mc-in-7_1_4-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - # TODO: activate delay again after testing - #when: delayed - #start_in: 4 hours + when: delayed + start_in: 4 hours script: - *print-common-info - *update-ltv-repo @@ -1068,9 +1065,8 @@ complexity-masa-in-7_1_4-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - # TODO: activate delay again after testing - #when: delayed - #start_in: 7 hours 30 minutes + when: delayed + start_in: 7 hours 30 minutes script: - *print-common-info - *update-ltv-repo @@ -1085,9 +1081,8 @@ complexity-StereoDmxEVS-stereo-in-mono-out: - .complexity-template rules: - if: $MEASURE_COMPLEXITY_LINUX - # TODO: activate delay again after testing - #when: delayed - #start_in: 8 hours 30 minutes + when: delayed + start_in: 8 hours 30 minutes script: - *print-common-info - *update-ltv-repo -- GitLab From 2dc1a18b09a362c85992a2d57e623ff9abc4e1e6 Mon Sep 17 00:00:00 2001 From: knj Date: Wed, 21 Dec 2022 14:11:48 +0100 Subject: [PATCH 103/103] Revert "limit duration of comp measurement for testing" This reverts commit 9f56389ceae6bd9521ce8417b7dea4e974588491. --- ci/complexity_measurements/getWmops.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ci/complexity_measurements/getWmops.sh b/ci/complexity_measurements/getWmops.sh index d3115dc747..77a01e0d3a 100755 --- a/ci/complexity_measurements/getWmops.sh +++ b/ci/complexity_measurements/getWmops.sh @@ -54,8 +54,7 @@ wmopsFilenameFlcLast=wmops_newsletter_stereo__${commit_sha}_${date} wmopsFilenameFlc=${destDir}/wmops/logs/${wmopsFilenameFlcLast} # instrument and build -# TODO: remove duration limitation -./scripts/IvasBuildAndRunChecks.py -U 2 -p $config_file --checks COMPLEXITY --create_complexity_tables ${wmopsFilenameFlc} -C $ivas_format -f ${ep} --oc $output_format +./scripts/IvasBuildAndRunChecks.py -p $config_file --checks COMPLEXITY --create_complexity_tables ${wmopsFilenameFlc} -C $ivas_format -f ${ep} --oc $output_format # get the info on worst-case operating point: WMOPS number, enc-operating mode, dec-operating mode ### WMOPS -- GitLab