blob: f627a275c6da64ff0995bb425d471cfc7c38ad4c [file] [log] [blame]
/************************************************************************
* Copyright 2005-2009, 2014 by Freescale Semiconductor, Inc.
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/************************************************************************
* ANSI C source code
*
* Project Name : MP3 Encoder
*
***************************************************************************/
/***************************************************************************
* CHANGE HISTORY
* dd/mm/yy Code Ver Description Author
* -------- ------- ----------- ------
* Aug 07 0.1 created file
**************************************************************************/
/*********************************************************************************************
* CHANGE HISTORY
* dd/mm/yy Code Ver Description Author
* -------- ------- ----------- ------
* 27/08/07 0.1 created file
* 07/09/07 0.2 made changes to accomodate
* new api functions Wang Qinling
* 21/05/08 0.3 update api function Huang Shen
*********************************************************************************************/
#ifndef __MP3_ENC_INTERFACE_H_
#define __MP3_ENC_INTERFACE_H_
#ifdef __cplusplus
#define EXTERN extern "C"
#else
#define EXTERN
#endif
#define ENC_NUM_MEM_BLOCKS 6
#define MP3E_INPUT_BUFFER_SIZE 1152
/* Data type */
typedef unsigned char MP3E_UINT8;
typedef char MP3E_INT8;
typedef unsigned short MP3E_UINT16;
typedef short MP3E_INT16;
typedef unsigned int MP3E_UINT32;
typedef int MP3E_INT32;
typedef enum
{
MP3E_16_BIT_INTPUT, /* 16-bit input format */
}MP3E_INPUT_FORMAT;
typedef enum
{
MP3E_SUCCESS = 0, /* Successful initialization */
MP3E_ERROR_INIT_BITRATE, /* If the bitrate passed by the application to the init
routine is invalid */
MP3E_ERROR_INIT_SAMPLING_RATE, /* If the sampling rate passed by the application to the
init routine is invalid */
MP3E_ERROR_INIT_MODE, /* If the stereo mode passed by the application to the init
routine is invalid */
MP3E_ERROR_INIT_FORMAT, /* If the input format passed by the application to the init
routine is invalid */
MP3E_ERROR_INIT_QUALITY, /* If the value of quality passed by the application to the init
routine is invalid */
MP3E_ERROR_INIT_QUERY_MEM /* If the call to query_mem_mp3e() is unsuccessful */
}MP3E_RET_VAL;
typedef enum
{
FAST_STATIC_MEMORY = 0, /* Fast Static memory (state) */
SLOW_STATIC_MEMORY, /* Slow Static memory (state) */
FAST_SCRATCH_MEMORY, /* Fast Scratch memory */
SLOW_SCRATCH_MEMORY /* Slow Scratch memory */
}MP3E_MEM_DESC;
typedef struct
{
MP3E_INT32 app_sampling_rate; /* sampling rate of the input file in Hz. The following
sampling rates are possible: 32000, 44100 and 48000.
This parameter needs to be filled by the
application.*/
MP3E_INT32 app_bit_rate; /* bit rate for encoding, in kbps. The following bit
rates are possible: 32, 40, 48, 56, 64, 80, 96, 112,
128, 160, 192, 224, 256, 320 kbps. This parameter
needs to be filled by the application */
MP3E_INT32 app_mode; /* mode for the encoder. The various modes are defined by
different bit fields of this 32-bit word.
This parameter needs to be filled by the application.
The following bits are used:
b1-b0: Stereo mode bits
Two values are currently possible:
00: stereo mode is joint stereo
01: stereo mode is mono
b9-b8: Input format bit
00: Input format is L/R interleaved
01: Input format is with contiguous L samples,
followed by contiguous R samples
b17-b16: Input quality bits
00: Low quality
01: High quality
Other bits are reserved. */
MP3E_INT32 mp3e_outbuf_size; /* size of the required output buffer in bytes.
The MP3 encoder will fill this parameter and return.
The application has to allocate an output buffer of
this size or more. The maximum value that can be
returned by the MP3 encoder for this output buffer
size is 1440 bytes */
}MP3E_Encoder_Parameter;
typedef struct
{
MP3E_MEM_DESC type; /* Memory block type (Fast or Slow) */
MP3E_INT32 size; /* Memory block size */
MP3E_INT32 align; /* Memory block alignment in bytes */
MP3E_INT32 *ptr; /* Memory block pointer */
}MP3E_Mem_Alloc_Info;
typedef struct
{
MP3E_INT32 instance_id;
MP3E_Mem_Alloc_Info mem_info[ENC_NUM_MEM_BLOCKS];
MP3E_INT32 num_bytes;
}MP3E_Encoder_Config;
EXTERN MP3E_RET_VAL mp3e_query_mem (MP3E_Encoder_Config *enc_config);
EXTERN MP3E_RET_VAL mp3e_encode_init (MP3E_Encoder_Parameter *params, MP3E_Encoder_Config *enc_config);
EXTERN void mp3e_encode_frame (MP3E_INT16 *inbuf, MP3E_Encoder_Config *enc_config, MP3E_INT8 *outbuf);
EXTERN void mp3e_flush_bitstream ( MP3E_Encoder_Config *enc_config,MP3E_INT8 *outbuf);
EXTERN const char *MP3ECodecVersionInfo (void);
#endif