Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6146 | serge | 1 | /* |
2 | * All Video Processing kernels |
||
3 | * Copyright © <2010>, Intel Corporation. |
||
4 | * |
||
5 | * Permission is hereby granted, free of charge, to any person obtaining a |
||
6 | * copy of this software and associated documentation files (the |
||
7 | * "Software"), to deal in the Software without restriction, including |
||
8 | * without limitation the rights to use, copy, modify, merge, publish, |
||
9 | * distribute, sub license, and/or sell copies of the Software, and to |
||
10 | * permit persons to whom the Software is furnished to do so, subject to |
||
11 | * the following conditions: |
||
12 | * |
||
13 | * The above copyright notice and this permission notice (including the |
||
14 | * next paragraph) shall be included in all copies or substantial portions |
||
15 | * of the Software. |
||
16 | * |
||
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
||
18 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||
19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
||
20 | * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR |
||
21 | * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||
22 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||
23 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||
24 | * |
||
25 | * This file was originally licensed under the following license |
||
26 | * |
||
27 | * Licensed under the Apache License, Version 2.0 (the "License"); |
||
28 | * you may not use this file except in compliance with the License. |
||
29 | * You may obtain a copy of the License at |
||
30 | * |
||
31 | * http://www.apache.org/licenses/LICENSE-2.0 |
||
32 | * |
||
33 | * Unless required by applicable law or agreed to in writing, software |
||
34 | * distributed under the License is distributed on an "AS IS" BASIS, |
||
35 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||
36 | * See the License for the specific language governing permissions and |
||
37 | * limitations under the License. |
||
38 | * |
||
39 | */ |
||
40 | |||
41 | #define DI_ENABLE |
||
42 | |||
43 | #include "DNDI.inc" |
||
44 | |||
45 | #ifdef DI_ONLY |
||
46 | #undef nSMPL_RESP_LEN |
||
47 | #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DI // set the number of GRF |
||
48 | #else |
||
49 | #undef nSMPL_RESP_LEN |
||
50 | #define nSMPL_RESP_LEN nSMPL_RESP_LEN_DNDI // set the number of GRF |
||
51 | #endif |
||
52 | |||
53 | #undef nDPW_BLOCK_SIZE_HIST |
||
54 | #define nDPW_BLOCK_SIZE_HIST nBLOCK_WIDTH_4+nBLOCK_HEIGHT_1 // HIST Block Size for Write is 4x2 |
||
55 | #undef nDPW_BLOCK_SIZE_DN |
||
56 | #define nDPW_BLOCK_SIZE_DN nBLOCK_WIDTH_32+nBLOCK_HEIGHT_4 // DN Block Size for Write is 32x4 |
||
57 | |||
58 | ////////////////////////////////////// Run the DN Algorithm /////////////////////////////////////// |
||
59 | #include "DNDI_Command.asm" |
||
60 | |||
61 | ////////////////////////////////////// Rearrange for Internal Planar ////////////////////////////// |
||
62 | //// move the previous frame Y component to internal planar format |
||
63 | //$for (0; |
||
64 | // mov (16) uwDEST_Y(%1,0)<1> ubRESP(nDI_PREV_FRAME_LUMA_OFFSET,%1*16) |
||
65 | //} |
||
66 | //// move the previous frame U,V components to internal planar format |
||
67 | //$for (0; |
||
68 | // mov (8) uwDEST_U(0,%1*8)<1> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels |
||
69 | // mov (8) uwDEST_V(0,%1*8)<1> ubRESP(nDI_PREV_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels |
||
70 | //} |
||
71 | //// move the current frame Y component to internal planar format |
||
72 | //$for (0; |
||
73 | // mov (16) uwDEST_Y(%1+4,0)<1> ubRESP(nDI_CURR_FRAME_LUMA_OFFSET,%1*16) |
||
74 | //} |
||
75 | //// move the current frame U,V components to internal planar format |
||
76 | //$for (0; |
||
77 | // mov (8) uwDEST_U(2,%1*8)<1> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16+1)<16;8,2> //U pixels |
||
78 | // mov (8) uwDEST_V(2,%1*8)<1> ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET,%1*16)<16;8,2> //V pixels |
||
79 | //} |
||
80 | |||
81 | ////////////////////////////////////// Save the STMM Data for Next Run ///////////////////////// |
||
82 | // Write STMM to memory |
||
83 | shr (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w NODDCLR // X origin / 2 |
||
84 | mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w NODDCLR_NODDCHK // Y origin |
||
85 | mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_STMM:ud NODDCHK // block width and height (8x4) |
||
86 | mov (8) mudMSGHDR_STMM(0)<1> rMSGSRC.0<8;8,1>:ud // message header |
||
87 | mov (8) mudMSGHDR_STMM(1)<1> udRESP(nDI_STMM_OFFSET,0) // Move STMM to MRF |
||
88 | send (8) dNULLREG mMSGHDR_STMM udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_STMM+nBI_STMM_HISTORY_OUTPUT:ud |
||
89 | |||
90 | ////////////////////////////////////// Save the History Data for Next Run ///////////////////////// |
||
91 | #ifdef DI_ONLY |
||
92 | #else |
||
93 | |||
94 | #include "DI_Hist_Save.asm" |
||
95 | |||
96 | ////////////////////////////////////// Pack and Save the DN Curr Frame for Next Run /////////////// |
||
97 | // check top/bottom field first |
||
98 | cmp.e.f0.0 (1) null<1>:w ubTFLD_FIRST<0;1,0>:ub 1:w |
||
99 | |||
100 | add (4) pCF_Y_OFFSET<1>:uw ubSRC_CF_OFFSET<4;4,1>:ub npDN_YUV:uw |
||
101 | //set the save DN position |
||
102 | shl (1) rMSGSRC.0<1>:ud wORIX<0;1,0>:w 1:w NODDCLR // X origin * 2 |
||
103 | mov (1) rMSGSRC.1<1>:ud wORIY<0;1,0>:w NODDCLR_NODDCHK // Y origin |
||
104 | mov (1) rMSGSRC.2<1>:ud nDPW_BLOCK_SIZE_DN:ud NODDCHK // block width and height (8x4) |
||
105 | mov (8) mudMSGHDR_DN(0)<1> rMSGSRC.0<8;8,1>:ud |
||
106 | |||
107 | |||
108 | (f0.0) jmpi (1) TOP_FIELD_FIRST |
||
109 | |||
110 | BOTTOM_FIELD_FIRST: |
||
111 | //$for (0,0; |
||
112 | // mov (16) r[pCF_Y_OFFSET, %1*32]<2>:ub ubRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*16) // 2nd field luma from current frame (line 0,2) |
||
113 | // mov (16) r[pCF_Y_OFFSET, %1+1*32]<2>:ub ubRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,16) // 1st field luma from current frame (line 1,3) |
||
114 | // mov (8) r[pCF_U_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16+1)<16;8,2> // 2nd field U from current frame (line 0,2) |
||
115 | // mov (8) r[pCF_V_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16)<16;8,2> // 2nd field V from current frame (line 0,2) |
||
116 | // mov (8) r[pCF_U_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,16+1)<16;8,2> // 1st field U from current frame (line 1,3) |
||
117 | // mov (8) r[pCF_V_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,16)<16;8,2> // 1st field U from current frame (line 1,3) |
||
118 | //} |
||
119 | $for (0,0; |
||
120 | mov (16) r[pCF_Y_OFFSET, %1*32]<2>:ub ubRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*16) // 2nd field luma from current frame (line 0,2) |
||
121 | mov (16) r[pCF_Y_OFFSET, %1+1*32]<2>:ub ubRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,16) // 1st field luma from current frame (line 1,3) |
||
122 | } |
||
123 | |||
124 | $for (0,0; |
||
125 | mov (8) r[pCF_U_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16+1)<16;8,2> // 2nd field U from current frame (line 0,2) |
||
126 | mov (8) r[pCF_U_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,16+1)<16;8,2> // 1st field U from current frame (line 1,3) |
||
127 | } |
||
128 | |||
129 | $for (0,0; |
||
130 | mov (8) r[pCF_V_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16)<16;8,2> // 2nd field V from current frame (line 0,2) |
||
131 | mov (8) r[pCF_V_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,16)<16;8,2> // 1st field U from current frame (line 1,3) |
||
132 | } |
||
133 | |||
134 | jmpi (1) SAVE_DN_CURR |
||
135 | |||
136 | TOP_FIELD_FIRST: |
||
137 | //$for (0,0; |
||
138 | // mov (16) r[pCF_Y_OFFSET, %1*32]<2>:ub ubRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,0) // 1st field luma from current frame (line 0,2) |
||
139 | // mov (16) r[pCF_Y_OFFSET, %1+1*32]<2>:ub ubRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*16) // 2nd field luma from current frame (line 1,3) |
||
140 | // mov (8) r[pCF_U_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,1)<16;8,2> // 1st field U from current frame (line 0,2) |
||
141 | // mov (8) r[pCF_V_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,0)<16;8,2> // 1st field V from current frame (line 0,2) |
||
142 | // mov (8) r[pCF_U_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16+1)<16;8,2> // 2nd field U from current frame (line 1,3) |
||
143 | // mov (8) r[pCF_V_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16)<16;8,2> // 2nd field V from current frame (line 1,3) |
||
144 | //} |
||
145 | $for (0,0; |
||
146 | mov (16) r[pCF_Y_OFFSET, %1*32]<2>:ub ubRESP(nDI_CURR_FRAME_LUMA_OFFSET+%2,0) // 1st field luma from current frame (line 0,2) |
||
147 | mov (16) r[pCF_Y_OFFSET, %1+1*32]<2>:ub ubRESP(nDI_CURR_2ND_FIELD_LUMA_OFFSET,%2*16) // 2nd field luma from current frame (line 1,3) |
||
148 | } |
||
149 | $for (0,0; |
||
150 | mov (8) r[pCF_U_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,1)<16;8,2> // 1st field U from current frame (line 0,2) |
||
151 | mov (8) r[pCF_U_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16+1)<16;8,2> // 2nd field U from current frame (line 1,3) |
||
152 | } |
||
153 | $for (0,0; |
||
154 | mov (8) r[pCF_V_OFFSET, %1*32]<4>:ub ubRESP(nDI_CURR_FRAME_CHROMA_OFFSET+%2,0)<16;8,2> // 1st field V from current frame (line 0,2) |
||
155 | mov (8) r[pCF_V_OFFSET, %1+1*32]<4>:ub ubRESP(nDI_CURR_2ND_FIELD_CHROMA_OFFSET,%2*16)<16;8,2> // 2nd field V from current frame (line 1,3) |
||
156 | } |
||
157 | |||
158 | SAVE_DN_CURR: |
||
159 | $for(0; |
||
160 | mov (8) mudMSGHDR_DN(%1+1)<1> udDN_YUV(%1)REGION(8,1) |
||
161 | } |
||
162 | send (8) dNULLREG mMSGHDR_DN udDUMMY_NULL nDATAPORT_WRITE nDPMW_MSGDSC+nDPMW_MSG_LEN_PA_DN_DI+nBI_DESTINATION_YUV:ud |
||
163 | #endif |
||
164 | |||
165 | // Save Processed frames |
||
166 | #include "DI_Save_PA.asm"1>16;8,2>4>16;8,2>4>16;8,2>4>16;8,2>4>2>2>16;8,2>4>16;8,2>4>16;8,2>4>16;8,2>4>2>2>16;8,2>4>16;8,2>4>16;8,2>4>16;8,2>4>2>2>16;8,2>4>16;8,2>4>16;8,2>4>16;8,2>4>2>2>8;8,1>1>1>0;1,0>1>0;1,0>1>4;4,1>1>0;1,0>1>1>8;8,1>1>1>0;1,0>1>0;1,0>1>16;8,2>1>16;8,2>1>1>16;8,2>1>16;8,2>1>1>2010> |
||
167 |