?? mpa_output.s
字號:
;:::::::::::::::::::[ channel config: STEREO ]:::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
chmd_stereo eld a, rpd1.stereo
ecp a, #MONO
ebra ec0, chmd_mono
esd0 s1, #MAX_CHANNEL-1
cmp eq, r2, #TRUE
brf chmd_stereo_2ch
eld a, rpd0.lfe
ecp a, #TRUE
ebra ec0, chmd_stereo_lfe
chmd_stereo_2ch eld a, @rp0+s0 ; L
eld b, @rp0+s1 ; R
eld @rp3+d0, a ; Lo
.if( _DECODER_TYPE != MPEG_1_AUDIO )
eld @rp3+d0, a ; L
eld @rp3+d0, d ; Ls
eld @rp3+d0, d ; C
eld @rp3+d0, b ; Ro
eld @rp3+d0, b ; R
eld @rp3+d0, d ; Rs
.endif
bnzd r6, chmd_stereo_2ch
.if( _DECODER_TYPE != MPEG_1_AUDIO )
eld @rp3+d0, d ; Lfe
.else
eld @rp3+d0, b ; Ro
.endif
bra end_audio_output
chmd_stereo_lfe eld a, @rp0+s0 ; L
eld b, @rp0+s1 ; R
eld ph, @rp2+s0 ; LFE
eld @rp3+d0, a ; Lo
eld @rp3+d0, a ; L
eld @rp3+d0, d ; Ls
eld @rp3+d0, d ; C
eld @rp3+d0, b ; Ro
eld @rp3+d0, b ; R
eld @rp3+d0, d ; Rs
bnzd r6, chmd_stereo_lfe
eld @rp3+d0, ph ; Lfe
bra end_audio_output
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:::::::::::::::::::[ channel config: 5.1 CH ]:::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
chmd_5ch_with_lfe
.if( _DECODER_TYPE != MPEG_1_AUDIO )
eld a, rpd1.stereo
ecp a, #STEREO
ebra ec0, %f1
eld b, rpd0.surround
ecld r5, b
cmp eq, r5, #SECOND_STEREO ; 1/0 + 2/0 mode
brt chmd_mono_2ndST
%1 eld a, rpd1.mc_channel
ecp a, #FALSE
ebra ec0, chmd_stereo
esd0 s1, #MAX_CHANNEL-4
cmp eq, r2, #TRUE
brf chmd_5ch_no_lfe
eld a, rpd0.lfe
ecp a, #TRUE
ebra ec1, chmd_5ch_no_lfe
chmd_5ch_lfe eld ma0, @rp1+s0 ; Lo
eld ma1, @rp1+s0 ; Ro
eld a, @rp0+s0 ; L
eld b, @rp0+s0 ; R
eld c, @rp0+s0 ; C
eld x0, @rp0+s0 ; Ls
eld y0, @rp0+s1 ; Rs
eld ph, @rp2+s0 ; LFE
eld @rp3+d0, ma0 ; Lo
eld @rp3+d0, a ; L
eld @rp3+d0, x0 ; Ls
eld @rp3+d0, c ; C
eld @rp3+d0, ma1 ; Ro
eld @rp3+d0, b ; R
eld @rp3+d0, y0 ; Rs
bnzd r6, chmd_5ch_lfe
eld @rp3+d0, ph ; Lfe
bra end_audio_output
chmd_5ch_no_lfe eld ma0, @rp1+s0 ; Lo
eld ma1, @rp1+s0 ; Ro
eld a, @rp0+s0 ; L
eld b, @rp0+s0 ; R
eld c, @rp0+s0 ; C
eld x0, @rp0+s0 ; Ls
eld y0, @rp0+s1 ; Rs
eld @rp3+d0, ma0 ; Lo
eld @rp3+d0, a ; L
eld @rp3+d0, x0 ; Ls
eld @rp3+d0, c ; C
eld @rp3+d0, ma1 ; Ro
eld @rp3+d0, b ; R
eld @rp3+d0, y0 ; Rs
bnzd r6, chmd_5ch_no_lfe
eld @rp3+d0, d ; Lfe
.endif
bra end_audio_output
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:::::::::::::::::::[ channel config: 7.1 CH ]:::::::::::::::::::::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
chmd_7ch_with_lfe
.if( _DECODER_TYPE != MPEG_1_AUDIO )
cmp eq, r2, #TRUE
brf chmd_7ch_no_lfe
eld a, rpd0.lfe
ecp a, #TRUE
ebra ec1, chmd_7ch_no_lfe
chmd_7ch_lfe eld ma0, @rp1+s0 ; Lo
eld ma1, @rp1+s0 ; Ro
eld a, @rp0+s0 ; L
eld b, @rp0+s0 ; R
eld c, @rp0+s0 ; C
eld x0, @rp0+s0 ; Ls
eld y0, @rp0+s0 ; Rs
eld x1, @rp0+s0 ; Lc
eld y1, @rp0+s0 ; Rc
eld ph, @rp2+s0 ; LFE
eld @rp3+d0, ma0 ; Lo
eld @rp3+d0, a ; L
eld @rp3+d0, x0 ; Ls
eld @rp3+d0, c ; C
eld @rp3+d0, x1 ; Lc
eld @rp3+d0, ma1 ; Ro
eld @rp3+d0, b ; R
eld @rp3+d0, y0 ; Rs
eld @rp3+d0, ph ; Lfe
bnzd r6, chmd_7ch_lfe
eld @rp3+d0, y1 ; Rc
bra end_audio_output
chmd_7ch_no_lfe eld ma0, @rp1+s0 ; Lo
eld ma1, @rp1+s0 ; Ro
eld a, @rp0+s0 ; L
eld b, @rp0+s0 ; R
eld c, @rp0+s0 ; C
eld x0, @rp0+s0 ; Ls
eld y0, @rp0+s0 ; Rs
eld x1, @rp0+s0 ; Lc
eld y1, @rp0+s0 ; Rc
eld @rp3+d0, ma0 ; Lo
eld @rp3+d0, a ; L
eld @rp3+d0, x0 ; Ls
eld @rp3+d0, c ; C
eld @rp3+d0, x1 ; Lc
eld @rp3+d0, ma1 ; Ro
eld @rp3+d0, b ; R
eld @rp3+d0, y0 ; Rs
eld @rp3+d0, d ; Lfe
bnzd r6, chmd_7ch_no_lfe
eld @rp3+d0, y1 ; Rc
.endif
bra end_audio_output
null_audio_output
eld @rp3+d0, d ; Lo
eld @rp3+d0, d ; L
eld @rp3+d0, d ; Ls
eld @rp3+d0, d ; C
eld @rp3+d0, d ; Ro
eld @rp3+d0, d ; R
eld @rp3+d0, d ; Rs
bnzd r6, null_audio_output
eld @rp3+d0, d ; Lfe
end_audio_output
ret
.endif /* if( OUTPUT_8CH == TRUE ) */
/********************************************************************
Function: output_digital
Description: output bitstream mode by S/PDIF
Arguments:
********************************************************************/
output_digital::
push a14
ld r7, #0
mRETURN (_DECODE_OK)
.if( _SUPPORT_SPDIF == TRUE )
; mpg
eld a, rpd1.frame_size
ecp a, #0
ebra ec0, end_digital_out
ld a13, #_buffer_ptr
ldw a11, @[a13+_BS_MAIN]
ldw a12, @[a10+_StreamBufOffset]
ld r0, e12
add r0, #^SB0_BASE //BS_SPDIF_BASE
ld e12, r0
ecld r6, a
add r7, r6
dec r6
%1 ldb r1, @[a11]
add a11, #1
ldb @[a12], r1
bnzd r6, %b1
add a12, #1
; ext
eld a, rpd0.ext_stream_present
ecp a, #TRUE
ebra ec0, %f2
; 2004.10.13, Lee Kyungtae, support mpeg-2 spdif output in mpeg-1 decoder
ldw a11, @[a10+_pParameter]
ldb r0, @[a11+_EXT_Present]
cmp eq, r0, #TRUE
brf end_digital_out
jsr check_mpeg2_extension
cmp eq, r2, #_DECODE_OK
brf end_digital_out
%2 eld a, rpd0.ext_length
ecp a, #0
ebra ec0, end_digital_out
ldw a11, @[a10+_ExtInputBufferOffset]
ld r0, e11
add r0, #^SB0_BASE
ld e11, r0
ecld r6, a
add r7, r6
cpy_ext ldw a14, @[a13+_EXT_BUF_LIMIT]
dec r6
%2 ldb r0, @[a11]
add a11, #1
cmp eq, a11, a14
brfd %f3
ldb @[a12], r0
ldw a11, @[a13+_EXT_BUF_BASE]
%3 bnzd r6, %b2
add a12, #1
ld r0, e11
sub r0, #^SB0_BASE
ld e11, r0
ldw @[a10+_ExtInputBufferOffset], a11
mRETURN (_DECODE_OK)
.endif
end_digital_out
ldw @[a10+_FrameSize], r7
pop a14
ret
/********************************************************************
Function: check_mpeg2_extension
Description: Output extension bitstream for MPEG-1 decoder
Arguments:
********************************************************************/
check_mpeg2_extension::
push a12
eld a, #0
eld b, #0
eld c, #0
ldw a11, @[a10+_ExtInputBufferOffset]
ld r0, e11
add r0, #^SB0_BASE
ld e11, r0
ldw a12, @[a13+_EXT_BUF_LIMIT]
; search mpg sync word
_1_byte_ext ldb r0, @[a11]
add a11, #1
cmp eq, a11, a12
brf _2_byte_ext
ldw a11, @[a13+_EXT_BUF_BASE]
_2_byte_ext ldb r1, @[a11]
add a11, #1
cmp eq, a11, a12
brf check_ext_sync
ldw a11, @[a13+_EXT_BUF_BASE]
check_ext_sync
slb r0
or r0, r1
and r0, #0x7ff0
cmp eq, r0, #EXT_SYNC_WORD<<4
brf search_ext_sync
_3_byte_ext ldb r2, @[a11]
add a11, #1
cmp eq, a11, a12
brf _4_byte_ext
ldw a11, @[a13+_EXT_BUF_BASE]
_4_byte_ext ldb r3, @[a11]
add a11, #1
cmp eq, a11, a12
brf get_ext_crc
ldw a11, @[a13+_EXT_BUF_BASE]
get_ext_crc slb r1
or r1, r2
sl r1
sl r1
sl r1
sl r1
ld r6, r3
sr r3
sr r3
sr r3
sr r3
or r1, r3
ecld c, r1
_5_byte_ext ldb r1, @[a11]
add a11, #1
cmp eq, a11, a12
brf get_ext_length
ldw a11, @[a13+_EXT_BUF_BASE]
get_ext_length
ld r2, #0
slb r6
or r6, r1
sr r6
incc r2
and r6, #0x7ff
ecld a, r2
ecld b, r6
mRETURN (_DECODE_OK)
checked_mpeg2_ext
eld rpd0.ext_ID, a
eld rpd0.ext_length, b
eld rpd0.ext_crc_val, c
ldw a12, @[a13+_EXT_BUF_BASE]
sub a11, #EXT_HEADER_SIZE
cmpu ge, r11, r12
brt update_ext_offset
add r11, r12
update_ext_offset
ld r0, e11
sub r0, #^SB0_BASE ;0x24
ld e11, r0
ldw @[a10+_ExtInputBufferOffset], a11
pop a12
ret
;========================================================================;
;;; LKT: 2004.10.29 added
search_ext_sync:
ldw a9, @[a13+_EXT_BUF_BASE]
cmp eq, a11, a9
brfd _1st_byte_ext
sub a11, #1
ldw a11, @[a13+_EXT_BUF_LIMIT]
sub a11, #1
; search extension sync word
_1st_byte_ext ldb r0, @[a11]
add a11, #1
cmp eq, a11, a12
brf _2nd_byte_ext
ldw a11, @[a13+_EXT_BUF_BASE]
_2nd_byte_ext ldb r1, @[a11]
add a11, #1
cmp eq, a11, a12
brf recheck_ext_sync
ldw a11, @[a13+_EXT_BUF_BASE]
recheck_ext_sync
slb r0
or r0, r1
and r0, #0x7ff0
cmp eq, r0, #EXT_SYNC_WORD<<4
brf search_ext_sync
bra _3_byte_ext
ext_sync_not_found
brad checked_mpeg2_ext
mRETURN (_EXT_SYNC_NOT_FOUND)
;========================================================================;
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -