useful for decoding
spiritMP3Dec.h
- Committer:
- vidigi
- Date:
- 2018-02-09
- Revision:
- 0:43fc447561f2
File content as of revision 0:43fc447561f2:
/*
******************************************************************************
* @file spiritMP3Dec.h
* @author MCD Application Team
* @brief This file is header for spiritMP3Dec MP3 decoder library.
******************************************************************************
* Portions COPYRIGHT 2017 STMicroelectronics
* Portions SPIRIT Audio Engine Copyright (c) 1995-2009, SPIRIT
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller based on
* ARM Cortex®-M3 and/or ARM Cortex®-M4 cores or microprocessor devices
* manufactured by or for STMicroelectronics.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
#ifndef __SPIRITMP3DEC_H__
#define __SPIRITMP3DEC_H__
#ifdef __cplusplus
extern "C" {
#endif
/**
Informational structure to provide information about MP3 stream.
*/
typedef struct
{
unsigned int nLayer; /* MPEG Audio Layer (1-3). Zero indicates that structure is not valid */
unsigned int nSampleRateHz; /* Sample rate, Hz */
unsigned int nBitrateKbps; /* Current bit rate, kilobit per seconds (0 for free-format stream) */
unsigned int nChannels; /* Number of channels (1 or 2) */
unsigned int IsGoodStream; /* Zero indicates that audio stream is not consistent */
unsigned int anCutOffFrq576[2]; /* Cut-off frequencies for both channels (range 0-576), where 576 = Nyquist frequency */
unsigned int nBitsReadAfterFrameHeader; /* Number of bits, read after last frame header (for AV sync) */
unsigned int nSamplesPerFrame; /* Number of samples per audio frame (for AV sync) */
unsigned int nSamplesLeftInFrame; /* Number of samples, remaining in the internal buffer (for AV sync) */
} TSpiritMP3Info;
/**
MP3 decoder object (persistent RAM).
*/
typedef struct
{
int hidden[3086]; /* Structure contents is hidden for demo version */
} TSpiritMP3Decoder;
/**
Callback function type to supply decoder with input data.
return number of MAU's read into buffer.
*/
typedef unsigned int (fnSpiritMP3ReadCallback)(
void * pMP3CompressedData, /* [OUT] Pointer to buffer to fill with coded MP3 data */
unsigned int nMP3DataSizeInChars, /* Buffer size in MAU's */
void * token /* Application-supplied token */
);
/**
* Application-supplied MDCT-domain processing function type.
* MDCT coefficients represented as float or int32 type, depending
* on build options.
* This function can be used for equalizer or pitch-shifter
*/
typedef void (fnSpiritMP3ProcessCallback)(
void * mdct_samples, /* [IN/OUT] MDCT coefficients */
int isShort, /* Flag: 1 if short frame */
int ch, /* Channel number (0 or 1). */
void * token /* Application-supplied token */
);
/**
* Decoder initialization function
*/
void SpiritMP3DecoderInit(
TSpiritMP3Decoder *pDecoder, /* Decoder structure */
fnSpiritMP3ReadCallback* pCallbackFn, /* Data reading callback function */
fnSpiritMP3ProcessCallback *pProcessFn, /* Data processing callback function */
void * token /* Optional parameter for callback function */
);
/**
Decoding function
return number of audio samples decoded.
NOTE: function always produce stereo data (1 sample = 32 bit = 2ch*16 bit).
*/
unsigned int SpiritMP3Decode (
TSpiritMP3Decoder *pDecoder, /* Decoder structure */
short *pPCMSamples, /* [OUT] Output PCM buffer */
unsigned int nSamplesRequired, /* Number of samples to decode (1 sample = 32 bit = 2ch*16 bit) */
TSpiritMP3Info * pMP3Info /* [OUT, opt] Optional informational structure */
);
/**
* Return sizeof(TSpiritMP3Decoder)
*/
int SpiritMP3DecoderGetPersistentSize(void);
#ifdef __cplusplus
}
#endif
#endif