12c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*
22c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * Copyright (C) 2004-2010 NXP Software
32c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * Copyright (C) 2010 The Android Open Source Project
42c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent *
52c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
62c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * you may not use this file except in compliance with the License.
72c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * You may obtain a copy of the License at
82c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent *
92c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
102c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent *
112c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * Unless required by applicable law or agreed to in writing, software
122c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
132c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
142c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * See the License for the specific language governing permissions and
152c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent * limitations under the License.
162c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent */
172c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
182c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
192c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
202c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Header file for the application layer interface of Concert Sound, Bass Enhancement, */
212c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Equalizer, Power Spectrum Analyzer, Trebble Enhancement and volume management       */
222c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  bundle.                                                                             */
232c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
242c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  This files includes all definitions, types, structures and function                 */
252c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  prototypes required by the calling layer. All other types, structures and           */
262c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  functions are private.                                                              */
272c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
282c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
292c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
302c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Note: 1                                                                             */
312c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  =======                                                                             */
322c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  The algorithm can execute either with separate input and output buffers or with     */
332c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  a common buffer, i.e. the data is processed in-place.                               */
342c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
352c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
362c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
372c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Note: 2                                                                             */
382c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  =======                                                                             */
392c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Three data formats are support Stereo,Mono-In-Stereo and Mono. The data is          */
402c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  interleaved as follows:                                                             */
412c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
422c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Byte Offset         Stereo Input         Mono-In-Stereo Input       Mono Input      */
432c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  ===========         ============         ====================     ==============    */
442c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      0               Left Sample #1          Mono Sample #1        Mono Sample #1    */
452c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      2               Right Sample #1         Mono Sample #1        Mono Sample #2    */
462c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      4               Left Sample #2          Mono Sample #2        Mono Sample #3    */
472c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      6               Right Sample #2         Mono Sample #2        Mono Sample #4    */
482c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      .                      .                     .                     .            */
492c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      .                      .                     .                     .            */
502c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
512c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
522c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
532c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#ifndef __LVM_H__
542c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define __LVM_H__
552c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
562c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#ifdef __cplusplus
572c87e9c923b0362fabf8c97ff63997542394c428Eric Laurentextern "C" {
582c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#endif /* __cplusplus */
592c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
602c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
612c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
622c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
632c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Includes                                                                            */
642c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
652c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
662c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
672c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#include "LVM_Types.h"
682c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
692c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
702c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
712c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
722c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Definitions                                                                         */
732c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
742c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
752c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
762c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Memory table*/
772c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_NR_MEMORY_REGIONS                 4     /* Number of memory regions */
782c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
792c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Concert Sound effect level presets */
802c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_CS_EFFECT_NONE                    0     /* 0% effect, minimum value */
812c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_CS_EFFECT_LOW                 16384     /* 50% effect */
822c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_CS_EFFECT_MED                 24576     /* 75% effect */
832c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_CS_EFFECT_HIGH                32767     /* 100% effect, maximum value */
842c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
852c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Treble enhancement */
862c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_TE_LOW_MIPS                   32767
872c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
882c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Bass enhancement effect level presets */
892c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_BE_0DB                            0     /* 0dB boost, no effect */
902c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_BE_3DB                            3     /* +3dB boost */
912c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_BE_6DB                            6     /* +6dB boost */
922c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_BE_9DB                            9     /* +9dB boost */
932c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_BE_12DB                          12     /* +12dB boost */
942c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_BE_15DB                          15     /* +15dB boost */
952c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
962c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* N-Band Equalizer */
972c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_EQ_NBANDS                         5    /* Number of bands for equalizer */
982c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
992c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Headroom management */
1002c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#define LVM_HEADROOM_MAX_NBANDS               5
1012c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1022c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
1032c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
1042c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Types                                                                               */
1052c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
1062c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
1072c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1082c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Instance handle */
1092c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef void *LVM_Handle_t;
1102c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1112c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1122c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Status return values */
1132c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1142c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1152c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_SUCCESS            = 0,                     /* Successful return from a routine */
1162c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_ALIGNMENTERROR     = 1,                     /* Memory alignment error */
1172c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_NULLADDRESS        = 2,                     /* NULL allocation address */
1182c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_OUTOFRANGE         = 3,                     /* Out of range control parameter */
1192c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_INVALIDNUMSAMPLES  = 4,                     /* Invalid number of samples */
1202c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_WRONGAUDIOTIME     = 5,                     /* Wrong time value for audio time*/
1212c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_ALGORITHMDISABLED  = 6,                     /* Algorithm is disabled*/
1222c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_ALGORITHMPSA       = 7,                     /* Algorithm PSA returns an error */
1232c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_RETURNSTATUS_DUMMY = LVM_MAXENUM
1242c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_ReturnStatus_en;
1252c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1262c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1272c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Buffer Management mode */
1282c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1292c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1302c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_MANAGED_BUFFERS   = 0,
1312c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UNMANAGED_BUFFERS = 1,
1322c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BUFFERS_DUMMY     = LVM_MAXENUM
1332c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_BufferMode_en;
1342c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1352c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Output device type */
1362c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1372c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1382c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_HEADPHONES             = 0,
1392c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_EX_HEADPHONES          = 1,
1402c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_SPEAKERTYPE_MAX        = LVM_MAXENUM
1412c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_OutputDeviceType_en;
1422c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1432c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Virtualizer mode selection*/
1442c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1452c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1462c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_CONCERTSOUND       = 0,
1472c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_VIRTUALIZERTYPE_DUMMY   = LVM_MAXENUM
1482c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_VirtualizerType_en;
1492c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1502c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* N-Band Equaliser operating mode */
1512c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1522c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1532c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_EQNB_OFF   = 0,
1542c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_EQNB_ON    = 1,
1552c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_EQNB_DUMMY = LVM_MAXENUM
1562c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_EQNB_Mode_en;
1572c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1582c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Bass Enhancement operating mode */
1592c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1602c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1612c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_OFF   = 0,
1622c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_ON    = 1,
1632c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_DUMMY = LVM_MAXENUM
1642c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_BE_Mode_en;
1652c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1662c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Bass Enhancement centre frequency selection control */
1672c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1682c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1692c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_CENTRE_55Hz  = 0,
1702c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_CENTRE_66Hz  = 1,
1712c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_CENTRE_78Hz  = 2,
1722c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_CENTRE_90Hz  = 3,
1732c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_CENTRE_DUMMY = LVM_MAXENUM
1742c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_BE_CentreFreq_en;
1752c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1762c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Bass Enhancement HPF selection control */
1772c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1782c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1792c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_HPF_OFF   = 0,
1802c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_HPF_ON    = 1,
1812c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_HPF_DUMMY = LVM_MAXENUM
1822c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_BE_FilterSelect_en;
1832c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1842c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Volume Control operating mode */
1852c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1862c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1872c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_VC_OFF   = 0,
1882c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_VC_ON    = 1,
1892c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_VC_DUMMY = LVM_MAXENUM
1902c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_VC_Mode_en;
1912c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
1922c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Treble Enhancement operating mode */
1932c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
1942c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
1952c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_TE_OFF   = 0,
1962c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_TE_ON    = 1,
1972c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_TE_DUMMY = LVM_MAXENUM
1982c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_TE_Mode_en;
1992c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2002c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Headroom management operating mode */
2012c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
2022c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
2032c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_HEADROOM_OFF   = 0,
2042c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_HEADROOM_ON    = 1,
2052c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_Headroom_DUMMY = LVM_MAXENUM
2062c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_Headroom_Mode_en;
2072c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2082c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
2092c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
2102c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_SPEED_SLOW,                                  /* Peak decaying at slow speed */
2112c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_SPEED_MEDIUM,                                /* Peak decaying at medium speed */
2122c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_SPEED_FAST,                                  /* Peak decaying at fast speed */
2132c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_SPEED_DUMMY = LVM_MAXENUM
2142c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_PSA_DecaySpeed_en;
2152c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2162c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef enum
2172c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
2182c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_OFF   = 0,
2192c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_ON    = 1,
2202c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_DUMMY = LVM_MAXENUM
2212c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_PSA_Mode_en;
2222c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2232c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Version information */
2242c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef struct
2252c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
2262c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_CHAR                    *pVersionNumber;        /* Pointer to the version number in the format X.YY.ZZ */
2272c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_CHAR                    *pPlatform;             /* Pointer to the library platform type */
2282c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_VersionInfo_st;
2292c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2302c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2312c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
2322c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
2332c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Structures                                                                          */
2342c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
2352c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
2362c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2372c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Memory table containing the region definitions */
2382c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef struct
2392c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
2402c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_MemoryRegion_st         Region[LVM_NR_MEMORY_REGIONS];  /* One definition for each region */
2412c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_MemTab_t;
2422c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2432c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* N-Band equaliser band definition */
2442c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef struct
2452c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
2462c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_INT16                   Gain;                   /* Band gain in dB */
2472c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  Frequency;              /* Band centre frequency in Hz */
2482c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  QFactor;                /* Band quality factor (x100) */
2492c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_EQNB_BandDef_t;
2502c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2512c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2522c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Headroom band definition */
2532c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef struct
2542c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
2552c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  Limit_Low;              /* Low frequency limit of the band in Hertz */
2562c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  Limit_High;             /* High frequency limit of the band in Hertz */
2572c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_INT16                   Headroom_Offset;        /* Headroom = biggest band gain - Headroom_Offset */
2582c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_HeadroomBandDef_t;
2592c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2602c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2612c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Control Parameter structure */
2622c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef struct
2632c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
2642c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* General parameters */
2652c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_Mode_en                 OperatingMode;          /* Bundle operating mode On/Bypass */
2662c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_Fs_en                   SampleRate;             /* Sample rate */
2672c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_Format_en               SourceFormat;           /* Input data format */
2682c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_OutputDeviceType_en     SpeakerType;            /* Output device type */
2692c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2702c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* Concert Sound Virtualizer parameters*/
2712c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_Mode_en                 VirtualizerOperatingMode; /* Virtualizer operating mode On/Off */
2722c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_VirtualizerType_en      VirtualizerType;          /* Virtualizer type: ConcertSound */
2732c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  VirtualizerReverbLevel;   /* Virtualizer reverb level in % */
2742c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_INT16                   CS_EffectLevel;           /* Concert Sound effect level */
2752c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2762c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* N-Band Equaliser parameters */
2772c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_EQNB_Mode_en            EQNB_OperatingMode;     /* N-Band Equaliser operating mode */
2782c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  EQNB_NBands;            /* Number of bands */
2792c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_EQNB_BandDef_t          *pEQNB_BandDefinition;  /* Pointer to equaliser definitions */
2802c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2812c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* Bass Enhancement parameters */
2822c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_Mode_en              BE_OperatingMode;       /* Bass Enhancement operating mode */
2832c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_INT16                   BE_EffectLevel;         /* Bass Enhancement effect level */
2842c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_CentreFreq_en        BE_CentreFreq;          /* Bass Enhancement centre frequency */
2852c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BE_FilterSelect_en      BE_HPF;                 /* Bass Enhancement high pass filter selector */
2862c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2872c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* Volume Control parameters */
2882c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_INT16                   VC_EffectLevel;         /* Volume Control setting in dBs */
2892c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_INT16                   VC_Balance;             /* Left Right Balance control in dB (-96 to 96 dB), -ve values reduce
2902c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                                           Right channel while +ve value reduces Left channel*/
2912c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2922c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* Treble Enhancement parameters */
2932c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_TE_Mode_en              TE_OperatingMode;       /* Treble Enhancement On/Off */
2942c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_INT16                   TE_EffectLevel;         /* Treble Enhancement gain dBs */
2952c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
2962c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* Spectrum Analyzer parameters Control */
2972c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_Mode_en             PSA_Enable;
2982c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_DecaySpeed_en       PSA_PeakDecayRate;      /* Peak value decay rate*/
2992c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3002c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_ControlParams_t;
3012c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3022c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3032c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Instance Parameter structure */
3042c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef struct
3052c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
3062c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* General */
3072c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_BufferMode_en           BufferMode;             /* Buffer management mode */
3082c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  MaxBlockSize;           /* Maximum processing block size */
3092c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3102c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* N-Band Equaliser */
3112c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  EQNB_NumBands;          /* Maximum number of equaliser bands */
3122c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3132c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    /* PSA */
3142c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_PSA_Mode_en             PSA_Included;            /* Controls the instance memory allocation for PSA: ON/OFF */
3152c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_InstParams_t;
3162c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3172c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* Headroom management parameter structure */
3182c87e9c923b0362fabf8c97ff63997542394c428Eric Laurenttypedef struct
3192c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent{
3202c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_Headroom_Mode_en        Headroom_OperatingMode; /* Headroom Control On/Off */
3212c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_HeadroomBandDef_t       *pHeadroomDefinition;   /* Pointer to headroom bands definition */
3222c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent    LVM_UINT16                  NHeadroomBands;         /* Number of headroom bands */
3232c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3242c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent} LVM_HeadroomParams_t;
3252c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3262c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
3272c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3282c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Function Prototypes                                                                 */
3292c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3302c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
3312c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3322c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3332c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
3342c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3352c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_GetVersionInfo                                          */
3362c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3372c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
3382c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  This function is used to retrieve information about the library's version.          */
3392c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3402c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
3412c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pVersion                Pointer to an empty version info structure                  */
3422c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3432c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
3442c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Succeeded                                                   */
3452c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         when pVersion is NULL                                       */
3462c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3472c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
3482c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1.  This function may be interrupted by the LVM_Process function                    */
3492c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3502c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
3512c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_GetVersionInfo(LVM_VersionInfo_st  *pVersion);
3522c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3532c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3542c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
3552c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3562c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_GetMemoryTable                                          */
3572c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3582c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
3592c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  This function is used for memory allocation and free. It can be called in           */
3602c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  two ways:                                                                           */
3612c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3622c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      hInstance = NULL                Returns the memory requirements                 */
3632c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      hInstance = Instance handle     Returns the memory requirements and             */
3642c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                      allocated base addresses for the instance       */
3652c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3662c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  When this function is called for memory allocation (hInstance=NULL) the memory      */
3672c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  base address pointers are NULL on return.                                           */
3682c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3692c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  When the function is called for free (hInstance = Instance Handle) the memory       */
3702c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  table returns the allocated memory and base addresses used during initialisation.   */
3712c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3722c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
3732c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance               Instance Handle                                             */
3742c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pMemoryTable            Pointer to an empty memory definition table                 */
3752c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pInstParams             Pointer to the instance parameters                          */
3762c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3772c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
3782c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Succeeded                                                   */
3792c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         When one of pMemoryTable or pInstParams is NULL             */
3802c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_OUTOFRANGE          When any of the Instance parameters are out of range        */
3812c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3822c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
3832c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1.  This function may be interrupted by the LVM_Process function                    */
3842c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3852c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
3862c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_GetMemoryTable(LVM_Handle_t         hInstance,
3872c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                       LVM_MemTab_t         *pMemoryTable,
3882c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                       LVM_InstParams_t     *pInstParams);
3892c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3902c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
3912c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
3922c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3932c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_GetInstanceHandle                                       */
3942c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3952c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
3962c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  This function is used to create a bundle instance. It returns the created instance  */
3972c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  handle through phInstance. All parameters are set to their default, inactive state. */
3982c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
3992c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
4002c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  phInstance              pointer to the instance handle                              */
4012c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pMemoryTable            Pointer to the memory definition table                      */
4022c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pInstParams             Pointer to the instance parameters                          */
4032c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4042c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
4052c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Initialisation succeeded                                    */
4062c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         One or more memory has a NULL pointer                       */
4072c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_OUTOFRANGE          When any of the Instance parameters are out of range        */
4082c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4092c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
4102c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1. This function must not be interrupted by the LVM_Process function                */
4112c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4122c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
4132c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_GetInstanceHandle(LVM_Handle_t        *phInstance,
4142c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                          LVM_MemTab_t        *pMemoryTable,
4152c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                          LVM_InstParams_t    *pInstParams);
4162c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
4172c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
4182c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
4192c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4202c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_ClearAudioBuffers                                       */
4212c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4222c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
4232c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  This function is used to clear the internal audio buffers of the bundle.            */
4242c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4252c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
4262c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance               Instance handle                                             */
4272c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4282c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
4292c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Initialisation succeeded                                    */
4302c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         Instance memory has a NULL pointer                          */
4312c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4322c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
4332c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1. This function must not be interrupted by the LVM_Process function                */
4342c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4352c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
4362c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_ClearAudioBuffers(LVM_Handle_t  hInstance);
4372c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
4382c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
4392c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
4402c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4412c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                 LVM_GetControlParameters                                   */
4422c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4432c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
4442c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Request the LifeVibes module parameters. The current parameter set is returned      */
4452c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  via the parameter pointer.                                                          */
4462c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4472c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
4482c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance                Instance handle                                            */
4492c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pParams                  Pointer to an empty parameter structure                    */
4502c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4512c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
4522c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Succeeded                                                   */
4532c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         when any of hInstance or pParams is NULL                    */
4542c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4552c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
4562c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1.  This function may be interrupted by the LVM_Process function                    */
4572c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4582c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
4592c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_GetControlParameters(LVM_Handle_t           hInstance,
4602c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                             LVM_ControlParams_t    *pParams);
4612c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
4622c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
4632c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
4642c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4652c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_SetControlParameters                                    */
4662c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4672c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
4682c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Sets or changes the LifeVibes module parameters.                                    */
4692c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4702c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
4712c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance               Instance handle                                             */
4722c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pParams                 Pointer to a parameter structure                            */
4732c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4742c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
4752c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Succeeded                                                   */
4762c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         When hInstance, pParams or any control pointers are NULL    */
4772c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_OUTOFRANGE          When any of the control parameters are out of range         */
4782c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4792c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
4802c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1.  This function may be interrupted by the LVM_Process function                    */
4812c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4822c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
4832c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_SetControlParameters(LVM_Handle_t           hInstance,
4842c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                             LVM_ControlParams_t    *pParams);
4852c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
4862c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
4872c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
4882c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4892c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_Process                                                 */
4902c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4912c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
4922c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  Process function for the LifeVibes module.                                          */
4932c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
4942c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
4952c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance               Instance handle                                             */
4962c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pInData                 Pointer to the input data                                   */
4972c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pOutData                Pointer to the output data                                  */
4982c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  NumSamples              Number of samples in the input buffer                       */
4992c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  AudioTime               Audio Time of the current input data in milli-seconds       */
5002c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5012c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
5022c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS            Succeeded                                                    */
5032c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_INVALIDNUMSAMPLES  When the NumSamples is not a valied multiple in unmanaged    */
5042c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                         buffer mode                                                  */
5052c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_ALIGNMENTERROR     When either the input our output buffers are not 32-bit      */
5062c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                         aligned in unmanaged mode                                    */
5072c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS        When one of hInstance, pInData or pOutData is NULL           */
5082c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5092c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
5102c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1. The input and output buffers must be 32-bit aligned                              */
5112c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  2. Number of samples is defined as follows:                                         */
5122c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      MONO                the number of samples in the block                          */
5132c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      MONOINSTEREO        the number of sample pairs in the block                     */
5142c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*      STEREO              the number of sample pairs in the block                     */
5152c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5162c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
5172c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_Process(LVM_Handle_t                hInstance,
5182c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                const LVM_INT16             *pInData,
5192c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                LVM_INT16                   *pOutData,
5202c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                LVM_UINT16                  NumSamples,
5212c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                LVM_UINT32                  AudioTime);
5222c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
5232c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
5242c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
5252c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5262c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_SetHeadroomParams                                       */
5272c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5282c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
5292c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  This function is used to set the automatic headroom management parameters.          */
5302c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5312c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
5322c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance               Instance Handle                                             */
5332c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pHeadroomParams         Pointer to headroom parameter structure                     */
5342c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5352c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
5362c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         When hInstance or pHeadroomParams is NULL                   */
5372c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Succeeded                                                   */
5382c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5392c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
5402c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1.  This function may be interrupted by the LVM_Process function                    */
5412c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5422c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
5432c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_SetHeadroomParams(  LVM_Handle_t            hInstance,
5442c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                            LVM_HeadroomParams_t    *pHeadroomParams);
5452c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
5462c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
5472c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
5482c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5492c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_GetHeadroomParams                                       */
5502c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5512c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
5522c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  This function is used to get the automatic headroom management parameters.          */
5532c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5542c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
5552c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance               Instance Handle                                             */
5562c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pHeadroomParams         Pointer to headroom parameter structure (output)            */
5572c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5582c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
5592c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Succeeded                                                   */
5602c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         When hInstance or pHeadroomParams are NULL                  */
5612c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5622c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
5632c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1.  This function may be interrupted by the LVM_Process function                    */
5642c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5652c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
5662c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_GetHeadroomParams(  LVM_Handle_t            hInstance,
5672c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                            LVM_HeadroomParams_t    *pHeadroomParams);
5682c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
5692c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
5702c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
5712c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5722c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_GetSpectrum                                             */
5732c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5742c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
5752c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* This function is used to retrieve Spectral information at a given Audio time         */
5762c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* for display usage                                                                    */
5772c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5782c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
5792c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance               Instance Handle                                             */
5802c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pCurrentPeaks           Pointer to location where currents peaks are to be saved    */
5812c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pPastPeaks              Pointer to location where past peaks are to be saved        */
5822c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pCentreFreqs            Pointer to location where centre frequency of each band is  */
5832c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                          to be saved                                                 */
5842c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  AudioTime               Audio time at which the spectral information is needed      */
5852c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5862c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
5872c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Succeeded                                                   */
5882c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         If any of input addresses are NULL                          */
5892c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_WRONGAUDIOTIME      Failure due to audio time error                             */
5902c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5912c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
5922c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1. This function may be interrupted by the LVM_Process function                     */
5932c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
5942c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
5952c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_GetSpectrum( LVM_Handle_t            hInstance,
5962c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                     LVM_UINT8               *pCurrentPeaks,
5972c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                     LVM_UINT8               *pPastPeaks,
5982c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                     LVM_INT32               AudioTime);
5992c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
6002c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
6012c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
6022c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* FUNCTION:                LVM_SetVolumeNoSmoothing                                    */
6032c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
6042c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* DESCRIPTION:                                                                         */
6052c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* This function is used to set output volume without any smoothing                     */
6062c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
6072c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* PARAMETERS:                                                                          */
6082c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  hInstance               Instance Handle                                             */
6092c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  pParams                 Control Parameters, only volume value is used here          */
6102c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
6112c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* RETURNS:                                                                             */
6122c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_SUCCESS             Succeeded                                                   */
6132c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_NULLADDRESS         If any of input addresses are NULL                          */
6142c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  LVM_OUTOFRANGE          When any of the control parameters are out of range         */
6152c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
6162c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/* NOTES:                                                                               */
6172c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*  1. This function may be interrupted by the LVM_Process function                     */
6182c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/*                                                                                      */
6192c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent/****************************************************************************************/
6202c87e9c923b0362fabf8c97ff63997542394c428Eric LaurentLVM_ReturnStatus_en LVM_SetVolumeNoSmoothing( LVM_Handle_t           hInstance,
6212c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent                                              LVM_ControlParams_t    *pParams);
6222c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
6232c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
6242c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#ifdef __cplusplus
6252c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent}
6262c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#endif /* __cplusplus */
6272c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
6282c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent#endif      /* __LVM_H__ */
6292c87e9c923b0362fabf8c97ff63997542394c428Eric Laurent
630