void* InstAlloc_AddMemberAll( INST_ALLOC *pms, LVM_UINT32 Size[], LVM_MemoryTable_st *pMemoryTable) { void *NewMemberAddress; /* Variable to temporarily store the return value */ /* coverity[returned_pointer] Ignore coverity warning that ptr is not used */ NewMemberAddress = InstAlloc_AddMember(&pms[LVM_PERSISTENT_SLOW_DATA], Size[LVM_PERSISTENT_SLOW_DATA]); pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Size = InstAlloc_GetTotal(&pms[LVM_PERSISTENT_SLOW_DATA]); pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Type = LVM_PERSISTENT_SLOW_DATA; pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress = LVM_NULL; NewMemberAddress = InstAlloc_AddMember(&pms[LVM_PERSISTENT_FAST_DATA], Size[LVM_PERSISTENT_FAST_DATA]); pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size = InstAlloc_GetTotal(&pms[LVM_PERSISTENT_FAST_DATA]); pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Type = LVM_PERSISTENT_FAST_DATA; pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress = LVM_NULL; NewMemberAddress = InstAlloc_AddMember(&pms[LVM_PERSISTENT_FAST_COEF], Size[LVM_PERSISTENT_FAST_COEF]); pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Size = InstAlloc_GetTotal(&pms[LVM_PERSISTENT_FAST_COEF]); pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Type = LVM_PERSISTENT_FAST_COEF; pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL; NewMemberAddress = InstAlloc_AddMember(&pms[LVM_TEMPORARY_FAST], Size[LVM_TEMPORARY_FAST]); pMemoryTable->Region[LVM_TEMPORARY_FAST].Size = InstAlloc_GetTotal(&pms[LVM_TEMPORARY_FAST]); pMemoryTable->Region[LVM_TEMPORARY_FAST].Type = LVM_TEMPORARY_FAST; pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress = LVM_NULL; return(NewMemberAddress); }
LVEQNB_ReturnStatus_en LVEQNB_Memory(LVEQNB_Handle_t hInstance, LVEQNB_MemTab_t *pMemoryTable, LVEQNB_Capabilities_t *pCapabilities) { INST_ALLOC AllocMem; LVEQNB_Instance_t *pInstance = (LVEQNB_Instance_t *)hInstance; if((pMemoryTable == LVM_NULL)|| (pCapabilities == LVM_NULL)) { return LVEQNB_NULLADDRESS; } /* * Fill in the memory table */ if (hInstance == LVM_NULL) { /* * Instance memory */ InstAlloc_Init(&AllocMem, LVM_NULL); InstAlloc_AddMember(&AllocMem, /* Low pass filter */ sizeof(LVEQNB_Instance_t)); pMemoryTable->Region[LVEQNB_MEMREGION_INSTANCE].Size = InstAlloc_GetTotal(&AllocMem); pMemoryTable->Region[LVEQNB_MEMREGION_INSTANCE].Alignment = LVEQNB_INSTANCE_ALIGN; pMemoryTable->Region[LVEQNB_MEMREGION_INSTANCE].Type = LVEQNB_PERSISTENT; pMemoryTable->Region[LVEQNB_MEMREGION_INSTANCE].pBaseAddress = LVM_NULL; /* * Persistant data memory */ InstAlloc_Init(&AllocMem, LVM_NULL); InstAlloc_AddMember(&AllocMem, /* Low pass filter */ sizeof(Biquad_2I_Order2_Taps_t)); InstAlloc_AddMember(&AllocMem, /* High pass filter */ sizeof(Biquad_2I_Order2_Taps_t)); InstAlloc_AddMember(&AllocMem, (pCapabilities->MaxBands * sizeof(Biquad_2I_Order2_Taps_t))); /* Equaliser Biquad Taps */ InstAlloc_AddMember(&AllocMem, (pCapabilities->MaxBands * sizeof(LVEQNB_BandDef_t))); /* Filter definitions */ InstAlloc_AddMember(&AllocMem, (pCapabilities->MaxBands * sizeof(LVEQNB_BiquadType_en))); /* Biquad types */ pMemoryTable->Region[LVEQNB_MEMREGION_PERSISTENT_DATA].Size = InstAlloc_GetTotal(&AllocMem); pMemoryTable->Region[LVEQNB_MEMREGION_PERSISTENT_DATA].Alignment = LVEQNB_DATA_ALIGN; pMemoryTable->Region[LVEQNB_MEMREGION_PERSISTENT_DATA].Type = LVEQNB_PERSISTENT_DATA; pMemoryTable->Region[LVEQNB_MEMREGION_PERSISTENT_DATA].pBaseAddress = LVM_NULL; /* * Persistant coefficient memory */ InstAlloc_Init(&AllocMem, LVM_NULL); InstAlloc_AddMember(&AllocMem, /* Low pass filter */ sizeof(Biquad_Instance_t)); InstAlloc_AddMember(&AllocMem, /* High pass filter */ sizeof(Biquad_Instance_t)); InstAlloc_AddMember(&AllocMem, pCapabilities->MaxBands * sizeof(Biquad_Instance_t)); /* Equaliser Biquad Instance */ pMemoryTable->Region[LVEQNB_MEMREGION_PERSISTENT_COEF].Size = InstAlloc_GetTotal(&AllocMem); pMemoryTable->Region[LVEQNB_MEMREGION_PERSISTENT_COEF].Alignment = LVEQNB_COEF_ALIGN; pMemoryTable->Region[LVEQNB_MEMREGION_PERSISTENT_COEF].Type = LVEQNB_PERSISTENT_COEF; pMemoryTable->Region[LVEQNB_MEMREGION_PERSISTENT_COEF].pBaseAddress = LVM_NULL; /* * Scratch memory */ InstAlloc_Init(&AllocMem, LVM_NULL); InstAlloc_AddMember(&AllocMem, /* Low pass filter */ LVEQNB_SCRATCHBUFFERS*sizeof(LVM_INT16)*pCapabilities->MaxBlockSize); pMemoryTable->Region[LVEQNB_MEMREGION_SCRATCH].Size = InstAlloc_GetTotal(&AllocMem); pMemoryTable->Region[LVEQNB_MEMREGION_SCRATCH].Alignment = LVEQNB_SCRATCH_ALIGN; pMemoryTable->Region[LVEQNB_MEMREGION_SCRATCH].Type = LVEQNB_SCRATCH; pMemoryTable->Region[LVEQNB_MEMREGION_SCRATCH].pBaseAddress = LVM_NULL; } else { /* Read back memory allocation table */ *pMemoryTable = pInstance->MemoryTable; } return(LVEQNB_SUCCESS); }
LVM_ReturnStatus_en LVM_GetMemoryTable(LVM_Handle_t hInstance, LVM_MemTab_t *pMemoryTable, LVM_InstParams_t *pInstParams) { LVM_Instance_t *pInstance = (LVM_Instance_t *)hInstance; LVM_UINT32 AlgScratchSize; LVM_UINT32 BundleScratchSize; LVM_UINT16 InternalBlockSize; INST_ALLOC AllocMem[LVM_NR_MEMORY_REGIONS]; LVM_INT16 i; /* * Check parameters */ if(pMemoryTable == LVM_NULL) { return LVM_NULLADDRESS; } /* * Return memory table if the instance has already been created */ if (hInstance != LVM_NULL) { /* Read back memory allocation table */ *pMemoryTable = pInstance->MemoryTable; return(LVM_SUCCESS); } if(pInstParams == LVM_NULL) { return LVM_NULLADDRESS; } /* * Power Spectrum Analyser */ if(pInstParams->PSA_Included > LVM_PSA_ON) { return (LVM_OUTOFRANGE); } /* * Check the instance parameters */ if( (pInstParams->BufferMode != LVM_MANAGED_BUFFERS) && (pInstParams->BufferMode != LVM_UNMANAGED_BUFFERS) ) { return (LVM_OUTOFRANGE); } /* N-Band Equalizer */ if( pInstParams->EQNB_NumBands > 32 ) { return (LVM_OUTOFRANGE); } if(pInstParams->BufferMode == LVM_MANAGED_BUFFERS) { if( (pInstParams->MaxBlockSize < LVM_MIN_MAXBLOCKSIZE ) || (pInstParams->MaxBlockSize > LVM_MANAGED_MAX_MAXBLOCKSIZE ) ) { return (LVM_OUTOFRANGE); } } else { if( (pInstParams->MaxBlockSize < LVM_MIN_MAXBLOCKSIZE ) || (pInstParams->MaxBlockSize > LVM_UNMANAGED_MAX_MAXBLOCKSIZE) ) { return (LVM_OUTOFRANGE); } } /* * Initialise the AllocMem structures */ for (i=0; i<LVM_NR_MEMORY_REGIONS; i++) { InstAlloc_Init(&AllocMem[i], LVM_NULL); } InternalBlockSize = (LVM_UINT16)((pInstParams->MaxBlockSize) & MIN_INTERNAL_BLOCKMASK); /* Force to a multiple of MIN_INTERNAL_BLOCKSIZE */ if (InternalBlockSize < MIN_INTERNAL_BLOCKSIZE) { InternalBlockSize = MIN_INTERNAL_BLOCKSIZE; } /* Maximum Internal Black Size should not be more than MAX_INTERNAL_BLOCKSIZE*/ if(InternalBlockSize > MAX_INTERNAL_BLOCKSIZE) { InternalBlockSize = MAX_INTERNAL_BLOCKSIZE; } /* * Bundle requirements */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], sizeof(LVM_Instance_t)); /* * Set the algorithm and bundle scratch requirements */ AlgScratchSize = 0; if (pInstParams->BufferMode == LVM_MANAGED_BUFFERS) { BundleScratchSize = 6 * (MIN_INTERNAL_BLOCKSIZE + InternalBlockSize) * sizeof(LVM_INT16); InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST], /* Scratch buffer */ BundleScratchSize); InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], sizeof(LVM_Buffer_t)); } /* * Treble Enhancement requirements */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], sizeof(LVM_TE_Data_t)); InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], sizeof(LVM_TE_Coefs_t)); /* * N-Band Equalizer requirements */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], /* Local storage */ (pInstParams->EQNB_NumBands * sizeof(LVM_EQNB_BandDef_t))); InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], /* User storage */ (pInstParams->EQNB_NumBands * sizeof(LVM_EQNB_BandDef_t))); /* * Concert Sound requirements */ { LVCS_MemTab_t CS_MemTab; LVCS_Capabilities_t CS_Capabilities; /* * Set the capabilities */ CS_Capabilities.MaxBlockSize = InternalBlockSize; /* * Get the memory requirements */ LVCS_Memory(LVM_NULL, &CS_MemTab, &CS_Capabilities); /* * Update the memory allocation structures */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], CS_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size); InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], CS_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size); if (CS_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size > AlgScratchSize) AlgScratchSize = CS_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size; } /* * Dynamic Bass Enhancement requirements */ { LVDBE_MemTab_t DBE_MemTab; LVDBE_Capabilities_t DBE_Capabilities; /* * Set the capabilities */ DBE_Capabilities.SampleRate = LVDBE_CAP_FS_8000 | LVDBE_CAP_FS_11025 | LVDBE_CAP_FS_12000 | LVDBE_CAP_FS_16000 | LVDBE_CAP_FS_22050 | LVDBE_CAP_FS_24000 | LVDBE_CAP_FS_32000 | LVDBE_CAP_FS_44100 | LVDBE_CAP_FS_48000; DBE_Capabilities.CentreFrequency = LVDBE_CAP_CENTRE_55Hz | LVDBE_CAP_CENTRE_55Hz | LVDBE_CAP_CENTRE_66Hz | LVDBE_CAP_CENTRE_78Hz | LVDBE_CAP_CENTRE_90Hz; DBE_Capabilities.MaxBlockSize = InternalBlockSize; /* * Get the memory requirements */ LVDBE_Memory(LVM_NULL, &DBE_MemTab, &DBE_Capabilities); /* * Update the bundle table */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], DBE_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size); InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], DBE_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size); if (DBE_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size > AlgScratchSize) AlgScratchSize = DBE_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size; } /* * N-Band equaliser requirements */ { LVEQNB_MemTab_t EQNB_MemTab; /* For N-Band Equaliser */ LVEQNB_Capabilities_t EQNB_Capabilities; /* * Set the capabilities */ EQNB_Capabilities.SampleRate = LVEQNB_CAP_FS_8000 | LVEQNB_CAP_FS_11025 | LVEQNB_CAP_FS_12000 | LVEQNB_CAP_FS_16000 | LVEQNB_CAP_FS_22050 | LVEQNB_CAP_FS_24000 | LVEQNB_CAP_FS_32000 | LVEQNB_CAP_FS_44100 | LVEQNB_CAP_FS_48000; EQNB_Capabilities.SourceFormat = LVEQNB_CAP_STEREO | LVEQNB_CAP_MONOINSTEREO; EQNB_Capabilities.MaxBlockSize = InternalBlockSize; EQNB_Capabilities.MaxBands = pInstParams->EQNB_NumBands; /* * Get the memory requirements */ LVEQNB_Memory(LVM_NULL, &EQNB_MemTab, &EQNB_Capabilities); /* * Update the bundle table */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], EQNB_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size); InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], EQNB_MemTab.Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size); if (EQNB_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size > AlgScratchSize) AlgScratchSize = EQNB_MemTab.Region[LVM_MEMREGION_TEMPORARY_FAST].Size; } /* * Headroom management memory allocation */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], (LVM_HEADROOM_MAX_NBANDS * sizeof(LVM_HeadroomBandDef_t))); InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], (LVM_HEADROOM_MAX_NBANDS * sizeof(LVM_HeadroomBandDef_t))); /* * Spectrum Analyzer memory requirements */ { pLVPSA_Handle_t hPSAInst = LVM_NULL; LVPSA_MemTab_t PSA_MemTab; LVPSA_InitParams_t PSA_InitParams; LVPSA_FilterParam_t FiltersParams[9]; LVPSA_RETURN PSA_Status; if(pInstParams->PSA_Included == LVM_PSA_ON) { PSA_InitParams.SpectralDataBufferDuration = (LVM_UINT16) 500; PSA_InitParams.MaxInputBlockSize = (LVM_UINT16) 1000; PSA_InitParams.nBands = (LVM_UINT16) 9; PSA_InitParams.pFiltersParams = &FiltersParams[0]; for(i = 0; i < PSA_InitParams.nBands; i++) { FiltersParams[i].CenterFrequency = (LVM_UINT16) 1000; FiltersParams[i].QFactor = (LVM_UINT16) 25; FiltersParams[i].PostGain = (LVM_INT16) 0; } /* * Get the memory requirements */ PSA_Status = LVPSA_Memory (hPSAInst, &PSA_MemTab, &PSA_InitParams); if (PSA_Status != LVPSA_OK) { return((LVM_ReturnStatus_en) LVM_ALGORITHMPSA); } /* * Update the bundle table */ /* Slow Data */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA], PSA_MemTab.Region[LVM_PERSISTENT_SLOW_DATA].Size); /* Fast Data */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA], PSA_MemTab.Region[LVM_PERSISTENT_FAST_DATA].Size); /* Fast Coef */ InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF], PSA_MemTab.Region[LVM_PERSISTENT_FAST_COEF].Size); /* Fast Temporary */ InstAlloc_AddMember(&AllocMem[LVM_TEMPORARY_FAST], MAX_INTERNAL_BLOCKSIZE * sizeof(LVM_INT16)); if (PSA_MemTab.Region[LVM_TEMPORARY_FAST].Size > AlgScratchSize) { AlgScratchSize = PSA_MemTab.Region[LVM_TEMPORARY_FAST].Size; } } } /* * Return the memory table */ pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_SLOW_DATA].Size = InstAlloc_GetTotal(&AllocMem[LVM_MEMREGION_PERSISTENT_SLOW_DATA]); pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_SLOW_DATA].Type = LVM_PERSISTENT_SLOW_DATA; pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_SLOW_DATA].pBaseAddress = LVM_NULL; pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size = InstAlloc_GetTotal(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_DATA]); pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Type = LVM_PERSISTENT_FAST_DATA; pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].pBaseAddress = LVM_NULL; if (pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size < 4) { pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_DATA].Size = 0; } pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size = InstAlloc_GetTotal(&AllocMem[LVM_MEMREGION_PERSISTENT_FAST_COEF]); pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Type = LVM_PERSISTENT_FAST_COEF; pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL; if (pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size < 4) { pMemoryTable->Region[LVM_MEMREGION_PERSISTENT_FAST_COEF].Size = 0; } InstAlloc_AddMember(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST], AlgScratchSize); pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].Size = InstAlloc_GetTotal(&AllocMem[LVM_MEMREGION_TEMPORARY_FAST]); pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].Type = LVM_TEMPORARY_FAST; pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].pBaseAddress = LVM_NULL; if (pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].Size < 4) { pMemoryTable->Region[LVM_MEMREGION_TEMPORARY_FAST].Size = 0; } return(LVM_SUCCESS); }