📄 mpa_layer2aug.s
字号:
ld r7, r1
aug_copy_from_T5
brad aug_copy_sample
erpd rp3+d1
aug_copy_from_T01
ld r3, #0 ; T5T0 flag
ld r4, #0 ; T6T0 flag
ld r5, #1 ; T6T1 flag
eld a, rp3
ecld b, r6
eld rp3, #sbgr_table
erpn rp3, b
eld b, @rp3 ; the number of sbgr.
eld rp3, #aug_tc_alloc
erpn rp3, b
eld c, @rp3 ; aug_tc_alloc[sbgr]
ecp c, #4
ebra ec0, %f1
ecp c, #5
ebra ec1, %f3
%1 cmp eq, r12, #FALSE
brt %f2
brad aug_channel_check
ld r4, #1
%2 brad aug_channel_check
ld r5, #0
%3 ecp c, #6
ebra ec0, %f4
ecp c, #7
ebra ec1, aug_channel_check
%4 cmp eq, r12, #TRUE
brf aug_channel_check
ld r3, #1
aug_channel_check
eld rp3, a
cmp eq, r7, #5
brf chk_T6T0
chk_T5T0 cmp eq, r3, #0
brt aug_copy_from_T0
bra aug_copy_from_T1
chk_T6T0 ecp d, #T1
ebra ec0, chk_T6T1
cmp eq, r4, #0
brt aug_copy_from_T0
bra aug_copy_from_T1
chk_T6T1 cmp eq, r5, #0
brt aug_copy_from_T0
bra aug_copy_from_T1
aug_copy_sample eld b, @rp3+s1 ; PART 1
eld c, @rp3+s1 ; PART 2
eld d, @rp3+s1 ; PART 3
eld @rp0+d1, b
eld @rp0+d1, c
eld @rp0+d1, d
return_aug_ch_loop_check
brad aug_ch_loop_check
ebk #0000b
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:: ::;
;:: Denormalize samples ::;
;:: ::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
aug_denormalize_sample
; multiply scalefactors
jsr MC_II_denormalize_sample
jsr AUG_II_denormalize_sample
mRETURN (_DECODE_OK)
end_of_aug_layer_II_decoding
er psh1
er usm
er xsd
pop a14, a10
ret
/********************************************************************
The end of AUG_layer_II_decode
********************************************************************/
/************* Subroutines of AUG_layer_II_decode part *************/
/********************************************************************
Function: AUG_II_dyncross_bitalloc
Description: Decode bit allocation of dynamic crosstalk mode.
Arguments: r10 - sblimit value
rp0 - bit_alloc[5][0] buffer pointer
rp1 - nbal_table pointer
index registers:
@bank0
d1 d0 s1 s0
---------------------------------------
sd0: x 1 x x
sd1: x x 0 1
@bank1 (aug_dyn_cross_on = 1)
d1 d0 s1 s0
---------------------------------------
sd0: x x x 1
sd1: x x x 1
sd2: x x x 1
********************************************************************/
aug_bitalloc_dyncross_mode:
dl aug_bitalloc_dyncross_mode_0
dl aug_bitalloc_dyncross_mode_1
dl aug_bitalloc_dyncross_mode_2
dl aug_bitalloc_dyncross_mode_3
dl aug_bitalloc_dyncross_mode_4
dl aug_bitalloc_dyncross_mode_5
dl aug_bitalloc_dyncross_mode_6
dl aug_bitalloc_dyncross_mode_7
dl aug_bitalloc_dyncross_mode_8
dl aug_bitalloc_dyncross_mode_9
dl aug_bitalloc_dyncross_mode_10
dl aug_bitalloc_dyncross_mode_11
dl aug_bitalloc_dyncross_mode_12
dl aug_bitalloc_dyncross_mode_13
dl aug_bitalloc_dyncross_mode_14
dl aug_bitalloc_dyncross_mode_15
dl aug_bitalloc_dyncross_mode_16
dl aug_bitalloc_dyncross_mode_17
dl aug_bitalloc_dyncross_mode_18
AUG_II_dyncross_bitalloc:
push a14
ebk #0111b
eld rp0, #sbgr_table
eld rp1, #bit_alloc
eld rp2, #bit_alloc+64
esd0 s0, #1
esd1 s0, #1
esd2 s0, #1
ebk #0000b
eld a, rpd1.dyn_cross_LR
ecld r2, a
eld mc0, #aug_dyn_cross_mode
eld mc1, #aug_tc_alloc
ld r6, #0
aug_dyn_bitalloc_sb_loop_start
ld r3, #0 ; T5T0
ld r4, #0 ; T6T0
ld r5, #1 ; T6T1
; search the valid sbgr & dyn_cross_mode[sbgr]
ebk #1111b
eld b, @rp0+s0 ; sbgr
eld rp3, mc0
erpn rp3, b
eld c, @rp3 ; aug_dyn_cross_mode[sbgr]
eld rp3, mc1
erpn rp3, b
eld d, @rp3 ; aug_tc_alloc[sbgr]
eld x0, @rp1+s0 ; bit_alloc[sb][T0]
eld x1, @rp1+s0 ; bit_alloc[sb][T1]
eld y0, @rp2+s0 ; bit_alloc[sb][T2]
eld y1, @rp2+s0 ; bit_alloc[sb][T3]
eld p, @rp2+s0 ; bit_alloc[sb][T4]
ebk #0000b
ecp d, #4
ebra ec0, %f1
ecp d, #5
ebra ec1, %f3
%1 cmp eq, r2, #FALSE
brt %f2
brad decode_aug_bitalloc
ld r4, #1
%2 brad decode_aug_bitalloc
ld r5, #0
%3 ecp d, #6
ebra ec0, %f4
ecp d, #7
ebra ec1, decode_aug_bitalloc
%4 cmp eq, r2, #TRUE
brf decode_aug_bitalloc
ld r3, #1
decode_aug_bitalloc
ecld r1, c
chk_unknown_procedure
cmpu gt, r1, #18
brt error_aug_bitalloc
sl r1
sl r1
ld a14, #aug_bitalloc_dyncross_mode
add a14, r1
ldc r1, @a14
add a14, #2
ldc r0, @a14
ld e14, r1
ld r14, r0
%5 jmp a14
aug_bitalloc_dyncross_mode_0
eld a, @rp1+s1
jsr getbits
eld @rp0+d0, d
eld a, @rp1+s1
jsr getbits
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_1
eld a, @rp1+s1
jsr getbits
eld @rp0+d0, d
cmp eq, r5, #T1 ; T6 <== T6T1
brtd 4
eld d, x1
eld d, x0
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_2
eld a, @rp1+s1
jsr getbits
eld @rp0+d0, d
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, y0 ; T6 <== T2
aug_bitalloc_dyncross_mode_3
eld a, @rp1+s1
jsr getbits
eld @rp0+d0, d
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, p ; T6 <== T4
aug_bitalloc_dyncross_mode_4
eld a, @rp1+s1
jsr getbits
eld @rp0+d0, d
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d ; T6 <== T5
aug_bitalloc_dyncross_mode_5
cmp eq, r3, #T0 ; T5 <== T5T0
brtd 4
eld d, x0
eld d, x1
eld @rp0+d0, d
eld a, @rp1+s1
jsr getbits
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_6
cmp eq, r3, #T0 ; T5 <== T5T0
brtd 4
eld d, x0
eld d, x1
eld @rp0+d0, d
cmp eq, r5, #T1 ; T6 <== T6T1
brtd 4
eld d, x1
eld d, x0
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_7
cmp eq, r3, #T0 ; T5 <== T5T0
brtd 4
eld d, x0
eld d, x1
eld @rp0+d0, d
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, y0 ; T6 <== T2
aug_bitalloc_dyncross_mode_8
cmp eq, r3, #T0 ; T5 <== T5T0
brtd 4
eld d, x0
eld d, x1
eld @rp0+d0, d
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, p ; T6 <== T4
aug_bitalloc_dyncross_mode_9
cmp eq, r3, #T0 ; T5 <== T5T0
brtd 4
eld d, x0
eld d, x1
eld @rp0+d0, d
cmp eq, r4, #T0 ; T6 <== T6T0
brtd 4
eld d, x0
eld d, x1
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_10
eld @rp0+d0, y0 ; T5 <== T2
eld a, @rp1+s1
jsr getbits
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_11
eld @rp0+d0, y0 ; T5 <== T2
cmp eq, r5, #T1 ; T6 <== T6T1
brtd 4
eld d, x1
eld d, x0
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_12
eld @rp0+d0, y0 ; T5 <== T2
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, y0 ; T6 <== T2
aug_bitalloc_dyncross_mode_13
eld @rp0+d0, y0 ; T5 <== T2
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, p ; T6 <== T4
aug_bitalloc_dyncross_mode_14
eld @rp0+d0, y1 ; T5 <== T3
eld a, @rp1+s1
jsr getbits
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_15
eld @rp0+d0, y1 ; T5 <== T3
cmp eq, r5, #T1 ; T6 <== T6T1
brtd 4
eld d, x1
eld d, x0
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, d
aug_bitalloc_dyncross_mode_16
eld @rp0+d0, y1 ; T5 <== T3
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, y0 ; T6 <== T2
aug_bitalloc_dyncross_mode_17
eld @rp0+d0, y1 ; T5 <== T3
brad aug_dyn_bitalloc_sb_loop_check
eld @rp0+d0, p ; T6 <== T4
aug_bitalloc_dyncross_mode_18
eld @rp0+d0, y1 ; T5 <== T3
eld @rp0+d0, y1 ; T6 <== T3
aug_dyn_bitalloc_sb_loop_check
erps rp1+s0
cmp eq, r6, r10
brfd aug_dyn_bitalloc_sb_loop_start
inc r6
pop a14
mRETURN (_DECODE_OK)
ret
error_aug_bitalloc:
pop a14
mRETURN (_UNKNOWN_ERROR)
ret
/********************************************************************
Function: AUG_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
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: x 32 -64 32
sd1: x x x 3
sd3: x x x 0
********************************************************************/
AUG_II_denormalize_sample:
es psh1
er usm
es opm
ebk #1011b
er xsd
eld sd0, #0x0000
eld sd3, #0x0000
es xsd
eld sd0, #0x02c2
eld sd3, #0x0000
eld sd1, #0x0003
eld rp0, #fraction+96*(NCH+NMCH)
eld a, rpd1.sblimit_mc
eld c, #scalefactor
eld d, #MAX_CHANNEL*PARTS*SBLIMIT
esub d, a
eld b, #-(PARTS*SBLIMIT*NCH-1)
ecld r6, a ; sblimit
dec r6
ld r2, r6
ld r8, #0
aug_denorm_gr_loop_start
ld r1, r8 ; No. granule
sr r1
sr r1
ecld a, r1
eld rp1, #scale_index+(NCH+NMCH)*PARTS*SBLIMIT
erpn rp1, a
aug_denorm_sb_loop_start
; channel LC
eld rp3, c
eld a, @rp1+s0 ; scale_index[sb][5][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
; channel RC
eld rp3, c
eld a, @rp1+s0 ; scale_index[sb][6][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
bnzd r6, aug_denorm_sb_loop_start
erpn rp0, b
aug_denorm_gr_loop_check
erpn rp0, d
inc r8
cmp eq, r8, #GRANULES
brfd aug_denorm_gr_loop_start
ld r6, r2
ebk #0000b
ret
.endif /* .if( _DECODER_TYPE == MPEG_2_71CH ) */
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -