⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpa_layer2mc.s

📁 samsung 9908DVD源代码,
💻 S
📖 第 1 页 / 共 3 页
字号:
;::::::::::::::::::[  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 + -