コード例 #1
0
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);
}
コード例 #2
0
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);
}
コード例 #3
0
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);

}