September 7, 2005
Intel(R) Integrated Performance Primitives Version 5.0
MP3 Encoder Sample Code for Linux* on Intel(R) Personal
Internet Client Architecture Processors
================================================================
CONTENTS:
1. Overview
2. Package Contents
3. Directory Organization and File List
4. System Requirements
5. Installation and Build
6. Running the Software
7. Intel IPP Functional Coverage
8. Key Module Description
9. Known Limitations
10. Technical Support and Feedback
11. License Definition
12. Disclaimer and Legal Information
================================================================
1. Overview
The MP3 Encoder sample code supports ISO/IEC 11172-3:1993
Audio Layer III encoder.
The purpose of the MP3 Encoder sample code is to provide an
example to show how to use Intel(R) Integrated Performance
Primitives (Intel(R) IPP) Audio Coding Domain primitives to build
up a baseline MP3 encoder.
Additional information on this software as well as other Intel(R)
software performance products is available at
http://developer.intel.com/software/products/.
================================================================
2. Package Contents
The MP3 encoder sample code package contains the following:
* Readme file
* Makefile
* Sample code source files and header files
================================================================
3. Directory Organization and File List
The following files reside in these directories (where ~ is the
directory chosen as the root of this sample code package):
~ Root path of MP3 Encoder
sample code package
makefile_sample_mp3_enc Make file for this MP3
encoder sample code
~/doc
readme_mp3_enc.txt This readme file
~/src/arm_linux/audio/mp3/encoder Source Path
mp3enc.c Functions for frame-based
encoding
mp3einit.c Functions for initialize
encoder state
mp3emain.c Main entry of application
mp3etbl.c Tables
mp3eutil.c Functions for supporting
utility
~/src/include General header file path
sampdefs.h General header file
~/src/arm_linux/audio/mp3/_include MP3 encoder header file path
sampmp3.h MP3 encoder header file
================================================================
4. System Requirements
This sample code is targeted for Intel(R) Personal Internet Client
Architecture (PCA) Processors with Intel(R) Wireless MMX(TM)
Technology. It requires:
Hardware requirements:
* Host PC: An Intel(R) Pentium(R) 4 processor 1.5 GHz,
with 512 MB RAM, or greater
* Target platform: platforms that support Intel PCA
Processors with Intel Wireless MMX technology, such
as the Intel(R) PXA27x Processor Development Kit
Software requirements:
* Operating system on host machine: Red Hat* Linux*
Release 7.2, or higher version.
* Development tools:
-- iwmmxt_le-gcc 3.3.1 (MontaVista), glibc 2.3.2 and
binutils 2.14 20030612
-- Red Hat* RPM version 4.0.3 or higher version
* Intel IPP 5.0 for Linux on Intel PCA Processors with Intel
Wireless MMX Technology Image Coding Component Library
================================================================
5. Installation and Build
Extract all files in l_ipp-PCA-MP3-encode_*.tgz to a desired
folder. Please make sure to preserve the directory structure. The
files for this sample are in the ./ipp_sample/PCA/MP3-encode/
folder.
Follow the steps below to build the MP3 Encoder application.
Before you begin, make sure the Intel IPP 5.0 for Linux on Intel
PCA Processors with Intel Wireless MMX Technology has already
been installed on the same host machine.
1) Modify makefile_sample_mp3 to make sure the variable
PATH_IPP_ROOT is the current Intel Integrated Performance
Primitives installation path. With default settings, the variable
should be:
PATH_IPP_ROOT=/opt/intel/ipp/5.0/pca_wmmx
Modify other toolchain paths if necessary in this make file.
2) Make the application with the command:
make -f makefile_sample_mp3_enc
================================================================
6. Running the Software
If successfully built, the executable is generated in the path
$(PATH_USR_BIN) defined in the make file, with the default
name mp3enc. The command line format is:
mp3enc -i inputFile -o outputFile -c channelNumber -b bitRate -s
sampleRate
Simply type mp3enc -h to invoke help information.
================================================================
7. Intel IPP Functional Coverage
The MP3 Encoder sample demonstrates how to combine PQMF
analysis filterbank, forward MDCT, psychoacoustic model, joint
stereo coding, quantization, and Huffman encoding to construct the
MP3 Encoder. Specifically, the sample incorporates the following
Intel IPP Audio Coding Domain primitives:
Bit reservoir ippsBitReservoirInit_MP3
initialization
Frame header packing ippsPackFrameHeader_MP3
Side information ippsPackSideInfo_MP3
packing
Noiseless scalefactor ippsPackScaleFactors_MP3_8s1u
encoding
Noiseless spectral ippsHuffmanEncode_MP3_32s1u
coefficient encoding
Psychoacoustic model ippsPsychoacousticModelTwo_MP3_16s
Joint stereo coding ippsJointStereoEncode_MP3_32s_I
Quantization ippsQuantize_MP3_32s_I
PQMF analysis ippsAnalysisPQMF_MP3_16s32s
filterbank
Forward MDCT ippsMDCTFwd_MP3_32s
Please refer to the Intel Integrated Performance Primitives on
Intel Personal Internet Client Architecture Processors
Reference Manual (Version 5.0) for the use of these primitives.
================================================================
8. Key Module Description
1) MP3 encoder state structure mp3_enc_state
Location:
Defined in sampmp3.h
Description:
This structure reserves the state that is used during the whole
encoding process. It contains the current frame information,
pointers for all process and working buffers.
2)encoder_init_alloc_mp3
Location:
mp3einit.c
Description:
It allocates the buffer for storing PCM input and bit stream
output. It also initializes encoder state structure, PCM sound
structure and bit stream structure. This function does the
following steps:
(1) Allocates the working buffer for input PCM and output bit
stream.
(2) Initializes PCM sound structure and outputs bit stream
structure.
(3) Initializes working buffer, pointers and encoder state
structure.
Calling procedure:
It is called in the main function before encoding the first frame.
3)encode_mp3
Location:
mp3enc.c
Description:
It encodes one frame of MP3 in the following steps:
(1) Encodes one frame of MP3.
(2) Updates encoder general state structure.
Calling procedure:
It is called after the initialize module. It is in a loop to
encode all frames into the MP3 bit stream.
4)encoder_free_mpeg4
Location:
mp3einit.c
Description:
MP3 Encoder free function. It frees the working buffer used to
store the input PCM and output bit stream.
Calling procedure:
It's called from the main function after all the frames have been
encoded
5)encoder_flushbitstream_mp3
Location:
mp3eutil.c
Description:
Flushes t