@@ -57,30 +57,219 @@ static void task_3(void *pParameter) {
5757
5858}
5959
60+ void transfer_window (int i , int j , unsigned long long source_address , unsigned long long target_address )
61+ {
62+ unsigned char * source_ptr = (unsigned char * ) source_address ;
63+ unsigned char * target_ptr = (unsigned char * ) target_address ;
64+ unsigned char local_window [9 ];
65+ unsigned char read_ptr [3 ];
66+
67+ if ((i == 0 ) && (j == 0 )) // Upper left corner of the image
68+ {
69+ // First row
70+ * (local_window ) = 0 ;
71+ * (local_window + 1 ) = 0 ;
72+ * (local_window + 2 ) = 0 ;
73+ // Second row
74+ memcpy (read_ptr , source_ptr , 2 * sizeof (char ));
75+ * (local_window + 3 ) = 0 ;
76+ * (local_window + 4 ) = * (read_ptr );
77+ * (local_window + 5 ) = * (read_ptr + 1 );
78+ // Third row
79+ memcpy (read_ptr , source_ptr + IMAG_COLS , 2 * sizeof (char ));
80+ * (local_window + 6 ) = 0 ;
81+ * (local_window + 7 ) = * (read_ptr );
82+ * (local_window + 8 ) = * (read_ptr + 1 );
83+ }
84+ else if ((i == 0 ) && (j == IMAG_COLS - 1 )) // Upper right corner of the image
85+ {
86+ // First row
87+ * (local_window ) = 0 ;
88+ * (local_window + 1 ) = 0 ;
89+ * (local_window + 2 ) = 0 ;
90+ // Second row
91+ memcpy (read_ptr , source_ptr + (IMAG_COLS - 2 ), 2 * sizeof (char ));
92+ * (local_window + 3 ) = * (read_ptr );
93+ * (local_window + 4 ) = * (read_ptr + 1 );
94+ * (local_window + 5 ) = 0 ;
95+ // Third row
96+ memcpy (read_ptr , source_ptr + (IMAG_COLS + (IMAG_COLS - 2 )), 2 * sizeof (char ));
97+ * (local_window + 6 ) = * (read_ptr );
98+ * (local_window + 7 ) = * (read_ptr + 1 );
99+ * (local_window + 8 ) = 0 ;
100+ }
101+ else if (i == 0 ) // Upper border
102+ {
103+ // First row
104+ * (local_window ) = 0 ;
105+ * (local_window + 1 ) = 0 ;
106+ * (local_window + 2 ) = 0 ;
107+ // Second row
108+ memcpy (read_ptr , source_ptr + (j - 1 ), 3 * sizeof (char ));
109+ * (local_window + 3 ) = * (read_ptr );
110+ * (local_window + 4 ) = * (read_ptr + 1 );
111+ * (local_window + 5 ) = * (read_ptr + 2 );
112+ // Third row
113+ memcpy (read_ptr , source_ptr + (IMAG_COLS + (j - 1 )), 3 * sizeof (char ));
114+ * (local_window + 6 ) = * (read_ptr );
115+ * (local_window + 7 ) = * (read_ptr + 1 );
116+ * (local_window + 8 ) = * (read_ptr + 2 );
117+ }
118+ else if ((i == IMAG_ROWS - 1 ) && (j == 0 )) // Lower left corner of the image
119+ {
120+ // First row
121+ memcpy (read_ptr , source_ptr + ((IMAG_ROWS - 2 ) * IMAG_COLS ), 2 * sizeof (char ));
122+ * (local_window ) = 0 ;
123+ * (local_window + 1 ) = * (read_ptr );
124+ * (local_window + 2 ) = * (read_ptr + 1 );
125+ // Second row
126+ memcpy (read_ptr , source_ptr + ((IMAG_ROWS - 1 ) * IMAG_COLS ), 2 * sizeof (char ));
127+ * (local_window + 3 ) = 0 ;
128+ * (local_window + 4 ) = * (read_ptr );
129+ * (local_window + 5 ) = * (read_ptr + 1 );
130+ // Third row
131+ * (local_window + 6 ) = 0 ;
132+ * (local_window + 7 ) = 0 ;
133+ * (local_window + 8 ) = 0 ;
134+ }
135+ else if ((i == IMAG_ROWS - 1 ) && (j == IMAG_COLS - 1 )) // Lower right corner of the image
136+ {
137+ // First row
138+ memcpy (read_ptr , source_ptr + (((IMAG_ROWS - 2 ) * IMAG_COLS ) + (IMAG_COLS - 2 )), 2 * sizeof (char ));
139+ * (local_window ) = * (read_ptr );
140+ * (local_window + 1 ) = * (read_ptr + 1 );
141+ * (local_window + 2 ) = 0 ;
142+ // Second row
143+ memcpy (read_ptr , source_ptr + (((IMAG_ROWS - 1 ) * IMAG_COLS ) + (IMAG_COLS - 2 )), 2 * sizeof (char ));
144+ * (local_window + 3 ) = * (read_ptr );
145+ * (local_window + 4 ) = * (read_ptr + 1 );
146+ * (local_window + 5 ) = 0 ;
147+ // Third row
148+ * (local_window + 6 ) = 0 ;
149+ * (local_window + 7 ) = 0 ;
150+ * (local_window + 8 ) = 0 ;
151+ }
152+ else if (i == IMAG_ROWS - 1 ) // Lower border of the image
153+ {
154+ // First row
155+ memcpy (read_ptr , source_ptr + (((IMAG_ROWS - 2 ) * IMAG_COLS ) + (j - 1 )), 3 * sizeof (char ));
156+ * (local_window ) = * (read_ptr );
157+ * (local_window + 1 ) = * (read_ptr + 1 );
158+ * (local_window + 2 ) = * (read_ptr + 2 );
159+ // Second row
160+ memcpy (read_ptr , source_ptr + (((IMAG_ROWS - 1 ) * IMAG_COLS ) + (j - 1 )), 3 * sizeof (char ));
161+ * (local_window + 3 ) = * (read_ptr );
162+ * (local_window + 4 ) = * (read_ptr + 1 );
163+ * (local_window + 5 ) = * (read_ptr + 2 );
164+ // Third row
165+ * (local_window + 6 ) = 0 ;
166+ * (local_window + 7 ) = 0 ;
167+ * (local_window + 8 ) = 0 ;
168+ }
169+ else if (j == 0 ) // Left border of the image
170+ {
171+ // First row
172+ memcpy (read_ptr , source_ptr + ((i - 1 ) * IMAG_COLS ), 2 * sizeof (char ));
173+ * (local_window ) = 0 ;
174+ * (local_window + 1 ) = * (read_ptr );
175+ * (local_window + 2 ) = * (read_ptr + 1 );
176+ // Second row
177+ memcpy (read_ptr , source_ptr + (i * IMAG_COLS ), 2 * sizeof (char ));
178+ * (local_window + 3 ) = 0 ;
179+ * (local_window + 4 ) = * (read_ptr );
180+ * (local_window + 5 ) = * (read_ptr + 1 );
181+ // Third row
182+ memcpy (read_ptr , source_ptr + ((i + 1 ) * IMAG_COLS ), 2 * sizeof (char ));
183+ * (local_window + 6 ) = 0 ;
184+ * (local_window + 7 ) = * (read_ptr );
185+ * (local_window + 8 ) = * (read_ptr + 1 );
186+ }
187+ else if (j == IMAG_COLS - 1 ) // Right border of the image
188+ {
189+ // First row
190+ memcpy (read_ptr , source_ptr + (((i - 1 ) * IMAG_COLS ) + (j - 1 )), 2 * sizeof (char ));
191+ * (local_window ) = * (read_ptr );
192+ * (local_window + 1 ) = * (read_ptr + 1 );
193+ * (local_window + 2 ) = 0 ;
194+ // Second row
195+ memcpy (read_ptr , source_ptr + ((i * IMAG_COLS ) + (j - 1 )), 2 * sizeof (char ));
196+ * (local_window + 3 ) = * (read_ptr );
197+ * (local_window + 4 ) = * (read_ptr + 1 );
198+ * (local_window + 5 ) = 0 ;
199+ // Third row
200+ memcpy (read_ptr , source_ptr + (((i + 1 ) * IMAG_COLS ) + (j - 1 )), 2 * sizeof (char ));
201+ * (local_window + 6 ) = * (read_ptr );
202+ * (local_window + 7 ) = * (read_ptr + 1 );
203+ * (local_window + 8 ) = 0 ;
204+ }
205+ else // Rest of the image
206+ {
207+ // First row
208+ memcpy (read_ptr , source_ptr + (((i - 1 ) * IMAG_COLS ) + (j - 1 )), 3 * sizeof (char ));
209+ * (local_window ) = * (read_ptr );
210+ * (local_window + 1 ) = * (read_ptr + 1 );
211+ * (local_window + 2 ) = * (read_ptr + 2 );
212+ // Second row
213+ memcpy (read_ptr , source_ptr + ((i * IMAG_COLS ) + (j - 1 )), 3 * sizeof (char ));
214+ * (local_window + 3 ) = * (read_ptr );
215+ * (local_window + 4 ) = * (read_ptr + 1 );
216+ * (local_window + 5 ) = * (read_ptr + 2 );
217+ // Third row
218+ memcpy (read_ptr , source_ptr + (((i + 1 ) * IMAG_COLS ) + (j - 1 )), 3 * sizeof (char ));
219+ * (local_window + 6 ) = * (read_ptr );
220+ * (local_window + 7 ) = * (read_ptr + 1 );
221+ * (local_window + 8 ) = * (read_ptr + 2 );
222+ }
223+
224+ if (((i == 0 || i == IMAG_ROWS - 1 ) && (j < 2 || j > IMAG_COLS - 3 )) || ((j == 0 || j == IMAG_COLS - 1 ) && (i < 2 || i > IMAG_ROWS - 3 )))
225+ {
226+ printf ("Window %0d %0d:\n\t%5d %5d %5d\n\t%5d %5d %5d\n\t%5d %5d %5d\n" , i , j , local_window [0 ], local_window [1 ], local_window [2 ], local_window [3 ],local_window [4 ], local_window [5 ], local_window [6 ], local_window [7 ], local_window [8 ]);
227+ }
228+
229+ memcpy (target_ptr , local_window , 9 * sizeof (char ));
230+ }
231+
60232static void task_test_sobel (void * pParameter )
61233{
62234 unsigned char * sobel_input_0_ptr = (unsigned char * ) SOBEL_INPUT_0_ADDRESS_LO ;
63235 unsigned char * sobel_input_1_ptr = (unsigned char * ) SOBEL_INPUT_1_ADDRESS_LO ;
64236 short int * sobel_output_ptr = (short int * ) SOBEL_OUTPUT_ADDRESS_LO ;
237+ short int * output_image_X_ptr = (short int * ) IMG_INPROCESS_B_ADDRESS_LO ;
238+ short int * output_image_Y_ptr = (short int * ) IMG_INPROCESS_C_ADDRESS_LO ;
65239 unsigned char local_window [3 * 3 ];
66240 short int sobel_results [2 ];
67241
68- printf ("Starting with SOBEL testing on address %p\n" , (void * )sobel_input_0_ptr );
69- * (local_window + 0 ) = 150 ;
70- * (local_window + 1 ) = 20 ;
71- * (local_window + 2 ) = 38 ;
72- * (local_window + 3 ) = 64 ;
73- * (local_window + 4 ) = 32 ;
74- * (local_window + 5 ) = 8 ;
75- * (local_window + 6 ) = 16 ;
76- * (local_window + 7 ) = 75 ;
77- * (local_window + 8 ) = 99 ;
78- printf ("Will copy values to SOBEL on address %p\n" , (void * )sobel_input_0_ptr );
79- memcpy (sobel_input_0_ptr , local_window , 8 * sizeof (char ));
80- printf ("Will copy values to SOBEL on address %p\n" , (void * )sobel_input_1_ptr );
81- memcpy (sobel_input_1_ptr , (local_window + 8 ), 1 * sizeof (char ));
82- memcpy (sobel_results , sobel_output_ptr , 2 * sizeof (short int ));
83- printf ("Results of SOBEL are %d at address %p and %d at address %p\n" , sobel_results [0 ], (void * )sobel_output_ptr , sobel_results [1 ], (void * )(sobel_output_ptr + 1 ));
242+ // printf("Starting with SOBEL testing on address %p\n", (void*)sobel_input_0_ptr);
243+ // *(local_window + 0) = 150;
244+ // *(local_window + 1) = 20;
245+ // *(local_window + 2) = 38;
246+ // *(local_window + 3) = 64;
247+ // *(local_window + 4) = 32;
248+ // *(local_window + 5) = 8;
249+ // *(local_window + 6) = 16;
250+ // *(local_window + 7) = 75;
251+ // *(local_window + 8) = 99;
252+ // printf("Will copy values to SOBEL on address %p\n", (void*)sobel_input_0_ptr);
253+ // memcpy(sobel_input_0_ptr, local_window, 8 * sizeof(char));
254+ // printf("Will copy values to SOBEL on address %p\n", (void*)sobel_input_1_ptr);
255+ // memcpy(sobel_input_1_ptr, (local_window + 8), 1 * sizeof(char));
256+ // memcpy(sobel_results, sobel_output_ptr, 2 * sizeof(short int));
257+ // printf("Results of SOBEL are %d at address %p and %d at address %p\n", sobel_results[0], (void*)sobel_output_ptr, sobel_results[1], (void*)(sobel_output_ptr + 1));
258+
259+ printf ("Starting to process of image with Sobel gradient\n" );
260+
261+ for (int i = 0 ; i < IMAG_ROWS ; i ++ )
262+ {
263+ for (int j = 0 ; j < IMAG_COLS ; j ++ )
264+ {
265+ transfer_window (i , j , IMG_COMPRESSED_ADDRESS_LO , SOBEL_INPUT_0_ADDRESS_LO );
266+ memcpy (sobel_results , sobel_output_ptr , 2 * sizeof (short int ));
267+ * (output_image_X_ptr + ((i * IMAG_COLS ) + j )) = sobel_results [0 ];
268+ * (output_image_Y_ptr + ((i * IMAG_COLS ) + j )) = sobel_results [1 ];
269+ }
270+ }
271+
272+ printf ("Finished process of image with Sobel gradient\n" );
84273}
85274
86275int main ( void )
0 commit comments