?? mpa_denorm.s
字號:
/*
* mpa_denorm.s
*
* MPEG/audio multichannel decoder.
* Copyright (C) 2003 Optical Player P/J, Samsung Electronics.
*
*/
.include "mpa.h"
.secFILE_mpa_denorm
/********************************************************************
Function: MC_II_denormalizing
Description: De-normalisation procedure
In the MPEG/Audio decoder, the weighted signals
Lw, Cw, Rw, LSw, RSw first have to be inverse
weighted by multiplying the signals with the inverse
weighting factors. Next, these signals can be
multiplied by the de-normalisation factor to undo
the attenuation, done at the encoder side to avoid
overload when calculating the compatible signals.
1. procedure = 0, 2
Lw, Rw : 1 + sqrt(2)
Cw : sqrt(2) * {1 + sqrt(2)}
LSw, RSw: sqrt(2) * {1 + sqrt(2)}
2. procedure = 1
Lw, Rw : 1.5 + 0.5 * sqrt(2)
Cw : sqrt(2) * {1.5 + 0.5 * sqrt(2)}
LSw, RSw: 2 * {1.5 + 0.5 * sqrt(2)}
3. procedure = 3
Lw, Rw, Cw, LSw, RSw: 1.0
Arguments:
r0 procedure No.
r1 surround mode
r2 center present
r3 mc channels
index registers:
@bank0
d1 d0 s1 s0
---------------------------------------
sd0: x x x 1
sd1: 0 1 x x
sd3: x x x 1
********************************************************************/
.if( _DECODER_TYPE != MPEG_1_AUDIO )
MC_II_denormalizing::
push a14
es psh1
es usm ; x0 is signed, y1 is unsigned value
es op
es opm
ebk #0000b
er xsd
eld sd0, #0x0001
eld sd1, #0x0100
eld sd3, #0x0001
eld a, rpd0.dematrix_procedure
eld b, rpd0.surround
eld c, rpd0.center
eld d, rpd1.mc_channel
ecld r0, a
ecld r1, b
ecld r2, c
ecld r3, d
cmp eq, r0, #3
brt _end_denormalisation_
eld rp3, #denormalisation_factor
cmp eq, r0, #1
brf denormalize_base_channel
eld rp3, #denormalisation_factor+3
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:: ::;
;:: Denormalize base channel ::;
;:: ::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
denormalize_base_channel
eld a, #(MAX_CHANNEL-STEREO)*PARTS*SBLIMIT-2
ld r4, #STEREO*PARTS
eld rp0, #CH0_FRAC_BUFFER
jsr multiply_denorm_factor
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:: ::;
;:: Denormalize multi channel ::;
;:: ::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
denormalize_multichannel
cmp eq, r1, #SECOND_STEREO
brt denorm_2nd_stereo
cmp eq, r0, #1 ; dematrix procedure 1
brt denorm_procedure_1
denorm_procedure_0_2
ld r4, #PARTS
ld r5, #SBLIMIT
ld r6, #MAX_CHANNEL
sub r6, r3
mul uu, r6, r4 ; (MAX_CHANNEL-NMCH)*PARTS
mul uu, r4, r3 ; NMCH*PARTS
mul uu, r5, r6
sub r5, #2 ; NMCH*PARTS*SBLIMIT-2
ecld a, r5
eld rp0, #CH2_FRAC_BUFFER
jsr multiply_denorm_factor
bra _end_denormalisation_
denorm_procedure_1
cmp eq, r3, #3
brt mc_channels_3
cmp eq, r3, #2
brt mc_channels_2
cmp eq, r3, #1
brt mc_channels_1
mc_channels_3
; denormalize center channel
eld a, #(MAX_CHANNEL-1)*PARTS*SBLIMIT-2
ld r4, #1*PARTS
eld rp0, #CH2_FRAC_BUFFER
jsr multiply_denorm_factor
; denormalize surround channel
eld a, #(MAX_CHANNEL-2)*PARTS*SBLIMIT-2
ld r4, #2*PARTS
eld rp0, #CH3_FRAC_BUFFER
jsr multiply_denorm_factor
bra _end_denormalisation_
mc_channels_2
cmp eq, r1, #STEREO_SURROUND
brt ch_2_2
; denormalize 3/1 channel configuration
ch_3_1 eld a, #(MAX_CHANNEL-1)*PARTS*SBLIMIT-2
ld r4, #1*PARTS
eld rp0, #CH2_FRAC_BUFFER
jsr multiply_denorm_factor
eld a, #(MAX_CHANNEL-1)*PARTS*SBLIMIT-2
ld r4, #1*PARTS
eld rp0, #CH3_FRAC_BUFFER
jsr multiply_denorm_factor
bra _end_denormalisation_
; denormalize 2/2 channel configuration
ch_2_2 erps rp3+s0
eld a, #(MAX_CHANNEL-2)*PARTS*SBLIMIT-2
ld r4, #2*PARTS
eld rp0, #CH2_FRAC_BUFFER
jsr multiply_denorm_factor
bra _end_denormalisation_
mc_channels_1
cmp eq, r2, #CENTER_NONE
brf ch_3_0
; denormalize 2/1 channel configuration
ch_2_1 erps rp3+s0
; denormalize 3/0 channel configuration
ch_3_0 eld a, #(MAX_CHANNEL-1)*PARTS*SBLIMIT-2
ld r4, #MONO*PARTS
eld rp0, #CH2_FRAC_BUFFER
jsr multiply_denorm_factor
bra _end_denormalisation_
denorm_2nd_stereo
cmp eq, r2, #CENTER_NONE
brt _end_denormalisation_
eld a, #(MAX_CHANNEL-1)*PARTS*SBLIMIT-2
ld r4, #MONO*PARTS
eld rp0, #CH2_FRAC_BUFFER
jsr multiply_denorm_factor
_end_denormalisation_
er usm
er psh1
er op
er opm
pop a14
ret
.endif /* .if( _DECODER_TYPE != MPEG_1_AUDIO ) */
/********************************************************************
Function: MC_AUG_denormalizing
Description:
Arguments:
index registers:
@bank0
d1 d0 s1 s0
---------------------------------------
sd0: x x x 1
sd1: 0 1 x x
sd3: x x 7 1
********************************************************************/
.if( _DECODER_TYPE == MPEG_2_71CH )
MC_AUG_denormalizing::
push a14
es usm
es psh1
es op
es opm
ebk #0000b
er xsd
eld sd0, #0x0001
eld sd1, #0x0100
eld sd3, #0x0071
eld rp3, #aug_denormalisation_factor
eld a, rpd0.dematrix_procedure
eld b, rpd1.aug_mtx_proc
esla a
esla a
esla a
esla a
eadd a, b
ecp a, #0x00
ebra ec0, denormalize_all_channel
ecp a, #0x20
ebra ec0, denormalize_all_channel
ecp a, #0x10
ebrad ec0, denormalize_all_channel
erps rp3+s1
ecp a, #0x30
ebrad ec0, denormalize_all_channel
erps rp3+s1
ecp a, #0x01
ebrad ec0, denormalize_all_channel
erps rp3+s1
ecp a, #0x21
ebra ec0, denormalize_all_channel
ecp a, #0x11
ebrad ec0, denormalize_all_channel
erps rp3+s1
ecp a, #0x31
ebrad ec0, denormalize_all_channel
erps rp3+s1
ecp a, #0x03
ebrad ec0, denormalize_all_channel
erps rp3+s1
ecp a, #0x23
ebra ec0, denormalize_all_channel
ecp a, #0x13
ebrad ec0, denormalize_all_channel
erps rp3+s1
ecp a, #0x33
;brad ec0, denormalize_all_channel
;erps rp3+s1
ebra ec0, end_AUG_denormalize
denormalize_all_channel
eld a, #(MAX_CHANNEL-1)*PARTS*SBLIMIT-2
ld r4, #PARTS
eld rp0, #CH0_FRAC_BUFFER
jsr multiply_denorm_factor ; T0
eld rp0, #CH1_FRAC_BUFFER
jsr multiply_denorm_factor ; T1
eld rp0, #CH2_FRAC_BUFFER
jsr multiply_denorm_factor ; T2
eld rp0, #CH3_FRAC_BUFFER
jsr multiply_denorm_factor ; T3
eld rp0, #CH4_FRAC_BUFFER
jsr multiply_denorm_factor ; T4
eld rp0, #CH5_FRAC_BUFFER
jsr multiply_denorm_factor ; T5
eld rp0, #CH6_FRAC_BUFFER
jsr multiply_denorm_factor ; T6
end_AUG_denormalize
er usm
er psh1
er op
er opm
pop a14
ret
.endif /* .if( _DECODER_TYPE == MPEG_2_71CH ) */
/********************************************************************
Function: multiply_denorm_factor
Description:
Arguments: r4 inner loop count
r7 granule count
a next granule offset
rp0 fraction buffer pointer
rp3 denormalisation factor table
NOTE: flags
set usm, psh1, opm
********************************************************************/
store .macro ma
.if 1
eld @rp1+d0, ma
.else
eld b, ma0rn
eld @rp1+d0, b
.endif
.endm
multiply_denorm_factor:
ld r7, #GRANULES
eld y1, @rp3+s0
loop_1 ld r6, r4
eld rp1, rp0
eld x0, @rp0+s0
emul x0y1, x0, @rp0+s0
loop_2 emld ma0, x0y1, x0, @rp0+s0 ; sb 0 ~ 7
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0 ; sb 8 ~ 15
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0 ; sb 16 ~ 23
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0 ; sb 24 ~ 31
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
emld ma0, x0y1, x0, @rp0+s0
esla ma0
esla ma0
store ma0
dt r6
brf loop_2
dt r7
brfd loop_1
erpn rp0, a
ret
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -