17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*     Project::                                                                        */
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*     %name:          SSRC.h % */
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    The input and output blocks of the SRC are by default blocks of 40 ms.  This means that
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    the following default block sizes are used:
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          Fs     Default Block size
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        -----        ----------
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         8000           320
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        11025           441
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        12000           480
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        16000           640
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        22050           882
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        24000           960
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        32000          1280
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        44100          1764
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        48000          1920
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    An API is provided to change the default block size into any multiple of the minimal
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    block size.
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    All the sampling rates above are supported as input and as output sampling rate
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef __SSRC_H__
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define __SSRC_H__
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi   INCLUDES
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*****************************************************************************************/
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "LVM_Types.h"
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi   DEFINITIONS
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*****************************************************************************************/
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define SSRC_INSTANCE_SIZE          548
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define SSRC_INSTANCE_ALIGNMENT     4
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define SSRC_SCRATCH_ALIGNMENT      4
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi   TYPE DEFINITIONS
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*****************************************************************************************/
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Status return values */
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_OK                     = 0,                /* Successful return from a routine */
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_INVALID_FS             = 1,                /* The input or the output sampling rate is
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                        invalid */
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_INVALID_NR_CHANNELS    = 2,                /* The number of channels is not equal to mono
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                         or stereo */
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_NULL_POINTER           = 3,                /* One of the input pointers is NULL */
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_WRONG_NR_SAMPLES       = 4,                /* Invalid number of samples */
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_ALLINGMENT_ERROR       = 5,                /* The instance memory or the scratch memory
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                        is not alligned */
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_INVALID_MODE           = 6,                /* A wrong value has been used for the mode
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                        parameter */
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_INVALID_VALUE          = 7,                /* An invalid (out of range) value has been
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                     used for one of the parameters */
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    LVXXX_RETURNSTATUS_DUMMY = LVM_MAXENUM
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} SSRC_ReturnStatus_en;
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Instance memory */
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    LVM_INT32 Storage [ SSRC_INSTANCE_SIZE/4 ];
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} SSRC_Instance_t;
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Scratch memory */
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef LVM_INT32 SSRC_Scratch_t;
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Nuber of samples mode */
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_NR_SAMPLES_DEFAULT     = 0,
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_NR_SAMPLES_MIN         = 1,
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SSRC_NR_SAMPLES_DUMMY       = LVM_MAXENUM
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} SSRC_NR_SAMPLES_MODE_en;
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Instance parameters */
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    LVM_Fs_en           SSRC_Fs_In;
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    LVM_Fs_en           SSRC_Fs_Out;
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    LVM_Format_en       SSRC_NrOfChannels;
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    LVM_INT16           NrSamplesIn;
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    LVM_INT16           NrSamplesOut;
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} SSRC_Params_t;
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi   FUNCTION PROTOTYPES
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*****************************************************************************************/
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* FUNCTION:                SSRC_GetNrSamples                                           */
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* DESCRIPTION:                                                                         */
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  This function retrieves the number of samples (or sample pairs for stereo) to be    */
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  used as input and as output of the SSRC module.                                     */
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* PARAMETERS:                                                                          */
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  Mode                    There are two modes:                                        */
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                              - SSRC_NR_SAMPELS_DEFAULT.  In this mode, the function  */
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                will return the number of samples for 40 ms blocks    */
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                              - SSRC_NR_SAMPELS_MIN will return the minimal number    */
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                of samples that is supported for this conversion      */
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                ratio.  Each integer multiple of this ratio will      */
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                be accepted by the SSRC_Init function                 */
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pSSRC_Params            pointer to the instance parameters                          */
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* RETURNS:                                                                             */
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_OK                 Succeeded                                                   */
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_FS         When the requested input or output sampling rates           */
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          are invalid.                                                */
1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_NR_CHANNELS When the channel format is not equal to LVM_MONO           */
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          or LVM_STEREO                                               */
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_NULL_POINTER       When pSSRC_Params is a NULL pointer                         */
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_MODE       When Mode is not a valid setting                            */
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* NOTES:                                                                               */
1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiSSRC_ReturnStatus_en SSRC_GetNrSamples( SSRC_NR_SAMPLES_MODE_en  Mode,
1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        SSRC_Params_t*           pSSRC_Params );
1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* FUNCTION:                SSRC_GetScratchSize                                         */
1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* DESCRIPTION:                                                                         */
1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  This function retrieves the scratch size for a given conversion ratio and           */
1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  for given buffer sizes at the input and at the output                               */
1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* PARAMETERS:                                                                          */
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pSSRC_Params            pointer to the instance parameters                          */
1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pScratchSize            pointer to the scratch size.  The SSRC_GetScratchSize       */
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          function will fill in the correct value (in bytes).         */
1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* RETURNS:                                                                             */
1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_OK                 when the function call succeeds                             */
1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_FS         When the requested input or output sampling rates           */
1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          are invalid.                                                */
1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_NR_CHANNELS When the channel format is not equal to LVM_MONO           */
1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          or LVM_STEREO                                               */
1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_NULL_POINTER       When any of the input pointers is a NULL pointer            */
1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_WRONG_NR_SAMPLES   When the number of samples on the input or on the output    */
1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          are incorrect                                               */
1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* NOTES:                                                                               */
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiSSRC_ReturnStatus_en SSRC_GetScratchSize(   SSRC_Params_t*    pSSRC_Params,
1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            LVM_INT32*        pScratchSize );
1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* FUNCTION:                SSRC_Init                                                   */
1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* DESCRIPTION:                                                                         */
1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  This function is used to initialize the SSRC module instance.                       */
1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* PARAMETERS:                                                                          */
1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pSSRC_Instance          Instance pointer                                            */
1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pSSRC_Scratch           pointer to the scratch memory                               */
1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pSSRC_Params            pointer to the instance parameters                          */
1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pInputInScratch,        pointer to a location in the scratch memory that can be     */
2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          used to store the input samples (e.g. to save memory)       */
2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pOutputInScratch        pointer to a location in the scratch memory that can be     */
2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          used to store the output samples (e.g. to save memory)      */
2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* RETURNS:                                                                             */
2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_OK                 Succeeded                                                   */
2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_FS         When the requested input or output sampling rates           */
2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          are invalid.                                                */
2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_NR_CHANNELS When the channel format is not equal to LVM_MONO           */
2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          or LVM_STEREO                                               */
2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_WRONG_NR_SAMPLES   When the number of samples on the input or the output       */
2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          are incorrect                                               */
2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_NULL_POINTER       When any of the input pointers is a NULL pointer            */
2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_ALLINGMENT_ERROR   When the instance memory or the scratch memory is not       */
2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          4 bytes alligned                                            */
2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* NOTES:                                                                               */
2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  1. The init function will clear the internal state                                  */
2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiSSRC_ReturnStatus_en SSRC_Init( SSRC_Instance_t* pSSRC_Instance,
2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                SSRC_Scratch_t*  pSSRC_Scratch,
2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                SSRC_Params_t*   pSSRC_Params,
2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                LVM_INT16**      ppInputInScratch,
2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                LVM_INT16**      ppOutputInScratch);
2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* FUNCTION:                SSRC_SetGains                                               */
2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* DESCRIPTION:                                                                         */
2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  This function sets headroom gain and the post gain of the SSRC                      */
2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* PARAMETERS:                                                                          */
2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  bHeadroomGainEnabled    parameter to enable or disable the headroom gain of the     */
2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          SSRC.  The default value is LVM_MODE_ON.  LVM_MODE_OFF      */
2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          can be used in case it can be guaranteed that the input     */
2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          level is below -6dB in all cases (the default headroom      */
2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          is -6 dB)                                                   */
2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  bOutputGainEnabled      parameter to enable or disable the output gain.  The        */
2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          default value is LVM_MODE_ON                                */
2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  OutputGain              the value of the output gain.  The output gain is a linear  */
2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          gain value. 0x7FFF is equal to +6 dB and 0x0000 corresponds */
2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          to -inf dB.  By default, a 3dB gain is applied, resulting   */
2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          in an overall gain of -3dB (-6dB headroom + 3dB output gain)*/
2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* RETURNS:                                                                             */
2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_OK                 Succeeded                                                   */
2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_NULL_POINTER       When pSSRC_Instance is a NULL pointer                       */
2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_MODE       Wrong value used for the bHeadroomGainEnabled or the        */
2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          bOutputGainEnabled parameters.                              */
2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  SSRC_INVALID_VALUE      When OutputGain is out to the range [0;32767]               */
2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* NOTES:                                                                               */
2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  1. The SSRC_SetGains function is an optional function that should only be used      */
2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*     in rare cases.  Preferably, use the default settings.                            */
2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiSSRC_ReturnStatus_en SSRC_SetGains( SSRC_Instance_t* pSSRC_Instance,
2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    LVM_Mode_en      bHeadroomGainEnabled,
2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    LVM_Mode_en      bOutputGainEnabled,
2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    LVM_INT16        OutputGain );
2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* FUNCTION:                SSRC_Process                                                */
2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* DESCRIPTION:                                                                         */
2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  Process function for the SSRC module.                                               */
2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* PARAMETERS:                                                                          */
2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pSSRC_Instance          Instance pointer                                            */
2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pSSRC_AudioIn           Pointer to the input data                                   */
2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*  pSSRC_AudioOut          Pointer to the output data                                  */
2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* RETURNS:                                                                             */
2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* SSRC_OK                  Succeeded                                                   */
2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* SSRC_NULL_POINTER        When one of pSSRC_Instance, pSSRC_AudioIn or pSSRC_AudioOut */
2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                          is NULL                                                     */
2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* NOTES:                                                                               */
2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*                                                                                      */
2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiSSRC_ReturnStatus_en SSRC_Process(  SSRC_Instance_t* pSSRC_Instance,
2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    LVM_INT16*       pSSRC_AudioIn,
2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    LVM_INT16*       pSSRC_AudioOut);
2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************************/
2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* __SSRC_H__ */
297