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

📄 mpa_layer2aug.s

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