winamp/Src/external_dependencies/intel_ipp_6.1.1.035/em64t/include/ippac.h

6059 lines
289 KiB
C
Raw Permalink Normal View History

2024-09-24 12:54:57 +00:00
/*
//
// INTEL CORPORATION PROPRIETARY INFORMATION
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Intel Corporation and may not be copied
// or disclosed except in accordance with the terms of that agreement.
// Copyright (c) 2001-2009 Intel Corporation. All Rights Reserved.
//
// Intel(R) Integrated Performance Primitives
// Audio Coding (ippAC)
//
*/
#if !defined(__IPPAC_H__) || defined(_OWN_BLDPCS)
#define __IPPAC_H__
#if defined (_WIN32_WCE) && defined (_M_IX86) && defined (__stdcall)
#define _IPP_STDCALL_CDECL
#undef __stdcall
#endif
#include "ippdefs.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
// Data Structures and Macro
*/
#if !defined(_OWN_BLDPCS)
/*
// FDP
*/
struct FDPState_32f;
typedef struct FDPState_32f IppsFDPState_32f;
/*
// FIR Block
*/
struct FIRBlockState_32f;
typedef struct FIRBlockState_32f IppsFIRBlockState_32f;
/*
// MDCT
*/
struct MDCTFwdSpec_32f;
typedef struct MDCTFwdSpec_32f IppsMDCTFwdSpec_32f;
struct MDCTInvSpec_32f;
typedef struct MDCTInvSpec_32f IppsMDCTInvSpec_32f;
struct MDCTFwdSpec_16s;
typedef struct MDCTFwdSpec_16s IppsMDCTFwdSpec_16s;
/*
// Filter_SBR
*/
struct IppsFilterContext_SBR_32f;
typedef struct IppsFilterContext_SBR_32f IppsFilterSpec_SBR_C_32fc;
typedef struct IppsFilterContext_SBR_32f IppsFilterSpec_SBR_C_32f;
typedef struct IppsFilterContext_SBR_32f IppsFilterSpec_SBR_R_32f;
struct IppsFilterContext_SBR_32s;
typedef struct IppsFilterContext_SBR_32s IppsFilterSpec_SBR_C_32sc;
typedef struct IppsFilterContext_SBR_32s IppsFilterSpec_SBR_R_32s;
/*
// Filter_PQMF
*/
struct IppsFilterContext_PQMF_MP3;
typedef struct IppsFilterContext_PQMF_MP3 IppsFilterSpec_PQMF_MP3;
/*
// Filter_DTS
*/
struct IppsFilterContext_DTS_32f;
typedef struct IppsFilterContext_DTS_32f IppsFilterSpec_DTS_32f;
/*
// MP3 codec defines
*/
#define IPP_MP3_GRANULE_LEN 576 /* maximum number of frequency
decoded lines */
#define IPP_MP3_SF_BUF_LEN 40 /* scalefactor buffer length */
#define IPP_MP3_V_BUF_LEN 512 /* V data buffers length (32-bit words) */
#define IPP_MP3_ID_MPEG2 0 /* MPEG-2 frame identifier */
#define IPP_MP3_ID_MPEG1 1 /* MPEG-1 frame identifier */
/*
// Scalefactor band table length for short block
*/
#define IPP_MP3_SFB_TABLE_LONG_LEN 138
typedef const Ipp16s IppMP3ScaleFactorBandTableLong[IPP_MP3_SFB_TABLE_LONG_LEN];
/*
// Scalefactor band table length for long block
*/
#define IPP_MP3_SFB_TABLE_SHORT_LEN 84
typedef const Ipp16s IppMP3ScaleFactorBandTableShort[IPP_MP3_SFB_TABLE_SHORT_LEN];
/*
// Mixed block partition table
*/
#define IPP_MP3_MBP_TABLE_LEN 12
typedef const Ipp16s IppMP3MixedBlockPartitionTable[IPP_MP3_MBP_TABLE_LEN];
/* Example mixed block partition table
For mixed blocks only, this partition table informs
the Huffman decoder of how many SFBs to count for region0.
IppMP3MixedBlockPartitionTable Modified_Mbp_Table =
{
// MPEG-2
// 22.050 kHz
// Long block SFBs Short block SFBs
6, 2,
// MPEG-2
// 24 kHz
// Long block SFBs Short block SFBs
6, 2,
// MPEG-2
// 16 kHz
// Long block SFBs Short block SFBs
6, 2,
// MPEG-1
// 44.1 kHz
// Long block SFBs Short block SFBs
8, 0,
// MPEG-1
// 48 kHz
// Long block SFBs Short block SFBs
8, 0,
// MPEG-1
// 32 kHz
// Long block SFBs Short block SFBs
8, 0
};
*/
typedef enum {
IPPAC_DTS_NONPERFECT = 0,
IPPAC_DTS_PERFECT = 1
} IppAC_DTS_SYNTHESIS;
typedef enum {
IPP_CDBK_UNKNOWN = 0,
IPP_CDBK_STANDARD = 1
} Ipp_Cdbk_VQ_Hint;
typedef enum {
IPPAC_PS_CONF0 = 0,
IPPAC_PS_CONF1 = 1,
IPPAC_PS_CONF2 = 2,
IPPAC_PS_CONF3 = 3,
IPPAC_PS_CONF4 = 4
} IppAC_PS_DEC_ANALYSIS;
typedef struct CdbkState_VQ_32f IppsVQCodeBookState_32f;
/*
// MPEG-1, MPEG-2 BC header, 32 bits.
// See ISO/IEC 11172-3, sect 2.4.1.3, 2.4.2.3, 2.4.2.4
*/
typedef struct {
int id; /* ID: 1 - MPEG-1, 0 - MPEG-2 */
int layer; /* layer index: 0x3 - Layer I
0x2 - Layer II
0x1 - Layer III */
int protectionBit; /* CRC flag 0: CRC on, 1: CRC off */
int bitRate; /* bit rate index */
int samplingFreq; /* sampling frequency index */
int paddingBit; /* padding flag:
0 - no padding,
1 - padding */
int privateBit; /* private_bit, no use */
int mode; /* mono/stereo select information */
int modeExt; /* extension to mode */
int copyright; /* copyright or not:
0 - no,
1 - yes */
int originalCopy; /* original bitstream or copy:
0 - copy,
1 - original */
int emphasis; /* flag indicates the type of de-emphasis
that shall be used */
int CRCWord; /* CRC-check word */
} IppMP3FrameHeader;
/*
// MP3 side information structure, for each granule.
// Other info main_data_begin, private_bits, scfsi are not included
// here.
// Please refer to reference ISO/IEC 11172-3:1993, 2.4.1.7, 2.4.2.7.
// ISO/IEC 13818-3:1998, 2.4.1.7 ).
*/
typedef struct {
int part23Len; /* the number of bits for scale factors
and Huffman data */
int bigVals; /* the half number of Huffman data whose
maximum amplitudes are greater than 1 */
int globGain; /* the quantizer step size information */
int sfCompress; /* information to select the number of
bits used for the transmission of the
scale factors */
int winSwitch; /* flag signals that the block uses an
other than normal window */
int blockType; /* flag indicates the window type */
int mixedBlock; /* flag indicates type of block:
0 - non mixed block,
1 - mixed block */
int pTableSelect[3]; /* Huffman table index for the 3 regions
in big-values field */
int pSubBlkGain[3]; /* gain offset from the global gain for
one subblock */
int reg0Cnt; /* the number of scale factor bands at
the boundary of the first region of
the big-values field */
int reg1Cnt; /* the number of scale factor bands at
the boundary of the second region of
the big-values field */
int preFlag; /* flag of high frequency amplification */
int sfScale; /* scale to the scale factors */
int cnt1TabSel; /* Huffman table index for the count1
region of quadruples */
} IppMP3SideInfo;
/*
// Global Macro Definitions for AAC codec
*/
#define IPP_AAC_ELT_NUM 16 /* maximum number of elements for
one program */
#define IPP_AAC_CR_ID_LEN 9 /* copyright id length */
#define IPP_AAC_LFE_ELT_NUM (1<<2) /* maximum Low Frequency
Enhance elements number for one
program */
#define IPP_AAC_DATA_ELT_NUM (1<<3) /* maximum data elements number
for one program */
#define IPP_AAC_COMMENTS_LEN (1<<8) /* maximum length of the comment
field in bytes */
#define IPP_AAC_TAG_LEN 4 /* length of AAC data element tag */
#define IPP_AAC_MAX_SFB 51 /* maximum scalefactor band for all
sampling frequencies */
#define IPP_AAC_GROUP_NUM_MAX 8 /* max groups number for one frame */
#define IPP_AAC_SF_MAX 60 /* max number of sfb in one window */
#define IPP_AAC_PRED_SFB_MAX 41 /* maximum prediction scalefactor
bands number for one frame */
#define IPP_AAC_SF_LEN 120 /* scale factor buffer length */
#define IPP_AAC_TNS_FILT_MAX 8 /* maximum filters number for one
frame */
#define ADIF_ID 0x41444946 /* ASCII-"ADIF" */
/*
// ADIF Header
*/
typedef struct {
Ipp32u ADIFId; /* 32-bit, "ADIF" ASCII code */
int copyIdPres; /* copy id flag:
0 - off,
1 - on */
int originalCopy; /* copyright bit:
0 - no copyright on the coded
bitstream,
1 - copyright protected */
int home; /* original/home bit:
0 - the bitstream is a copy,
1 - the bitstream is an original*/
int bitstreamType; /* bitstream flag:
0 - constant rate bitstream,
1 - variable rate bitstream */
int bitRate; /* bit rate; if 0, unkown bit rate */
int numPrgCfgElt; /* number of program configure
elements */
int pADIFBufFullness[IPP_AAC_ELT_NUM]; /* buffer fullness */
Ipp8u pCopyId[IPP_AAC_CR_ID_LEN]; /* copy id */
} IppAACADIFHeader;
/*
// AAC Program Config Element
*/
typedef struct {
int eltInsTag; /* element instance tag */
int profile; /* profile index:
0 - main,
1 - Low Complexity,
2 - Scaleable Sampling Rate,
3 - reserved */
int samplingRateIndex; /* sampling rate index */
int numFrontElt; /* number of front elements */
int numSideElt; /* number of side elements */
int numBackElt; /* number of back elements */
int numLfeElt; /* number of LFE elements */
int numDataElt; /* number of data elements */
int numValidCcElt; /* number of coupling channel
elements */
int monoMixdownPres; /* mono mixdown flag:
0 - off,
1 - on */
int monoMixdownEltNum; /* number of mono mixdown elements */
int stereoMixdownPres; /* stereo mixdown flag:
0 - off,
1 - on */
int stereoMixdownEltNum; /* number of stereo mixdown
elements */
int matrixMixdownIdxPres; /* matrix mixdown flag:
0 - off,
1 - on */
int matrixMixdownIdx; /* identifier of the surround
mixdown coefficient */
int pseudoSurroundEnable; /* pseudo surround:
0 - off,
1 - on */
int pFrontIsCpe[IPP_AAC_ELT_NUM]; /* channel pair flag for
front elements */
int pFrontTagSel[IPP_AAC_ELT_NUM]; /* instance tag for front
elements */
int pSideIsCpe[IPP_AAC_ELT_NUM]; /* channel pair flag for
side elements */
int pSideTagSel[IPP_AAC_ELT_NUM]; /* instance tag for side
elements */
int pBackIsCpe[IPP_AAC_ELT_NUM]; /* channel pair flag for
back elements */
int pBackTagSel[IPP_AAC_ELT_NUM]; /* instance tag for back
elements */
int pLfeTagSel[IPP_AAC_LFE_ELT_NUM]; /* channel pair flag for
LFE elements */
int pDataTagSel[IPP_AAC_DATA_ELT_NUM]; /* instance tag for data
elements */
int pCceIsIndSw[IPP_AAC_ELT_NUM]; /* independent flag for
coupling */
/* channel elements */
int pCceTagSel[IPP_AAC_ELT_NUM]; /* instance tag for coupling
channel elements */
int numComBytes; /* number of comment field
bytes */
Ipp8s pComFieldData[IPP_AAC_COMMENTS_LEN]; /* the comment buffer
field */
} IppAACPrgCfgElt;
/*
// MPEG-2 AAC ADTS frame header See ISO/IEC 13838-7, Table 6.5
*/
typedef struct {
/* ADTS fixed header */
int id; /* ID 1 */
int layer; /* layer index:
0x3 - Layer I,
0x2 - Layer II,
0x1 - Layer III */
int protectionBit; /* CRC flag:
0 - CRC on,
1 - CRC off */
int profile; /* profile:
0 - MP,
1 - LP,
2 - SSR */
int samplingRateIndex; /* sampling frequency index */
int privateBit; /* private_bit, no use */
int chConfig; /* channel configuration */
int originalCopy; /* copyright bit:
0 - no copyright on the coded
bitstream,
1 - copyright protected */
int home; /* original/home bit:
0 - the bitstream is a copy,
1 - the bitstream is an original */
int emphasis; /* no in ISO/IEC 13818-7, but used */
/* by ISO/IEC 14490-3 */
/* ADTS variable header */
int cpRightIdBit; /* copyright id bit */
int cpRightIdStart; /* copyright id start */
int frameLen; /* frame length in bytes */
int ADTSBufFullness; /* buffer fullness */
int numRawBlock; /* n of raw data blocks in the frame */
/* ADTS CRC error check, 16bits */
int CRCWord; /* CRC-check word */
} IppAACADTSFrameHeader;
/*
// Channel Pair Element Structure
*/
typedef struct {
int commonWin; /* common window flag:
0 - off,
1 - on */
int msMaskPres; /* MS stereo mask present flag */
Ipp8u ppMsMask[IPP_AAC_GROUP_NUM_MAX][IPP_AAC_SF_MAX];
/* MS stereo flag buffer for each
scalefactor band */
} IppAACChanPairElt;
/*
// Individual Channel Side Information Structure.
*/
typedef struct {
/* unpacked from the bitstream */
int icsReservedBit; /* reserved bit */
int winSequence; /* window sequence flag */
int winShape; /* window shape flag:
0 - sine window,
1 - KBD window */
int maxSfb; /* maximum effective scale factor bands */
int sfGrouping; /* scale factor grouping information */
int predDataPres; /* prediction data present flag for one
frame:
0 - prediction off,
1 - prediction on */
int predReset; /* prediction reset flag:
0 - off,
1 - on */
int predResetGroupNum; /* prediction reset group number */
Ipp8u pPredUsed[IPP_AAC_PRED_SFB_MAX+3];
/* prediction flag buffer for each scale
factor band:
0 - off,
1 - on buffer length 44 bytes, 4-byte
align */
/* decoded from the above info */
int numWinGrp; /* window group number */
int pWinGrpLen[IPP_AAC_GROUP_NUM_MAX]; /* buffer for number of
windows in each group */
} IppAACIcsInfo;
/*
// MPEG 4 Layer
*/
#define IPP_AAC_TNS_COEF_LEN 60 /* TNS coefficients buffer length */
#define IPP_AAC_MAX_LTP_SFB 40 /* maximum length of Long Term
Prediction buffer for long block */
#define IPP_AAC_WIN_MAX 8 /* maximum length of Long Term
Prediction buffer for short block */
#define IPP_AAC_CHAN_NUM 2 /* number of AAC channels */
#define NOISE_HCB 13 /* code of HCB noise in scalefactor code book */
#define IPP_AAC_FRAME_LEN 1024 /* size of data in one AAC frame */
#define IPP_LTP_BLOCK_LEN (1024*3) /* size of data in one AAC LTP block */
/*
// AAC Channel Information Structure
*/
typedef struct {
int tag; /* channel tag */
int id; /* element id */
int samplingRateIndex; /* sampling rate index */
int predSfbMax; /* maximum prediction scale factor bands */
int preWinShape; /* previous block window shape */
int winLen; /* 128: if short window, 1024: others */
int numWin; /* 1 for long block, 8 for short block */
int numSwb; /* decided by sampling frequency and
block type */
/* unpacking from the bitstream */
int globGain; /* global gain */
int pulseDataPres; /* pulse data present flag:
0 - off,
1 - on */
int tnsDataPres; /* TNS data present flag:
0 - off,
1 - on */
int gainContrDataPres; /* gain control data present flag:
0 - off,
1 - on */
/* Ics Info pointer */
IppAACIcsInfo *pIcsInfo; /* pointer to IppAACIcsInfo structure */
/* channel pair element pointer */
IppAACChanPairElt *pChanPairElt; /* pointer to IppAACChanPairElt
structure */
/* section data */
Ipp8u pSectCb[IPP_AAC_SF_LEN]; /* section code book buffer */
Ipp8u pSectEnd[IPP_AAC_SF_LEN]; /* end of scale factor offset
in each section */
int pMaxSect[IPP_AAC_GROUP_NUM_MAX]; /* maximum section number
for each group */
/* TNS data */
int pTnsNumFilt[IPP_AAC_GROUP_NUM_MAX]; /* TNS number filter
number buffer */
int pTnsFiltCoefRes[IPP_AAC_GROUP_NUM_MAX]; /* TNS coefficients
resolution flag */
int pTnsRegionLen[IPP_AAC_TNS_FILT_MAX]; /* TNS filter length */
int pTnsFiltOrder[IPP_AAC_TNS_FILT_MAX]; /* TNS filter order */
int pTnsDirection[IPP_AAC_TNS_FILT_MAX]; /* TNS filter direction
flag */
} IppAACChanInfo;
/*
// TNS Information Structure
*/
typedef struct {
int tnsDataPresent; /* if TNS is used */
int pTnsNumFilt[IPP_AAC_GROUP_NUM_MAX]; /* Number of TNS filter */
int pTnsFiltCoefRes[IPP_AAC_GROUP_NUM_MAX]; /* TNS coefficient
resolution */
int pTnsRegionLen[IPP_AAC_TNS_FILT_MAX]; /* TNS filter length */
int pTnsFiltOrder[IPP_AAC_TNS_FILT_MAX]; /* TNS filter order */
int pTnsDirection[IPP_AAC_TNS_FILT_MAX]; /* TNS filter direction
flag */
int pTnsCoefCompress[IPP_AAC_GROUP_NUM_MAX]; /* TNS compress
coefficients */
Ipp8s pTnsFiltCoef[IPP_AAC_TNS_COEF_LEN]; /* TNS filter
coefficients */
} IppAACTnsInfo;
/*
// Long Term Prediction (LTP) Structure
*/
typedef struct{
int ltpDataPresent; /* if LTP is used */
int ltpLag; /* optimal delay from 0 to 2047 */
Ipp16s ltpCoef; /* indicate the LTP coefficient */
int pLtpLongUsed[IPP_AAC_SF_MAX+1]; /* if long block use ltp */
int pLtpShortUsed[IPP_AAC_WIN_MAX]; /* if short block use ltp */
int pLtpShortLagPresent[IPP_AAC_WIN_MAX]; /* if short lag
is transmitted */
int pLtpShortLag[IPP_AAC_WIN_MAX]; /* relative delay
for short window */
} IppAACLtpInfo;
/*
// AAC Scalable Main Element Header
*/
typedef struct {
int windowSequence; /* the windows is short or long type */
int windowShape; /* what window is used for the right hand,
part of this analysis window */
int maxSfb; /* number of scale factor band transmitted */
int sfGrouping; /* grouping of short spectral data */
int numWinGrp; /* window group number */
int pWinGrpLen[IPP_AAC_GROUP_NUM_MAX]; /* length of every group */
int msMode; /* MS stereo flag:
0 - none,
1 - different for every sfb,
2 - all */
Ipp8u (*ppMsMask)[IPP_AAC_SF_MAX]; /* if MS's used in one sfb,
when msMode == 1 */
IppAACTnsInfo pTnsInfo[IPP_AAC_CHAN_NUM]; /* TNS structure for
two channels */
IppAACLtpInfo pLtpInfo[IPP_AAC_CHAN_NUM]; /* LTP structure for
two channels */
} IppAACMainHeader;
/*
// AAC Scalable Extension Element Header
*/
typedef struct{
int msMode; /* Mode:
0 - non,
1 - part,
2 - all */
int maxSfb; /* number of scale factor band for extension layer */
Ipp8u (*ppMsMask)[IPP_AAC_SF_MAX]; /* if MS is used */
IppAACTnsInfo pTnsInfo[IPP_AAC_CHAN_NUM]; /* TNS structure
for Stereo */
int pDiffControlLr[IPP_AAC_CHAN_NUM][IPP_AAC_MAX_SFB]; /*
FSS information for stereo */
} IppAACExtHeader;
/*
// MP3 encoder
*/
#define IPP_MP3_CHANNEL_NUM 2 /* Number MP3 channels */
#define IPP_MP3_PSY_BAND_LONG_NUM 63 /* Number MP3 partition energy for long blocks */
#define IPP_MP3_PSY_BAND_SHORT_NUM 42 /* Number MP3 partition energy for short blocks */
#define FIRST_6_CW 6 /* Number calculated lines are used for
unpredictability measure */
#define IPP_MP3_BIT_RATE_FREE 0 /* Type value for free bit rate */
#define IPP_MP3_BIT_RATE_32 1 /* Type value for 32 bit rate */
#define IPP_MP3_BIT_RATE_40 2 /* Type value for 40 bit rate */
#define IPP_MP3_BIT_RATE_48 3 /* Type value for 48 bit rate */
#define IPP_MP3_BIT_RATE_56 4 /* Type value for 56 bit rate */
#define IPP_MP3_BIT_RATE_64 5 /* Type value for 64 bit rate */
#define IPP_MP3_BIT_RATE_80 6 /* Type value for 80 bit rate */
#define IPP_MP3_BIT_RATE_96 7 /* Type value for 96 bit rate */
#define IPP_MP3_BIT_RATE_112 8 /* Type value for 112 bit rate */
#define IPP_MP3_BIT_RATE_128 9 /* Type value for 128 bit rate */
#define IPP_MP3_BIT_RATE_160 10 /* Type value for 160 bit rate */
#define IPP_MP3_BIT_RATE_192 11 /* Type value for 192 bit rate */
#define IPP_MP3_BIT_RATE_224 12 /* Type value for 224 bit rate */
#define IPP_MP3_BIT_RATE_256 13 /* Type value for 256 bit rate */
#define IPP_MP3_BIT_RATE_320 14 /* Type value for 320 bit rate */
#define IPP_MP3_SAMPLE_RATE_32000 2 /* Type value for 32000 sample rate */
#define IPP_MP3_SAMPLE_RATE_44100 0 /* Type value for 44100 sample rate */
#define IPP_MP3_SAMPLE_RATE_48000 1 /* Type value for 48000 sample rate */
#define IPP_MP3_NONINTERLEAVED_PCM 1 /* Type value for non interleaved PCM */
#define IPP_MP3_INTERLEAVED_PCM 2 /* Type value for interleaved PCM */
/*
// MP3 Huffman Table Structure
*/
typedef struct {
int tableSize; /* number of rows in table */
int linbits; /* variable used for encode if the
magnitude of encoded value is
greater or equal to 15 */
int maxBitsValue; /* maximum bit length of codewords */
Ipp16u *pHcod; /* pointer to Huffman code table */
Ipp8u *pSlen; /* pointer to Huffman length table */
} IppMP3HuffmanTable;
/*
// MP3 Quant Information Structure
*/
typedef struct {
int ScaleFactorBits; /* number of bits used to
encode scale factors */
Ipp32s pEnergy[IPP_MP3_SF_BUF_LEN]; /* energy of each scale
factor band */
Ipp32s pDistortion[IPP_MP3_SF_BUF_LEN]; /* allowed distortion
of each scale factor
band */
Ipp32s pXmin[IPP_MP3_SF_BUF_LEN]; /* allowed distortion of
each scale factor band */
Ipp32s pNMR[IPP_MP3_SF_BUF_LEN]; /* Noise-Mask-Ratio array */
int quantizeStepSize; /* quantization step */
int pSfbMaxIndex[40]; /* index array of Scalefactor
band maximum values */
int minBits; /* minimum bits decided by the bit reservoir
and used bits */
int maxBits; /* decided by estimatedBits and bit reservoir */
int count1; /* number of Huffman symbols whose magnitude
is no greater than 1 */
int hufSize; /* number of bits used for Huffman symbols */
int pRegionCount[3]; /* pointer to the number of Hufman symbols
in each region for the big values part */
} IppMP3QuantInfo;
/*
// MP3 Bit Reservoir
*/
typedef struct {
int BitsRemaining; /* bits currently remaining in the reservoir */
int MaxBits; /* maximum possible reservoir size, in bits,
determined as follows: min(7680-avg_frame_len,
2^9*8), where avg_frame_len is the average frame
length, in bits, including padding bits and
excluding side information bits */
} IppMP3BitReservoir;
/*
// Psychoacoustic Model Two State
*/
typedef struct {
Ipp64s pPrevMaskedThresholdLong[2][63]; /* long block masked
threshold history buffer; Contains masked threshold
estimates for the threshold calculation partitions
associated with the two most recent long blocks */
Ipp64s pPrevMaskedThresholdShort[IPP_MP3_PSY_BAND_SHORT_NUM]; /*
short block masked threshold history buffer; Contains
masked threshold estimates for the threshold
calculation partitions associated with the two most
recent long blocks */
Ipp32sc pPrevFFT[2][FIRST_6_CW]; /* FFT history buffer;
contains real and imaginary FFT components associated
with the two most recent long blocks */
Ipp32s pPrevFFTMag[2][FIRST_6_CW]; /* FFT magnitude history
buffer; contains FFT component magnitudes associated
with the two most recent long blocks */
int nextPerceptualEntropy; /* PE estimate for next
granule; one granule delay provided for synchronization
with analysis filterbank */
int nextBlockType; /* Expected block type for
next granule; either long (normal), short, or stop.
Depending upon analysis results for the granule
following the next, a long block could change to a
start block, and a stop block could change to a short
block. This buffer provides one granule of delay for
synchronization with the analysis filterbank */
Ipp32s pNextMSRLong[IPP_MP3_SF_BUF_LEN]; /* long block MSR
estimates for next granule. One granule delay provided
for synchronization with analysis filterbank */
Ipp32s pNextMSRShort[IPP_MP3_SF_BUF_LEN]; /* short block MSR
estimates for next granule. One granule delay provided
for synchronization with analysis filterbank */
} IppMP3PsychoacousticModelTwoState;
/*
// MP3 Psychoacoustic Model Two Analysis
*/
typedef struct {
Ipp32s pMSR[36]; /* MSRs for one granule/channel. For long blocks,
elements 0-20 represent the thresholds
associated with the 21 SFBs. For short blocks,
elements 0,3,6,..,33, elements 1,4,...,34, and
elements 2,5,...,35, respectively, represent
the thresholds associated with the 12 SFBs for
each of the 3 consecutive short blocks in one
granule/channel. That is, the block thresholds
are interleaved such that the thresholds are
grouped by SFB. */
Ipp32s PE; /* Estimated perceptual entropy, one
granule/channel */
} IppMP3PsychoacousticModelTwoAnalysis;
#endif /* _OWN_BLDPCS */
/*******************************************************************/
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippacGetLibVersion
//
// Purpose:
// Get the library version.
//
// Parameters:
//
// Returns:
// The structure of information about version of ippac library.
//
// Notes:
// Not necessary to release the returned structure.
*/
IPPAPI(const IppLibraryVersion*, ippacGetLibVersion, (void))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPReset_32f
//
// Purpose:
// Resets predictors for all spectral lines.
//
// Parameters:
// pFDPState Pointer to the predictor specific state structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pFDPState pointer is
// NULL.
// ippStsContextMatchErr Indicates an error when the state structure is
// invalid.
*/
IPPAPI(IppStatus, ippsFDPReset_32f, (IppsFDPState_32f *pFDPState))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPResetSfb_32f
//
// Purpose:
// Resets predictor-specific information in some scale factor bands.
//
// Parameters:
// pSfbOffset Pointer to the band offset vector.
// sfbNumber Number of bands.
// pResetFlag Array of flags showing whether predictors for
// spectral lines in a certain scale factor band
// need to be reset. pFDPState Pointer to the
// predictor specific state structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsSizeErr Indicates an error when sfbNumber is less than
// or equal to 0.
// ippStsContextMatchErr Indicates an error when the state structure is
// invalid.
*/
IPPAPI(IppStatus, ippsFDPResetSfb_32f, (const int* pSfbOffset, int sfbNumber, const Ipp8u* pResetFlag, IppsFDPState_32f* pFDPState))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPResetGroup_32f
//
// Purpose:
// Resets predictors for group of spectral lines.
//
// Parameters:
// resetGroupNumber Number of the group to be reset.
// step Distance between two neighboring spectral lines
// in the group.
// pFDPState Pointer to the predictor specific state structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pFDPState pointer is
// NULL.
// ippStsSizeErr Indicates an error when resetGroupNumber or step
// is less than or equal to 0.
// ippStsContextMatchErr Indicates an error when the state structure is
// invalid.
*/
IPPAPI(IppStatus, ippsFDPResetGroup_32f, (int resetGroupNumber, int step, IppsFDPState_32f* pFDPState))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPInitAlloc_32f
//
// Purpose:
// Creates and initializes predictor state.
//
// Parameters:
// ppFDPState Pointer to pointer to the FDP state structure to
// be created.
// len Number of spectral lines to be processed. Audio
// Coding Functions 10 10-29
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the ppFDPState pointer is
// NULL.
// ippStsSizeErr Indicates an error when the len is less than
// or equal to 0.
// ippStsMemAllocErr Indicates an error when no memory is allocated.
*/
IPPAPI(IppStatus, ippsFDPInitAlloc_32f, (IppsFDPState_32f** ppFDPState, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPFree_32f
//
// Purpose:
// Closes FDP state.
//
// Parameters:
// pFDPState Pointer to the FDP state structure to be closed.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pFDPState pointer is
// NULL.
// ippStsContextMatchErr Indicates an error when the state structure is
// invalid.
*/
IPPAPI(IppStatus, ippsFDPFree_32f, (IppsFDPState_32f *pFDPState))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPFwd_32f
//
// Purpose:
// Performs frequency domain prediction procedure and calculates
// prediction error.
//
// Parameters:
// pSrc Pointer to the input data array.
// pDst Pointer to the data array to be filled with
// prediction errors.
// pFDPState Pointer to the predictor specific state structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pFDPState pointer is
// NULL.
// ippStsContextMatchErr Indicates an error when the state structure is
// invalid.
// ippStsMisalignedBuf Indicates misaligned arrays. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsFDPFwd_32f, (const Ipp32f* pSrc, Ipp32f* pDst, IppsFDPState_32f* pFDPState))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPInv_32f_I
//
// Purpose:
// Retrieves input signal from prediction error, using frequency domain
// prediction procedure.
//
// Parameters:
// pSrcDst Pointer to the input and output data array for
// the in-place operation.
// pBandsOffset Pointer to the band offset vector.
// predictorBandsNumber Number of scale factor bands.
// pPredictionUsed Pointer to array of flags showing whether
// prediction will be used in certain scale factor
// band.
// pFDPState Pointer to the predictor specific state structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsSizeErr Indicates an error when predictorBandsNumber is
// less than or equal to 0.
// ippStsContextMatchErr Indicates an error when the state structure is
// invalid.
// ippStsMisalignedBuf Indicates misaligned arrays. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsFDPInv_32f_I, (Ipp32f* pSrcDst, const int* pBandOffset, int predictorBandsNumber, const Ipp8u* pPredictionUsed, IppsFDPState_32f* pFDPState))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPInit_32f
//
// Purpose:
// Initializes predictor state.
//
// Parameters:
// ppFDPState Pointer to pointer to the FDP state structure to
// be initialized.
// len Number of spectral lines to be processed.
// pMemSpec Pointer to the area for FDP state structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when ppFDPState or pMemSpec
// is NULL.
// ippStsSizeErr Indicates an error when the len is less than
// or equal to 0.
*/
IPPAPI(IppStatus, ippsFDPInit_32f, (IppsFDPState_32f **ppFDPState, int len, Ipp8u *pMemSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFDPGetSize_32f
//
// Purpose:
// Gets size of FDP state structure.
//
// Parameters:
// len Number of spectral lines to be processed.
// pSizeState Address of size value in bytes of the frequency
// domain predictor state structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSizeState pointer
// is NULL.
// ippStsSizeErr Indicates an error when the length is less than
// or equal to 0.
*/
IPPAPI(IppStatus, ippsFDPGetSize_32f, (int len, int *pSizeState))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFIRBlockInitAlloc_32f
//
// Purpose:
// Initializes FIR block filter state.
//
// Parameters:
// pState Pointer to the FIR block filter state structure
// to be created.
// order Number of elements in the array containing the
// tap values.
// len Number of input signals.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pointers to data
// arrays are null.
// ippStsMemAllocErr Indicates an error when no memory is allocated.
// ippStsFIRLenErr Indicates an error when order or len is less
// than or equal to 0.
*/
IPPAPI(IppStatus, ippsFIRBlockInitAlloc_32f,(IppsFIRBlockState_32f** pState,
int order, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFIRBlockFree_32f
//
// Purpose:
// Closes FIR block filter state.
//
// Parameters:
// pState Pointer to the FIR block filter state structure
// to be closed.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pointers to data
// arrays are null.
// ippStsContextMatchErr Indicates an error when the state structure is
// invalid.
*/
IPPAPI(IppStatus, ippsFIRBlockFree_32f,(IppsFIRBlockState_32f* pState))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsFIRBlockOne_32f
//
// Purpose:
// Filters vector of samples through FIR block filter.
//
// Parameters:
// pSrc Pointer to the input vector of samples to be
// filtered.
// pDst Pointer to the vector of filtered output samples.
// pState Pointer to the FIR filter state structure.
// pTaps Pointer to the vector of filter taps.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsContextMatchErr Indicates an error when the state structure is
// invalid.
// ippStsMisalignedBuf Indicates misaligned arrays. Supply aligned data
// for better performance.
// ippStsFIRLenErr Indicates an error when one of following conditions is true:
// 1)pState->len is less than or equal to 0;
// 2)pState->order is less than or equal to 0;
// 3)pState->queue_end is less than 0;
// 4)pState->queue_end is greater or equal to pState->order.
*/
IPPAPI(IppStatus, ippsFIRBlockOne_32f,(Ipp32f *pSrc, Ipp32f* pDst, IppsFIRBlockState_32f* pState, Ipp32f *pTaps))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdInitAlloc_32f
//
// Purpose:
// Create and initialize modified discrete cosine transform specification
// structure.
//
// Parameters:
// ppMDCTSpec Pointer to pointer to MDCT specification
// structure to be created.
// len Number of samples in MDCT. Since this set of
// functions was designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and , where . These values
// are the only values that appear in audio coding.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the ppMDCTSpec pointer
// is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
// ippStsMemAllocErr Indicates an error when no memory is allocated.
*/
IPPAPI(IppStatus, ippsMDCTFwdInitAlloc_32f,(IppsMDCTFwdSpec_32f** ppMDCTSpec, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInvInitAlloc_32f
//
// Purpose:
// Create and initialize modified discrete cosine transform specification
// structure.
//
// Parameters:
// ppMDCTSpec Pointer to pointer to MDCT specification
// structure to be created.
// len Number of samples in MDCT. Since this set of
// functions was designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and , where . These values
// are the only values that appear in audio coding.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the ppMDCTSpec pointer
// is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
// ippStsMemAllocErr Indicates an error when no memory is allocated.
*/
IPPAPI(IppStatus, ippsMDCTInvInitAlloc_32f,(IppsMDCTInvSpec_32f** ppMDCTSpec, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdFree_32f
//
// Purpose:
// Closes modified discrete cosine transform specification structure.
//
// Parameters:
// pMDCTSpec Pointer to the MDCT specification structure to
// be closed.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pMDCTSpec pointer is
// NULL.
*/
IPPAPI(IppStatus, ippsMDCTFwdFree_32f,(IppsMDCTFwdSpec_32f* pMDCTSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInvFree_32f
//
// Purpose:
// Closes modified discrete cosine transform specification structure.
//
// Parameters:
// pMDCTSpec Pointer to the MDCT specification structure to
// be closed.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pMDCTSpec pointer is
// NULL.
*/
IPPAPI(IppStatus, ippsMDCTInvFree_32f,(IppsMDCTInvSpec_32f* pMDCTSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdGetBufSize_32f
//
// Purpose:
// Gets the size of MDCT work buffer.
//
// Parameters:
// pMDCTSpec Pointer to the MDCT specification structure.
// pSize Address of the MDCT work buffer size value in
// bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pMDCTSpec pointer or
// pSize value is NULL.
// ippStsContextMatchErr Indicates an error when the specification
// structure pMDCTSpec is invalid.
*/
IPPAPI(IppStatus, ippsMDCTFwdGetBufSize_32f,(const IppsMDCTFwdSpec_32f* pMDCTSpec,
int* pSize))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInvGetBufSize_32f
//
// Purpose:
// Gets the size of MDCT work buffer.
//
// Parameters:
// pMDCTSpec Pointer to the MDCT specification structure.
// pSize Address of the MDCT work buffer size value in
// bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pMDCTSpec pointer or
// pSize value is NULL.
// ippStsContextMatchErr Indicates an error when the specification
// structure pMDCTSpec is invalid.
*/
IPPAPI(IppStatus, ippsMDCTInvGetBufSize_32f,(const IppsMDCTInvSpec_32f* pMDCTSpec,
int* pSize))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwd_32f
//
// Purpose:
// Computes forward or inverse modified discrete cosine transform (MDCT)
// of a signal.
//
// Parameters:
// pSrc Pointer to the input data array.
// pDst Pointer to the output data array.
// pSrcDst Pointer to the input and output data array for
// the in-place operations.
// pMDCTSpec Pointer to the MDCT specification structure.
// pBuffer Pointer to the MDCT work buffer.
// scaleFactor Scalefactor value.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsContextMatchErr Indicates an error when the specification
// structure pMDCTSpec is invalid.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsMDCTFwd_32f,(const Ipp32f* pSrc, Ipp32f* pDst,
const IppsMDCTFwdSpec_32f* pMDCTSpec, Ipp8u* pBuffer))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInv_32f
//
// Purpose:
// Computes forward or inverse modified discrete cosine transform (MDCT)
// of a signal.
//
// Parameters:
// pSrc Pointer to the input data array.
// pDst Pointer to the output data array.
// pMDCTSpec Pointer to the MDCT specification structure.
// pBuffer Pointer to the MDCT work buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsContextMatchErr Indicates an error when the specification
// structure pMDCTSpec is invalid.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsMDCTInv_32f,(const Ipp32f* pSrc, Ipp32f* pDst,
const IppsMDCTInvSpec_32f* pMDCTSpec, Ipp8u* pBuffer))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwd_32f_I
//
// Purpose:
// Computes forward or inverse modified discrete cosine transform (MDCT)
// of a signal.
//
// Parameters:
// pSrcDst Pointer to the input and output data array for
// the in-place operations.
// pMDCTSpec Pointer to the MDCT specification structure.
// pBuffer Pointer to the MDCT work buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsContextMatchErr Indicates an error when the specification
// structure pMDCTSpec is invalid.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsMDCTFwd_32f_I,(Ipp32f* pSrcDst, const IppsMDCTFwdSpec_32f* pMDCTSpec, Ipp8u* pBuffer))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInv_32f_I
//
// Purpose:
// Computes forward or inverse modified discrete cosine transform (MDCT)
// of a signal.
//
// Parameters:
// pSrcDst Pointer to the input and output data array for
// the in-place operations.
// pMDCTSpec Pointer to the MDCT specification structure.
// pBuffer Pointer to the MDCT work buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsContextMatchErr Indicates an error when the specification
// structure pMDCTSpec is invalid.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsMDCTInv_32f_I,(Ipp32f* pSrcDst, const IppsMDCTInvSpec_32f* pMDCTSpec, Ipp8u* pBuffer))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwd_16s_Sfs
//
// Purpose:
// Computes forward or inverse modified discrete cosine transform (MDCT)
// of a signal.
//
// Parameters:
// pSrc Pointer to the input data array.
// pDst Pointer to the output data array.
// pMDCTSpec Pointer to the MDCT specification structure.
// scaleFactor Scalefactor value.
// pBuffer Pointer to the MDCT work buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsContextMatchErr Indicates an error when the specification
// structure pMDCTSpec is invalid.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsMDCTFwd_16s_Sfs,
(const Ipp16s *pSrc, Ipp16s *pDst,
const IppsMDCTFwdSpec_16s* pMDCTSpec,
int scaleFactor, Ipp8u* pBuffer))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdInitAlloc_16s
//
// Purpose:
// Create and initialize modified discrete cosine transform specification
// structure.
//
// Parameters:
// ppMDCTSpec Pointer to pointer to MDCT specification
// structure to be created.
// len Number of samples in MDCT. Since this set of
// functions was designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and 2**k, where k>=5. These
// values are the only values that appear in audio
// coding.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the ppMDCTSpec pointer
// is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
// ippStsMemAllocErr Indicates an error when no memory is allocated.
*/
IPPAPI(IppStatus, ippsMDCTFwdInitAlloc_16s, (IppsMDCTFwdSpec_16s** ppMDCTSpec, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdFree_32f
//
// Purpose:
// Closes modified discrete cosine transform specification structure.
//
// Parameters:
// pMDCTSpec Pointer to the MDCT specification structure to
// be closed.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pMDCTSpec pointer is
// NULL.
*/
IPPAPI(IppStatus, ippsMDCTFwdFree_16s, (IppsMDCTFwdSpec_16s* pMDCTSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdGetSize_16s
//
// Purpose:
// Get the sizes of MDCT specification structure, MDCT initialization,
// and MDCT work buffer.
//
// Parameters:
// len Number of samples in MDCT. Since this set of
// functions is designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and 2**k, where k>=5. These
// values are the only values that appear in audio
// coding.
// pSizeSpec Address of the MDCT specification structure size
// value in bytes.
// pSizeInit Address of the MDCT initialization buffer size
// value in bytes.
// pSizeBuf Address of the MDCT work buffer size value in
// bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSizeSpec,
// pSizeInit, or pSizeBuf pointer is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
*/
IPPAPI(IppStatus, ippsMDCTFwdGetSize_16s, (int len, int* pSizeSpec, int* pSizeInit, int* pSizeBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdGetBufSize_16s
//
// Purpose:
// Gets the size of MDCT work buffer.
//
// Parameters:
// pMDCTSpec Pointer to the MDCT specification structure.
// pSize Address of the MDCT work buffer size value in
// bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pMDCTSpec pointer or
// pSize value is NULL.
// ippStsContextMatchErr Indicates an error when the specification
// structure pMDCTSpec is invalid.
*/
IPPAPI(IppStatus, ippsMDCTFwdGetBufSize_16s,
(const IppsMDCTFwdSpec_16s *pMDCTSpec, int *pSize))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInvGetSize_32f
//
// Purpose:
// Get the sizes of MDCT specification structure, MDCT initialization,
// and MDCT work buffer.
//
// Parameters:
// len Number of samples in MDCT. Since this set of
// functions is designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and 2**k, where k>=5. These
// values are the only values that appear in audio
// coding.
// pSizeSpec Address of the MDCT specification structure size
// value in bytes.
// pSizeInit Address of the MDCT initialization buffer size
// value in bytes.
// pSizeBuf Address of the MDCT work buffer size value in
// bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSizeSpec,
// pSizeInit, or pSizeBuf pointer is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
*/
IPPAPI(IppStatus, ippsMDCTInvGetSize_32f, (int len, int *pSizeSpec, int *pSizeInit, int *pSizeBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdGetSize_32f
//
// Purpose:
// Get the sizes of MDCT specification structure, MDCT initialization,
// and MDCT work buffer.
//
// Parameters:
// len Number of samples in MDCT. Since this set of
// functions is designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and 2**k, where k>=5. These
// values are the only values that appear in audio
// coding.
// pSizeSpec Address of the MDCT specification structure size
// value in bytes.
// pSizeInit Address of the MDCT initialization buffer size
// value in bytes.
// pSizeBuf Address of the MDCT work buffer size value in
// bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSizeSpec,
// pSizeInit, or pSizeBuf pointer is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
*/
IPPAPI(IppStatus, ippsMDCTFwdGetSize_32f, (int len, int *pSizeSpec, int *pSizeInit, int *pSizeBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdInit_32f
//
// Purpose:
// Initialize modified discrete cosine transform specification structure.
//
// Parameters:
// ppMDCTSpec Pointer to pointer to MDCT specification
// structure to be created.
// len Number of samples in MDCT. Since this set of
// functions was designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and 2**k, where k>=5. These
// values are the only values that appear in audio
// coding.
// pMemSpec Pointer to the area for MDCT specification
// structure.
// pMemInit Pointer to the buffer that is used for
// initialization.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the ppMDCTSpec, pMemSpec
// or pMemInit pointer is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
*/
IPPAPI(IppStatus, ippsMDCTFwdInit_32f, (IppsMDCTFwdSpec_32f** ppMDCTSpec, int len, Ipp8u* pMemSpec, Ipp8u* pMemInit))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInvInit_32f
//
// Purpose:
// Initialize modified discrete cosine transform specification structure.
//
// Parameters:
// ppMDCTSpec Pointer to pointer to MDCT specification
// structure to be created.
// len Number of samples in MDCT. Since this set of
// functions was designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and 2**k, where k>=5. These
// values are the only values that appear in audio
// coding.
// pMemSpec Pointer to the area for MDCT specification
// structure.
// pMemInit Pointer to the buffer that is used for
// initialization.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the ppMDCTSpec, pMemSpec
// or pMemInit pointer is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
*/
IPPAPI(IppStatus, ippsMDCTInvInit_32f,(IppsMDCTInvSpec_32f** ppMDCTSpec, int len, Ipp8u* pMemSpec, Ipp8u* pMemInit))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwdInit_16s
//
// Purpose:
// Initialize modified discrete cosine transform specification structure.
//
// Parameters:
// ppMDCTSpec Pointer to pointer to MDCT specification
// structure to be created.
// len Number of samples in MDCT. Since this set of
// functions was designed specially for audio
// coding, only the following values of length are
// supported: 12, 36, and 2**k, where k>=5. These
// values are the only values that appear in audio
// coding.
// pMemSpec Pointer to the area for MDCT specification
// structure.
// pMemInit Pointer to the buffer that is used for
// initialization.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the ppMDCTSpec, pMemSpec
// or pMemInit pointer is NULL.
// ippStsSizeErr Indicates an error when len does not belong to
// the above set of admissible values.
*/
IPPAPI(IppStatus, ippsMDCTFwdInit_16s,(IppsMDCTFwdSpec_16s** ppMDCTSpec, int len, Ipp8u* pMemSpec, Ipp8u* pMemInit))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSpread_16s_Sfs
//
// Purpose:
// Computes spreading function.
//
// Parameters:
// Src1 Input data 1.
// Src2 Input data 2.
// inScaleFactor Input value scalefactor value.
// pDst Pointer to the output data vector, output data
// is in Q15 format.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pDst pointer is NULL.
*/
IPPAPI(IppStatus, ippsSpread_16s_Sfs,
(Ipp16s src1, Ipp16s src2, int inScaleFactor, Ipp16s* pDst))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsInterleave_16s
//
// Purpose:
// Converts signal from non-interleaved to interleaved format.
//
// Parameters:
// pSrc Array of pointers to the vectors [len]
// containing samples for particular channels.
// ch_num Number of channels.
// len Number of samples in each channel.
// pDst Pointer to the destination vector [ch_num * len]
// in interleaved format.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsSizeErr Indicates an error when len is less than or
// equal to 0.
// ippStsNumChannelsErr Indicates an error when ch_num is less than or
// equal to 0.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsInterleave_16s, (const Ipp16s **pSrc,
int ch_num,
int len,
Ipp16s *pDst))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsInterleave_32f
//
// Purpose:
// Converts signal from non-interleaved to interleaved format.
//
// Parameters:
// pSrc Array of pointers to the vectors [len]
// containing samples for particular channels.
// ch_num Number of channels.
// len Number of samples in each channel.
// pDst Pointer to the destination vector [ch_num * len]
// in interleaved format.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsSizeErr Indicates an error when len is less than or
// equal to 0.
// ippStsNumChannelsErr Indicates an error when ch_num is less than or
// equal to 0.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsInterleave_32f, (const Ipp32f **pSrc,
int ch_num,
int len,
Ipp32f *pDst))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDeinterleave_16s
//
// Purpose:
// Converts signal from interleaved to non-interleaved format.
//
// Parameters:
// pSrc Pointer to vector [ch_num * len] of interleaved
// samples.
// ch_num Number of channels.
// len Number of samples in each channel.
// pDst Array of pointers to the vectors [len] to be
// filled with samples of particular channels.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsSizeErr Indicates an error when len or ch_num is less
// than or equal to 0.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsDeinterleave_16s, (const Ipp16s* pSrc, int ch_num,
int len, Ipp16s** pDst))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDeinterleave_32f
//
// Purpose:
// Converts signal from interleaved to non-interleaved format.
//
// Parameters:
// pSrc Pointer to vector [ch_num * len] of interleaved
// samples.
// ch_num Number of channels.
// len Number of samples in each channel.
// pDst Array of pointers to the vectors [len] to be
// filled with samples of particular channels.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsSizeErr Indicates an error when len or ch_num is less
// than or equal to 0.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
*/
IPPAPI(IppStatus, ippsDeinterleave_32f, (const Ipp32f* pSrc, int ch_num,
int len, Ipp32f** pDst))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsPow34_32f16s
//
// Purpose:
// Raises a vector to the power of 3/4.
//
// Parameters:
// pSrc Pointer to the input data vector [len].
// pDst Pointer to the output data vector [len].
// len Number of elements in the input and output
// vectors.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
// ippStsSizeErr Indicates an error when len is less than or
// equal to 0.
*/
IPPAPI(IppStatus, ippsPow34_32f16s, (const Ipp32f* pSrc, Ipp16s* pDst, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsPow43_16s32f
//
// Purpose:
// Raises a vector to the power of 4/3.
//
// Parameters:
// pSrc Pointer to the input data vector [len].
// pDst Pointer to the output data vector [len].
// len Number of elements in the input and output
// vectors.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data for
// better performance.
// ippStsSizeErr Indicates an error when len is less than or
// equal to 0.
*/
IPPAPI(IppStatus, ippsPow43_16s32f, (const Ipp16s* pSrc, Ipp32f* pDst, int len))
IPPAPI(IppStatus, ippsPow43Scale_16s32s_Sf, (const Ipp16s* pSrc, Ipp32s* pDst,
const Ipp16s *pScaleFactor, const Ipp32s *pBandOffset,
int offset, int bandsNumber, int groupLen, int scalef))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsPow34_32f
//
// Purpose:
// Raises a vector to the power of 3/4.
//
// Parameters:
// pSrc Pointer to the input data vector [len].
// pDst Pointer to the output data vector [len].
// len Number of elements in the input and output
// vectors.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
// ippStsSizeErr Indicates an error when len is less than or
// equal to 0.
*/
IPPAPI(IppStatus, ippsPow34_32f,(const Ipp32f* pSrc, Ipp32f* pDst, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsPow34_16s_Sfs
//
// Purpose:
// Raises a vector to the power of 3/4.
//
// Parameters:
// pSrc Pointer to the input data vector [len].
// inscaleFactor Input data scalefactor value.
// pDst Pointer to the output data vector [len].
// scaleFactor Scalefactor value.
// len Number of elements in the input and output
// vectors.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsMisalignedBuf Indicates misaligned data. Supply aligned data
// for better performance.
// ippStsSizeErr Indicates an error when len is less than or
// equal to 0.
*/
IPPAPI(IppStatus, ippsPow34_16s_Sfs,(const Ipp16s* pSrc, int inScaleFactor, Ipp16s* pDst, int ScaleFactor, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsCalcSF_16s32f
//
// Purpose:
// Restores actual scale factors from the bit stream values.
//
// Parameters:
// pSrc Pointer to the input data array.
// offset Scale factors offset.
// pDst Pointer to the output data array.
// len Number of elements in the vector.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrc or pDst pointer
// is NULL.
// ippStsSizeErr Indicates an error when len is less than or
// equal to 0.
*/
IPPAPI(IppStatus,ippsCalcSF_16s32f, (const Ipp16s* pSrc, int offset,Ipp32f *pDst, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsScale_32f_I
//
// Purpose:
// Applies scale factors to spectral bands in accordance with spectral
// bands boundaries.
//
// Parameters:
// pSrcDst Pointer to the input and output data array. The
// size of array must be not less than pBandOffset[
// bands_number].
// pSF Pointer to the data array containing scale
// factors. The size of the array must be not less
// than bands_number.
// pBandOffset Pointer to the vector of band offsets. The size
// of array must be not less than bands_number + 1.
// bandsNumber Number of bands to which scale factors are
// applied.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pSrcDst or
// pBandsOffset pointer is NULL.
// ippStsSizeErr Indicates an error when bandsNumber is less than
// or equal to 0.
*/
IPPAPI(IppStatus, ippsScale_32f_I, (Ipp32f* pSrcDst, Ipp32f* pSF, const Ipp32s* pBandOffset, int bandsNumber))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMakeFloat_16s32f
//
// Purpose:
// Converts mantissa and exponent arrays to float arrays.
//
// Parameters:
// inmant Array of mantissas.
// inexp Array of exponents.
// size Number of array elements.
// outfloat Array of resulting float arrays.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the inmant, inexp or
// outfloat pointer is NULL.
// ippStsSizeErr Indicates an error when size is less than or
// equal to 0.
*/
IPPAPI(IppStatus, ippsMakeFloat_16s32f, (Ipp16s* inmant, Ipp16s* inexp, Ipp32s size, Ipp32f* outfloat))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVQCodeBookInitAlloc_32f
//
// Purpose:
// Creates and initializes the codebook structure.
//
// Parameters:
// pInputTable Pointer to the codebook table of the size step *
// height containing height quantization vectors of
// the length step.
// ppCodeBook Pointer to pointer to the codebook structure to
// be created.
// step Step to the next line in the table InputTable,
// quantization vector length.
// height Table height, number of quantization vectors.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when ppCodeBook or
// pInputTable pointer is NULL.
// ippStsSizeErr Indicates an error when the step or height is
// less than or equal to 0.
// ippStsMemAllocErr Indicates an error when no memory is allocated.
*/
IPPAPI(IppStatus, ippsVQCodeBookInitAlloc_32f, (const Ipp32f* pInputTable, IppsVQCodeBookState_32f** ppCodeBooks, int step, int height))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVQCodeBookFree_32f
//
// Purpose:
// Closes the IppsVQCodeBookState_32f structure created by the function
// ippsVQCodeBookInitAlloc.
//
// Parameters:
// pCodeBook Pointer to specified IppsVQCodeBookState_32f
// structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pCodeBook pointer is
// NULL.
*/
IPPAPI(IppStatus, ippsVQCodeBookFree_32f, (IppsVQCodeBookState_32f* pCodeBook))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVQCodeBookInit_32f
//
// Purpose:
// Initializes the codebook structure.
//
// Parameters:
// pInputTable Pointer to the codebook table of the size step *
// height containing height quantization vectors of
// the length step.
// ppCodeBook Pointer to pointer to the codebook structure to
// be created.
// step Step to the next line in the table InputTable,
// quantization vector length.
// height Table height, number of quantization vectors.
// pMemSpec Pointer to the area for the codebook structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pInputTable, ppCodeBook
// or pMemSpec pointer is NULL.
// ippStsSizeErr Indicates an error when the step or height is
// less than or equal to 0.
*/
IPPAPI(IppStatus, ippsVQCodeBookInit_32f, (const Ipp32f* pInputTable, IppsVQCodeBookState_32f** ppCodeBook , int step, int height, Ipp8u* pMemSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVQPreliminarySelect_32f
//
// Purpose:
// Selects candidates for the nearest code vector of codebooks.
//
// Parameters:
// pSrc Source vector to be quantized.
// pWeights Pointer to the vector of weights.
// nDiv Number of fragmentations of the src and weights
// vectors.
// pLengths Pointer to an array of lengths of fragmentations.
// pIndx Pointer to the output vector of indexes of the
// nCand minimum candidates.
// pSign Pointer to the output vector of signs of nCand
// minimum candidates: - The value of 1 indicates
// that the minimal distortion appears when the
// norm is negative; - The value of 0 indicates
// that the minimal distortion appears when the
// norm is positive.
// nCand Number of output candidates.
// pPolbits Pointer to the polbits flag vector.
// pCodeBook Pointer to the specified IppsVQCodeBookState_32f
// structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pCodeBook or pSrc
// pointer is NULL.
*/
IPPAPI(IppStatus, ippsVQPreliminarySelect_32f, (const Ipp32f* pSrc, const Ipp32f* pWeights, int nDiv, const Ipp32s* pLengths, Ipp32s* pIndx, Ipp32s* pSign, int nCand, int* polbits, IppsVQCodeBookState_32f* pCodeBook))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVQMainSelect_32f
//
// Purpose:
// Finds optimal indexes with minimal distortion.
//
// Parameters:
// pSrc Source vector to be quantized.
// pWeights Pointer to the vector of weights.
// nDiv Number of fragmentations of the src and weights
// vectors.
// pLengths Pointer to an array of lengths of fragmentations.
// nCand Number of input candidates.
// ppIndexCand Pointer to pointer to the input vectors of
// indexes of nCand minimum candidates.
// ppSignCand Pointer to pointer to the input vectors of signs
// of nCand minimum candidates.
// ppIndx Pointer to pointer to the output vectors of
// indexes.
// ppSign Pointer to pointer to the output vectors of signs.
// ppCodeBooks Pointer to pointer to the specified
// IppsVQCodeBookState_32f structures.
// nCodeBooks Number of codebooks.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
*/
IPPAPI(IppStatus, ippsVQMainSelect_32f, (const Ipp32f* pSrc, const Ipp32f* pWeights, const Ipp32s* pLengths, int nDiv, int nCand, Ipp32s** ppIndexCand, Ipp32s** ppSignCand, Ipp32s** ppIndx, Ipp32s** ppSign, IppsVQCodeBookState_32f** ppCodeBooks, int nCodeBooks))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVQIndexSelect_32f
//
// Purpose:
// Finds optimal vector set for specified number of codebooks.
//
// Parameters:
// pSrc Source vector to be quantized.
// pWeights Pointer to the vector of weights.
// nDiv Number of fragmentations of the src and weights
// vectors.
// pLengths Pointer to an array of lengths of fragmentations.
// nCand Number of input candidates.
// ppPolbits Indicates whether one or two norms should be
// used to compute the optimal vector set for the
// specified number of codebooks.
// ppIndx Pointer to pointer to the output vectors of
// indexes.
// ppSign Pointer to pointer to the output vectors of signs.
// - The value of 1 indicates that the minimal
// distortion appears when the norm is negative.
// - The value of 0 indicates that the minimal
// distortion appears when the norm is positive.
// ppCodeBooks Pointer to pointer to the specified
// IppsVQCodeBookState_32f structures.
// nCodeBooks Number of codebooks.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
*/
IPPAPI(IppStatus, ippsVQIndexSelect_32f, (const Ipp32f* pSrc, const Ipp32f* pWeights, int nDiv, const Ipp32s* pLengths, int nCand, int** ppPolbits, Ipp32s** ppIndx, Ipp32s** ppSign, IppsVQCodeBookState_32f** ppCodeBooks, int nCodeBooks))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVQReconstruction_32f
//
// Purpose:
// Reconstructs vectors from indexes.
//
// Parameters:
// ppIndx Pointer to pointer to an array of input vectors
// of indexes for each codebook.
// ppSign Pointer to pointer to an array of input vectors
// of signs for each codebook containing either 1
// or -1.
// pLengths Pointer to an array of lengths of partitions of
// output vector.
// pDst Pointer to the reconstructed vector of spectrum
// values.
// nDiv Number of partitions of output vector.
// ppCodeBooks Pointer to pointer to an array of pointers to
// specified IppsVQCodeBookState_32f structures.
// nCodeBooks Number of codebooks.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
*/
IPPAPI(IppStatus, ippsVQReconstruction_32f, (const Ipp32s** ppIndx, const Ipp32s** ppSign, const Ipp32s* pLength, int nDiv, int nStream, Ipp32f* pDst, IppsVQCodeBookState_32f** ppCodeBooks))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVQCodeBookGetSize_32f
//
// Purpose:
// Gets the size of the codebook structure.
//
// Parameters:
// step Step to the next line in the codebook table,
// quantization vector length.
// height Table height, number of quantization vectors.
// pSizeState Address of the codebook structure size value in
// bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSizeState pointer is
// NULL.
// ippStsSizeErr Indicates an error when the step or height is
// less than or equal to 0.
*/
IPPAPI(IppStatus, ippsVQCodeBookGetSize_32f, (int step, int height, int *pSizeState))
/****************************************************************************
* MPEG4-SBR AUDIO
****************************************************************************/
/*
// DECODER PART
*/
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterGetSize_SBR_RToC_32f,
// ippsAnalysisFilterGetSize_SBR_RToC_32f32fc,
// ippsAnalysisFilterGetSize_SBR_RToR_32f,
// ippsSynthesisFilterGetSize_SBR_CToR_32f,
// ippsSynthesisFilterGetSize_SBR_CToR_32fc32f,
// ippsSynthesisFilterGetSize_SBR_RToR_32f
// ippsSynthesisDownFilterGetSize_SBR_CToR_32f,
// ippsSynthesisDownFilterGetSize_SBR_CToR_32fc32f,
// ippsSynthesisDownFilterGetSize_SBR_RToR_32f
//
// Purpose:
// Returns size of QMF specification structures, init and work buffers.
//
// Parameters:
// pSizeSpec Address of the FilterSpec_SBR specification
// structure size value in bytes.
// pSizeInitBuf Address size of the buffer for initialization
// functions in bytes.
// pSizeWorkBuf Address of the work buffer size value in bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
*/
IPPAPI( IppStatus, ippsAnalysisFilterGetSize_SBR_RToC_32f, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
IPPAPI( IppStatus, ippsAnalysisFilterGetSize_SBR_RToC_32f32fc, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
IPPAPI( IppStatus, ippsAnalysisFilterGetSize_SBR_RToR_32f, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
IPPAPI( IppStatus, ippsSynthesisFilterGetSize_SBR_CToR_32f, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
IPPAPI(IppStatus, ippsSynthesisFilterGetSize_SBR_CToR_32fc32f, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
IPPAPI( IppStatus, ippsSynthesisFilterGetSize_SBR_RToR_32f, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
IPPAPI( IppStatus, ippsSynthesisDownFilterGetSize_SBR_CToR_32f, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
IPPAPI( IppStatus, ippsSynthesisDownFilterGetSize_SBR_CToR_32fc32f, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
IPPAPI( IppStatus, ippsSynthesisDownFilterGetSize_SBR_RToR_32f, ( int* pSizeSpec, int* pSizeInitBuf, int* pSizeWorkBuf ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterInit_SBR_RToC_32f
//
// Purpose:
// Initializes analysis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsAnalysisFilterInit_SBR_RToC_32f,
( IppsFilterSpec_SBR_C_32f** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterInit_SBR_CToR_32fc32f
//
// Purpose:
// Initializes analysis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsSynthesisFilterInit_SBR_CToR_32fc32f,
( IppsFilterSpec_SBR_C_32fc** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterInit_SBR_RToC_32f32fc
//
// Purpose:
// Initializes analysis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsAnalysisFilterInit_SBR_RToC_32f32fc,
( IppsFilterSpec_SBR_C_32fc** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterInit_SBR_RToR_32f
//
// Purpose:
// Initializes analysis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsAnalysisFilterInit_SBR_RToR_32f,
( IppsFilterSpec_SBR_R_32f** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterInit_SBR_CToR_32fc32f
//
// Purpose:
// Initializes synthesis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsSynthesisFilterInit_SBR_CToR_32f,
( IppsFilterSpec_SBR_C_32f** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterInit_SBR_RToR_32f
//
// Purpose:
// Initializes synthesis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsSynthesisFilterInit_SBR_RToR_32f,
( IppsFilterSpec_SBR_R_32f** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisDownFilterInit_SBR_CToR_32f
//
// Purpose:
// Initializes synthesis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsSynthesisDownFilterInit_SBR_CToR_32f,
( IppsFilterSpec_SBR_C_32f** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisDownFilterInit_SBR_CToR_32fc32f
//
// Purpose:
// Initializes down sample synthesis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsSynthesisDownFilterInit_SBR_CToR_32fc32f,
( IppsFilterSpec_SBR_C_32fc** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisDownFilterInit_SBR_RToR_32f
//
// Purpose:
// Initializes down sample synthesis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the FilterSpec_SBR
// specification structure is written. Onlt the
// main function uses this structure.
// pMemSpec Pointer to the area for the FilterSpec_SBR
// specification structure.
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsSynthesisDownFilterInit_SBR_RToR_32f,
( IppsFilterSpec_SBR_R_32f** ppFilterSpec, Ipp8u* pMemSpec, Ipp8u* pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilter_SBR_RToC_32f_D2L
// ippsAnalysisFilter_SBR_RToC_32f32fc_D2L
// ippsAnalysisFilter_SBR_RToR_32f_D2L
//
// Purpose:
// Splits time domain signal output from the core decoder into 32
// subband signals.
//
// Parameters:
// pSrc Pointer to the input audio signal.
// pDst array of pointers, holds subband samples.
// pDstRe array of pointers that contains real parts of subband samples.
// pDstIm array of pointers that contains imaginary parts of subband
// samples.
// pSbrTableWindowDown Pointer to the window table that is used by decoder SBR Analysis Filter.
// offset Desired displacement in number of rows when the matrix pDst is calculated. offset >=0
// NumLoop Parameter equal to 32 if frame size of the core decoded signal is 1024
// 30 if frame size of the core decoded signal is 960.
// kx first SBR subband in the SBR range.
// pFilterSpec Pointer to the FilterSpec_SBR specification structure.
// pWorkBuf Pointer to the work buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsAnalysisFilter_SBR_RToC_32f_D2L,
(const Ipp32f* pSrc, Ipp32f* pDstRe[], Ipp32f* pDstIm[], const Ipp32f* pSbrTableWinDown,
int NumLoop, int offset, int kx,
const IppsFilterSpec_SBR_C_32f* pFilterSpec, Ipp8u* pWorkBuf))
IPPAPI( IppStatus, ippsAnalysisFilter_SBR_RToC_32f32fc_D2L,
(const Ipp32f* pSrc, Ipp32fc* pDst[], const Ipp32f* pSbrTableWinDown,
int NumLoop, int offset, int kx,
const IppsFilterSpec_SBR_C_32fc* pFilterSpec, Ipp8u* pWorkBuf))
IPPAPI( IppStatus, ippsAnalysisFilter_SBR_RToR_32f_D2L,
(const Ipp32f* pSrc, Ipp32f* pDst[], const Ipp32f* pSbrTableWinDown,
int NumLoop, int offset, int kx,
const IppsFilterSpec_SBR_R_32f* pFilterSpec, Ipp8u* pWorkBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilter_SBR_CToR_32f_D2L
// ippsSynthesisFilter_SBR_CToR_32fc32f_D2L
// ippsSynthesisFilter_SBR_RToR_32f_D2L
//
// Purpose:
// Transforms SBR-processed subband signals into time domain samples.
//
// Parameters:
// pSrc - array of pointers, holds SBR-processed subband signals.
// pSrcRe - array of pointers that contains real parts of SBR-processed subband signals.
// pSrcIm - array of pointers that contains imaginary parts of SBR-processed subband signals.
// pDst - Pointer to the output vector, holds time domain output samples.
// pSbrTableWindow - Pointer to the window table that is used by SBR Analysis Filter.
// NumLoop - Parameter equal to 32 if frame size of the core decoded signal is 1024
// 30 if frame size of the core decoded signal is 960.
// pFilterSpec- Pointer to the FilterSpec_SBR specification structure.
// pWorkBuf - Pointer to the work buffer used by the filter.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI( IppStatus, ippsSynthesisFilter_SBR_CToR_32f_D2L,
(const Ipp32f* pSrcRe[], const Ipp32f* pSrcIm[], Ipp32f* pDst, const Ipp32f* pSbrTableWindow,
int NumLoop, const IppsFilterSpec_SBR_C_32f* pFilterSpec, Ipp8u* pWorkBuf))
IPPAPI( IppStatus, ippsSynthesisFilter_SBR_CToR_32fc32f_D2L,
(const Ipp32fc* pSrc[], Ipp32f* pDst, const Ipp32f* pSbrTableWindow, int NumLoop,
const IppsFilterSpec_SBR_C_32fc* pFilterSpec, Ipp8u* pWorkBuf ))
IPPAPI( IppStatus, ippsSynthesisFilter_SBR_RToR_32f_D2L,
(const Ipp32f* pSrc[], Ipp32f* pDst, const Ipp32f* pSbrTableWindow, int NumLoop,
const IppsFilterSpec_SBR_R_32f* pFilterSpec, Ipp8u* pWorkBuf ))
/* ///////////////////////////////////////////////////////////////////////////
// Name: ippsSynthesisDownFilter_SBR_CToR_32f_D2L, ippsSynthesisDownFilter_SBR_CToR_32fc32f_D2L, ippsSynthesisDownFilter_SBR_RToR_32f_D2L
// Purpose: Transforms SBR-processed subband signals into time domain samples and
// performs downsampling at the same time.
//
// Parameters:
// pSrc - array of pointers, holds SBR-processed subband signals.
// pSrcRe - array of pointers that contains real parts of SBR-processed subband signals.
// pSrcIm - array of pointers that contains imaginary parts of SBR-processed subband signals.
// pDst - Pointer to the output vector, holds time domain output samples.
// pSbrTableWindowDown - Pointer to the window table that is used by SBR Analysis Filter.
// NumLoop- Parameter equal to 32 if frame size of the core decoded signal is 1024
// 30 if frame size of the core decoded signal is 960.
// pFilterSpec - Pointer to the FilterSpec_SBR specification structure.
// pWorkBuf - Pointer to the work buffer used by the filter.
//
// Return Values: status
*/
IPPAPI( IppStatus, ippsSynthesisDownFilter_SBR_CToR_32f_D2L,
(const Ipp32f* pSrcRe[],const Ipp32f* pSrcIm[], Ipp32f* pDst,
const Ipp32f* pSbrTableWindowDown, int NumLoop,
const IppsFilterSpec_SBR_C_32f* pFilterSpec, Ipp8u* pWorkBuf ))
IPPAPI( IppStatus, ippsSynthesisDownFilter_SBR_CToR_32fc32f_D2L,
(const Ipp32fc* pSrc[], Ipp32f* pDst, const Ipp32f* pSbrTableWindowDown, int NumLoop,
const IppsFilterSpec_SBR_C_32fc* pFilterSpec, Ipp8u* pWorkBuf ))
IPPAPI( IppStatus, ippsSynthesisDownFilter_SBR_RToR_32f_D2L,
(const Ipp32f* pSrc[], Ipp32f* pDst, const Ipp32f* pSbrTableWindowDown, int NumLoop,
const IppsFilterSpec_SBR_R_32f* pFilterSpec, Ipp8u* pWorkBuf ))
/* ///////////////////////////////////////////////////////////////////////////
// Name: ippsPredictCoef_SBR_R_32f_D2L, ippsPredictCoef_SBR_C_32fc_D2L, ippsPredictCoef_SBR_C_32f_D2L
// Purpose: Obtains prediction filter coefficients using covariance method.
//
// Parameters:
// pSrc - array of pointers holds input real or complex matrix ([40][32]),
// holds Low Frequency QMF-processed subband signals.
// pSrcRe - array of pointers ([40][32]) that contains real
// parts of Low Frequency SBR-processed subband signals.
// pSrcIm - array of pointers ([40][32]) that contains
// imaginary parts of Low Frequency SBR-processed subband signals.
// k0 - First QMF subband in the f_master table.
// len - Size autocorrelation.
// pAlpha0, pAlpha1 - Pointers to the arrays that contain complex
// or real Prediction filter coefficients used by High Frequency filter.
// pAlpha0Re, pAlpha1Re - Pointers to the arrays that contain real parts of the
// corresponding complex filter coefficients.
// pAlpha0Im, pAlpha1Im - Pointers to the arrays that contain imaginary parts of the
// corresponding complex filter coefficients.
//
// Return Values: status
*/
IPPAPI( IppStatus, ippsPredictCoef_SBR_R_32f_D2L,
(const Ipp32f* pSrc[], Ipp32f* pAlpha0, Ipp32f* pAlpha1, int k0, int len))
IPPAPI( IppStatus, ippsPredictCoef_SBR_C_32fc_D2L,
(const Ipp32fc* pSrc[], Ipp32fc* pAlpha0, Ipp32fc* pAlpha1, int k0, int len))
IPPAPI( IppStatus, ippsPredictCoef_SBR_C_32f_D2L,
(const Ipp32f* pSrcRe[], const Ipp32f* pSrcIm[],
Ipp32f* pAlpha0Re, Ipp32f* pAlpha0Im,
Ipp32f* pAlpha1Re, Ipp32f* pAlpha1Im,
int k0, int len))
IPPAPI( IppStatus, ippsPredictOneCoef_SBRHQ_32sc_D2L,
(const Ipp32sc* pSrc[], Ipp32sc* pAlpha0, Ipp32sc* pAlpha1, int k, int lenCorr))
IPPAPI( IppStatus, ippsPredictOneCoef_SBRLP_32s_D2L,
(const Ipp32s* pSrc[], Ipp32s* pAlpha0, Ipp32s* pAlpha1,
Ipp32s* pRefCoef, int k, int lenCorr, int flag))
/****************************************************************************
* FIXED-POINT VERSION
*
*
****************************************************************************/
/* <-------------------- HQ MODE --------------------------> */
/* GET SIZE */
IPPAPI( IppStatus, ippsAnalysisFilterGetSize_SBRHQ_32s32sc, ( int* pSizeSpec ))
IPPAPI( IppStatus, ippsSynthesisFilterGetSize_SBRHQ_32sc32s, ( int* pSizeSpec ))
IPPAPI( IppStatus, ippsSynthesisDownFilterGetSize_SBRHQ_32sc32s, ( int* pSizeSpec))
/* INIT */
IPPAPI( IppStatus, ippsAnalysisFilterInit_SBRHQ_32s32sc,
( IppsFilterSpec_SBR_C_32sc* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisFilterInit_SBRHQ_32sc32s,
( IppsFilterSpec_SBR_C_32sc* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisDownFilterInit_SBRHQ_32sc32s,
( IppsFilterSpec_SBR_C_32sc* pFilterSpec))
/* INITALLOC */
IPPAPI( IppStatus, ippsAnalysisFilterInitAlloc_SBRHQ_32s32sc,
( IppsFilterSpec_SBR_C_32sc** ppFilterSpec))
IPPAPI( IppStatus, ippsSynthesisFilterInitAlloc_SBRHQ_32sc32s,
( IppsFilterSpec_SBR_C_32sc** ppFilterSpec))
IPPAPI( IppStatus, ippsSynthesisDownFilterInitAlloc_SBRHQ_32sc32s,
( IppsFilterSpec_SBR_C_32sc** ppFilterSpec))
/* FREE */
IPPAPI( IppStatus, ippsAnalysisFilterFree_SBRHQ_32s32sc,
( IppsFilterSpec_SBR_C_32sc* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisFilterFree_SBRHQ_32sc32s,
( IppsFilterSpec_SBR_C_32sc* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisDownFilterFree_SBRHQ_32sc32s,
( IppsFilterSpec_SBR_C_32sc* pFilterSpec))
/* MAIN */
IPPAPI( IppStatus, ippsAnalysisFilter_SBRHQ_32s32sc,
(const Ipp32s* pSrc, Ipp32sc* pDst,int kx,
const IppsFilterSpec_SBR_C_32sc* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisFilter_SBRHQ_32sc32s,
(const Ipp32sc* pSrc, Ipp32s* pDst,
const IppsFilterSpec_SBR_C_32sc* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisDownFilter_SBRHQ_32sc32s,
(const Ipp32sc* pSrc, Ipp32s* pDst,
const IppsFilterSpec_SBR_C_32sc* pFilterSpec ))
/* <-----------------------LP MODE -----------------------> */
/* GET SIZE */
IPPAPI( IppStatus, ippsAnalysisFilterGetSize_SBRLP_32s, ( int* pSizeSpec ))
IPPAPI( IppStatus, ippsSynthesisFilterGetSize_SBRLP_32s, ( int* pSizeSpec ))
IPPAPI( IppStatus, ippsSynthesisDownFilterGetSize_SBRLP_32s, ( int* pSizeSpec ))
/* INIT */
IPPAPI( IppStatus, ippsAnalysisFilterInit_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisFilterInit_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisDownFilterInit_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s* pFilterSpec))
/* INITALLOC */
IPPAPI( IppStatus, ippsAnalysisFilterInitAlloc_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s** ppFilterSpec))
IPPAPI( IppStatus, ippsSynthesisFilterInitAlloc_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s** ppFilterSpec))
IPPAPI( IppStatus, ippsSynthesisDownFilterInitAlloc_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s** ppFilterSpec))
/* FREE */
IPPAPI( IppStatus, ippsAnalysisFilterFree_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisFilterFree_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisDownFilterFree_SBRLP_32s,
( IppsFilterSpec_SBR_R_32s* pFilterSpec))
/* MAIN */
IPPAPI( IppStatus, ippsAnalysisFilter_SBRLP_32s,
(const Ipp32s* pSrc, Ipp32s* pDst,int kx,
const IppsFilterSpec_SBR_R_32s* pFilterSpec))
IPPAPI( IppStatus, ippsSynthesisFilter_SBRLP_32s,
(const Ipp32s* pSrc, Ipp32s* pDst,
const IppsFilterSpec_SBR_R_32s* pFilterSpec ))
IPPAPI( IppStatus, ippsSynthesisDownFilter_SBRLP_32s,
(const Ipp32s* pSrc, Ipp32s* pDst,
const IppsFilterSpec_SBR_R_32s* pFilterSpec ))
/*
// ENCODER PART
*/
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterEncGetSize_SBR_32f
//
// Purpose:
// Returns size of FilterSpec_SBR specification structures & init buffer.
//
// Parameters:
// pSizeSpec Address of the FilterSpec_SBR specification
// structure size value in bytes.
// pSizeInitBuf Address size of the buffer for initialization
// functions in bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
*/
IPPAPI(IppStatus, ippsAnalysisFilterEncGetSize_SBR_32f,
(int *pSizeSpec,
int *pSizeInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterInitEnc_SBR_32f
//
// Purpose:
// Initializes analysis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to FilterSpec_SBR specification structure
//
// pInitBuf Pointer to the Init buffer.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
// ippStsContextMatchErr Indicates an error when the identifier pFilterSpec is
// incorrect.
*/
IPPAPI(IppStatus, ippsAnalysisFilterEncInit_SBR_32f,
(IppsFilterSpec_SBR_C_32fc *ppFilterSpec,
Ipp8u *pInitBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterEncInitAlloc_SBR_32f
//
// Purpose:
// Allocate memory for analysis specification structure and initializes it.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the IppsFilterSpec_SBR
// specification structure is written.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when ppFilterSpec is NULL.
*/
IPPAPI(IppStatus, ippsAnalysisFilterEncInitAlloc_SBR_32f, (IppsFilterSpec_SBR_C_32f **ppFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterEncFree_SBR_32f
//
// Purpose:
// Frees memory allocated for internal IppsFilterSpec_SBR structure.
//
// Parameters:
// pFilterSpec Pointer to the IppsFilterSpec_SBR specification
// structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pFilterSpec is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI(IppStatus, ippsAnalysisFilterEncFree_SBR_32f, (IppsFilterSpec_SBR_C_32f *pFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterEnc_SBR_32f32fc
//
// Purpose:
// Splits time domain signal output from the core decoder into 32 subband
// signals.
//
// Parameters:
// pSrc Pointer to the input audio signal.
//
// pDst Pointer to the output signal
//
// pFilterSpec Pointer to the FilterSpec_SBR specification
// structure.
//
// Returns:
// ippStsNoErr Indicates no error.
//
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
//
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI(IppStatus, ippsAnalysisFilterEnc_SBR_32f32fc,
(const Ipp32f *pSrc,
Ipp32fc *pDst,
const IppsFilterSpec_SBR_C_32f *pFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDetectTransient_SBR_32f
//
// Purpose:
// Transient detection is done by function.
//
// Parameters:
// pSrc pointer to the vector which stores the spectrum component of audio signal.
//
// pInOutThr Pointer to the threshold of deviation.
//
// pDst pointer to the transient threshold
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
*/
IPPAPI( IppStatus, ippsDetectTransient_SBR_32f, (const Ipp32f* pSrc, Ipp32f* pInOutThr, Ipp32f* pDst))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsEstimateTNR_SBR_32f
//
// Purpose:
// Function estimates Tonality-To-Noise Ratio of audio signal.
//
// Parameters:
// pSrc pointer to the vector which stores the spectrum component of audio signal
//
// pTNR0 Pointer to first estimation of TNR.
//
// pTNR1 Pointer to second estimation of TNR
//
// pMeanNrg pointer
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
*/
IPPAPI( IppStatus, ippsEstimateTNR_SBR_32f, (const Ipp32fc* pSrc, Ipp32f* pTNR0, Ipp32f* pTNR1, Ipp32f* pMeanNrg))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsUnpackFrameHeader_MP3
//
// Purpose:
// Unpacks audio frame header.
//
// Parameters:
// ppBitStream Pointer to the pointer to the first byte of the
// MP3 frame header (*ppBitstream will be updated
// in the function).
// pFrameHeader Pointer to the MP3 frame header structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when ppBitStreamp or
// FrameHeader is NULL.
*/
IPPAPI( IppStatus, ippsAnalysisFilter_PS_32fc_D2, (const Ipp32fc* pSrc, Ipp32fc ppDst[32][12],
IppAC_PS_DEC_ANALYSIS config))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilter_PS_32fc_D2
//
// Purpose:
// Increases frequency resolution of the first few lower subbands by hybrid filtering
//
// Parameters:
// pSrc Pointer to the lower QMF subband
// ppDst Output matrix, contains hybrid subband samples
// config flag describing configuration of hybrid filtering
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the specified pointers is NULL.
// ippStsBadArgErr Indicates an error when config isn't correct
*/
IPPAPI(IppStatus, ippsUnpackFrameHeader_MP3, (
Ipp8u** ppBitStream,
IppMP3FrameHeader* pFrameHeader))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsUnpackSideInfo_MP3
//
// Purpose:
// Unpacks side information from input bitstream for use during decoding
// of associated frame.
//
// Parameters:
// ppBitStream Pointer to the pointer to the first byte of the
// side information associated with the current
// frame in the bit stream buffer. The function
// updates this parameter.
// pFrameHeader Pointer to the structure that contains the
// unpacked MP3 frame header. The header structure
// provides format information about the input
// bitstream. Both single- and dual-channel MPEG-1
// and MPEG-2 modes are supported.
// pDstSideInfo Pointer to the MP3 side information structure.
// The structure contains side information that
// applies to all granules and all channels for the
// current frame. One or more of the structures are
// placed contiguously in the buffer pointed to by
// pDstSideInfo in the following order:
// {granule 0 (channel 0, channel 1), granule 1 (channel
// channel 1)}.
// pDstMainDataBegin Pointer to the main_data_begin field.
// pDstPrivateBits Pointer to the private bits field.
// pDstScfsi Pointer to the scale factor selection
// information associated with the current frame.
// The data is organized contiguously in the buffer
// pointed to by pDstScfsi in the following order:
// {channel 0 (scfsi_band 0, scfsi_band 1, ...,
// scfsi_band 3), channel 1 (scfsi_band 0,
// scfsi_band 1, ..., [, fsi_band 3)}.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pDstSideInfo,
// pDstMainDataBegin, pDstPrivateBits, pDstScfsi,
// pFrameHeader, or ppBitStream is NULL.
// ippStsMP3FrameHeaderErr Indicates an error when some elements in the
// MP3 frame header structure are invalid:
// pFrameHeader->id != IPP_MP3_ID_MPEG1
// pFrameHeader->id != IPP_MP3_ID_MPEG2
// pFrameHeader->layer != 1 pFrameHeader->mode < 0
// pFrameHeader->mode > 3.
// ippStsMP3SideInfoErr Indicates an error when the value of block_type
// is zero when window_switching_flag is set.
*/
IPPAPI(IppStatus, ippsUnpackSideInfo_MP3, (
Ipp8u** ppBitStream,
IppMP3SideInfo* pDstSideInfo,
int* pDstMainDataBegin,
int* pDstPrivateBits,
int* pDstScfsi,
IppMP3FrameHeader* pFrameHeader))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsUnpackScaleFactors_MP3_1u8s
//
// Purpose:
// Unpacks scalefactors.
//
// Parameters:
// ppBitStream Pointer to the pointer to the first bitstream
// buffer byte associated with the scale factors
// for the current frame, granule, and channel. The
// function updates this parameter.
// pOffSet Pointer to the next bit in the byte referenced by *
// ppBitStream. Valid within the range of 0 to 7,
// where 0 corresponds to the most significant bit
// and 7 corresponds to the least significant bit.
// The function updates this parameter.
// pDstScaleFactor Pointer to the scalefactor vector for long and/
// or short blocks.
// pSideInfo Pointer to the MP3 side information structure
// associated with the current granule and channel.
// pScfsi Pointer to scale factor selection information
// for the current channel.
// pFrameHeader Pointer to MP3 frame header structure for the
// current frame.
// granule Granule index. Can take the values
// of either 0 or 1.
// channel Channel index. Can take the values of either 0
// or 1.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when ppBitStream, pOffset,
// pDstScaleFactor, pSideInfo, pScfsi, ppBitStream,
// or pFrameHeader is NULL.
*/
IPPAPI(IppStatus, ippsUnpackScaleFactors_MP3_1u8s, (
Ipp8u** ppBitStream,
int* pOffset,
Ipp8s* pDstScaleFactor,
IppMP3SideInfo* pSideInfo,
int* pScfsi,
IppMP3FrameHeader* pFrameHeader,
int granule,
int channel))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsHuffmanDecode_MP3_1u32s
//
// Purpose:
// Decodes Huffman data.
//
// Parameters:
// ppBitStream Pointer to the pointer to the first bit stream
// byte that contains the Huffman code words
// associated with the current granule and channel.
// The function updates this parameter.
// pOffset Pointer to the starting bit position in the bit
// stream byte pointed to by *ppBitStream.
// The parameter is valid within the
// range of 0 to 7, where 0 corresponds to the most
// significant bit, and 7 corresponds to the least
// significant bit. The function updates this
// parameter.
// pDstIs Pointer to the vector of decoded Huffman symbols
// used to compute the quantized values of the 576
// spectral coefficients associated with the
// current granule and channel.
// pDstNonZeroBound Pointer to the spectral region above which all
// coefficients are set to zero.
// pSideInfo Pointer to MP3 structure containing side
// information associated with the current granule
// and channel.
// pFrameHeader Pointer to MP3 structure containing the header
// associated with the current frame.
// hufSize The number of Huffman code bits associated with
// the current granule and channel.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pOffset, pDstIs,
// pDstNonZeroBound, pSideInfo, pFrameHeader, or
// ppBitStream is NULL or when pOffset < 0 or
// pOffset > 7.
// ippStsMP3FrameHeaderErr Indicates an error when some elements in the
// MP3 frame header structure are invalid.
// ippStsMP3SideInfoErr Indicates an error when some elements in the MP3
// side information structure are invalid or when
// hufSize < 0 or hufSize > pSideInfo->part23Len.
// ippStsErr Indicates unknown error.
*/
IPPAPI(IppStatus, ippsHuffmanDecode_MP3_1u32s, (
Ipp8u** ppBitStream,
int* pOffset,
Ipp32s* pDstIs,
int* pDstNonZeroBound,
IppMP3SideInfo* pSideInfo,
IppMP3FrameHeader* pFrameHeader,
int hufSize))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsHuffmanDecodeSfb_MP3_1u32s
//
// Purpose:
// Decodes Huffman data.
//
// Parameters:
// ppBitStream Pointer to the pointer to the first bit stream
// byte that contains the Huffman code words
// associated with the current granule and channel.
// The function updates this parameter.
// pOffset Pointer to the starting bit position in the bit
// stream byte pointed to by *ppBitStream.
// The parameter is valid within the
// range of 0 to 7, where 0 corresponds to the most
// significant bit, and 7 corresponds to the least
// significant bit. The function updates this
// parameter.
// pDstIs Pointer to the vector of decoded Huffman symbols
// used to compute the quantized values of the 576
// spectral coefficients associated with the
// current granule and channel.
// pDstNonZeroBound Pointer to the spectral region above which all
// coefficients are set to zero.
// pSideInfo Pointer to MP3 structure containing side
// information associated with the current granule
// and channel.
// pFrameHeader Pointer to MP3 structure containing the header
// associated with the current frame.
// hufSize The number of Huffman code bits associated with
// the current granule and channel.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pOffset, pDstIs,
// pDstNonZeroBound, pSideInfo, pFrameHeader, or
// ppBitStream is NULL or when pOffset < 0 or
// pOffset > 7.
// ippStsMP3FrameHeaderErr Indicates an error when some elements in the
// MP3 frame header structure are invalid.
// ippStsMP3SideInfoErr Indicates an error when some elements in the MP3
// side information structure are invalid or when
// hufSize < 0 or hufSize > pSideInfo->part23Len.
// ippStsErr Indicates unknown error.
*/
IPPAPI(IppStatus, ippsHuffmanDecodeSfb_MP3_1u32s, (
Ipp8u** ppBitStream,
int* pOffset,
Ipp32s* pDstIs,
int* pDstNonZeroBound,
IppMP3SideInfo* pSideInfo,
IppMP3FrameHeader* pFrameHeader,
int hufSize,
IppMP3ScaleFactorBandTableLong pSfbTableLong))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsHuffmanDecodeSfbMbp_MP3_1u32s
//
// Purpose:
// Decodes Huffman data.
//
// Parameters:
// ppBitStream Pointer to the pointer to the first bit stream
// byte that contains the Huffman code words
// associated with the current granule and channel.
// The function updates this parameter.
// pOffset Pointer to the starting bit position in the bit
// stream byte pointed to by *ppBitStream.
// The parameter is valid within the
// range of 0 to 7, where 0 corresponds to the most
// significant bit, and 7 corresponds to the least
// significant bit. The function updates this
// parameter.
// pDstIs Pointer to the vector of decoded Huffman symbols
// used to compute the quantized values of the 576
// spectral coefficients associated with the
// current granule and channel.
// pDstNonZeroBound Pointer to the spectral region above which all
// coefficients are set to zero.
// pSideInfo Pointer to MP3 structure containing side
// information associated with the current granule
// and channel.
// pFrameHeader Pointer to MP3 structure containing the header
// associated with the current frame.
// hufSize The number of Huffman code bits associated with
// the current granule and channel.
// pSfbTableLong Pointer to the scale factor bands table for a
// long block.
// pSfbTableShort Pointer to scale factor band table for short
// block. You can use the default table from
// MPEG-1, MPEG-2 standards.
// pMbpTable Pointer to the mixed block partition table.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pOffset, pDstIs,
// pDstNonZeroBound, pSideInfo, pFrameHeader, or
// ppBitStream is NULL or when pOffset < 0 or
// pOffset > 7.
// ippStsMP3FrameHeaderErr Indicates an error when some elements in the
// MP3 frame header structure are invalid.
// ippStsMP3SideInfoErr Indicates an error when some elements in the MP3
// side information structure are invalid or when
// hufSize < 0 or hufSize > pSideInfo->part23Len.
// ippStsErr Indicates unknown error.
*/
IPPAPI(IppStatus, ippsHuffmanDecodeSfbMbp_MP3_1u32s, (
Ipp8u** ppBitStream,
int* pOffset,
Ipp32s* pDstIs,
int* pDstNonZeroBound,
IppMP3SideInfo* pSideInfo,
IppMP3FrameHeader* pFrameHeader,
int hufSize,
IppMP3ScaleFactorBandTableLong pSfbTableLong,
IppMP3ScaleFactorBandTableShort pSfbTableShort,
IppMP3MixedBlockPartitionTable pMbpTable))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsReQuantize_MP3_32s_I
//
// Purpose:
// Requantizes the decoded Huffman symbols.
//
// Parameters:
// pSrcDstIsXr Pointer to the vector of the decoded Huffman
// symbols. For stereo and dual channel modes,
// right channel data begins at the address &(
// pSrcDstIsXr[576]). The function updates this
// vector.
// pNonZeroBound Pointer to the spectral bound above which all
// coefficients are set to zero. For stereo and
// dual channel modes, the left channel bound is
// pNonZeroBound [0], and the right channel bound is pNonZeroBound
// [,\.
// pScaleFactor Pointer to the scalefactor buffer. For stereo
// and dual channel modes, the right channel
// scalefactors begin at & (pScaleFactor [
// IPP_MP3_SF_BUF_LEN]).
// pSideInfo Pointer to the side information for the current
// granule.
// pFrameHeader Pointer to the frame header for the current frame.
// pBuffer Pointer to the workspace buffer. The buffer
// length must be 576 samples.
// pSfbTableLong Pointer to the scale factor bands table for a
// long block.
// pSfbTableShort Pointer to the scale factor bands table for a
// short block.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSrcDstIsXr,
// pNonZeroBound, pScaleFactor, pSideInfo,
// pFrameHeader, or pBuffer is NULL.
// ippStsBadArgErr Indicates an error when pNonZeroBound exceeds [0
// , 576].
// ippStsMP3FrameHeaderErr Indicates an error when
// pFrameHeader->id != IPP_MP3_ID_MPEG1
// pFrameHeader->id != IPP_MP3_ID_MPEG2
// pFrameHeader->samplingFreq exceeds [0, 2],
// pFrameHeader->mode exceeds [0, 3],
// pFrameHeader->modeExt exceeds [0, 3].
// ippStsMP3SideInfoErr Indicates an error when the bitstream is in the
// stereo mode, but the block type of left is
// different from that of right, pSideInfo[ch].
// blockType exceeds [0, 3], pSideInfo[ch].
// mixedBlock exceeds [0, 1], pSideInfo[ch].
// globGain exceeds [0, 255], pSideInfo[ch].sfScale
// exceeds [0, 1], pSideInfo[ch].preFlag exceeds [0
// , 1], pSideInfo[ch].pSubBlkGain[w] exceeds [0, 7
// ], where ch is within the range of 0 to 1, and w
// is within the range of 0 to 2.
// ippStsErr Indicates an unknown error.
*/
IPPAPI(IppStatus, ippsReQuantize_MP3_32s_I, (
Ipp32s* pSrcDstIsXr,
int* pNonZeroBound,
Ipp8s* pScaleFactor,
IppMP3SideInfo* pSideInfo,
IppMP3FrameHeader* pFrameHeader,
Ipp32s* pBuffer))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsReQuantizeSfb_MP3_32s_I
//
// Purpose:
// Requantizes the decoded Huffman symbols.
//
// Parameters:
// pSrcDstIsXr Pointer to the vector of the decoded Huffman
// symbols. For stereo and dual channel modes,
// right channel data begins at the address &(
// pSrcDstIsXr[576]). The function updates this
// vector.
// pNonZeroBound Pointer to the spectral bound above which all
// coefficients are set to zero. For stereo and
// dual channel modes, the left channel bound is
// pNonZeroBound[0], and the right channel bound
// is pNonZeroBound[1].
// pScaleFactor Pointer to the scalefactor buffer. For stereo
// and dual channel modes, the right channel
// scalefactors begin at & (pScaleFactor [
// IPP_MP3_SF_BUF_LEN]).
// pSideInfo Pointer to the side information for the current
// granule.
// pFrameHeader Pointer to the frame header for the current frame.
// pBuffer Pointer to the workspace buffer. The buffer
// length must be 576 samples.
// pSfbTableLong Pointer to the scale factor bands table for a
// long block.
// pSfbTableShort Pointer to the scale factor bands table for a
// short block.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSrcDstIsXr,
// pNonZeroBound, pScaleFactor, pSideInfo,
// pFrameHeader, or pBuffer is NULL.
// ippStsBadArgErr Indicates an error when pNonZeroBound exceeds
// [0, 576].
// ippStsMP3FrameHeaderErr Indicates an error when
// pFrameHeader->id != IPP_MP3_ID_MPEG1
// pFrameHeader->id != IPP_MP3_ID_MPEG2
// pFrameHeader->samplingFreq exceeds [0, 2],
// pFrameHeader->mode exceeds [0, 3],
// pFrameHeader->modeExt exceeds [0, 3].
// ippStsMP3SideInfoErr Indicates an error when the bitstream is in the
// stereo mode, but the block type of left is
// different from that of right, pSideInfo[ch].
// blockType exceeds [0, 3], pSideInfo[ch].
// mixedBlock exceeds [0, 1], pSideInfo[ch].
// globGain exceeds [0, 255], pSideInfo[ch].sfScale
// exceeds [0, 1], pSideInfo[ch].preFlag exceeds [0
// , 1], pSideInfo[ch].pSubBlkGain[w] exceeds [0, 7
// ], where ch is within the range of 0 to 1, and w
// is within the range of 0 to 2.
// ippStsErr Indicates an unknown error.
*/
IPPAPI(IppStatus, ippsReQuantizeSfb_MP3_32s_I, (
Ipp32s* pSrcDstIsXr,
int* pNonZeroBound,
Ipp8s* pScaleFactor,
IppMP3SideInfo* pSideInfo,
IppMP3FrameHeader* pFrameHeader,
Ipp32s* pBuffer,
IppMP3ScaleFactorBandTableLong pSfbTableLong,
IppMP3ScaleFactorBandTableShort pSfbTableShort))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInv_MP3_32s
//
// Purpose:
// Performs the first stage of hybrid synthesis filter bank.
//
// Parameters:
// pSrcXr Pointer to the vector of requantized spectral
// samples for the current channel and granule,
// represented in Q5.26 format.
// pDstY Pointer to the vector of IMDCT outputs in Q7.24
// format for input to PQMF bank.
// pSrcDstOverlapAdd Pointer to the overlap-add buffer. Contains the
// overlapped portion of the previous granule IMDCT
// output in Q7.24 format. The function updates
// this buffer.
// nonZeroBound Limiting bound for spectral coefficients. All
// spectral coefficients exceeding this boundary
// become zero for the current granule and channel.
// pPrevNumOfImdct Pointer to the number of IMDCTs computed for the
// current channel of the previous granule. The
// function updates this parameter so that it
// references the number of IMDCTs for the current
// granule.
// blockType Block type indicator.
// mixedBlock Mixed block indicator.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsBadArgErr Indicates an error condition if at least one of
// the specified pointers is NULL.
// ippStsErr Indicates an error when one or more of the
// following input data errors are detected: either
// blockType exceeds [0,3], or mixedBlock exceeds [0
// ,1], or nonZeroBound exceeds [0,576], or *
// pPrevNumOfImdct exceeds [0,32].
*/
IPPAPI(IppStatus, ippsMDCTInv_MP3_32s, (
Ipp32s* pSrcXr,
Ipp32s* pDstY,
Ipp32s* pSrcDstOverlapAdd,
int nonZeroBound,
int* pPrevNumOfImdct,
int blockType,
int mixedBlock))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthPQMF_MP3_32s16s
//
// Purpose:
// Performs the second stage of hybrid synthesis filter bank.
//
// Parameters:
// pSrcY Pointer to the block of 32 IMDCT sub-band input
// samples in Q7.24 format.
// pDstAudioOut Pointer to the block of 32 reconstructed PCM
// output samples in 16-bit signed little-endian
// format. Left and right channels are interleaved
// according to the mode flag.
// pVBuffer Pointer to the input workspace buffer containing
// Q7.24 data. The function updates this parameter.
// NOTE. Note that the pointers pSrcXr and pDstY
// must reference different buffers. 10-104 10
// Intel Integrated Performance Primitives
// Reference Manual: Volume 1
// pVPosition Pointer to the internal workspace index. The
// function updates this parameter.
// mode Flag that indicates whether or not PCM audio
// output channels should be interleaved. 1
// indicates not interleaved, 2 indicates
// interleaved.
//
// Returns:
// ippStsNoErr Indicates no error. ippNullPtrErr Indicates an
// error when least one of the pointers pSrcY,
// pDstAudioOut, pVBuffer, or pVPosition is NULL.
// Audio Coding Functions 10 10-105
// ippStsBadArgErr Indicates an error when at least one of the
// specified pointers is NULL, or the value of mode
// is less than 1 or more than 2, or when the value
// of pVPosition exceeds [0, 15].
// ippStsErr Indicates an unknown error.
//
// Notes:
// Because the PQMF bank contains memory, the MP3 application must maintain
// two state variables in between calls to the primitive.
// First, the application must preallocate for the PQMF computation
// a workspace buffer of size 512 x Number of Channels. This buffer is
// referenced by the pointer pVBuffer, and its elements should be
// initialized to zero prior to the first call. During subsequent calls,
// the pVBuffer input for the current call should contain the pVbuffer
// output generated by the previous call. In addition to pVBuffer, the MP3
// application must also initialize to zero and thereafter preserve
// the value of the state variable pVPosition. The MP3 application should
// modify the values contained in pVBuffer or pVPosition only during
// decoder reset, and the reset values should always be zero.
*/
IPPAPI(IppStatus, ippsSynthPQMF_MP3_32s16s, (
Ipp32s* pSrcY,
Ipp16s* pDstAudioOut,
Ipp32s* pVBuffer,
int* pVPosition,
int mode))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsUnpackADIFHeader_AAC
//
// Purpose:
// Gets the AAC ADIF format header.
//
// Parameters:
// ppBitStream Double pointer to the current byte before the
// ADIF header.
// pADIFHeader Pointer to the IppACCADIFHeader structure.
// pPrgCfgElt Pointer to the IppAACPrgCfgElt structure. There
// must be prgCfgEltMax elements in the buffer.
// prgCfgEltMax Maximum program configure element number. Must
// be within the range of [1, 16].
//
// Returns:
// ippStsNoErr Indicates no error. Audio Coding Functions 10 10-
// 121
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pADIFHeader, pPrgCfgElt,
// or *ppBitStream is NULL.
// ippStsAacPrgNumErr Indicates an error when the decoded pADIFHeader->
// numPrgCfgElt > prgCfgEltMax, or prgCfgEltMax is
// outside the range of [1,IPP_AAC_MAX_ELT_NUM].
//
// Notes:
// 1. pADIFHeader->numPrgCfgElt is the number directly unpacked
// from bitstream plus 1.
// 2. It is assumed that it is known how many IppAACPrgCfgElt
// must be supported.
*/
IPPAPI(IppStatus, ippsUnpackADIFHeader_AAC,(Ipp8u **ppBitStream,
IppAACADIFHeader *pADIFHeader, IppAACPrgCfgElt *pPrgCfgElt,
int prgCfgEltMax ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodePrgCfgElt_AAC
//
// Purpose:
// Gets program configuration element from the input bitstream.
//
// Parameters:
// ppBitStream Double pointer to the current byte after
// decoding the program configuration element.
// pOffset Pointer to the bit position in the byte pointed
// to by *ppBitStream. Valid within 0 to 7: 0
// stands for the most significant bit of the byte;
// 7 stands for the least significant bit of the
// byte.
// pPrgCfgElt Pointer to IppAACPrgCfgElt structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pOffset, pPrgCfgElt, or *
// ppBitStream is NULL.
// ippStsAacBitOffsetErr Indicates an error when pOffset is out of the
// range of [0,7].
*/
IPPAPI(IppStatus, ippsDecodePrgCfgElt_AAC,(Ipp8u **ppBitStream, int *pOffset,
IppAACPrgCfgElt *pPrgCfgElt ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsUnpackADTSFrameHeader_AAC
//
// Purpose:
// Gets ADTS frame header from the input bitstream.
//
// Parameters:
// ppBitStream Double pointer to the current byte after
// unpacking the ADTS frame header.
// pADTSFrameHeader Pointer to the IppAACADTSFrameHeader structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pADTSFrameHeader, or
// *ppBitStream is NULL.
*/
IPPAPI(IppStatus, ippsUnpackADTSFrameHeader_AAC, (Ipp8u **ppBitStream,
IppAACADTSFrameHeader *pADTSFrameHeader))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeDatStrElt_AAC
//
// Purpose:
// Gets data stream element from the input bitstream.
//
// Parameters:
// ppBitStream Double pointer to the current byte.
// pOffset Pointer to the bit position in the byte pointed
// to by *ppBitStream. Valid within 0 to 7. 0
// stands for the most significant bit of the byte.
// 7 stands for the least significant bit of the
// byte.
// ppBitStream Double pointer to the current byte after the
// decode data stream element.
// pOffset Pointer to the bit position in the byte pointed
// to by *ppBitStream. Valid within 0 to 7. 0
// stands for the most significant bit of the byte.
// 7 stands for the least significant bit of the
// byte.
// pDataTag Pointer to element_instance_tag. See Table 6.20
// of ISO/IEC 13818-7:1997. pDataCn Pointer to the
// value of data length in bytes.
// pDstDataElt Pointer to the data stream buffer that contains
// the data stream extracted from the input
// bitstream. There are 512 elements in the buffer
// pointed to by pDstDataElt.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pOffset, *ppBitStream,
// pDataTag, pDataCnt, or pDstDataElt is NULL.
// ippStsAacBitOffsetErr Indicates an error when *pOffset is out of range
// [0,7].
*/
IPPAPI(IppStatus, ippsDecodeDatStrElt_AAC,(Ipp8u **ppBitStream, int *pOffset,
int *pDataTag, int *pDataCnt, Ipp8u *pDstDataElt ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeFillElt_AAC
//
// Purpose:
// Gets the fill element from the input bitstream.
//
// Parameters:
// ppBitStream Pointer to the pointer to the current byte after
// the decode fill element.
// pOffset Pointer to the bit position in the byte pointed
// to by *ppBitStream. Valid within 0 to 7. 0
// stands for the most significant bit of the byte.
// 7 stands for the least significant bit of the
// byte.
// pFillCnt Pointer to the value of the length of total fill
// data in bytes.
// pDstFillElt Pointer to the fill data buffer whose length
// must be equal to or greater than 270.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pOffset, pFillCnt, or
// pDstFillElt is NULL.
// ippStsAacBitOffsetErr Indicates an error when *pOffset is out of the
// range of [0,7].
*/
IPPAPI(IppStatus, ippsDecodeFillElt_AAC,(Ipp8u **ppBitStream, int *pOffset,
int *pFillCnt, Ipp8u *pDstFillElt ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeChanPairElt_AAC
//
// Purpose:
// Gets channel_pair_element from the input bitstream.
//
// Parameters:
// ppBitStream Double pointer to the current byte after
// decoding the channel pair element.
// pOffset Pointer to the bit position in the byte pointed
// to by *ppBitStream. Valid within 0 to 7: 0
// stands for the most significant bit of the byte;
// 7 stands for the least significant bit of the
// byte.
// pIcsInfo Pointer to IppAACIcsInfo structure. If pIcsInfo->
// predDataPres = 0, set pIcsInfo->predReset = 0.
// Only the first pIcsInfo->numWinGrp elements in
// pIcsInfo-> pWinGrpLen are meaningful. You should
// not change some members of the structure, as
// shown in Table 10-5.
// pChanPairElt Pointer to IppAACChanPairElt structure. You
// should not change some members of the structure,
// as shown in Table 10-5.
// predSfbMax Maximum prediction scale factor bands. For LC
// profile, set predSfbMax = 0.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pOffset, *ppBitStream,
// pIcsInfo, or pChanPairElt is NULL.
// ippStsAacBitOffsetErr Indicates an error when pOffset is out of the
// range of [0,7].
// ippStsAacMaxSfbErr Indicates an error when pIcsInfo->maxSfb decoded
// from bitstream is greater than IPP_AAC_MAX_SFB,
// the maximum scale factor band for all sampling
// frequencies.
// ippStsAacPredSfbErr Indicates an error when predSfbMax is out of
// the range of [0, IPP_AAC_PRED_SFB_MAX].
*/
IPPAPI(IppStatus, ippsDecodeChanPairElt_AAC, (Ipp8u **ppBitStream,
int *pOffset,
IppAACIcsInfo *pIcsInfo,
IppAACChanPairElt *pChanPairElt,
int predSfbMax))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsNoiselessDecoder_LC_AAC
//
// Purpose:
// Decodes all data for one channel.
//
// Parameters:
// ppBitStream Double pointers to bitstream buffer.
// pOffset Pointer to the offset in one byte.
// pChanInfo Pointer to the channel information.
// IppAACChanInfo structure. Denotes pIcsInfo as
// pChanInfo->pIcsInfo as shown in Table 10-6.
// commonWin Common window indicator.
// pDstScalefactor Pointer to the scalefactor or intensity position
// buffer. Buffer length is more than or equal to
// 120. Only maxSfb elements are stored for each
// group. There is no space between sequence groups.
// pDstQuantizedSpectralCoef Pointer to the quantized spectral
// coefficients data. For short block, the
// coefficients are interleaved by scale factor
// window bands in each group. Buffer length is
// more than or equal to 1024.
// pDstSfbCb Pointer to the scale factor band codebook.
// Buffer length must be more than or equal to 120.
// Store maxSfb elements for each group. There is
// no space between the sequence groups.
// pDstTnsFiltCoef Pointer to TNS coefficients. Buffer length must
// be more than or equal to 60. The store sequence
// is TNS order elements for each filter for each
// window. The elements are not changed if the
// corresponding TNS order is zero.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers ppBitStream, pOffset, pChanInfo,
// pDstScalefactor, pDstQuantizedSpectralCoef,
// pDstSfbCb, pDstTnsFiltCoef, pChanInfo->pIcsInfo,
// or *ppBitStream is NULL.
// ippStsAacBitOffsetErr Indicates an error when pOffset is out of range
// [0,7].
// ippStsAacComWinErr Indicates an error when commonWin exceeds [0,1].
// ippStsAacSmplRateIdxErr Indicates an error when pChanInfo->
// samplingRateIndex exceeds [0,11].
// ippStsAacPredSfbErr Indicates an error when pChanInfo->predSfbMax is
// not equal to 0.
// ippStsAacMaxSfbErr Indicates an error when pChanInfo->pIcsInfo->
// maxSfb > pChanInfo->numSwb.
// ippStsAacSectCbErr Indicates an error when the codebook pointed to
// by pChanInfo->pSectCb is illegal or when (
// pChanInfo->pSectCb)==12, 13. pTnsRegionLen As
// output. Pointer to the length of the region in
// units of scale factor bands to which one filter
// is applied in each window. pTnsFiltOrder As
// output. Pointer to the order of the temporal
// noise shaping filter applied to each window.
// pTnsDirection As output. Pointer to the token
// that indicates whether the filter is applied in
// the upward or downward direction. 0 stands for
// upward and 1 for downward. pIcsInfo As input if
// commonWin == 1. As output if commonWin == 0. If
// pIcsInfo->predDataPres == 0, set pIcsInfo->
// predReset = 0. Only the first pIcsInfo->
// numWinGrp elements in pIcsInfo-> pWinGrpLen are
// meaningful. Under specific conditions, some
// members of the structure must remain unchanged.
// ippStsAacPlsDataErr Indicates an error when the pChanInfo->pIcsInfo->
// winSequence indicates a short sequence and
// pChanInfo->pulsePres indicates pulse data present
// . The start scale factor band for pulse data >=
// pChanInfo->numSwb, or pulse data position offset
// >= winLen.
// ippStsAacGainCtrErr Indicates an error when pChanInfo->
// gainControlPres is decoded as 1, which means
// that gain control data is present. Gain control
// data is not currently supported.
// ippStsAacCoefValErr Indicates an error when the quantized
// coefficients value pointed to by pDstCoef
// exceeds range [-8191, 8191].
//
// Notes:
// User must set pChanInfo->samplingRateIndex, predSfbMax, pIcsInfo,
// before calling this function.
*/
IPPAPI(IppStatus, ippsNoiselessDecoder_LC_AAC,(Ipp8u **ppBitStream,
int *pOffset, int commonWin, IppAACChanInfo *pChanInfo,
Ipp16s *pDstScalefactor, Ipp32s *pDstQuantizedSpectralCoef,
Ipp8u *pDstSfbCb, Ipp8s *pDstTnsFiltCoef ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsQuantInv_AAC_32s_I
//
// Purpose:
// Performs inverse quantization of Huffman symbols for current channel
// inplace.
//
// Parameters:
// pSrcDstSpectralCoef On input, pointer to the input quantized
// coefficients. For short block the coefficients
// are interleaved by scale factor window bands in
// each group. Buffer length must be more than or
// equal to 1024. On output, pointer to the
// destination inverse quantized coefficient in Q13.
// 18 format. For short block, the coefficients are
// interleaved by scale factor window bands in each
// group. Buffer length must be more than or equal
// to 1024. The maximum error of output.
// pSrcDstSpectralCoef[i] is listed in Table 10-7.
// pScalefactor Pointer to the scalefactor buffer. Buffer length
// must be more than or equal to 120.
// numWinGrp Group number.
// pWinGrpLen Pointer to the number of windows in each group.
// Buffer length must be more than or equal to 8.
// maxSfb Maximal scale factor bands number for the
// current block.
// pSfbCb Pointer to the scale factor band codebook,
// buffer length must be more than or equal to 120.
// Only maxSfb elements for each group are
// meaningful. There are no spaces between the
// sequence groups.
// samplingRateIndex Sampling rate index. Valid within [0, 11]. See
// Table 6.5 of ISO/IEC 13818-7:1997.
// winLen Data number in one window.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacSmplRateIdxErr Indicates an error when pChanInfo->
// samplingRateIndex exceeds [0, 11].
// ippStsAacMaxSfbErr Indicates an error when maxSfb exceeds [0,
// IPP_AAC_MAX_SFB].
// ippStsAacWinGrpErr Indicates an error when numWinGrp exceeds [0, 8]
// for long window or is not equal to 1 for short
// window.
// ippStsAacWinLenErr Indicates an error when winLen is not equal to
// 128 or 1024;
// ippStsAacCoefValErr Indicates an error when the quantized
// coefficients value pointed to by
// pSrcDstSpectralCoef exceeds [-8191,8191].
*/
IPPAPI(IppStatus, ippsQuantInv_AAC_32s_I,(Ipp32s *pSrcDstSpectralCoef,
const Ipp16s *pScalefactor, int numWinGrp,
const int *pWinGrpLen, int maxSfb, const Ipp8u *pSfbCb,
int samplingRateIndex, int winLen ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeMsStereo_AAC_32s_I
//
// Purpose:
// Processes mid-side (MS) stereo for pair channels in-place.
//
// Parameters:
// pSrcDstL On input, pointer to left channel data in Q13.18
// format. For short block, the coefficients are
// interleaved by scale factor window bands in each
// group. Buffer length must be more than or equal
// to 1024. On output, pointer to left channel data
// in Q13.18 format. For short blocks, the
// coefficients are interleaved by scale factor
// window bands in each group. Buffer length must
// be more than or equal to 1024.
// pSrcDstR On input, pointer to right channel data in Q13.
// 18 format. For short block, the coefficients are
// interleaved by scale factor window bands in each
// group. Buffer length must be more than or equal
// to 1024. On output, pointer to right channel
// data in Q13.18 format. For short blocks, the
// coefficients are interleaved by scale factor
// window bands in each group. Buffer length must
// be more than or equal to 1024.
// msMaskPres MS stereo mask flag: - 0: MS off; - 1: MS on; - 2:
// MS all bands on.
// pMsUsed Pointer to the MS Stereo flag buffer. Buffer
// length must be more than or equal to 120.
// pSfbCbPointer Pointer to the scale factor band
// codebook, buffer length must be more than or
// equal to 120. Store maxSfb elements for each
// group.There is no space between the sequence
// groups.
// numWinGrp Group number.
// pWinGrpLen Pointer to the number of windows in each group.
// Buffer length must be more than or equal to 8.
// maxSfb Maximal scale factor bands number for the
// current block.
// samplingRateIndex Sampling rate index. Valid within [0, 11]. See
// Table 6.5 of ISO/IEC 13818-7:1997.
// winLen Data number in one window.
// pSrcDstR Pointer to right channel data in Q13.18 format.
// For short blocks, the coefficients are
// interleaved by scale factor window bands in each
// group. Buffer length must be more than or equal
// to 1024.
// pSfbCb Pointer to the scale factor band codebook. If
// invert_intensity (group, sfb) = -1, and if
// *pSfbCb = INTERITY_HCB, let
// *pSfbCb = INTERITY_HCB2.
// If *pSfbCb = INTERITY_HCB2, let
// *pSfbCb = INTERITY_HCB. Buffer length must be more
// than or equal to 120. Store maxSfb elements for
// each group. There is no space between the
// sequence groups.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacMaxSfbErr Indicates an error when the coefficient index
// calculated from samplingFreqIndex and maxSfb
// exceeds winLen in each window.
// ippStsAacSamplRateIdxErr Indicates an error when pChanInfor->
// samplingRateIndex exceeds [0,11].
// ippStsAacWinGrpErr Indicates an error when numWinGrp exceeds [0,8]
// for long window or is not equal to 1 for short
// window.
// ippStsAacWinLenErr Indicates an error when winLen is not equal 128
// or 1024.
// ippStsStereoMaskErr Indicates an error when the stereo mask flag is
// not equal 1 or 2.
//
// Notes:
// Input and output data are in interleaving mode, only for CPE.
*/
IPPAPI(IppStatus, ippsDecodeMsStereo_AAC_32s_I,(Ipp32s *pSrcDstL,
Ipp32s *pSrcDstR, int msMaskPres, const Ipp8u *pMsUsed,
Ipp8u *pSfbCb, int numWinGrp, const int *pWinGrpLen,
int maxSfb, int samplingRateIndex, int winLen ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeIsStereo_AAC_32s
//
// Purpose:
// Processes intensity stereo for pair channels.
//
// Parameters:
// pSrcL Pointer to left channel data in Q13.18 format.
// For short block, the coefficients are
// interleaved by scale factor window bands in each
// group. Buffer length must be more than or equal
// to 1024.
// pDstR Pointer to right channel data in Q13.18 format.
// For short block, the coefficients are
// interleaved by scale factor window bands in each
// group. Buffer length must be more than or equal
// to 1024.
// pScalefactor Pointer to the scalefactor buffer. Buffer length
// must be more than or equal to 120.
// pSfbCb Pointer to the scale factor band codebook,
// buffer length must be more than or equal to 120.
// Store maxSfb elements for each group.There is no
// space between the sequence groups. Respective
// values of pSfbCb[sfb] equal to 1, -1, or 0
// indicate the intensity stereo mode, that is,
// direct, inverse, or none.
// numWinGrp Group number.
// pWinGrpLen Pointer to the number of windows in each group.
// Buffer length must be more than or equal to 8.
// maxSfbMax Maximal scale factor bands number for
// the current block.
// samplingRateIndex Sampling rate index. Valid within [0, 11]. See
// Table 6.5 of ISO/IEC 13818-7:1997.
// winLen Data number in one window.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacMaxSfbErr Indicates an error when the coefficient index
// calculated from samplingFreqIndex and maxSfb
// exceeds winLen in each window.
// ippStsAacSamplRateIdxErr Indicates an error when pChanInfor->
// samplingRateIndex exceeds [0,11].
*/
IPPAPI(IppStatus, ippsDecodeIsStereo_AAC_32s,(const Ipp32s *pSrcL,
Ipp32s *pDstR, const Ipp16s *pScalefactor,
const Ipp8u *pSfbCb, int numWinGrp, const int *pWinGrpLen,
int maxSfb, int samplingRateIndex, int winLen ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDeinterleaveSpectrum_AAC_32s
//
// Purpose:
// Deinterleaves the coefficients for short block.
//
// Parameters:
// pSrc Pointer to source coefficients buffer. The
// coefficients are interleaved by scale factor
// window bands in each group. Buffer length must
// be more than or equal to 1024.
// pDst Pointer to the output of coefficients. Data
// sequence is ordered in pDst[w*128+sfb*sfbWidth[
// sfb]+i], where w is window index, sfb is scale
// factor band index, sfbWidth is the scale factor
// band width table, i is the index within scale
// factor band. Buffer length must be more than or
// equal to 1024.
// numWinGrp Group number.
// pWinGrpLen Pointer to the number of windows in each group.
// Buffer length must be more than or equal to 8.
// maxSfb Maximal scale factor bands number for
// the current block.
// samplingRateIndex Sampling rate index. Valid in [0, 11]. See Table
// 6.5 of ISO/IEC 13818-7:1997.
// winLen Data number in one window.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacMaxSfbErr Indicates an error when the coefficient index
// calculated from samplingFreqIndex and maxSfb
// exceeds winLen in each window.
// ippStsAacSamplRateIdxErr Indicates an error when pChanInfor->
// samplingRateIndex exceeds [0,11].
// ippStsAacWinGrpErr Indicates an error when numWinGrp exceeds [0,8].
// ippStsAacWinLenErr Indicates an error when winLen is not equal to
// 128.
*/
IPPAPI(IppStatus, ippsDeinterleaveSpectrum_AAC_32s,(const Ipp32s *pSrc,
Ipp32s *pDst, int numWinGrp, const int *pWinGrpLen,
int maxSfb, int samplingRateIndex, int winLen ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeTNS_AAC_32s_I
//
// Purpose:
// Decodes for Temporal Noise Shaping in-place.
//
// Parameters:
// pSrcDstSpectralCoefs On input, pointer to the input spectral
// coefficients to be filtered by the all-pole
// filters in Q13.18 format. There are 1024
// elements in the buffer pointed to by
// pSrcDstSpectralCoefs. On output, pointer to the
// output spectral coefficients after filtering by
// the all-pole filters in Q13.18 format.
// pTnsNumFilt Pointer to the number of noise shaping filters
// used for each window of the current frame. There
// are 8 elements in the buffer pointed to by
// pTnsNumFilt which are arranged as follows:pTnsNumFilt[w]:
// the number of noise shaping filters used for
// window w, w = 0 to numWin-1.
// pTnsRegionLen Pointer to the length of the region in units of
// scale factor bands to which one filter is
// applied in each window of the current frame.
// There are 8 elements in the buffer pointed to by
// pTnsRegionLen, which are arranged as follows:
// pTnsRegionLen[i]: the length of the region to
// which filter filt is applied in window w w = 0
// to numWin-1, filt=0 to pTnsNumFilt[w]-1.
// pTnsFiltOrder Pointer to the order of one noise shaping filter
// applied to each window of the current frame.
// There are 8 elements in the buffer pointed to by
// pTnsFiltOrder, which are arranged as follows:
// pTnsFiltOrder[i]: the order of one noise shaping
// filter filt, which is applied to window w w = 0
// to numWin-1, filt=0 to pTnsNumFilt[w]-1.
// pTnsFiltCoefRes Pointer to the resolution of 3 bits or 4 bits of
// the transmitted filter coefficients for each
// window of the current frame. There are 8
// elements in the buffer pointed to by
// pTnsFiltCoefRes, which are arranged as follows:
// pTnsFiltCoefRes[w]: the resolution of the
// transmitted filter coefficients for window w, w
// = 0 to numWin-1.
// pTnsFiltCoef Pointer to the coefficients of one noise shaping
// filter applied to each window of the current
// frame. There are 60 elements in the buffer
// pointed to by pTnsFiltCoef, which are arranged
// as follows: pTnsFiltCoef[i], pTnsFiltCoef[i+1],
// ..., pTnsFiltCoef[i+order-1]: the coefficients of
// one noise shaping filter filt, which is applied
// to window w. The order is the same as that of
// the noise shaping filter filt as applied to
// window w, w = 0 to numWin-1, filt=0 to
// pTnsNumFilt[w]-1. For example, pTnsFiltCoef[0],
// pTnsFiltCoef[1], ..., pTnsFiltCoef[order0-1] are
// the coefficients of the noise shaping filter 0,
// which is applied to window 0, if present. If so,
// pTnsFiltCoef[order0], pTnsFiltCoef[order0+1], ...,
// pTnsFiltCoef[order0+order1-1] are the
// coefficients of the noise shaping filter 1
// applied to window 0, if present, and so on.
// order0 is the same as that of the noise shaping
// filter 0 applied to window 0, and order1 is the
// order of the noise shaping filter 1 applied to
// window 0. After window 0 is processed, process
// window 1, then window 2 until all numWin windows
// are processed.
// pTnsDirection Pointer to the token that indicates whether the
// filter is applied in the upward or downward
// direction. 0 stands for upward and 1 for downward
// . There are 8 elements in the buffer pointed to
// by pTnsDirection which are arranged as follows:
// pTnsDirection[i]: the token indicating whether
// the filter filt is applied in upward or downward
// direction to window w w = 0 to numWin-1, filt=0
// to pTnsNumFilt[w]-1.
// maxSfb Number of scale factor bands transmitted per
// window group of the current frame.
// profile Profile index from Table 7.1 in ISO/IEC 13818-7:
// 1997.
// samplingRateIndex Index indicating the sampling rate of the
// current frame.
// winLen Data number in one window.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL. IppStsTnsProfielErr Indicates
// an error when profile != 1.
// ippStsAacTnsNumFiltErr Indicates an error when a data error occurs:
// for a short window sequence pTnsNumFilt[w]
// exceeds [0,1]; Table 10-8 Computation Error List
// for pSrcDstSpectralCoefs MAX(error(
// pSrcDstSpectralCoefs[i])) Condition 4095 8 ==
// numWin 32767 1 == numWin NOTE. This function
// supports LC profile only. 10-142 10 Intel
// Integrated Performance Primitives Reference
// Manual: Volume 1 for a long window sequence,
// pTnsNumFilt[w] exceeds [0,3].
// ippStsAacTnsLenErr Indicates an error when pTnsRegionLen exceeds
// [0, numSwb].
// ippStsAacTnsOrderErr Indicates an error when a data error occurs: for
// a short window sequence, pTnsFiltOrder exceeds
// [0,7]; for a long window sequence, pTnsFiltOrder
// exceeds [0,12].
// ippStsAacTnsCoefResErr Indicates an error when pTnsFiltCoefRes[w]
// exceeds [3, 4].
// ippStsAacTnsCoefErr Indicates an error when *pTnsFiltCoef exceeds
// [-8, 7].
// ippStsAacTnsDirectErr Indicates an error when *pTnsDirection exceeds
// [0, 1].
//
// Notes:
// Input/Output data(pSrcDstSpectralCoefs[]) are in Q3.
*/
IPPAPI(IppStatus, ippsDecodeTNS_AAC_32s_I,(Ipp32s *pSrcDstSpectralCoefs,
const int *pTnsNumFilt, const int *pTnsRegionLen,
const int *pTnsFiltOrder, const int *pTnsFiltCoefRes,
const Ipp8s *pTnsFiltCoef, const int *pTnsDirection,
int maxSfb, int profile, int samplingRateIndex, int winLen ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInv_AAC_32s16s
//
// Purpose:
// Maps time-frequency domain signal into time domain and generates 1024
// reconstructed 16-bit signed little-endian PCM samples.
//
// Parameters:
// pSrcSpectralCoefs Pointer to the input time-frequency domain
// samples in Q13.18 format. There are 1024
// elements in the buffer pointed to by
// pSrcSpectralCoefs.
// pSrcDstOverlapAddBuf Pointer to the overlap-add buffer that contains
// the second half of the previous block windowed
// sequence in Q13.18. There are 1024 elements in
// this buffer.
// winSequence Flag that indicates which window sequence is
// used for current block.
// winShape Flag that indicates which window function is
// selected for current block.
// prevWinShape Flag that indicates which window function is
// selected for previous block.
// pcmMode Flag that indicates whether the PCM audio output
// is interleaved, that is has the pattern LRLRLR...
// or not. 1 stands for not interleaved. 2 stands
// for interleaved
// pDstPcmAudioOut Pointer to the output 1024 reconstructed 16-bit
// signed little-endian PCM samples in Q15,
// interleaved, if needed. The maximum computation
// error for pDstPcmAudioOut is less than 1 for
// each vector element. The total quadratic error
// for the vector is less than 96.
// pSrcDstOverlapAddBuf Pointer to the overlap-add buffer which contains
// the second half of the current block windowed
// sequence in Q13.18. The maximum computation
// error for pDstPcmAudioOut is less than 4 for
// each vector element. The total quadratic error
// for the vector is less than 1536.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsAacWinSeqErr Indicates an error when winSequence exceeds [0,3].
// ippStsAacWinShapeErr Indicates an error when winShape or prevWinShape
// exceeds [0,1].
// ippStsAacPcmModeErr Indicates an error when pcmMode exceeds [1,2].
//
// Notes:
// Input data (pSrcSpectralCoefs[]) is in Q = _IPP_AAC_FB_Q;
// data (pSrcDstOverlapAdd[]) is in Q = _IPP_AAC_FB_Q.
*/
IPPAPI(IppStatus, ippsMDCTInv_AAC_32s16s,(Ipp32s *pSrcSpectralCoefs,
Ipp16s *pDstPcmAudioOut, Ipp32s *pSrcDstOverlapAddBuf,
int winSequence, int winShape, int prevWinShape, int pcmMode ))
IPPAPI(IppStatus, ippsMDCTInv_AAC_32s_I,(Ipp32s *tst_SrcDst, Ipp32s *tst_OverlapBuf,
int winSeq, int winShape, int prewinShape, int len))
IPPAPI(IppStatus, ippsMDCTFwd_AAC_32s_I,(Ipp32s *tst_SrcDst, int winSeq, int winShape,
int prewinShape, int len))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeMainHeader_AAC
//
// Purpose:
// Gets main header information and main layer information from bit stream.
//
// Parameters:
// ppBitStream Double pointer to bitstream buffer. *ppBitStream
// will be updated after decoding.
// pOffset Pointer to the offset in one byte. *pOffset will
// be updated after decoding.
// channelNum Number of channels.
// monoStereoFlag Current frame has mono and stereo layers.
// pAACMainHeader Pointer to the main element header.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacBitOffsetErr Indicates an error when pOffset exceeds [0,7].
// ippStsAacChanErr Indicates an error when channelNum exceeds [1,2].
// ippStsAacMonoStereoErr Indicates an error when monoStereoFlag exceeds
// [0,1].
*/
IPPAPI(IppStatus, ippsDecodeMainHeader_AAC,(Ipp8u **ppBitStream,
int *pOffset, IppAACMainHeader *pAACMainHeader, int channelNum,
int monoStereoFlag ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeExtensionHeader_AAC
//
// Purpose:
// Gets extension header information and extension layer information from
// bit stream.
//
// Parameters:
// ppBitStream Double pointer to bitstream buffer. *ppBitStream
// will be updated after decoding.
// pOffset Pointer to the offset in one byte. *pOffset will
// be updated after decoding.
// monoStereoFlag Flag indicating that the current frame has mono
// and stereo layers.
// thisLayerStereo Flag indicating that the current layer is stereo.
// monoLayerFlag Flag indicating that the current frame has a
// mono layer.
// preStereoMaxSfb Previous stereo layer maxSfb.
// hightstMonoMaxSfb Last mono layer maxSfb.
// winSequence Window type, short or long.
// pAACExtHeader Pointer to the extension element header.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacBitOffsetErr Indicates an error when pOffset is out of the
// range of [0,7].
// ippStsAacStereoLayerErr Indicates an error when thisLayerStereo
// exceeds [0,1].
// ippStsAacMonoLayerErr Indicates an error when monoLayerFlag exceeds
// [0,1].
// ippStsAacMaxSfbErr Indicates an error when at least one of
// preStereoMaxSfb, hightstMonoMaxSfb or number of
// scale factor bands used in this layer exceeds
// [0,IPP_AAC_MAX_SFB].
// ippStsAacMonoStereoErr Indicates an error when monoStereoFlag exceeds
// [0,1].
// ippStsAacWinSeqErr Indicates an error when winSequence exceeds
// [0,3].
//
*/
IPPAPI(IppStatus, ippsDecodeExtensionHeader_AAC,(Ipp8u **ppBitStream,
int *pOffset, IppAACExtHeader *pAACExtHeader, int monoStereoFlag,
int thisLayerStereo, int monoLayerFlag, int preStereoMaxSfb,
int hightstMonoMaxSfb, int winSequence ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodePNS_AAC_32s
//
// Purpose:
// Implements perceptual noise substitution (PNS) coding within
// individual channel stream (ICS).
//
// Parameters:
// pSrcDstSpec Pointer to spectrum coefficients for perceptual
// noise substitution (PNS).
// pSrcDstLtpFlag Pointer to long term predict (LTP) flag.
// pSfbCb Pointer to the scale factor codebook.
// pScaleFactor Pointer to the scalefactor value.
// maxSfb Number of scale factor bands used in this layer.
// numWinGrp Number of window groups.
// pWinGrpLen Pointer to the length of every window group.
// samplingFreqIndex Sampling frequency index.
// winLen Window length. 1024 for long windows, 128 for
// short windows.
// pRandomSeed Random seed for PNS.
// pSrcDstSpec Pointer to the output spectrum substituted by
// perceptual noise.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacMaxSfbErr Indicates an error when maxSfb exceeds [0,
// IPP_AAC_MAX_SFB].
// ippStsAacSmplRateIdxErr Indicates an error when pChanInfo->
// samplingRateIndex exceeds [0,12].
// ippStsAacWinLenErr Indicates an error when winLen is not equal to
// 128 or 1024.
*/
IPPAPI(IppStatus, ippsDecodePNS_AAC_32s,(Ipp32s *pSrcDstSpec,
int *pSrcDstLtpFlag, Ipp8u *pSfbCb, Ipp16s *pScaleFactor,
int maxSfb, int numWinGrp, int *pWinGrpLen, int samplingFreqIndex,
int winLen, int *pRandomSeed ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeMsPNS_AAC_32s
//
// Purpose:
// Implements perceptual noise substitution coding within an ICS.
//
// Parameters:
// pSrcDstSpec Pointer to spectrum coefficients before PNS.
// pSrcDstLtpFlag Pointer to the LTP flag.
// pSfbCb Pointer to the scalefactor code book.
// pScaleFactor Pointer to the scalefactor coefficients.
// maxSfb Number of max scalefactor band.
// numWinGrp Number groups of windows.
// pWinGrpLen Pointer to the group length.
// samplingFreqIndex Sampling frequency index.
// winLen Length of windows.
// pRandomSeed Random seed.
// channel Index of current channel:
// 0: left;
// 1: right.
// pMsUsed Pointer to MS used buffer in CPE structure.
// pNoiseState Pointer to noise state buffer, which stores
// the left channel's noise random seed for
// every scalefactor band. When pMsUsed[sfb]==1,
// the content in this buffer will be used for
// right channel.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacMaxSfbErr Indicates an error when maxSfb exceeds [0,
// IPP_AAC_MAX_SFB].
// ippStsAacWinGrpErr Indicates an error when numWinGrp exceeds [0,8].
// ippStsAacSmplRateIdxErr Indicates an error when samplingFreqIndex
// exceeds [0,16].
// ippStsAacWinLenErr Indicates an error when winLen is not equal to
// 128 or 1024.
*/
IPPAPI(IppStatus, ippsDecodeMsPNS_AAC_32s,(Ipp32s *pSrcDstSpec,
int *pSrcDstLtpFlag, Ipp8u *pSfbCb, Ipp16s *pScaleFactor,
int maxSfb, int numWinGrp, int *pWinGrpLen, int samplingFreqIndex,
int winLen, int *pRandomSeed, int channel, Ipp8u *pMsUsed, int *pNoiseState ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsLongTermReconstruct_AAC_32s
//
// Purpose:
// Uses Long Term Reconstruct (LTR) to reduce signal redundancy between
// successive coding frames.
//
// Parameters:
// pSrcDstSpec Pointer to spectral coefficients for LTP.
// pSrcEstSpec Pointer to the frequency domain vector.
// winSequence Window type, long or short.
// samplingFreqIndex Sampling frequency index.
// pLtpFlag Pointer to the LTP flag.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacSmplRateIdxErr Indicates an error when pChanInfo->
// samplingRateIndex exceeds [0,12].
// ippStsAacWinSeqErr Indicates an error when winSequence exceeds
// [0,3].
*/
IPPAPI(IppStatus, ippsLongTermReconstruct_AAC_32s,(Ipp32s *pSrcEstSpec,
Ipp32s *pSrcDstSpec, int *pLtpFlag, int winSequence,
int samplingFreqIndex ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsEncodeTNS_AAC_32s_I
//
// Purpose:
// Performs reversion of TNS in the Long Term Reconstruct loop in-place.
//
// Parameters:
// pSrcDst On input, pointer to the spectral coefficients
// for the TNS encoding operation. On output,
// pointer to the spectral coefficients after the
// TNS encoding operation.
// pTnsNumFilt Pointer to the number of TNS filters.
// pTnsRegionLen Pointer to the length of TNS filter.
// pTnsFiltOrder Pointer to the TNS filter order.
// pTnsFiltCoefRes Pointer to the TNS coefficient resolution flag.
// pTnsFiltCoef Pointer to the TNS filter coefficients.
// pTnsDirection Pointer to the TNS direction flag.
// maxSfb Maximum scale factor number.
// profile Audio profile.
// samplingFreqIndex Sampling frequency index.
// winLen Window length.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsTnsProfileErr Indicates an error when profile != 1.
// ippStsAacTnsNumFiltErr Indicates an error when *pTnsNumFilt exceeds
// [0, 1] for the short window sequence or [0, 3]
// for the long window sequence.
// ippStsAacTnsLenErr Indicates an error when *pTnsRegionLen exceeds
// [0, numSwb].
// ippStsAacTnsOrderErr Indicates an error when *pTnsFiltOrder exceeds
// [0, 7] for the short window sequence or [0, 12]
// for the long window sequence.
// ippStsAacTnsCoefResErr Indicates an error when *pTnsFiltCoefRes
// exceeds [3, 4].
// ippStsAacTnsCoefErr Indicates an error when *pTnsFiltCoef exceeds
// [-8, 7].
// ippStsAacTnsDirectErr Indicates an error when *pTnsDirection exceeds
// [0, 1].
// ippStsAacSmplRateIdxErr Indicates an error when samplingRateIndex
// exceeds [0, 12].
// ippStsAacWinLenErr Indicates an error when winLen is not equal to
// 128 or 1024.
//
// Notes:
// Input/Output data(pSrcDstSpectralCoefs[]) are in Q3.
*/
IPPAPI(IppStatus, ippsEncodeTNS_AAC_32s_I,(Ipp32s *pSrcDstSpectralCoefs,
const int *pTnsNumFilt, const int *pTnsRegionLen,
const int *pTnsFiltOrder, const int *pTnsFiltCoefRes,
const Ipp8s *pTnsFiltCoef, const int *pTnsDirection,
int maxSfb, int profile, int samplingRateIndex, int winLen ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsLongTermPredict_AAC_32s
//
// Purpose:
// Gets the predicted time domain signals in the Long Term Reconstruct
// (LTP) loop.
//
// Parameters:
// pSrcTimeSignal Pointer to the temporal signals to be predicted
// in the temporary domain.
// pDstEstTimeSignal Pointer to the output of samples after LTP.
// pAACLtpInfo Pointer to the LTP information.
// winSequence Window type, short or long.
// pDstEstTimeSignal Pointer to the prediction output in time domain.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers is NULL.
// ippStsAacWinSeqErr Indicates an error when winSequence exceeds
// [0,3].
*/
IPPAPI(IppStatus, ippsLongTermPredict_AAC_32s,(Ipp32s *pSrcTimeSignal,
Ipp32s *pDstEstTimeSignal, IppAACLtpInfo *pAACLtpInfo,
int winSequence ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsNoiseLessDecode_AAC
//
// Purpose:
// Performs noiseless decoding.
//
// Parameters:
// ppBitStream Double pointer to the bitstream to be parsed.
// *ppBitStream will be updated after decoding.
// pOffset Pointer to the offset in one byte. *pOffset will
// be updated after decoding.
// pAACMainHeader Pointer to main header information. Not used for
// scalable objects. When commonWin == 0 &&
// scaleFlag==0, you need to decode LTP information
// and save it in pAACMainHeader->pLtpInfo[].
// pChanInfo Pointer to channel information structure.
// windowSequence Window type, short or long.
// maxSfb Number of scale factor bands.
// commonWin Indicates if the channel pair uses the same ICS
// information.
// scaleFlag Flag indicating whether the scalable type is used.
// audioObjectType Audio object type indicator: 1 indicates the
// main type 2 indicates the LC type 6 indicates
// the scalable mode.
// pDstScaleFactor Pointer to the parsed scalefactor.
// pDstQuantizedSpectralCoef Pointer to the quantized spectral
// coefficients after Huffman decoding.
// pDstSfbCb Pointer to the scale factor codebook index.
// pDstTnsFiltCoef Pointer to TNS filter coefficients. Not used for
// scalable objects.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacBitOffsetErr Indicates an error when pOffset is out of the
// range [0,7].
// ippStsAacComWinErr Indicates an error when commonWin exceeds [0,1].
// ippStsAacMaxSfbErr Indicates an error when maxSfb exceeds [0,
// IPP_AAC_MAX_SFB].
// ippStsAacSmplRateIdxErr Indicates an error when pChanInfo->
// samplingRateIndex exceeds [0,11].
// ippStsAacCoefValErr Indicates an error when the quantized
// coefficients value pointed to by pDstCoef
// exceeds the range of [-8191,8191].
//
// Notes:
// User must set pChanInfo,winSequence, maxSfb, commonWin and
// scaleflag before calling this function; commonWin and scaleFlag
// are 1 in condition of scaleable;
// In comparison with AAC LC, only decode section data has little
// changes when get dpcm_noise_nrg or hcod_sf[dpcm_noise_nrg]
// information (all are stored in pDstScalefactor).
*/
IPPAPI(IppStatus, ippsNoiselessDecode_AAC,(Ipp8u **ppBitStream, int *pOffset,
IppAACMainHeader *pAACMainHeader, Ipp16s *pDstScalefactor,
Ipp32s *pDstQuantizedSpectralCoef, Ipp8u *pDstSfbCb,
Ipp8s *pDstTnsFiltCoef, IppAACChanInfo *pChanInfo,
int winSequence, int maxSfb, int commonWin,
int scaleFlag, int audioObjectType ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsLtpUpdate_AAC_32s
//
// Purpose:
// Performs required buffer update in the Long Term Reconstruct (LTP) loop.
//
// Parameters:
// pSpecVal Pointer to spectral value after TNS decoder in
// LTP loop.
// pLtpSaveBuf Pointer to save buffer for LTP. Buffer length
// should be 3*frameLength. The value is saved for
// next frame.
// winSequence Window type:
// - 0 stands for long
// - 1 stands for long start
// - 2 stands for short
// - 3 stands for long stop.
// winShape KBD or SIN window shape.
// preWinShape Previous window shape.
// pWorkBuf Work buffer for LTP update, length of pWorkBuf
// should be at least 2048*3 = 6144 words.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacWinSeqErr Indicates an error when winSequence exceeds [0,3].
// ippStsAacWinShapeErr Indicates an error when winShape or preWinShape
// exceeds [0,1].
*/
IPPAPI(IppStatus, ippsLtpUpdate_AAC_32s,(Ipp32s *pSpecVal,
Ipp32s *pLtpSaveBuf, int winSequence, int winShape,
int preWinShape, Ipp32s *pWorkBuf ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwd_AAC_32s
//
// Purpose:
// Generates spectrum coefficient of PCM samples.
//
// Parameters:
// pSrc Pointer to temporal signals to do MDCT.
// pDst Output of MDCT, the spectral coefficients of PCM
// samples.
// pOverlapAdd Pointer to overlap buffer. Not used for MPEG-4
// AAC decoding.
// winSequence Window sequence indicating if the block is long
// or short.
// winShape Current window shape.
// preWinShape Previous window shape.
// pWindowedBuf Work buffer for MDCT. Should be at least 2048
// words.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacWinSeqErr Indicates an error when winSequence exceeds [0,3].
// ippStsAacWinShapeErr Indicates an error when preWinShape exceeds
// [0,1].
*/
IPPAPI(IppStatus, ippsMDCTFwd_AAC_32s,(Ipp32s *pSrc, Ipp32s *pDst,
Ipp32s *pOverlapAdd, int winSequence, int winShape,
int preWinShape, Ipp32s *pWindowedBuf ))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsDecodeChanPairElt_MP4_AAC
//
// Purpose:
// Gets channel_pair_element from the input bitstream.
//
// Parameters:
// ppBitStream Double pointer to the current byte.*ppBitStream
// will be updated after decoding.
// pOffset Pointer to the bit position in the byte pointed
// to by *ppBitStream. Valid within 0 to 7: 0
// stands for the most significant bit of the byte;
// 7 stands for the least significant bit of the
// byte.
// pIcsInfo Pointer to IppAACIcsInfo structure.
// pChanPairElt Pointer to IppAACChanPairElt structure.
// pAACMainHeader Pointer to the main element header.
// predSfbMax Maximum prediction scale factor bands.
// audioObjectType Audio object type indicator: 1 indicates the
// main type 2 indicates the LC type 6 indicates
// the scalable mode.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// specified pointers is NULL.
// ippStsAacBitOffsetErr Indicates an error when pOffset is out of the
// range of [0,7].
// ippStsAacMaxSfbErr Indicates an error when pIcsInfo->maxSfb decoded
// from bitstream is greater than IPP_AAC_MAX_SFB,
// the maximum scale factor band for all sampling
// frequencies.
*/
IPPAPI(IppStatus, ippsDecodeChanPairElt_MP4_AAC,(Ipp8u **ppBitStream, int *pOffset,
IppAACIcsInfo *pIcsInfo, IppAACChanPairElt *pChanPairElt,
IppAACMainHeader *pAACMainHeader, int predSfbMax,
int audioObjectType))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVLCDecodeEscBlock_MP3_1u16s
//
// Purpose:
// Parses the bitstream and decodes variable length code for MP3.
//
// Parameters:
// ppBitStream Pointer to pointer to the current byte in the
// bitstream buffer. *ppBitStream is updated by the
// function.
// pBitOffset Pointer to the bit position in the byte pointed
// by *ppBitStream.
// *pBitOffset is updated by the function.
// linbits Length of escape sequence.
// pData Pointer to the array of decoded values.
// len Number of values to decode into array pData.
// pVLCSpec Pointer to VLCDecoder specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one or more pointers
// passed to the function is NULL.
// ippStsVLCInputDataErr Indicates an error when incorrect input is used.
// For decode functions it can indicate that
// bitstream contains code that is not specified
// inside the used table.
// ippStsBitOffsetErr Indicates an error when *pBitOffset is less
// than 0 or more than 7.
// ippStsContextMatchErr Indicate an error when pVLCSpec struct was not
// created by ippsVLCDecodeInit_32s or
// ippsVLCDecodeInitAlloc_32s functions.
*/
IPPAPI(IppStatus, ippsVLCDecodeEscBlock_MP3_1u16s,(Ipp8u **ppBitStream,
int *pBitOffset,
int linbits,
Ipp16s *pData,
int len,
const IppsVLCDecodeSpec_32s *pVLCSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVLCDecodeEscBlock_AAC_1u16s
//
// Purpose:
// Parses the bitstream and decodes variable length code for AAC.
//
// Parameters:
// ppBitStream Pointer to pointer to the current byte in the
// bitstream buffer. *ppBitStream is updated by
/ the function.
// pBitOffset Pointer to the bit position in the byte pointed
// by *ppBitStream.
// *pBitOffset is updated by the function.
// pData Pointer to the array of decoded values.
// len Number of values to decode into array pData.
// pVLCSpec Pointer to VLCDecoder specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one or more pointers
// passed to the function is NULL.
// ippStsVLCInputDataErr Indicates an error when incorrect input is used.
// For decode functions it can indicate that
// bitstream contains code that is not specified
// inside the used table.
// ippStsBitOffsetErr Indicates an error when *pBitOffset is less
// than 0 or more than 7.
// ippStsVLCAACEscCodeLengthErr Indicates an error when bitstream
// contains AAC-Esc code with the length more than
// 21.
// ippStsContextMatchErr Indicate an error when pVLCSpec struct was not
// created by ippsVLCDecodeInit_32s or
// ippsVLCDecodeInitAlloc_32s functions.
*/
IPPAPI(IppStatus, ippsVLCDecodeEscBlock_AAC_1u16s,(Ipp8u **ppBitStream,
int *pBitOffset,
Ipp16s *pData,
int len,
const IppsVLCDecodeSpec_32s *pVLCSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVLCEncodeEscBlock_MP3_16s1u
//
// Purpose:
// Encodes an array of values into destination bitstream in MP3 format
// and advances bitstream pointer.
//
// Parameters:
// pInputData Pointer to the array of source values.
// len Size of values array pInputData.
// linbits Length of escape sequence.
// ppBitStream Pointer to pointer to the current byte in the
// bitstream buffer. *ppBitStream is updated by
// the function.
// pBitOffset Ppointer to the bit position in the byte pointed
// by *ppBitStream.
// *pBitOffset is updated by the function.
// pVLCSpec Pointer to VLCEncoder specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pointers to data
// arrays are NULL.
// ippStsBitOffsetErr Indicates an error when *pBitOffset is less
// than 0 or more than 7.
// ippStsContextMatchErr Indicate an error when pVLCSpec struct was not
// created by ippsVLCEncodeInit_32s or
// ippsVLCEncodeInitAlloc_32s functions.
*/
IPPAPI(IppStatus, ippsVLCEncodeEscBlock_MP3_16s1u,(const Ipp16s *pInputData,
int len,
int linbits,
Ipp8u **ppBitStream,
int *pBitOffset,
const IppsVLCEncodeSpec_32s *pVLCSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVLCEncodeEscBlock_AAC_16s1u
//
// Purpose:
// Encodes an array of values into destination bitstream in AAC format
// and advances bitstream pointer.
//
// Parameters:
// pInputData Pointer to the array of source values.
// len Size of values array pInputData.
// ppBitStream Pointer to pointer to the current byte in the
// bitstream buffer.
// *ppBitStream is updated by the function.
// pBitOffset Pointer to the bit position in the byte pointed
// by *ppBitStream.
// *pBitOffset is updated by the function.
// pVLCSpec Pointer to VLCEncoder specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pointers to data
// arrays are NULL.
// ippStsBitOffsetErr Indicates an error when *pBitOffset is less
// than 0 or more than 7.
// ippStsContextMatchErr Indicate an error when pVLCSpec struct was not
// created by ippsVLCEncodeInit_32s or
// ippsVLCEncodeInitAlloc_32s functions.
*/
IPPAPI(IppStatus, ippsVLCEncodeEscBlock_AAC_16s1u,(const Ipp16s *pInputData,
int len,
Ipp8u **ppBitStream,
int *pBitOffset,
const IppsVLCEncodeSpec_32s *pVLCSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVLCCountEscBits_MP3_16s32s
//
// Purpose:
// Calculates the number of bits necessary for encoding in MP3 format.
//
// Parameters:
// pInputData Pointer to the array of source values.
// len Size of values array pInputData.
// linbits Length of escape sequence. pCounBits Pointer to
// calculated length in bits to encode pInputData.
// pVLCSpec Pointer to VLCEncoder specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pointers to data
// arrays are NULL.
// ippStsContextMatchErr Indicate an error when pVLCSpec struct was not
// created by ippsVLCEncodeInit_32s or
// ippsVLCEncodeInitAlloc_32s functions.
*/
IPPAPI(IppStatus, ippsVLCCountEscBits_MP3_16s32s,(const Ipp16s *pInputData,
int len,
int linbits,
Ipp32s *pCountBits,
const IppsVLCEncodeSpec_32s *pVLCSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsVLCCountEscBits_AAC_16s32s
//
// Purpose:
// Calculates the number of bits necessary for encoding in AAC format.
//
// Parameters:
// pInputData Pointer to the array of source values.
// len Size of values array pInputData.
// pCountBits Pointer to calculated length in bits to encode
// pInputData.
// pVLCSpec Pointer to VLCEncoder specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when the pointers to data
// arrays are NULL.
// ippStsContextMatchErr Indicate an error when pVLCSpec struct was not
// created by ippsVLCEncodeInit_32s or
// ippsVLCEncodeInitAlloc_32s functions.
*/
IPPAPI(IppStatus, ippsVLCCountEscBits_AAC_16s32s,(const Ipp16s *pInputData,
int len,
Ipp32s *pCountBits,
const IppsVLCEncodeSpec_32s *pVLCSpec))
/*******************************************************************/
/*
// Name: ippsVLCDecodeUTupleEscBlock_MP3_1u16s
// Purpose: decodes a len element encoded by VLC code from the source data
// *ppBitStream with *pBitOffset bits offset and stores the result in
// the destination *pData
//
// Arguments:
// ppBitStream Pointer to pointer to the current byte in the
// bitstream buffer. *ppBitStream is updated by the function.
// pBitOffset Pointer to the bit position in the byte pointed by
// *ppBitStream. Valid within the range 0 to 7.
// *pBitOffset is updated by the function.
// linbits Length of escape sequence.
// pData Pointer to the array of decoded values.
// len Number of values to decode into array pData.
// pVLCSpec pointer to VLCDecoder specification structure
//
// Return:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one or more pointers
// passed to the function is NULL.
// ippStsVLCInputDataErr Indicates an error when incorrect input is used.
// For decode functions it can indicate that bitstream
// contains code that is not specified inside the used table.
// ippStsBitOffsetErr Indicate an error when offset less than 0 or more then 7.
// ippStsContextMatchErr Indicate an error when pVLCSpec struct was not created by
// ippsVLCDecodeInit_32s or ippsVLCDecodeInitAlloc_32s functions.
//
*/
IPPAPI(IppStatus, ippsVLCDecodeUTupleEscBlock_MP3_1u16s,(Ipp8u **ppBitStream,
int *pBitOffset,
int linbits,
Ipp16s *pData,
int len,
const IppsVLCDecodeUTupleSpec_32s *pVLCSpec))
/*******************************************************************/
/*
// Name: ippsVLCDecodeUTupleEscBlock_AAC_1u16s
// Purpose: decodes a len element encoded by VLC code from the source data
// *ppBitStream with *pBitOffset bits offset and stores the result in
// the destination *pData
//
// Arguments:
// ppBitStream Pointer to pointer to the current byte in the
// bitstream buffer. *ppBitStream is updated by the function.
// pBitOffset Pointer to the bit position in the byte pointed by
// *ppBitStream. Valid within the range 0 to 7.
// *pBitOffset is updated by the function.
// pData Pointer to the array of decoded values.
// len Number of values to decode into array pData.
// pVLCSpec pointer to VLCDecoder specification structure
//
// Return:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one or more pointers
// passed to the function is NULL.
// ippStsVLCInputDataErr Indicates an error when incorrect input is used.
// For decode functions it can indicate that bitstream
// contains code that is not specified inside the used table.
// ippStsVLCAACEscCodeLengthErr Indicates an error when bitstream contains AAC-Esc code
// with the length more than 21.
// ippStsBitOffsetErr Indicate an error when offset less than 0 or more then 7.
// ippStsContextMatchErr Indicate an error when pVLCSpec struct was not created by
// ippsVLCDecodeInit_32s or ippsVLCDecodeInitAlloc_32s functions.
//
*/
IPPAPI(IppStatus, ippsVLCDecodeUTupleEscBlock_AAC_1u16s,(Ipp8u **ppBitStream,
int *pBitOffset,
Ipp16s *pData,
int len,
const IppsVLCDecodeUTupleSpec_32s *pVLCSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsPackFrameHeader_MP3
//
// Purpose:
// Packs the content of the frame header into the bitstream.
//
// Parameters:
// pSrcFrameHeader Pointer to the IppMP3FrameHeader structure. This
// structure contains all the header information
// associated with the current frame. All structure
// fields must contain valid data upon function
// entry.
// ppBitStream Pointer to the encoded bitstream buffer - a
// double pointer to the first byte in the
// bitstream buffer intended to receive the packed
// frame header bits generated by this function.
// The frame header bits are sequentially written
// into the stream buffer starting from the bit
// indexed by the combination of byte pointer
// ppBitStream. The frame header bits
// are formatted according to the bitstream syntax
// given in ISO/IEC 11172-3.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSrcFrameHeader or
// ppBitStream is NULL.
*/
IPPAPI(IppStatus, ippsPackFrameHeader_MP3, (
IppMP3FrameHeader* pSrcFrameHeader,
Ipp8u** ppBitStream))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsPackSideInfo_MP3
//
// Purpose:
// Packs the side information into the bitstream buffer.
//
// Parameters:
// pSrcSideInfo Pointer to the IppMP3SideInfo structures. This
// should contain twice the channel number of
// elements. The order is the following: - granule 1
// , channel 1; - granule 1, channel 2; - granule 2,
// channel 1; - granule 2, channel 2. All fields of
// all set elements should contain valid data upon
// the function entry.
// mainDataBegin Negative bitstream offset, in bytes. The
// parameter value is typically the number of bytes
// remaining in the bit reservoir before the start
// of quantization for the current frame. When
// computing mainDataBegin, you should exclude the
// header and side information bytes. The side
// information formatter packs the 9-bit value of
// mainDataBegin into the main_data_begin field of
// the output bitstream.
// privateBits Depending on the number of channels, the
// function extracts the appropriate number of
// least significant bits from the parameter
// privateBits and packs them into the private_bits
// field of the output bitstream. The ISO/IEC 11172-3
// bitstream syntax reserves a channel-dependent
// number of application-specific (private) bits in
// the layer III bitstream audio data section
// immediately following the parameter
// main_data_begin. See ISO/IEC 11172-3:1993. For
// dualand single-channel streams, respectively,
// three and five bits are reserved.
// pSrcScfsi Pointer to the scale factor selection
// information table. This vector contains a set of
// binary flags that indicate whether scalefactors
// are shared across granules of a frame within
// predefined scale factor selection groups. For
// example, bands 0,1,2,3,4,5 form one group and
// bands 6,7,8,9,10 form the second group, as
// defined in ISO/IEC 11172-3.
// The vector is indexed as
// pDstScfsi[ch][scfsi_band], where:
// - ch is the channel index, 0 stands for
// channel 1, 1 stands for channel 2;
// - scfsi_band is the scale factor selection group
// number. Group 0 includes SFBs 0-5, group 1
// includes SFBs 6-10, group 2 includes SFBs 11-15,
// and group 3 includes SFBs 16-20.
// pFrameHeader Pointer to the IppMP3FrameHeader structure. Only
// MPEG-1 (id = 1) is supported. Upon the function
// entry, the structure fields id, mode, and layer
// should contain, respectively, the algorithm id
// (MPEG-1 or MPEG-2), the mono or stereo mode, and
// the MPEG layer specifier. All other pFrameHeader
// fields are ignored.
// ppBitStream Pointer to the encoded bitstream buffer. The
// parameter is a double pointer to the first byte
// in the bitstream buffer intended to receive the
// packed side information bits generated by this
// function. The side information bits are
// sequentially written into the stream buffer
// starting from the byte-aligned location
// referenced by *ppBitStream.
// ppBitStream Updated bitstream byte pointer. The parameter *
// ppBitStream points to the first available
// bitstream buffer byte immediately following the
// packed side information bits. The frame header
// bits are formatted according to the bitstream
// syntax given in ISO/IEC 11172-3:1993. Description
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSrcSideInfo,
// ppBitStream, pSrcScfsi, or pFrameHeader is NULL.
// ippStsMP3FrameHeaderErr Indicates an error when
// pFrameHeader->id != IPP_MP3_ID_MPEG1
// pFrameHeader->id != IPP_MP3_ID_MPEG2
// pFrameHeader->mode exceeds [0, 3].
*/
IPPAPI(IppStatus, ippsPackSideInfo_MP3, (
IppMP3SideInfo* pSrcSideInfo,
Ipp8u** ppBitStream,
int mainDataBegin,
int privateBits,
int* pSrcScfsi,
IppMP3FrameHeader* pFrameHeader))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsPackScalefactors_MP3_8s1u
//
// Purpose:
// Applies noiseless coding to scalefactors and packs output into
// bitstream buffer.
//
// Parameters:
// pSrcScaleFactor Pointer to a vector of scalefactors generated
// during the quantization process for one channel
// of one granule. Scale factor vector lengths
// depend on the block mode. Short block granule
// scale factor vectors contain 36 elements, or
// 12 elements for each subblock. Long block
// granule scale factor vectors contain 21 elements.
// Thus short block scale factor vectors are indexed
// as follows: pSrcScaleFactor[sb*12+sfb], where
// - sb is the subblock index. 0 stands for subblock
// 1, 1 stands for subblock 2, 2 stands for subblock
// 3.
// - sfb is the scale factor band index (0-11).
// Long block scale factor vectors are indexed as
// follows:
// pSrcScaleFactor[sfb], where sfb is the scale
// factor band index (0-20).
// The associated side information for an individual
// granule/channel can be used to select the
// appropriate indexing scheme.
// ppBitStream Updated bitstream byte pointer. This parameter
// points to the first available bitstream buffer
// byte immediately following the bits generated by
// the scale factor Huffman encoder and
// sequentially written into the stream buffer. The
// scale factor bits are formatted according to the
// bitstream syntax given in ISO/IEC 11172-3.
// pOffset Updated bitstream bit pointer. The pOffset
// parameter indexes the next available bit in the
// next available byte referenced by the updated
// bitstream buffer byte pointer ppBitStream. This
// parameter is valid within the range of 0 to 7,
// where 0 corresponds to the most significant bit
// and 7 corresponds to the least significant bit.
// pFrameHeader Pointer to the IppMP3FrameHeader structure for
// this frame. Upon the function entry, the
// structure fields id and modeExt should contain,
// respectively, the algorithm id (MPEG-1 or MPEG-2
// ) and the joint stereo coding commands generated
// by the psychoacoustic model. All other
// pFrameHeader fields are ignored. Only MPEG-1 (id
// = 1) is supported.
// pSideInfo Pointer to the IppMP3SideInfo structure for the
// current granule and channel. Upon function entry
// , the structure fields blockType, mixedBlock,
// and sfCompress should contain, respectively, the
// block type indicator start, short, or stop,
// filter bank mixed block analysis mode specifier,
// and scale factor bit allocation. All other *
// pSideInfo fields are ignored by the scale factor
// encoder.
// pScfsi Pointer to the scale factor selection
// information table that contains the set of
// binary flags that indicate whether scalefactors
// are shared across granules of a frame within the
// predefined scale factor selection groups. For
// example, bands 0,1,2,3,4,5 form one group and
// bands 6,7,8,9,10 form a second group (as defined
// in ISO/IEC 11172-3). The vector is indexed as
// follows: pScfsi[ch][scfsi_band], where - ch is
// the channel index. 0 stands for channel 1, 1
// stands for channel 2. - scfsi_band is the scale
// factor selection group number. Group 0 includes
// SFBs 0-5, group 1 includes SFBs 6-10, group 2
// includes SFBs 11-15, and group 3 includes SFBs
// 16-20.
// granule Index of the current granule. 0 stands for
// granule 1, 1 stands for granule 2.
// channel Index of the current channel. 0 stands for
// channel 1, 1 stands for channel 2.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsMP3SideInfoErr Indicates an error when
// pFrameHeader->id == IPP_MP3_ID_MPEG1 and
// pSideInfo->sfCompress exceeds [0..15];
// pFrameHeader->id == IPP_MP3_ID_MPEG2 and
// pSideInfo->sfCompress exceeds [0..511].
// ippStsMP3FrameHeaderErr Indicates an error when pFrameHeader->id ==
// IPP_MP3_ID_MPEG2 and pFrameHeader->modeExt
// exceeds [0..3].
*/
IPPAPI(IppStatus, ippsPackScaleFactors_MP3_8s1u, (
const Ipp8s* pSrcScaleFactor,
Ipp8u** ppBitStream,
int* pOffset,
IppMP3FrameHeader* pFrameHeader,
IppMP3SideInfo* pSideInfo,
int* pScfsi,
int granule,
int channel))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsHuffmanEncode_MP3_32s1u
//
// Purpose:
// Applies lossless Huffman encoding to quantized samples and packs
// output into bitstream buffer.
//
// Parameters:
// pSrcIx Pointer to the quantized samples of a granule.
// The buffer length is 576. Depending on which
// type of joint coding has been applied, if any,
// the coefficient vector might be associated with
// either the L, R, M, S, and/or intensity channel
// of the quantized spectral data.
// ppBitStream Updated bitstream byte pointer. The parameter *
// ppBitStream points to the first available
// bitstream buffer byte immediately following the
// bits generated by the spectral coefficient
// Huffman encoder and sequentially written into
// the stream buffer. The Huffman symbol bits are
// formatted according to the bitstream syntax
// given in ISO/IEC 11172-3.
// pOffset Updated bitstream bit pointer. The pOffset
// parameter indexes the next available bit in the
// next available byte referenced by the updated
// bitstream buffer byte pointer ppBitStream. This
// parameter is valid within the range of 0 to 7,
// where 0 corresponds to the most significant bit
// and 7 corresponds to the least significant bit.
// pFrameHeader Pointer to the IppMP3FrameHeader structure for
// this frame. The Huffman encoder uses the frame
// header id field in connection with the side
// information (as described below) to compute the
// Huffman table region boundaries for the big
// value spectral region. The Huffman encoder
// ignores all other frame header fields.Only
// MPEG-1 (id = 1) is supported.
// pSideInfo Pointer to the IppMP3SideInfo structure for the
// current granule and channel. The structure
// elements bigVals, pTableSelect[0]-[2], reg0Cnt,
// and reg1Cnt are used to control coding of
// spectral coefficients in the big value region.
// The structure element cnt1TabSel is used to
// select the appropriate Huffman table for the (-1,
// 0,+1)-valued 4-tuples in the count1 region. For
// detailed descriptions of all side information
// elements, see the structure definition header
// file.
// count1Len The count1 region length specifier. Indicates
// the number of spectral samples for the current
// granule/channel above the big value region that
// can be combined into 4-tuples in which all
// elements are of magnitude less than or equal to 1.
// hufSize Huffman coding bit allocation specifier.
// Indicates the total number of bits that are
// required to represent the Huffman-encoded
// quantized spectral coefficients for the current
// granule/channel in both the bigvals and count1
// regions. Whenever necessary, this bit count
// should be augmented to include the number of
// bits required to manage the bit reservoir. For
// frames in which the reservoir has reached
// maximum capacity, the surplus bits are expended
// by padding with additional bits the Huffman
// representation of the spectral samples. The
// HufSize result returned by the function
// Quantize_MP3_32s_I reflects these padding
// requirements. That is, HufSize[i] is equal to
// the total of the number of bits required for
// Huffman symbols and the number of padding bits.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the specified
// pointers is NULL.
// ippStsBadArgErr Indicates an error when pOffset exceeds [0,7].
// ippStsMP3SideInfoErr Indicates an error when pSideInfo->bigVals*2>
// IPP_MP3_GRANULE_LEN (pSideInfo->reg0Cnt +
// pSideInfo->reg1Cnt + 2) >= 23, pSideInfo->
// cnt1TabSel exceeds [0,1], pSideInfo->pTableSelect
// [i] exceeds [0..31].
// ippStsMP3FrameHeader Indicates an error when
// pFrameHeader->id != IPP_MP3_ID_MPEG1
// pFrameHeader->layer != 1
// pFrameHeader->samplingFreq exceeds [0..2].
*/
IPPAPI(IppStatus, ippsHuffmanEncode_MP3_32s1u, (
Ipp32s *pSrcIx,
Ipp8u **ppBitStream,
int *pOffset,
IppMP3FrameHeader *pFrameHeader,
IppMP3SideInfo *pSideInfo,
int count1Len,
int hufSize))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsBitReservoirInit_MP3
//
// Purpose:
// Initializes all elements of the bit reservoir state structure.
//
// Parameters:
// pFrameHeader Pointer to the IppMP3FrameHeader structure that
// contains the header information associated with
// the current frame. The frame header fields
// bitRate and id, bit rate index and algorithm
// identification, respectively, must contain valid
// data prior to calling the function
// BitReservoirInit_MP3 since both are used to
// generate the bit reservoir initialization
// parameters. All other frame header parameters
// are ignored by the bit reservoir initialization
// function. Only MPEG-1 (id = 1) is supported.
// pDstBitResv Pointer to the initialized IppMP3BitReservoir
// state structure. The structure element
// BitsRemaining is initialized as 0. The structure
// element MaxBits is initialized to reflect the
// maximum number of bits that can be contained in
// the reservoir at the start of any given frame.
// The appropriate value of MaxBits is directly
// determined by the selected algorithm (MPEG-1 or
// MPEG-2) and the stream bit rate indicated by the
// rate index parameter pFrameHeader.bitRate.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pDstBitResv or
// pFrameHeader is NULL.
// ippStsMP3FrameHeaderErr Indicates an error when
// pFrameHeader->id != IPP_MP3_ID_MPEG1.
*/
IPPAPI(IppStatus, ippsBitReservoirInit_MP3, (
IppMP3BitReservoir* pDstBitResv,
IppMP3FrameHeader* pFrameHeader))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTFwd_MP3_32s
//
// Purpose:
// Implements stage 2 of the MP3 hybrid analysis filterbank.
//
// Parameters:
// pSrc Pointer to the start of the 576-element block
// PQMF analysis output vector containing 18
// consecutive blocks of 32 subband samples that
// are indexed as follows:
// pDstS[32*i+sb], where i = 0,1,...,17 is time series
// index, sb = 0,1,...,31 is the subband index. All
// coefficients are represented using the Q7.24
// format.
// pDst Pointer to the 576-element spectral coefficient
// output vector generated by the analysis
// filterbank.
// blockType Block type indicator: 0 stands for normal block;
// 1 stands for start block; 2 stands for short
// block; 3 stands for stop block.
// mixedBlock Mixed block indicator: 0 stands for not mixed; 1
// stands for mixed.
// pFrameHeader Pointer to the IppMP3FrameHeader structure that
// contains the header associated with the current
// frame. Only MPEG-1 (id = 1) is supported.
// pOverlapBuf Pointer to the MDCT overlap buffer that contains
// a copy of the most recent 576-element block of
// PQMF bank outputs. Prior to processing a new
// audio stream with the analysis filterbank, all
// elements of the buffer pOverlapBuf should be
// initialized to the constant value 0.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the pointers
// pSrcXs, pDstXr, pFrameHeader, or pOverlapBuf is
// NULL.
*/
IPPAPI(IppStatus, ippsMDCTFwd_MP3_32s, (
const Ipp32s* pSrc,
Ipp32s* pDst,
int blockType,
int mixedBlock,
IppMP3FrameHeader* pFrameHeader,
Ipp32s* pOverlapBuf))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsMDCTInvWindow_MP3_32s
//
// Purpose:
// Performs 36 or 18 points IMDCT and windowing depending on blockType.
// Parameters:
// pSrc pointer to the input buffer which is the
// output of alias reduction.
//
// pDst pointer to the output buffer of IMDCT for
// long block (36 points) and short block (18 points).
//
// blockType Block type indicator: 0 stands for normal window,
// 1 stands for start block,
// 2 stands for short block,
// 3 stands for stop block.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when one of the pointers
// pSrc or pDst is NULL.
*/
IPPAPI(IppStatus, ippsMDCTInvWindow_MP3_32s,(
Ipp32s* pSrc,
Ipp32s* pDst,
int blockType))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisPQMF_MP3_16s32s
//
// Purpose:
// Implements stage 1 of MP3 hybrid analysis filterbank.
//
// Parameters:
// pSrcPcm Pointer to the start of the buffer containing
// the input PCM audio vector. The samples conform
// to the following guidelines: - must be in 16-bit,
// signed, little-endian, Q15 format; - most
// recent 480 (512-32) samples should be contained
// in the vector pSrcPcm[pcmMode*i], where i = 0,1
// ,..,479; - samples associated with the current
// granule should be contained in the vector pSrcPcm
// [pcmMode*j], where j = 480,481,..,1055.
// pcmMode PCM mode flag. Communicates to PQMF filterbank
// the type of input PCM vector organization to
// expect: - pcmMode = 1 denotes non-interleaved
// PCM input samples; - pcmMode = 2 denotes
// interleaved PCM input samples.
// pDstS Pointer to the start of the 576-element block
// PQMF analysis output vector containing 18
// consecutive blocks of 32 subband samples under
// the following index: pDstXs[32*i + sb], where i
// = 0,1,...,17 is time series index sb = 0,1,...,31 is
// the subband index.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSrcPcm or pDstXs is NULL.
// ippStsErr Indicates an error when pcmMode exceeds [1,2].
*/
IPPAPI(IppStatus, ippsAnalysisPQMF_MP3_16s32s, (
const Ipp16s* pSrcPcm,
Ipp32s* pDstS,
int mode))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsJointStereoEncode_MP3_32s_I
//
// Purpose:
// Transforms independent left and right channel spectral coefficient
// vectors into combined mid/side and/or intensity mode coefficient
// vectors suitable for quantization.
//
// Parameters:
// pSrcDstXrL Pointer to the 576-element joint stereo spectral
// coefficient output vector associated with the M
// channel, as well as the intensity coded
// coefficients above the intensity lower SFB bound.
// All elements are represented using the Q5.26
// format.
// pSrcDstXrR Pointer to the 576-element joint stereo spectral
// coefficient output vector associated with the S
// channel. All elements are represented using the
// Q5.26 format.
// pDstScaleFactorR Pointer to the vector of scalefactors associated
// with one granule of the right/S channel. If
// intensity coding has been enabled by the
// psychoacoustic model above a certain SFB lower
// bound, as indicated by the frame header and the
// vector pointed to by pIsSfbBound, the function
// StereoEncode_MP3_32s_I updates with the
// appropriate scalefactors those elements of
// pDstScaleFactorR[] that are associated with
// intensity coded scale factor bands. Other SFB
// entries in the scale factor vector remain
// unmodified. The length of the vector referenced
// by pDstScaleFactorR varies as a function of
// block size. The vector contains 21 elements for
// long block granules, or 36 elements for short
// block granules.
// pFrameHeader Pointer to the IppMP3FrameHeader structure that
// contains the header information associated with
// the current frame. Upon function entry, the
// structure fields samplingFreq, id, mode, and
// modeExt should contain, respectively, the sample
// rate associated with the current input audio,
// the algorithm id (MPEG-1 or MPEG-2), and the
// joint stereo coding commands generated by the
// psychoacoustic model. All other pFrameHeader
// fields are ignored. Only MPEG-1 (id = 1) is
// supported.
// pSideInfo Pointer to the pair of IppMP3SideInfo structures
// associated with the channel pair to be jointly
// encoded. The number of elements in the set is 2,
// and ordering of the set elements is as follows:
// pSideInfo[0] describes channel 1, and pSideInfo[1
// ] describes channel 2. Upon the function entry,
// the blockType side information fields for both
// channels should reflect the analysis modes (
// short or long block) selected by the
// psychoacoustic model on each channel. All other
// fields in the pSideInfo[0] and pSideInfo[1]
// structures are ignored.
// pIsSfbBound Pointer to the list of intensity coding SFB
// lower bounds for both channels of the current
// granule above which all L/R channel spectral
// coefficients are combined into an intensity-
// coded representation. The number of elements
// depends on the block type associated with the
// current granule. For short blocks, the SFB
// bounds are represented in the following order:
// pIsSfbBound[0] describes block 1, pIsSfbBound[1]
// describes block 2, and pIsSfbBound[2] describes
// block 3. For long blocks, only a single SFB
// lower bound decision is required and is
// represented in pIsSfbBound[0]. If both MS and
// intensity coding are enabled, the SFB intensity
// coding lower bound simultaneously represents the
// upper bound SFB for MS coding. If only MS coding
// is enabled, the SFB bound represents the lowest
// non-MS SFB.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers pSrcDstXrL, pSrcDstXrR, pDstScaleFactorR,
// pFrameHeader, pSideInfo, or pIsSfbBound is NULL.
// ippStsMP3SideInfoErr Indicates an error if pSideInfo[0].blockType!=
// pSideInfo[1].blockType when IS or MS is used.
*/
IPPAPI(IppStatus, ippsJointStereoEncode_MP3_32s_I, (
Ipp32s* pSrcDstXrL,
Ipp32s* pSrcDstXrR,
Ipp8s* pDstScaleFactorR,
IppMP3FrameHeader* pFrameHeader,
IppMP3SideInfo* pSideInfo,
int* pIsSfbBound))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsQuantize_MP3_32s_I
//
// Purpose:
// Quantizes spectral coefficients generated by analysis filterbank.
//
// Parameters:
// pSrcDstXrIx Pointer to the output set of quantized spectral
// coefficient vectors. These are suitable for
// input to the Huffman encoder. The coefficients
// are indexed as follows: pSrcDstXrIx[gr*1152 + ch*
// 576 + i] for stereophonic and dual-mono input
// sources, and pSrcDstXrIx[gr*576 + i] for single
// channel input sources, where: - i=0,1,...,575 is
// the spectral coefficient index; - gr is the
// granule index. 0 stands for granule 1, 1 stands
// for granule 2; - ch is the channel index. 0
// stands for channel 1, 1 stands for channel 2.
// pDstScaleFactor Pointer to the output set of
// scalefactors generated during the quantization
// process. These scalefactors determine the
// quantizer granularity. Scale factor vector
// lengths depend on the block mode associated with
// each granule. The order of the elements is: 1. (
// granule 1, channel 1); 2. (granule 1, channel 2);
// 3. (granule 2, channel 1); 4. (granule 2,
// channel 2). Given this general organization, the
// side information for each granule/channel in
// conjunction with the flags contained in the vector
// pDstScfsi can be used to determine the precise
// scale factor vector indices and lengths.
// pDstScfsi Pointer to the output vector of scale factor
// selection information. This vector contains a
// set of binary flags that indicate whether or not
// scalefactors are shared across granules of a
// frame within predefined scale factor selection
// groups. For example, bands 0,1,2,3,4,5 form one
// group; bands 6,7,8,9,10 form a second group, as
// defined in ISO/IEC 11172-3. The vector is
// indexed as follows: pDstScfsi[ch][scfsi_band],
// where: - ch is the channel index. 0 stands for
// channel 1, 1 stands for channel 2; - scfsi_band
// is the scale factor selection group number.
// Group 0 includes SFBs 0-5, group 1 includes SFBs
// 6-10, group 2 includes SFBs 11-15, and group 3
// includes SFBs 16-20.
// pDstCount1Len Pointer to an output vector of count1 region
// length specifiers. For the purposes of Huffman
// coding spectral coefficients of a higher
// frequency than the bigvals region, the count1
// parameter indicates the size of the region in
// which spectral samples can be combined into
// quadruples for which all elements are of
// magnitude less than or equal to 1. The vector
// contains 2*nchan, elements and is indexed as
// follows: pDstCount1Len[gr*nchan + ch], where: -
// gr is the granule index. 0 stands for granule 1,
// 1 stands for granule 2; - nchan is the number of
// channels; - ch is the channel index. 0 stands
// for channel 1, 1 stands for channel 2.
// pDstHufSize Pointer to an output vector of Huffman coding
// bit allocation specifiers. For each granule/
// channel, the specifiers indicate the total
// number of Huffman bits required to represent the
// quantized spectral coefficients in the bigvals
// and count1 regions. Whenever necessary, each
// HufSize bit count is augmented to include the
// number of bits required to manage the bit
// reservoir. For frames in which the reservoir has
// reached the maximum capacity, the quantizer
// expends the surplus bits by padding with
// additional bits the Huffman representation of
// the spectral samples. The HufSize result
// returned by the quantizer reflects these padding
// requirements. That is, HufSize[i] is equal to
// the sum of the number of bits required for
// Huffman symbols and the number of padding bits.
// The vector contains 2*nchan, elements and is
// indexed as follows: pDstHufSize[gr*nchan+ch],
// where: - gr is the granule index. 0 stands for
// granule 1, 1 stands for granule 2; - nchan is
// the number of channels; - ch is the channel index.
// 0 stands for channel 1, 1 stands for channel 2.
// pFrameHeader Pointer to the IppMP3FrameHeader structure that
// contains the header information associated with
// the current frame. Upon the function entry, the
// structure fields samplingFreq, id, mode, and
// modeExt should contain, respectively, the sample
// rate associated with the current input audio,
// the algorithm id, that is, MPEG-1 or MPEG-2, and
// the joint stereo coding commands generated by
// the psychoacoustic model. All other *
// pFrameHeader fields are ignored. Only MPEG-1 (id
// = 1) is supported.
// pSideInfo Pointer to the set of IppMP3SideInfo structures
// associated with all granules and channels. The
// set should contain 2*nchan, elements and should
// be indexed as follows: pSideInfo[gr*nchan + ch],
// where: - gr is the granule index. 0 stands for
// granule 1, 1 stands for granule 2; - nchan is
// the number of channels; - ch is the channel index.
// 0 stands for channel 1, 1 stands for channel 2.
// Upon the function entry, in all set elements
// the structure fields blockType, mixedBlock, and
// winSwitch should contain, respectively, the
// block type indicator (start, short, or stop),
// filter bank mixed block analysis mode specifier,
// and window switching flags (normal
// or blockType) associated with the current
// input audio. All other *pSideInfo fields are
// ignored upon the function entry and updated upon
// function exit, as described below under the
// description of output arguments.
// pPsychoInfo Pointer to the first element in a set of
// PsychoacousticModelTwoAnalysis structures
// associated with the current frame. Each set
// member contains the MSR and PE estimates for one
// channel of one granule. The set should contain 2*
// nchan, elements and is indexed as: pPsychoaInfo[
// gr*nchan+ ch], where: - gr is the granule index.
// 0 stands for granule 1, 1 stands for granule 2;
// - nchan is the number of channels; - ch is the
// channel index. 0 stands for channel 1, 1 stands
// for channel 2.
// pFramePsyState Pointer to the first element in a set of
// IppMP3PsychoacousticModelTwoState structures
// that contains the psychoacoustic model state
// information associated with both the current
// frame and next frame. The number of elements in
// the set is equal to the number of channels
// contained in the input audio. That is, a
// separate analysis is carried for each channel.
// The quantizer uses the frame type look ahead
// information nextBlockType to manage the bit
// reservoir. All other structure elements are
// ignored by the quantizer.
// pResv Pointer to the updated IppMP3BitReservoir
// structure. The quantizer updates the
// BitsRemaining field to add or remove bits as
// necessary. All other fields are unmodified by
// the quantizer.
// meanBits The number of bits allocated on an average basis
// for each frame of spectral coefficients and
// scalefactors given the target bit rate (kilobits
// per second) specified in the frame header. This
// number excludes the bits allocated for the frame
// header and side information. The quantizer uses
// meanBits as a target allocation for the current
// frame. Given perceptual bit allocation
// requirements greater than this target, the
// quantizer makes use of the surplus bits held in
// the bit reservoir to satisfy frame-instantaneous
// demands. Similarly, given perceptual bit
// allocation requirements below this target, the
// quantizer will store surplus bits in the bit
// reservoir for use by future frames.
// pIsSfbBound Pointer to the list of SFB lower bounds above
// which all L/R channel spectral coefficients have
// been combined into an intensity-coded
// representation. The number of valid elements
// pointed to by pIsSfbBound
// depends upon the block types associated with the
// granules of the current frame. In particular,
// the list of SFB bounds pointed to by pIsSfbBound
// is indexed as follows: pIsSfbBound[3*gr] for
// long block granules, and pIsSfbBound[3*gr + w]
// for short block granules, where: - gr is the
// granule index. 0 stands for granule 1, 1 stands
// for granule 2; - w is the block index. 0 stands
// for block 1, 1 stands for block 2, 2 stands for
// block 3. For example, given short-block analysis
// in granule 1 followed by long block analysis in
// granule 2, the list of SFB bounds would be
// expected in the following order: pIsSfbBound[] =
// {granule 1/block 1, granule 1/block 2, granule 1/
// block 2, granule 2/long block}. If a granule is
// configured for long block analysis, then only a
// single SFB lower bound decision is expected,
// whereas three are expected for short block
// granules. If both MS and intensity coding have
// been enabled, then the SFB intensity coding
// lower bound simultaneously represents the upper
// bound SFB for MS coding. If only MS coding has
// been enabled, then the SFB bound represents the
// lowest non-MS SFB.
// pWorkBuffer Pointer to the workspace buffer internally used
// by the quantizer for storage of intermediate
// results and other temporary data. The buffer
// length should be at least 2880 bytes, that is,
// 720 words of 32-bits each.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSrcDstXrIx,
// pDstScaleFactor, pDstScfsi, pDstCount1Len,
// pDstHufSize, pFrameHeader, pSideInfo, pPsychInfo,
// pFramePsyState, pResv, pIsSfbBound, or
// pWorkBuffer is NULL.
// ippStsMP3SideInfo Indicates an error when pSideInfo->winSwitch and
// pSideInfo->mixedBlock are both defined.
// ippStsMP3FrameHeaderErr Indicates an error when pFrameHeader->samplingFreq or
// pFrameHeader->id is not correct.
*/
IPPAPI(IppStatus, ippsQuantize_MP3_32s_I, (
Ipp32s* pSrcDstXrIx,
Ipp8s* pDstScaleFactor,
int* pDstScfsi,
int* pDstCount1Len,
int* pDstHufSize,
IppMP3FrameHeader* pFrameHeader,
IppMP3SideInfo* pSideInfo,
IppMP3PsychoacousticModelTwoAnalysis* pPsychInfo,
IppMP3PsychoacousticModelTwoState* pFramePsyState,
IppMP3BitReservoir* pResv,
int meanBits,
int* pIsSfbBound,
Ipp32s* pWorkBuffer))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsPsychoacousticModelTwo_MP3_16s
//
// Purpose:
// Implements ISO/IEC 11172-3 psychoacoustic model recommendation 2 to
// estimate masked threshold and perceptual entropy associated with a
// block of PCM audio input.
//
// Parameters:
// pSrcPcm Pointer to the start of the buffer containing
// the input PCM audio vector, the samples of which
// should conform to the following format
// specification: - 16-bits per sample, signed,
// little-endian, Q15; - pSrcPcm buffer should
// contain 1152 samples, that is, two granules of
// 576 samples each, if the parameter pFrameHeader
// -> mode has the value 1 (mono), or 2304 samples,
// that is, two granules of 576 samples each, if
// the parameter pFrameHeader -> mode has the value
// of 2 (stereo, dual mono); - In the stereophonic
// case, the PCM samples associated with the left
// and right channels should be organized according
// to the pcmMode flag. Failure to satisfy any of
// the above PCM format and/or buffer requirements
// results in undefined model outputs.
// pDstPsyInfo Pointer to the first element in a
// set of PsychoacousticModelTwoAnalysis structures.
// Each set member contains the MSR and PE
// estimates for one granule. The number of
// elements in the set is equal to the number of
// channels, with the outputs arranged as follows: (
// Analysis[0] = granule 1, channel 1), (...Analysis[1]
// = granule 1, channel 2), (...Analysis[2] =
// granule 2, channel 1), (...Analysis[3] = granule 2,
// channel 2).
// pDstIsSfbBound If intensity coding has been enabled,
// pDstIsSfbBound points to the list of SFB lower
// bounds above which all spectral coefficients
// should be processed by the joint stereo
// intensity coding module. Since the intensity
// coding SFB lower bound is block-specific, the
// number of valid elements pointed to by
// pDstIsSfbBound varies depending upon the
// individual block types associated with each
// granule. In particular, the list of SFB bounds
// is indexed as follows: - pIsSfbBound[3*gr] for
// long block granules; - pIsSfbBound[3*gr + w] for
// short block granules, where gr is the granule
// index (0 indicates granule 1 and 1 indicates
// granule 2), and w is the block index (0
// indicates block 1, 1 indicates block 2, 2
// indicates block 3). For example, given short-
// block analysis in granule 1 followed by long
// block analysis in granule 2, the list of SFB:
// bounds would be generated in the following order
// pIsSfbBound[] = {granule 1/block 1, granule 1/
// block 2, granule 1/block 2, granule 2/long
// block}. Only one SFB lower bound decision is
// generated for long block granules, whereas three
// are generated for short block granules. If both
// MS and intensity coding are enabled, then the
// SFB intensity coding lower bound simultaneously
// represents the upper bound SFB for MS coding. If
// only MS coding has been enabled, then the SFB
// bound represents the lowest non-MS SFB.
// pDstSideInfo Pointer to the updated set of IppMP3SideInfo
// structures associated with all granules and
// channels. The model updates the following fields
// in all set elements: blockType, winSwitch, and
// mixedBlock. The number of elements in the set is
// equal to 2 times the number of channels.
// Ordering of the set elements is the same as
// pDstPsyInfo.
// pFrameHeader Pointer to the IppMP3FrameHeader structure that
// contains the header associated with the current
// frame. The samplingFreq, id, and mode fields of
// the structure pFrameHeader control the behavior
// of the psychoacoustic model. All three fields
// must be appropriately initialized prior to
// calling this function. All other frame header
// fields are ignored. Only MPEG-1 (id = 1) is
// supported.
// pFramePsyState Pointer to the first element in a set of
// IppMP3PsychoacousticModelTwoState structures
// that contains the updated psychoacoustic model
// state information associated with both the
// current frame and next frame. The number of
// elements in the set is equal to the number of
// channels contained in the input audio. That is,
// a separate analysis is carried for each channel.
// Prior to encoding a new audio stream, all
// elements of the psychoacoustic model state
// structure pPsychoacousticModelState should be
// initialized to contain the value 0. In the
// signal processing domain, this could be
// accomplished using the function ippsZero_16s as
// follows: ippsZero_16s ((Ipp16s *)
// pPsychoacousticModelState,sizeof(
// IppMP3PsychoacousticModelTwoState)
// /sizeof(Ipp16s)).
// pcmMode PCM mode flag. Communicates the psychoacoustic
// model which type of PCM vector organization to
// expect: - pcmMode = 1 denotes non-interleaved
// PCM input samples, that is, pSrcPcm[0..1151]
// contains the input samples associated with the
// left channel, and pSrcPcm[1152..2303] contains
// the input samples associated with the right
// channel; - pcmMode = 2 denotes interleaved PCM
// input samples, that is, pSrcPcm[2*i] and pSrcPcm[
// 2*i+1] contain the samples associated with the
// left and right channels, respectively, where i =
// 0,1,...,1151. You can also use appropriately
// typecast elements ippMP3NonInterleavedPCM and
// ippMP3InterleavedPCM of the enumerated type
// IppMP3PcmMode as an alternative to the constants
// 1 and 2 for pcmMode.
// pWorkBuffer Pointer to the workspace buffer internally used
// by the psychoacoustic model for storage of
// intermediate results and other temporary data.
// The buffer length must be at least 25,200 bytes,
// that is, 6300 elements of type Ipp32s.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when at least one of the
// pointers pSrcPcm, pDstPsyInfo, pDstSideInfo,
// pDstIsSfbBound, pFrameHeader, pDstPsyState, or
// pWorkBuffer is NULL.
*/
IPPAPI(IppStatus, ippsPsychoacousticModelTwo_MP3_16s, (
const Ipp16s* pSrcPcm,
IppMP3PsychoacousticModelTwoAnalysis* pDstPsyInfo,
int* pDstIsSfbBound,
IppMP3SideInfo* pDstSideInfo,
IppMP3FrameHeader* pFrameHeader,
IppMP3PsychoacousticModelTwoState* pFramePsyState,
int pcmMode,
Ipp32s* pWorkBuffer))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilter_PQMF_MP3_32f
//
// Purpose:
// Transforms PQMF MP3-processed subband signals into time domain samples.
//
// Parameters:
// pSrc Array of pointers, holds PQMF MP3-processed subband
// signals.
// pDst Pointer to the output vector, holds time domain
// output samples.
// pFilterSpec Pointer to the IppsFilterSpec_PQMF_MP3 specification
// structure.
// mode Flag that indicates whether or not MP3 audio
// output channels should be interleaved.
// 1 - indicates not interleaved,
// 2 - indicates interleaved.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
// ippStsBadArgErr Indicates an error when mode exceeds [1, 2].
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI(IppStatus, ippsSynthesisFilter_PQMF_MP3_32f, (const Ipp32f *pSrc,
Ipp32f *pDst,
const IppsFilterSpec_PQMF_MP3 *pFilterSpec,
int mode))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterGetSize_PQMF_MP3_32f
//
// Purpose:
// Returns size of IppsFilterSpec_PQMF_MP3 specification structure.
//
// Parameters:
// pSizeSpec Address of the IppsFilterSpec_PQMF_MP3 specification
// structure size value in bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSizeSpec is NULL.
*/
IPPAPI(IppStatus, ippsSynthesisFilterGetSize_PQMF_MP3_32f, (int *pSizeSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterInit_PQMF_MP3_32f
//
// Purpose:
// Initializes synthesis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the IppsFilterSpec_PQMF_MP3
// specification structure is written. Only the
// main function uses this structure.
// pMemSpec Pointer to the area for the IppsFilterSpec_PQMF_MP3
// specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
*/
IPPAPI(IppStatus, ippsSynthesisFilterInit_PQMF_MP3_32f, (IppsFilterSpec_PQMF_MP3 **ppFilterSpec,
Ipp8u *pMemSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterInitAlloc_PQMF_MP3_32f
//
// Purpose:
// Allocate memory for synthesis specification structure and initializes it.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the IppsFilterSpec_PQMF_MP3
// specification structure is written.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when ppFilterSpec is NULL.
*/
IPPAPI(IppStatus, ippsSynthesisFilterInitAlloc_PQMF_MP3_32f, (IppsFilterSpec_PQMF_MP3 **ppFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterFree_PQMF_MP3_32f
//
// Purpose:
// Frees memory allocated for internal IppsFilterSpec_PQMF_MP3 structure.
//
// Parameters:
// pFilterSpec Pointer to the IppsFilterSpec_PQMF_MP3 specification
// structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pFilterSpec is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI(IppStatus, ippsSynthesisFilterFree_PQMF_MP3_32f, (IppsFilterSpec_PQMF_MP3 *pFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilter_PQMF_MP3_32f
//
// Purpose:
// Transforms time domain samples into PQMF MP3-processed subband signals .
//
// Parameters:
// pSrc Array of pointers, holds PQMF MP3-processed subband
// signals.
// pDst Pointer to the output vector, holds time domain
// output samples.
// pFilterSpec Pointer to the IppsFilterSpec_PQMF_MP3 specification
// structure.
// mode Flag that indicates whether or not MP3 audio
// output channels should be interleaved.
// 1 - indicates not interleaved,
// 2 - indicates interleaved.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
// ippStsBadArgErr Indicates an error when mode exceeds [1, 2].
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI(IppStatus, ippsAnalysisFilter_PQMF_MP3_32f, (const Ipp32f *pSrc,
Ipp32f *pDst,
const IppsFilterSpec_PQMF_MP3 *pFilterSpec,
int mode))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterGetSize_PQMF_MP3_32f
//
// Purpose:
// Returns size of IppsFilterSpec_PQMF_MP3 specification structure.
//
// Parameters:
// pSizeSpec Address of the IppsFilterSpec_PQMF_MP3 specification
// structure size value in bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSizeSpec is NULL.
*/
IPPAPI(IppStatus, ippsAnalysisFilterGetSize_PQMF_MP3_32f, (int *pSizeSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterInit_PQMF_MP3_32f
//
// Purpose:
// Initializes analysis specification structure.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the IppsFilterSpec_PQMF_MP3
// specification structure is written. Only the
// main function uses this structure.
// pMemSpec Pointer to the area for the IppsFilterSpec_PQMF_MP3
// specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
*/
IPPAPI(IppStatus, ippsAnalysisFilterInit_PQMF_MP3_32f, (IppsFilterSpec_PQMF_MP3 **ppFilterSpec,
Ipp8u *pMemSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterInitAlloc_PQMF_MP3_32f
//
// Purpose:
// Allocate memory for analysis specification structure and initializes it.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the IppsFilterSpec_PQMF_MP3
// specification structure is written.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when ppFilterSpec is NULL.
*/
IPPAPI(IppStatus, ippsAnalysisFilterInitAlloc_PQMF_MP3_32f, (IppsFilterSpec_PQMF_MP3 **ppFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsAnalysisFilterFree_PQMF_MP3_32f
//
// Purpose:
// Frees memory allocated for internal IppsFilterSpec_PQMF_MP3 structure.
//
// Parameters:
// pFilterSpec Pointer to the IppsFilterSpec_PQMF_MP3 specification
// structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pFilterSpec is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI(IppStatus, ippsAnalysisFilterFree_PQMF_MP3_32f, (IppsFilterSpec_PQMF_MP3 *pFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilter_DTS_32f
//
// Purpose:
// Transforms QMF DTS processed subband signals into time domain samples.
//
// Parameters:
// pSrc Array of pointers, holds QMF DTS processed subband
// signals.
// pDst Pointer to the output vector, holds time domain
// output samples.
// pFilterSpec Pointer to the IppsFilterSpec_DTS_32f specification
// structure.
// filtType Flag, indicates filter bank.
// IPPAC_DTS_PERFECT - perfect reconstruction
// IPPAC_DTS_NONPERFECT - nonperfect reconstruction.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
// ippStsBadArgErr Indicates an error when filtType is neither
// IPPAC_DTS_PERFECT nor IPPAC_DTS_NONPERFECT.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI(IppStatus, ippsSynthesisFilter_DTS_32f, (const Ipp32f *pSrc,
Ipp32f *pDst,
Ipp32s filt_type,
const IppsFilterSpec_DTS_32f *pFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterGetSize_DTS_32f
//
// Purpose:
// Returns size of IppsFilterSpec_DTS_32f specification structure.
//
// Parameters:
// pSizeSpec Address of the IppsFilterSpec_DTS_32f specification
// structure size value in bytes.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pSizeSpec is NULL.
*/
IPPAPI(IppStatus, ippsSynthesisFilterGetSize_DTS_32f, (int *pSizeSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterInit_DTS_32f
//
// Purpose:
// Initializes DTS synthesis specification structure.
//
// Parameters:
// pFilterSpec Pointer to the IppsFilterSpec_DTS_32f
// specification structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when any of the specified
// pointers is NULL.
*/
IPPAPI(IppStatus, ippsSynthesisFilterInit_DTS_32f, (IppsFilterSpec_DTS_32f *pFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterInitAlloc_DTS_32f
//
// Purpose:
// Allocate memory for synthesis specification structure and initializes it.
//
// Parameters:
// ppFilterSpec Pointer to where pointer to the IppsFilterSpec_DTS_32f
// specification structure is written.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when ppFilterSpec is NULL.
*/
IPPAPI(IppStatus, ippsSynthesisFilterInitAlloc_DTS_32f, (IppsFilterSpec_DTS_32f **ppFilterSpec))
/* ///////////////////////////////////////////////////////////////////////////
// Name:
// ippsSynthesisFilterFree_DTS_32f
//
// Purpose:
// Frees memory allocated for internal IppsFilterSpec_DTS_32f structure.
//
// Parameters:
// pFilterSpec Pointer to the IppsFilterSpec_DTS_32f specification
// structure.
//
// Returns:
// ippStsNoErr Indicates no error.
// ippStsNullPtrErr Indicates an error when pFilterSpec is NULL.
// ippStsContextMatchErr Indicates an error when the identifier
// pFilterSpec is incorrect.
*/
IPPAPI(IppStatus, ippsSynthesisFilterFree_DTS_32f, (IppsFilterSpec_DTS_32f *pFilterSpec))
#ifdef __cplusplus
}
#endif
#if defined (_IPP_STDCALL_CDECL)
#undef _IPP_STDCALL_CDECL
#define __stdcall __cdecl
#endif
#endif /* #if !defined(__IPPAC_H__ ) || defined(_OWN_BLDPCS ) */