Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5361 serge 1
/*
2
 * All Video Processing kernels
3
 * Copyright © <2010>, Intel Corporation.
4
 *
5
 * This program is licensed under the terms and conditions of the
6
 * Eclipse Public License (EPL), version 1.0.  The full text of the EPL is at
7
 * http://www.opensource.org/licenses/eclipse-1.0.php.
8
 *
9
 */
10
 
11
//---------- PL3_Scaling.asm ----------
12
#include "Scaling.inc"
13
 
14
	// Build 16 elements ramp in float32 and normalized it
15
//	mov (8)		SAMPLER_RAMP(0)<1>		0x76543210:v
16
//	add	(8)		SAMPLER_RAMP(1)<1>		SAMPLER_RAMP(0)	8.0:f
17
mov (4) SAMPLER_RAMP(0)<1> 0x48403000:vf		{ NoDDClr }//3, 2, 1, 0 in float vector
18
mov (4) SAMPLER_RAMP(0,4)<1> 0x5C585450:vf	{ NoDDChk }//7, 6, 5, 4 in float vector
19
add	(8)		SAMPLER_RAMP(1)<1>		SAMPLER_RAMP(0)	8.0:f
20
 
21
 
22
//Module: PrepareScaleCoord.asm
23
 
24
	// Setup for sampler msg hdr
25
    mov (2)		rMSGSRC.0<1>:ud			0:ud						{ NoDDClr }	// Unused fields
26
    mov (1)		rMSGSRC.2<1>:ud			0:ud						{ NoDDChk }	// Write and offset
27
 
28
	// Calculate 16 v based on the step Y and vertical origin
29
	mov	(16)	mfMSGPAYLOAD(2)<1>		fSRC_VID_V_ORI<0;1,0>:f
30
	mov	(16)	SCALE_COORD_Y<1>:f		fSRC_VID_V_ORI<0;1,0>:f
31
 
32
	// Calculate 16 u based on the step X and hori origin
33
//	line (16)	mfMSGPAYLOAD(0)<1>		SCALE_STEP_X<0;1,0>:f		SAMPLER_RAMP(0) 	// Assign to mrf directly
34
	mov	(16)	acc0:f							fSRC_VID_H_ORI<0;1,0>:f											{ Compr }
35
	mac	(16)	mfMSGPAYLOAD(0)<1>	fVIDEO_STEP_X<0;1,0>:f	SAMPLER_RAMP(0)			{ Compr }
36
 
37
	//Setup the constants for line instruction
38
	mov 	(1)		SCALE_LINE_P255<1>:f		255.0:f 			{ NoDDClr }	//{ NoDDClr, NoDDChk }
39
	mov 	(1)		SCALE_LINE_P0_5<1>:f		0.5:f 				{ NoDDChk }
40
 
41
//------------------------------------------------------------------------------
42
 
43
$for (0; 
44
	// Read 16 sampled pixels and store them in float32 in 8 GRFs in the order of BGRA (VYUA).
45
  mov (8) 	MSGHDR_SCALE<1>:ud      	rMSGSRC<8;8,1>:ud    // Copy msg header and payload mirrors to MRFs
46
	send (16)	SCALE_RESPONSE_VW(0)<1>		MSGHDR_SCALE	udDUMMY_NULL	nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_V+nBI_CURRENT_SRC_V
47
	send (16)	SCALE_RESPONSE_YW(0)<1>		MSGHDR_SCALE	udDUMMY_NULL	nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_Y+nBI_CURRENT_SRC_Y
48
	send (16)	SCALE_RESPONSE_UW(0)<1>		MSGHDR_SCALE	udDUMMY_NULL	nSMPL_ENGINE SMPLR_MSG_DSC+nSI_SRC_SIMD16_U+nBI_CURRENT_SRC_U
49
 
50
	// Calculate 16 v for next line
51
	add (16)	mfMSGPAYLOAD(2)<1>		SCALE_COORD_Y<8;8,1>:f		fVIDEO_STEP_Y<0;1,0>:f	// Assign to mrf directly
52
	add (16)	SCALE_COORD_Y<1>:f		SCALE_COORD_Y<8;8,1>:f		fVIDEO_STEP_Y<0;1,0>:f	// Assign to mrf directly
53
 
54
	// Scale back to [0, 255], convert f to ud
55
	line (16)	acc0:f		SCALE_LINE_P255<0;1,0>:f	SCALE_RESPONSE_VF(0)	{ Compr }			// Process B, V
56
	mov  (16) SCALE_RESPONSE_VD(0)<1>	acc0:f														{ Compr }
57
 
58
	line (16)	acc0:f		SCALE_LINE_P255<0;1,0>:f	SCALE_RESPONSE_YF(0)	{ Compr }			// Process B, V
59
	mov  (16) SCALE_RESPONSE_YD(0)<1>	acc0:f														{ Compr }
60
 
61
	line (16)	acc0:f		SCALE_LINE_P255<0;1,0>:f	SCALE_RESPONSE_UF(0)	{ Compr }			// Process B, V
62
	mov  (16) SCALE_RESPONSE_UD(0)<1>	acc0:f														{ Compr }
63
 
64
	mov	 (16) 	DEST_V(%1)<1>				SCALE_RESPONSE_VB(0)											//possible error due to truncation - vK
65
	mov	 (16) 	DEST_Y(%1)<1>				SCALE_RESPONSE_YB(0)											//possible error due to truncation - vK
66
	mov	 (16) 	DEST_U(%1)<1>				SCALE_RESPONSE_UB(0)											//possible error due to truncation - vK
67
 
68
}
69
 
70
	#define nSRC_REGION				nREGION_1
71
 
72
//------------------------------------------------------------------------------