?? mpa.h
字號:
/*
* mpa.h
*
* MPEG/audio multichannel decoder.
* Copyright (C) 2003 Optical Player P/J, Samsung Electronics.
*
* MPEG Audio Decoder Version 1.2b, 2004/10/29
*
********************************************************************
*
* Revision 1.0 2003.06 Kyungtae Lee
* Release version
*
* Revision 1.0a 2003/06/25 Kyungtae Lee
* - Fixed bug in CRC check when phantom center present
* - Fixed bug dematrix procedure in matrix mode 2
* - Corrected tc_table for 3/0 + 2/0 channel mode
*
* Revision 1.0b 2003/06/30 Kyungtae Lee
* - Programe area moved to address after 0x6000 and each
* code section defined in all source files.
*
* Revision 1.0c 2003/07/03 Kyungtae Lee
* - MPEG2 Multi channel, DVD v1.0 specific, additional
* test streams passed
* - Corrected DRC process detection error
* - Support SPDIF stream type output (support layer-II only)
* - Working sync word try again search and CRC error correct
*
* Revision 1.0d 2003/07/08 Kyungtae Lee
* - Memory map is adjusted, pcm_ch_buffer, pcm_dm_buffer,
* pcm_lfe_buffer buffers moved to upper 0x9000~0xBD00.
* Upper half of X/Y area are used for postprocessing(VBX, etc).
* - Downmix scale down bug fixed.
*
* Revision 1.0e 2003/07/16 Kyungtae Lee
* - Dynamic range control for DVD v1.0 MPEG Audio DRC mode
* is prohibitted.
* - Some parameters of MainCodecShared_t of System part are
* corrected to long type.
*
* Revision 1.0f 2003/07/21 Kyungtae Lee
* - "CVD", "SVCD" test streams and "DVD" 5.1 title passed.
* - "mpa_output.s", output routines for 16/24-bit are simplified.
* - Change default mpeg_version to _MPEG_2_AUG_AUDIO, detect
* mpeg2, mpeg1 stream automatically.
*
* Release Revision 1.1 2003/07/25
*
* Revision 1.1a 2003/07/28 Kyungtae Lee
* - If frame size is odd, correct error in detection broken stream.
*
* Revision 1.1b 2003/10/09 Kyungtae Lee
* - If detected wrong sync-word (0xfff), can occur decoding error.
* Check sync-word of next frame whether good or not good.
*
* Revision 1.1c 2003/10/22 Kyungtae Lee
* - Added extension sync-word (0x7ff) search routine.
*
* Revision 1.1d 2003/11/03 Kyungtae Lee
* - For VCD application, added build option "_APPLICATION" in
* mpa_config.h. The system requirements of this application mode
* are following:
* MPEG-1 Audio (2-ch) Decoder System Requirements
* -------------------------------------------------------
* 7.1-ch decoder 2-ch decoder
* -------------------------------------------------------
* Code Size 16,026 Bytes 5,442 Bytes
* Table Size 9,222 Bytes 7,302 Bytes
* X-Mem Size 15,309 LW 4,384 LW
* Y-Mem Size 15,758 LW 5,164 LW
* -------------------------------------------------------
* Total 118,449 Bytes 41,388 Bytes
* -------------------------------------------------------
* NOTE: Excluded audio in/out buffer(sequential buffer)
* and S/PDIF buffer.
* - Against to all CRC error, clearing output pcm buffer of
* current frame.
*
* Revision 1.1e 2003/11/20 Kyungtae Lee
* - Scalefactors are changed to half scale. Scale-up is made in
* subband synthesis part by "esla ma0".
*
* Revision 1.1f 2004/02/20 Kyungtae Lee,
* - SPDIF output buffer changed, buffer pointer is transfered by
* "_StreamBufOffset" parameter, added "output_digital" function.
* - Audio buffer map is changed, added enum "_MPEG2_DOWNMIX"
* in "CH_Mode".
* 8-channel mode (MPEG2_7CH)
* <------- sample per each channel ------->
* +----+----+----+----+----+----+-----+----+------------------+
* | L | Ls | C | Lc | R | Rs | LFE | Rc | ... next samples |
* +----+----+----+----+----+----+-----+----+------------------+
*
* 6-channel mode (MPEG2_5CH) without augmentation channel Lc/Rc
* <-- sample per each channel -->
* +----+----+----+----+----+-----+------------------+
* | L | Ls | C | R | Rs | LFE | ... next samples |
* +----+----+----+----+----+-----+------------------+
*
* downmix channel only
* <-- sample per each channel -->
* +----+----+----+----+----+----+------------------+
* | Lo | 0 | 0 | Ro | 0 | 0 | ... next samples |
* +----+----+----+----+----+----+------------------+
*
* Revision 1.1g 2004/05/19 Kyungtae Lee,
* - Added "OUPUT_2CH" build option for Malata Car DVD Solution.
*
* Revision 1.1h 2004/07/14 Kyungtae Lee,
* - Modified buffer limit checking by parameter "_InputBufferSize".
*
* ======================================================
* 7.1-ch 5.1-ch 2-ch
* ======================================================
* Code Size : 15,972 14,018 5,370 bytes
* Table Size : 9,222 9,222 7,302 bytes
* XMEM Size : 15,309 10,957 4,384 LW
* YMEM Size : 14,722 12,418 4,866 LW
* ======================================================
* Total memory : 115,287 71,451 40,422 bytes
* ======================================================
*
* Revision 1.1i, 2004/10/4, Kyungtae Lee,
* - When error syncword detected, frame size can be zero.
* In "copy_to_frame_buffer", added checking routine for
* main audio data is present or not. If main data is not
* retry to search syncword.
*
* Revision 1.2a, 2004/10/13, Kyungtae Lee,
* - In MPEG-1 decoder, support MPEG-2 extension stream output
* for SPDIF. For this mode added "check_mpeg2_extension"
* function in 'output_digital' routine.
*
* Revision 1.2b, 2004/10/29, Kyungtae Lee,
* - Added extension sync search routine for MPEG-1 SPDIF output.
*
* 2004/12/16, release v1.2b to H.S.Park for VCD application,
*/
.ifndef _MPA_H_
.defvar _MPA_H_
/****************************************************************/
/* */
/* I N C L U D E */
/* */
/****************************************************************/
.include "mpa_config.h"
.include "mpa_mem.h"
.include "mpa_reg.h"
.list off
/****************************************************************/
/* */
/* G L O B A L D E F I N I T I O N */
/* */
/****************************************************************/
//SBF0 equ 0x46 /* RW 0x3f0046 32-bit */
//SBF1 equ 0x4A /* RW 0x3f004A 32-bit */
SB0_RD equ 0x1000 /* sbf0 fill command */
SB0_WR equ 0x2000 /* sbf0 flush command */
SB1_RD equ 0x0100 /* sbf1 fill command */
SB1_WR equ 0x0200 /* sbf1 flush command */
SB0_FILL equ SB0_RD
SB0_FLUSH equ SB0_WR
SB1_FILL equ SB1_RD
SB1_FLUSH equ SB1_WR
SBF0_RING_MODE equ 0x8000
SBF1_RING_MODE equ 0x0800
SBF0_INT_MODE equ 0x0001
SBF1_INT_MODE equ 0x0002
SBF0_INT_CLR equ 0x0010
SBF1_INT_CLR equ 0x0001
SBF0_INT_PND equ 0x0010
SBF1_INT_PND equ 0x0001
SBF0_STATE_FILL equ 0x1000
SBF0_STATE_FLUSH equ 0x2000
SBF0_STATE_INIT equ 0x4000
SBF0_STATE_READ equ 0x5000
SBF0_STATE_WRITE equ 0x6000
SBF1_STATE_FILL equ 0x0100
SBF1_STATE_FLUSH equ 0x0200
SBF1_STATE_INIT equ 0x0400
SBF1_STATE_READ equ 0x0500
SBF1_STATE_WRITE equ 0x0600
/* Definition for debug module */
SKIP_PRINT_DEBUG equ 36 /* next program count offset value */
BS_BUF_SIZE equ 0x8000
EXT_BS_BUF_SIZE equ 0x8000
/* start point of fraction channel buffer */
CH0_FRAC_BUFFER equ xmem_FRACTION+96*0 ; L
CH1_FRAC_BUFFER equ xmem_FRACTION+96*1 ; R
.if( _DECODER_TYPE != MPEG_1_AUDIO )
CH2_FRAC_BUFFER equ xmem_FRACTION+96*2 ; C
CH3_FRAC_BUFFER equ xmem_FRACTION+96*3 ; Ls
CH4_FRAC_BUFFER equ xmem_FRACTION+96*4 ; Rs
.endif
.if( _DECODER_TYPE == MPEG_2_71CH )
CH5_FRAC_BUFFER equ xmem_FRACTION+96*5 ; Lc
CH6_FRAC_BUFFER equ xmem_FRACTION+96*6 ; Rc
.endif
PCM_SAMPLE_16BITS equ 16
PCM_SAMPLE_24BITS equ 24
BYTES_16BIT_SAMPLE equ 2
BYTES_24BIT_SAMPLE equ 4
/* Global definition */
.if( _DECODER_TYPE == MPEG_1_AUDIO )
NCH equ 2
NMCH equ 0
AUGCH equ 0
DMCH equ 0
MAX_CHANNEL equ NCH /* stereo only */
TOTAL_CHANNEL equ NCH+NMCH+AUGCH+DMCH
.endif
.if( _DECODER_TYPE == MPEG_2_AUDIO )
NCH equ 2
NMCH equ 3
AUGCH equ 0
DMCH equ 2
MAX_CHANNEL equ NCH+NMCH+AUGCH /* exclude LFE and downmix channels */
TOTAL_CHANNEL equ MAX_CHANNEL+DMCH+1 /* include LFE and downmix channels */
.endif
.if( _DECODER_TYPE == MPEG_2_71CH )
NCH equ 2
NMCH equ 3
AUGCH equ 2
DMCH equ 2
MAX_CHANNEL equ NCH+NMCH+AUGCH /* exclude LFE and downmix channels */
TOTAL_CHANNEL equ MAX_CHANNEL+DMCH+1 /* include LFE and downmix channels */
.endif
SAMPLES_PER_FRAME equ 1152 /* Layer I,II */
WINDOW_SIZE equ 1024
SBLIMIT equ 32
GRANULES equ 12
PART_SIZE equ SBLIMIT
SCALE_RANGE equ 64
SYNTH_SCALE equ 2<<23
PART0 equ 0
PART1 equ 1
PART2 equ 2
PARTS equ 3
/* Definition for header information */
LAYER_I equ 1
LAYER_II equ 2
LAYER_III equ 3
S_FREQ_44kHz equ 0
S_FREQ_48kHz equ 1
S_FREQ_32kHz equ 2
EMPHASIS_NONE equ 0 /* none emphasis for DVD-Video audio part */
MPEG_MODE_STEREO equ 0
MPEG_MODE_JSTEREO equ 1
MPEG_MODE_DUAL equ 2
MPEG_MODE_SINGLE equ 3
ERROR_PROTECT_YES equ 0
ERROR_PROTECT_NONE equ 1
NO_SURROUND equ 0
MONO_SURROUND equ 1
STEREO_SURROUND equ 2
SECOND_STEREO equ 3
CENTER_NONE equ 0
CENTER_PRESENT equ 1
PHANTOM_CENTER equ 3
MC_MATRIX_MODE_0 equ 0
MC_MATRIX_MODE_1 equ 1
MC_MATRIX_MODE_2 equ 2
MC_MATRIX_MODE_3 equ 3
/* Definition for MPEG base/ext bit stream */
BASE_SYNC_WORD equ 0xfff
EXT_SYNC_WORD equ 0x7ff
SYNC_WORD_LENGTH equ 12 /* bits */
CRC_WORD_LENGTH equ 16 /* bits */
CRC_CHECK_OPTION equ 1 /* enable or disable */
EXT_FRAME_LENGTH equ 11 /* bits */
MAX_MPG_FRAME_SIZE equ 1728 /* max for layer II */
MAX_EXT_FRAME_SIZE equ 2047 /* max for layer II */
BITS_PER_WORD equ 16 /* 16-bit bit_buffer */
BASE_HEADER_SIZE equ 4 /* bytes */
EXT_HEADER_SIZE equ 5 /* bytes */
FRAC_GRANULE_SIZE equ MAX_CHANNEL*PARTS*SBLIMIT
CONTINUOUS_BIT equ 1 /* mpeg 2 layer I */
STEREO equ 2
MONO equ 1
T0 equ 0
T1 equ 1
T2 equ 2
T3 equ 3
T4 equ 4
T5 equ 5
T6 equ 6
/* channel configuration - ISO/IEC 13818-3 chapter 0.2.3.2 */
UNDEFINE_CH_MD equ 0
CH_CONF_32 equ 1 ; 3/2 mode
CH_CONF_31 equ 2 ; 3/1 mode
CH_CONF_30 equ 3 ; 3/0 mode
CH_CONF_22 equ 4 ; 2/2 mode
CH_CONF_21 equ 5 ; 2/1 mode
CH_CONF_20 equ 6 ; 2/0 mode
CH_CONF_10 equ 7 ; 1/0 mode
CH_CONF_52 equ 8 ; 5/2 mode (7.1-channel mode)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -