?? mpa_layer2mc.s
字號:
;::::::::::::::::::[ if dyn_cross_mode[sbgr] == 0 ]::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
; for all channel transmitted
__dyn_cross_mode_0__
_ph_cent cmp eq, r0, #PHANTOM_CENTER
brf _2nd_st
cmp ge, r7, #12
brf _2nd_st
cmp eq, r6, #2
brtd store_bitalloc
eld d, #0
_2nd_st cmp eq, r1, #SECOND_STEREO
brf %f2
eld rp2, #dyn_second_stereo
erpn rp2, b
eld c, @rp2
ecp c, #1
ebra ec1, %f2
eld d, x0
cmp eq, r0, #CENTER_NONE
brf %f1
cmp eq, r6, #3
brf %f2
bra store_bitalloc
%1 cmp eq, r6, #4
brt store_bitalloc
%2 eld a, @rp1+s1
jsr getbits
store_bitalloc eld @rp0+d0, d
inc r6
cmp eq, r6, r10
brfd __dyn_cross_mode_0__
eld x0, d
ebk #0100b
erps rp2+s1
brad dyn_bitalloc_sb_loop_check
ebk #0000b
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:::::::::::::::::::::[ dyn_cross_bits == 1 ]::::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
; for channel mode 3/0 and 2/1
__dyn_cross_bits_1__
; 1. for mode 3/0 + phantom center
cmp eq, r0, #PHANTOM_CENTER
brf %f10
cmp ge, r7, #12
brtd T2_bitalloc
eld d, #0
%10 eld rp2, #tc_alloc
erpn rp2, b
eld b, @rp2 ; tc_alloc[sbgr]
ecp b, #1
ebrad ec0, T2_bitalloc
eld d, y0
ecp b, #2
ebrad ec0, T2_bitalloc
eld d, y1
eld c, rpd1.dyn_cross_LR
ecp c, #TRUE
ebra ec0, T2_bitalloc
eld d, y0
T2_bitalloc eld @rp0+d0, d ; store T2
; 2. for mode 3/0 + 2/0
cmp eq, r1, #SECOND_STEREO
brf dyn_bitalloc_sb_loop_check
eld a, @rp1+s1 ; nbal_table[sb]
jsr getbits
T3_bitalloc eld @rp0+d0, d ; store T3
eld rp2, #dyn_second_stereo
erpn rp2, b
eld b, @rp2
ecp b, #1
ebra ec0, T4_bitalloc
eld a, @rp1+s1 ; nbal_table[sb]
jsr getbits
T4_bitalloc brad dyn_bitalloc_sb_loop_check
eld @rp0+d0, d ; store T4
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:::::::::::::::::::::[ dyn_cross_bits == 3 ]::::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
; for channel mode 3/1 and 2/2
__dyn_cross_bits_3__
; T2, 3/1 + phantom center
cmp eq, r0, #PHANTOM_CENTER
brf %f20
cmp ge, r7, #12
brtd T2_bitalloc3
eld d, #0
%20 cmp eq, r3, #1
brt %f21
cmp eq, r3, #4
brf %f22
%21 eld a, @rp1+s1
jsr getbits
bra T2_bitalloc3
; T2, 2/2
%22 cmp eq, r1, #STEREO_SURROUND
brtd T2_bitalloc3
eld d, y0
; T2, 3/1
eld rp2, #tc_alloc
erpn rp2, b
eld c, @rp2
ecp c, #1
ebra ec0, T2_bitalloc3
; T2, 3/1 (matrix mode 2 only)
ecp c, #5
ebra ec0, T2_bitalloc3
ecp c, #2
ebra ec0, %f23 ;T2_bitalloc3-2
eld c, rpd1.dyn_cross_LR
ecp c, #FALSE
ebra ec0, T2_bitalloc3
%23 eld d, y1
T2_bitalloc3 eld @rp0+d0, d ; store T2
; T3
cmp eq, r3, #2
brf %f24
eld a, @rp1+s1
jsr getbits
bra T3_bitalloc3
%24 cmp eq, r3, #4
brt T3_bitalloc3
; T3, 2/2
cmp eq, r1, #STEREO_SURROUND
brtd T3_bitalloc3
eld d, y1
; T3, 3/1
eld rp2, #tc_alloc
erpn rp2, b
eld c, @rp2
ecp c, #4
ebra ec0, T3_bitalloc3
; T3, 3/1 (matrix mode 2 only)
ecp c, #5
ebra ec0, T3_bitalloc3
ecp c, #2
ebra ec2, %f25
bra %f26
%25 eld c, rpd1.dyn_cross_LR
ecp c, #TRUE
ebra ec0, T3_bitalloc3
%26 eld d, y0
T3_bitalloc3 brad dyn_bitalloc_sb_loop_check
eld @rp0+d0, d ; store T3
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:::::::::::::::::::::[ dyn_cross_bits == 4 ]::::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
; for channel mode 3/2
__dyn_cross_bits_4__
; T2, 3/2 + phantom center
cmp eq, r0, #PHANTOM_CENTER
brf %f30
cmp ge, r7, #12
brtd T2_bitalloc4
eld d, #0
; T2, 3/2
%30 cmp eq, r3, #3
brt T2_not_contained
cmp eq, r3, #13
brt T2_not_contained
cmp gt, r3, #7
brt T2_contained
cmp ge, r3, #5
brt T2_not_contained
T2_contained
eld a, @rp1+s1 ; nbal_table[sb]
jsr getbits
bra T2_bitalloc4
T2_not_contained
eld rp2, #tc_alloc
erpn rp2, b
eld b, @rp2 ; tc_alloc[sbgr]
ecp b, #1
ebrad ec0, T2_bitalloc4
eld d, y0
ecp b, #7
ebra ec0, T2_bitalloc4
ecp b, #2
ebrad ec0, T2_bitalloc4
eld d, y1
ecp b, #6
ebra ec0, T2_bitalloc4
eld c, rpd1.dyn_cross_LR
ecp c, #TRUE
ebra ec0, T2_bitalloc4
eld d, y0
T2_bitalloc4 eld @rp0+d0, d
eld x0, d
; T3, 3/2
cmp eq, r3, #2
brtd T3_bitalloc4
eld d, y0
cmp eq, r3, #4
brt T3_bitalloc4
cmp eq, r3, #6
brt T3_bitalloc4
cmp eq, r3, #7
brt T3_bitalloc4
cmp eq, r3, #12
brt T3_bitalloc4
cmp eq, r3, #9
brtd T3_bitalloc4
eld d, x0
cmp eq, r3, #11
brt T3_bitalloc4
cmp eq, r3, #14
brt T3_bitalloc4
T3_contained
eld a, @rp1+s1 ; nbal_table[sb]
jsr getbits
T3_bitalloc4 eld @rp0+d0, d
eld x1, d
; T4, 3/2
cmp eq, r3, #1
brtd T4_bitalloc4
eld d, y1
cmp eq, r3, #4
brt T4_bitalloc4
cmp eq, r3, #5
brt T4_bitalloc4
cmp eq, r3, #7
brt T4_bitalloc4
cmp eq, r3, #11
brt T4_bitalloc4
cmp eq, r3, #10
brtd T4_bitalloc4
eld d, x0
cmp eq, r3, #12
brt T4_bitalloc4
cmp eq, r3, #14
brt T4_bitalloc4
cmp eq, r3, #8
brtd T4_bitalloc4
eld d, x1
cmp eq, r3, #13
brt T4_bitalloc4
T4_contained
eld a, @rp1+s1
jsr getbits
T4_bitalloc4 eld @rp0+d0, d
dyn_bitalloc_sb_loop_check
erps rp1+s0
inc r7
cmp ge, r7, r11
brfd dyn_bitalloc_sb_loop_start
ld r6, r5
pop a14
ret
/********************************************************************
Function: MC_II_denormalize_sample
Description: Denormalize sample.
The requantized values have to be rescaled.
The multiplication factors in Table B.1 "Layer I,II
scalefactors", ISO/IEC 11172-3: 1993
Next the dequantized values have to be rescaled
s' = scalefactor * s"
where s' is denormalized sample, s" is dequantized
sample value.
Arguments: - rp0 fraction buffer pointer
- rp1 scale_index buffer pointer
- rp2 temp
- rp3 scalefactor table pointer
- r10 the number of subbands
- r11 the number of channels
- r13 dyn_cross_bits value
NOTE!
x0 (fraction -1 ~ 1, 1.23 integer format) is signed and
y1 (scalefactor 0 ~ 1, 0.24 integer format) is unsigned number.
xsd, psh1, usm flags must be set to 1.
mc_sblimit value is equal to sblimit value.
index registers:
@bank1
d1 d0 s1 s0
---------------------------------------
sd0: 96 32 -64 32
sd1: x x x 3
sd2: x x x 3
sd3: x x x 0
********************************************************************/
MC_II_denormalize_sample::
es psh1
er usm
es opm
ebk #1111b
er xsd
eld sd0, #0x0000
eld sd3, #0x0000
es xsd
eld sd0, #0x62c2
eld sd3, #0x0000
eld sd1, #0x0003
eld sd2, #0x0003
eld rpd1, #layer_info
eld a, rpd1.sblimit_mc
eld b, rpd1.mc_channel
eld c, rpd1.stereo
ecld r6, a ; sblimit of mc
ecld r7, b ; mc channels
ecld r3, c ; mc channels
dec r6
dec r7
ld r4, r6
ld r5, r7
ld r8, #0
eld rp0, #fraction
eld c, #scalefactor
eld d, #PARTS*SBLIMIT*MAX_CHANNEL
esub d, a
eld b, #-(95+192)
cmp gt, r5, #0 ; if 1 mc channels
brf denorm_gr_loop_start
eld b, #-(191+192)
cmp gt, r5, #1 ; if 2 mc channels
brf denorm_gr_loop_start
eld b, #-(287+192)
cmp eq, r5, #2 ; if 3 mc channels
brt denorm_gr_loop_start
.ifdef _DEBUG_
/** debug **/ bra $
.endif
denorm_gr_loop_start
ld r1, r8 ; No. granule
sr r1
sr r1
ecld a, r1
eld rp1, #scale_index
eld rp2, #scale_index+NCH*PARTS*SBLIMIT
erpn rp1, a
erpn rp2, a
denorm_sb_loop_start
; denormalize base channels
base_part_mo eld rp3, c
eld a, @rp1+s0 ; scale_index[sb][0][part]
erpn rp3, a
eld x0, @rp0+s0, y1, @rp3
emul x0y1, x0, @rp0+s0
emld ma0, x0y1, x0, @rp0+s1
emld ma1, x0y1
eld @rp0+d0, ma0
eld ma0, p, @rp0+d0, ma1
eld @rp0+d0, ma0
cmp eq, r3, #MONO
brf base_part_st
erpd rp0+d1
bra mc_part
base_part_st eld rp3, c
eld a, @rp1+s0 ; scale_index[sb][1][part]
erpn rp3, a
eld x0, @rp0+s0, y1, @rp3
emul x0y1, x0, @rp0+s0
emld ma0, x0y1, x0, @rp0+s1
emld ma1, x0y1
eld @rp0+d0, ma0
eld ma0, p, @rp0+d0, ma1
eld @rp0+d0, ma0
; denormalize multi channels
mc_part eld rp3, c
eld a, @rp2+s0 ; scale_index[sb][mch][part]
erpn rp3, a
eld x0, @rp0+s0, y1, @rp3
emul x0y1, x0, @rp0+s0
emld ma0, x0y1, x0, @rp0+s1
emld ma1, x0y1
eld @rp0+d0, ma0
eld ma0, p, @rp0+d0, ma1
bnzd r7, mc_part
eld @rp0+d0, ma0
erpn rp0, b
bnzd r6, denorm_sb_loop_start
ld r7, r5
denorm_gr_loop_check
erpn rp0, d
inc r8
cmp eq, r8, #GRANULES
brfd denorm_gr_loop_start
ld r6, r4
ebk #0
ret
.endif /* .if( _DECODER_TYPE != MPEG_1_AUDIO ) */
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -