xref: /aosp_15_r20/external/libmpeg2/decoder/impeg2d_debug.c (revision a97c2a1f0a796dc32bed80d3353c69c5fc07c750)
1*a97c2a1fSXin Li /******************************************************************************
2*a97c2a1fSXin Li  *
3*a97c2a1fSXin Li  * Copyright (C) 2015 The Android Open Source Project
4*a97c2a1fSXin Li  *
5*a97c2a1fSXin Li  * Licensed under the Apache License, Version 2.0 (the "License");
6*a97c2a1fSXin Li  * you may not use this file except in compliance with the License.
7*a97c2a1fSXin Li  * You may obtain a copy of the License at:
8*a97c2a1fSXin Li  *
9*a97c2a1fSXin Li  * http://www.apache.org/licenses/LICENSE-2.0
10*a97c2a1fSXin Li  *
11*a97c2a1fSXin Li  * Unless required by applicable law or agreed to in writing, software
12*a97c2a1fSXin Li  * distributed under the License is distributed on an "AS IS" BASIS,
13*a97c2a1fSXin Li  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*a97c2a1fSXin Li  * See the License for the specific language governing permissions and
15*a97c2a1fSXin Li  * limitations under the License.
16*a97c2a1fSXin Li  *
17*a97c2a1fSXin Li  *****************************************************************************
18*a97c2a1fSXin Li  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*a97c2a1fSXin Li */
20*a97c2a1fSXin Li #include <string.h>
21*a97c2a1fSXin Li #include <stdio.h>
22*a97c2a1fSXin Li 
23*a97c2a1fSXin Li #include "iv_datatypedef.h"
24*a97c2a1fSXin Li #include "iv.h"
25*a97c2a1fSXin Li #include "ivd.h"
26*a97c2a1fSXin Li #include "impeg2d.h"
27*a97c2a1fSXin Li 
28*a97c2a1fSXin Li #include "impeg2_buf_mgr.h"
29*a97c2a1fSXin Li #include "impeg2_disp_mgr.h"
30*a97c2a1fSXin Li #include "impeg2_macros.h"
31*a97c2a1fSXin Li #include "impeg2_defs.h"
32*a97c2a1fSXin Li #include "impeg2_platform_macros.h"
33*a97c2a1fSXin Li #include "impeg2_inter_pred.h"
34*a97c2a1fSXin Li #include "impeg2_idct.h"
35*a97c2a1fSXin Li #include "impeg2_format_conv.h"
36*a97c2a1fSXin Li #include "impeg2_mem_func.h"
37*a97c2a1fSXin Li #include "impeg2_globals.h"
38*a97c2a1fSXin Li 
39*a97c2a1fSXin Li #include "impeg2d_bitstream.h"
40*a97c2a1fSXin Li #include "impeg2d_api.h"
41*a97c2a1fSXin Li #include "impeg2d_structs.h"
42*a97c2a1fSXin Li #include "impeg2d_debug.h"
43*a97c2a1fSXin Li 
44*a97c2a1fSXin Li #if STATISTICS
45*a97c2a1fSXin Li WORD32 gai4_impeg2d_idct_inp_last_nonzero_histogram[64] = {0};
46*a97c2a1fSXin Li WORD32 gai4_impeg2d_idct_inp_num_nonzero_histogram[64] = {0};
47*a97c2a1fSXin Li WORD32 gai4_impeg2d_idct_inp_last_non_zero_row_histogram[8] = {0};
48*a97c2a1fSXin Li 
49*a97c2a1fSXin Li WORD32 gai4_impeg2d_iqnt_inp_last_nonzero_histogram[64] = {0};
50*a97c2a1fSXin Li WORD32 gai4_impeg2d_iqnt_inp_num_nonzero_histogram[64] = {0};
51*a97c2a1fSXin Li WORD32 gai4_impeg2d_iqnt_inp_last_non_zero_row_histogram[8] = {0};
52*a97c2a1fSXin Li 
53*a97c2a1fSXin Li WORD32 gi4_impeg2d_idct_inp_only_first_coeff = 0;
54*a97c2a1fSXin Li WORD32 gi4_impeg2d_idct_inp_only_last_coeff = 0;
55*a97c2a1fSXin Li WORD32 gi4_impeg2d_idct_inp_only_first_n_last_coeff = 0;
56*a97c2a1fSXin Li WORD32 gi4_impeg2d_idct_cnt = 0;
57*a97c2a1fSXin Li 
58*a97c2a1fSXin Li 
59*a97c2a1fSXin Li WORD32 gi4_impeg2d_iqnt_inp_only_first_coeff = 0;
60*a97c2a1fSXin Li WORD32 gi4_impeg2d_iqnt_inp_only_last_coeff = 0;
61*a97c2a1fSXin Li WORD32 gi4_impeg2d_iqnt_inp_only_first_n_last_coeff = 0;
62*a97c2a1fSXin Li WORD32 gi4_impeg2d_iqnt_cnt = 0;
63*a97c2a1fSXin Li 
64*a97c2a1fSXin Li 
impeg2d_iqnt_inp_statistics(WORD16 * pi2_iqnt_inp,WORD32 i4_non_zero_cols,WORD32 i4_non_zero_rows)65*a97c2a1fSXin Li void impeg2d_iqnt_inp_statistics(WORD16 *pi2_iqnt_inp,
66*a97c2a1fSXin Li                                  WORD32 i4_non_zero_cols,
67*a97c2a1fSXin Li                                  WORD32 i4_non_zero_rows)
68*a97c2a1fSXin Li {
69*a97c2a1fSXin Li     WORD32 i, j;
70*a97c2a1fSXin Li     WORD32 i4_last_row = 0, i4_last_col = 0;
71*a97c2a1fSXin Li     WORD32 i4_num_non_zero = 0;
72*a97c2a1fSXin Li     WORD32 i4_non_zero_cols_computed = 0;
73*a97c2a1fSXin Li     WORD32 i4_non_zero_rows_computed = 0;
74*a97c2a1fSXin Li 
75*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
76*a97c2a1fSXin Li     {
77*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
78*a97c2a1fSXin Li         {
79*a97c2a1fSXin Li             if(pi2_iqnt_inp[i * 8 + j])
80*a97c2a1fSXin Li             {
81*a97c2a1fSXin Li                 i4_non_zero_cols_computed |= (1 << j);
82*a97c2a1fSXin Li                 i4_non_zero_rows_computed |= (1 << i);
83*a97c2a1fSXin Li             }
84*a97c2a1fSXin Li         }
85*a97c2a1fSXin Li     }
86*a97c2a1fSXin Li 
87*a97c2a1fSXin Li     if(i4_non_zero_cols_computed != i4_non_zero_cols)
88*a97c2a1fSXin Li     {
89*a97c2a1fSXin Li         printf("IQ Input: Invalid non_zero_cols 0x%x non_zero_cols_computed 0x%x\n", i4_non_zero_cols, i4_non_zero_cols_computed);
90*a97c2a1fSXin Li     }
91*a97c2a1fSXin Li     if(i4_non_zero_rows_computed != i4_non_zero_rows)
92*a97c2a1fSXin Li     {
93*a97c2a1fSXin Li         printf("IQ Input: Invalid non_zero_rows 0x%x non_zero_rows_computed 0x%x\n", i4_non_zero_rows, i4_non_zero_rows_computed);
94*a97c2a1fSXin Li     }
95*a97c2a1fSXin Li     {
96*a97c2a1fSXin Li         WORD32 last_non_zero_row = 32 - CLZ(i4_non_zero_rows);
97*a97c2a1fSXin Li         gai4_impeg2d_iqnt_inp_last_non_zero_row_histogram[last_non_zero_row - 1]++;
98*a97c2a1fSXin Li     }
99*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
100*a97c2a1fSXin Li     {
101*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
102*a97c2a1fSXin Li         {
103*a97c2a1fSXin Li             if(pi2_iqnt_inp[i * 8 + j])
104*a97c2a1fSXin Li             {
105*a97c2a1fSXin Li                 i4_last_col = MAX(i4_last_col, j);
106*a97c2a1fSXin Li                 i4_last_row = MAX(i4_last_row, i);
107*a97c2a1fSXin Li                 i4_num_non_zero++;
108*a97c2a1fSXin Li             }
109*a97c2a1fSXin Li         }
110*a97c2a1fSXin Li     }
111*a97c2a1fSXin Li     gai4_impeg2d_iqnt_inp_last_nonzero_histogram[i4_last_row * 8 + i4_last_col]++;
112*a97c2a1fSXin Li     gai4_impeg2d_iqnt_inp_num_nonzero_histogram[i4_num_non_zero]++;
113*a97c2a1fSXin Li     gi4_impeg2d_iqnt_cnt++;
114*a97c2a1fSXin Li     /* Check if only (0,0) and (7,7) are non zero */
115*a97c2a1fSXin Li     if(i4_num_non_zero == 1)
116*a97c2a1fSXin Li     {
117*a97c2a1fSXin Li         if(pi2_iqnt_inp[7 * 8 + 7])
118*a97c2a1fSXin Li             gi4_impeg2d_iqnt_inp_only_last_coeff++;
119*a97c2a1fSXin Li     }
120*a97c2a1fSXin Li     if(i4_num_non_zero == 1)
121*a97c2a1fSXin Li     {
122*a97c2a1fSXin Li         if(pi2_iqnt_inp[0])
123*a97c2a1fSXin Li             gi4_impeg2d_iqnt_inp_only_first_coeff++;
124*a97c2a1fSXin Li     }
125*a97c2a1fSXin Li 
126*a97c2a1fSXin Li     if(i4_num_non_zero == 2)
127*a97c2a1fSXin Li     {
128*a97c2a1fSXin Li         if((pi2_iqnt_inp[0]) && (1 == pi2_iqnt_inp[7 * 8 + 7]))
129*a97c2a1fSXin Li             gi4_impeg2d_iqnt_inp_only_first_n_last_coeff++;
130*a97c2a1fSXin Li     }
131*a97c2a1fSXin Li }
132*a97c2a1fSXin Li 
impeg2d_idct_inp_statistics(WORD16 * pi2_idct_inp,WORD32 i4_non_zero_cols,WORD32 i4_non_zero_rows)133*a97c2a1fSXin Li void impeg2d_idct_inp_statistics(WORD16 *pi2_idct_inp,
134*a97c2a1fSXin Li                                  WORD32 i4_non_zero_cols,
135*a97c2a1fSXin Li                                  WORD32 i4_non_zero_rows)
136*a97c2a1fSXin Li {
137*a97c2a1fSXin Li     WORD32 i, j;
138*a97c2a1fSXin Li     WORD32 i4_last_row = 0, i4_last_col = 0;
139*a97c2a1fSXin Li     WORD32 i4_num_non_zero = 0;
140*a97c2a1fSXin Li     WORD32 i4_non_zero_cols_computed = 0;
141*a97c2a1fSXin Li     WORD32 i4_non_zero_rows_computed = 0;
142*a97c2a1fSXin Li 
143*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
144*a97c2a1fSXin Li     {
145*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
146*a97c2a1fSXin Li         {
147*a97c2a1fSXin Li             if(pi2_idct_inp[i * 8 + j])
148*a97c2a1fSXin Li             {
149*a97c2a1fSXin Li                 i4_non_zero_cols_computed |= (1 << j);
150*a97c2a1fSXin Li                 i4_non_zero_rows_computed |= (1 << i);
151*a97c2a1fSXin Li             }
152*a97c2a1fSXin Li         }
153*a97c2a1fSXin Li     }
154*a97c2a1fSXin Li 
155*a97c2a1fSXin Li     if(i4_non_zero_cols_computed != i4_non_zero_cols)
156*a97c2a1fSXin Li     {
157*a97c2a1fSXin Li         printf("IDCT Input: Invalid non_zero_cols 0x%x non_zero_cols_computed 0x%x\n", i4_non_zero_cols, i4_non_zero_cols_computed);
158*a97c2a1fSXin Li     }
159*a97c2a1fSXin Li     if(i4_non_zero_rows_computed != i4_non_zero_rows)
160*a97c2a1fSXin Li     {
161*a97c2a1fSXin Li         printf("IDCT Input: Invalid non_zero_rows 0x%x non_zero_rows_computed 0x%x\n", i4_non_zero_rows, i4_non_zero_rows_computed);
162*a97c2a1fSXin Li     }
163*a97c2a1fSXin Li 
164*a97c2a1fSXin Li     {
165*a97c2a1fSXin Li         WORD32 last_non_zero_row = 32 - CLZ(i4_non_zero_rows);
166*a97c2a1fSXin Li         gai4_impeg2d_idct_inp_last_non_zero_row_histogram[last_non_zero_row - 1]++;
167*a97c2a1fSXin Li     }
168*a97c2a1fSXin Li 
169*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
170*a97c2a1fSXin Li     {
171*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
172*a97c2a1fSXin Li         {
173*a97c2a1fSXin Li             if(pi2_idct_inp[i * 8 + j])
174*a97c2a1fSXin Li             {
175*a97c2a1fSXin Li                 i4_last_col = MAX(i4_last_col, j);
176*a97c2a1fSXin Li                 i4_last_row = MAX(i4_last_row, i);
177*a97c2a1fSXin Li                 i4_num_non_zero++;
178*a97c2a1fSXin Li             }
179*a97c2a1fSXin Li         }
180*a97c2a1fSXin Li     }
181*a97c2a1fSXin Li     gai4_impeg2d_idct_inp_last_nonzero_histogram[i4_last_row * 8 + i4_last_col]++;
182*a97c2a1fSXin Li     gai4_impeg2d_idct_inp_num_nonzero_histogram[i4_num_non_zero]++;
183*a97c2a1fSXin Li     gi4_impeg2d_idct_cnt++;
184*a97c2a1fSXin Li     /* Check if only (0,0) and (7,7) are non zero */
185*a97c2a1fSXin Li     if(i4_num_non_zero == 1)
186*a97c2a1fSXin Li     {
187*a97c2a1fSXin Li         if(pi2_idct_inp[7 * 8 + 7])
188*a97c2a1fSXin Li             gi4_impeg2d_idct_inp_only_last_coeff++;
189*a97c2a1fSXin Li     }
190*a97c2a1fSXin Li     if(i4_num_non_zero == 1)
191*a97c2a1fSXin Li     {
192*a97c2a1fSXin Li         if(pi2_idct_inp[0])
193*a97c2a1fSXin Li             gi4_impeg2d_idct_inp_only_first_coeff++;
194*a97c2a1fSXin Li     }
195*a97c2a1fSXin Li 
196*a97c2a1fSXin Li     if(i4_num_non_zero == 2)
197*a97c2a1fSXin Li     {
198*a97c2a1fSXin Li         if((pi2_idct_inp[0]) && (1 == pi2_idct_inp[7 * 8 + 7]))
199*a97c2a1fSXin Li             gi4_impeg2d_idct_inp_only_first_n_last_coeff++;
200*a97c2a1fSXin Li     }
201*a97c2a1fSXin Li }
impeg2d_print_idct_inp_statistics()202*a97c2a1fSXin Li void impeg2d_print_idct_inp_statistics()
203*a97c2a1fSXin Li {
204*a97c2a1fSXin Li     WORD32 i, j;
205*a97c2a1fSXin Li     WORD32 i4_sum;
206*a97c2a1fSXin Li     WORD32 i4_accumulator;
207*a97c2a1fSXin Li     i4_sum = 0;
208*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
209*a97c2a1fSXin Li     {
210*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
211*a97c2a1fSXin Li         {
212*a97c2a1fSXin Li             i4_sum += gai4_impeg2d_idct_inp_last_nonzero_histogram[i * 8 + j];
213*a97c2a1fSXin Li         }
214*a97c2a1fSXin Li     }
215*a97c2a1fSXin Li     printf("IDCT input : Only last coeff non-zero %8.2f\n", (gi4_impeg2d_idct_inp_only_last_coeff * 100.0) / gi4_impeg2d_idct_cnt);
216*a97c2a1fSXin Li     printf("IDCT input : Only first coeff non-zero (Includes DC + mismatch) %8.2f\n", (gi4_impeg2d_idct_inp_only_first_coeff * 100.0) / gi4_impeg2d_idct_cnt);
217*a97c2a1fSXin Li 
218*a97c2a1fSXin Li     printf("IDCT input : Last non-zero coeff histogram\n");
219*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
220*a97c2a1fSXin Li     {
221*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
222*a97c2a1fSXin Li         {
223*a97c2a1fSXin Li             double val = gai4_impeg2d_idct_inp_last_nonzero_histogram[i * 8 + j] * 100.0 / i4_sum;
224*a97c2a1fSXin Li             printf("%8.2f \t", val);
225*a97c2a1fSXin Li 
226*a97c2a1fSXin Li         }
227*a97c2a1fSXin Li         printf("\n");
228*a97c2a1fSXin Li     }
229*a97c2a1fSXin Li 
230*a97c2a1fSXin Li     printf("IDCT input : Cumulative Last non-zero coeff histogram\n");
231*a97c2a1fSXin Li     i4_accumulator = 0;
232*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
233*a97c2a1fSXin Li     {
234*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
235*a97c2a1fSXin Li         {
236*a97c2a1fSXin Li             double val;
237*a97c2a1fSXin Li             i4_accumulator += gai4_impeg2d_idct_inp_last_nonzero_histogram[i * 8 + j];
238*a97c2a1fSXin Li             val = i4_accumulator * 100.0 / i4_sum;
239*a97c2a1fSXin Li 
240*a97c2a1fSXin Li             printf("%8.2f \t", val);
241*a97c2a1fSXin Li 
242*a97c2a1fSXin Li         }
243*a97c2a1fSXin Li         printf("\n");
244*a97c2a1fSXin Li     }
245*a97c2a1fSXin Li 
246*a97c2a1fSXin Li 
247*a97c2a1fSXin Li 
248*a97c2a1fSXin Li     printf("IDCT input : Number of non-zero coeff histogram\n");
249*a97c2a1fSXin Li     i4_sum = 0;
250*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
251*a97c2a1fSXin Li     {
252*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
253*a97c2a1fSXin Li         {
254*a97c2a1fSXin Li             i4_sum += gai4_impeg2d_idct_inp_num_nonzero_histogram[i * 8 + j];
255*a97c2a1fSXin Li         }
256*a97c2a1fSXin Li     }
257*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
258*a97c2a1fSXin Li     {
259*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
260*a97c2a1fSXin Li         {
261*a97c2a1fSXin Li             double val = gai4_impeg2d_idct_inp_num_nonzero_histogram[i * 8 + j] * 100.0 / i4_sum;
262*a97c2a1fSXin Li             printf("%8.2f \t", val);
263*a97c2a1fSXin Li 
264*a97c2a1fSXin Li         }
265*a97c2a1fSXin Li         printf("\n");
266*a97c2a1fSXin Li     }
267*a97c2a1fSXin Li 
268*a97c2a1fSXin Li     printf("IDCT input : Cumulative number of non-zero coeffs histogram\n");
269*a97c2a1fSXin Li     i4_accumulator = 0;
270*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
271*a97c2a1fSXin Li     {
272*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
273*a97c2a1fSXin Li         {
274*a97c2a1fSXin Li             double val;
275*a97c2a1fSXin Li             i4_accumulator += gai4_impeg2d_idct_inp_num_nonzero_histogram[i * 8 + j];
276*a97c2a1fSXin Li             val = i4_accumulator * 100.0 / i4_sum;
277*a97c2a1fSXin Li             printf("%8.2f \t", val);
278*a97c2a1fSXin Li 
279*a97c2a1fSXin Li         }
280*a97c2a1fSXin Li         printf("\n");
281*a97c2a1fSXin Li     }
282*a97c2a1fSXin Li 
283*a97c2a1fSXin Li     printf("IDCT input : Last non-zero row histogram\n");
284*a97c2a1fSXin Li 
285*a97c2a1fSXin Li 
286*a97c2a1fSXin Li     {
287*a97c2a1fSXin Li         i4_accumulator = 0;
288*a97c2a1fSXin Li         for(i = 0; i < 8; i++)
289*a97c2a1fSXin Li         {
290*a97c2a1fSXin Li             i4_accumulator += gai4_impeg2d_idct_inp_last_non_zero_row_histogram[i];
291*a97c2a1fSXin Li         }
292*a97c2a1fSXin Li         for(i = 0; i < 8; i++)
293*a97c2a1fSXin Li         {
294*a97c2a1fSXin Li             double val = gai4_impeg2d_idct_inp_last_non_zero_row_histogram[i] * 100.0 / i4_accumulator;
295*a97c2a1fSXin Li             printf("%8.2f \t", val);
296*a97c2a1fSXin Li         }
297*a97c2a1fSXin Li         printf("\n");
298*a97c2a1fSXin Li     }
299*a97c2a1fSXin Li 
300*a97c2a1fSXin Li 
301*a97c2a1fSXin Li 
302*a97c2a1fSXin Li 
303*a97c2a1fSXin Li }
304*a97c2a1fSXin Li 
impeg2d_print_iqnt_inp_statistics()305*a97c2a1fSXin Li void impeg2d_print_iqnt_inp_statistics()
306*a97c2a1fSXin Li {
307*a97c2a1fSXin Li     WORD32 i, j;
308*a97c2a1fSXin Li     WORD32 i4_sum;
309*a97c2a1fSXin Li     WORD32 i4_accumulator;
310*a97c2a1fSXin Li     i4_sum = 0;
311*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
312*a97c2a1fSXin Li     {
313*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
314*a97c2a1fSXin Li         {
315*a97c2a1fSXin Li             i4_sum += gai4_impeg2d_iqnt_inp_last_nonzero_histogram[i * 8 + j];
316*a97c2a1fSXin Li         }
317*a97c2a1fSXin Li     }
318*a97c2a1fSXin Li     printf("IQnt input : Only last coeff non-zero %8.2f\n", (gi4_impeg2d_iqnt_inp_only_last_coeff * 100.0) / gi4_impeg2d_iqnt_cnt);
319*a97c2a1fSXin Li     printf("IQnt input : Only first coeff non-zero (Includes DC + mismatch) %8.2f\n", (gi4_impeg2d_iqnt_inp_only_first_coeff * 100.0) / gi4_impeg2d_idct_cnt);
320*a97c2a1fSXin Li 
321*a97c2a1fSXin Li     printf("IQnt input : Last non-zero coeff histogram\n");
322*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
323*a97c2a1fSXin Li     {
324*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
325*a97c2a1fSXin Li         {
326*a97c2a1fSXin Li             double val = gai4_impeg2d_iqnt_inp_last_nonzero_histogram[i * 8 + j] * 100.0 / i4_sum;
327*a97c2a1fSXin Li             printf("%8.2f \t", val);
328*a97c2a1fSXin Li 
329*a97c2a1fSXin Li         }
330*a97c2a1fSXin Li         printf("\n");
331*a97c2a1fSXin Li     }
332*a97c2a1fSXin Li 
333*a97c2a1fSXin Li     printf("IQnt input : Cumulative Last non-zero coeff histogram\n");
334*a97c2a1fSXin Li     i4_accumulator = 0;
335*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
336*a97c2a1fSXin Li     {
337*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
338*a97c2a1fSXin Li         {
339*a97c2a1fSXin Li             double val;
340*a97c2a1fSXin Li             i4_accumulator += gai4_impeg2d_iqnt_inp_last_nonzero_histogram[i * 8 + j];
341*a97c2a1fSXin Li             val = i4_accumulator * 100.0 / i4_sum;
342*a97c2a1fSXin Li 
343*a97c2a1fSXin Li             printf("%8.2f \t", val);
344*a97c2a1fSXin Li 
345*a97c2a1fSXin Li         }
346*a97c2a1fSXin Li         printf("\n");
347*a97c2a1fSXin Li     }
348*a97c2a1fSXin Li 
349*a97c2a1fSXin Li 
350*a97c2a1fSXin Li 
351*a97c2a1fSXin Li     printf("IQnt input : Number of non-zero coeff histogram\n");
352*a97c2a1fSXin Li     i4_sum = 0;
353*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
354*a97c2a1fSXin Li     {
355*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
356*a97c2a1fSXin Li         {
357*a97c2a1fSXin Li             i4_sum += gai4_impeg2d_iqnt_inp_num_nonzero_histogram[i * 8 + j];
358*a97c2a1fSXin Li         }
359*a97c2a1fSXin Li     }
360*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
361*a97c2a1fSXin Li     {
362*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
363*a97c2a1fSXin Li         {
364*a97c2a1fSXin Li             double val = gai4_impeg2d_iqnt_inp_num_nonzero_histogram[i * 8 + j] * 100.0 / i4_sum;
365*a97c2a1fSXin Li             printf("%8.2f \t", val);
366*a97c2a1fSXin Li 
367*a97c2a1fSXin Li         }
368*a97c2a1fSXin Li         printf("\n");
369*a97c2a1fSXin Li     }
370*a97c2a1fSXin Li 
371*a97c2a1fSXin Li     printf("IQnt input : Cumulative number of non-zero coeffs histogram\n");
372*a97c2a1fSXin Li     i4_accumulator = 0;
373*a97c2a1fSXin Li     for(i = 0; i < 8; i++)
374*a97c2a1fSXin Li     {
375*a97c2a1fSXin Li         for(j = 0; j < 8; j++)
376*a97c2a1fSXin Li         {
377*a97c2a1fSXin Li             double val;
378*a97c2a1fSXin Li             i4_accumulator += gai4_impeg2d_iqnt_inp_num_nonzero_histogram[i * 8 + j];
379*a97c2a1fSXin Li             val = i4_accumulator * 100.0 / i4_sum;
380*a97c2a1fSXin Li             printf("%8.2f \t", val);
381*a97c2a1fSXin Li 
382*a97c2a1fSXin Li         }
383*a97c2a1fSXin Li         printf("\n");
384*a97c2a1fSXin Li     }
385*a97c2a1fSXin Li 
386*a97c2a1fSXin Li     printf("IQnt input : Last non-zero row histogram\n");
387*a97c2a1fSXin Li 
388*a97c2a1fSXin Li 
389*a97c2a1fSXin Li     {
390*a97c2a1fSXin Li         i4_accumulator = 0;
391*a97c2a1fSXin Li         for(i = 0; i < 8; i++)
392*a97c2a1fSXin Li         {
393*a97c2a1fSXin Li             i4_accumulator += gai4_impeg2d_iqnt_inp_last_non_zero_row_histogram[i];
394*a97c2a1fSXin Li         }
395*a97c2a1fSXin Li         for(i = 0; i < 8; i++)
396*a97c2a1fSXin Li         {
397*a97c2a1fSXin Li             double val = gai4_impeg2d_iqnt_inp_last_non_zero_row_histogram[i] * 100.0 / i4_accumulator;
398*a97c2a1fSXin Li             printf("%8.2f \t", val);
399*a97c2a1fSXin Li         }
400*a97c2a1fSXin Li         printf("\n");
401*a97c2a1fSXin Li     }
402*a97c2a1fSXin Li 
403*a97c2a1fSXin Li }
404*a97c2a1fSXin Li 
impeg2d_print_statistics()405*a97c2a1fSXin Li void impeg2d_print_statistics()
406*a97c2a1fSXin Li {
407*a97c2a1fSXin Li     impeg2d_print_idct_inp_statistics();
408*a97c2a1fSXin Li     impeg2d_print_iqnt_inp_statistics();
409*a97c2a1fSXin Li }
410*a97c2a1fSXin Li 
411*a97c2a1fSXin Li 
412*a97c2a1fSXin Li #endif
413*a97c2a1fSXin Li 
414*a97c2a1fSXin Li #if DEBUG_MB
415*a97c2a1fSXin Li 
416*a97c2a1fSXin Li static UWORD32  u4_debug_frm = 12;
417*a97c2a1fSXin Li static UWORD32  u4_debug_mb_x = 3;
418*a97c2a1fSXin Li static UWORD32  u4_debug_mb_y = 0;
419*a97c2a1fSXin Li 
420*a97c2a1fSXin Li static UWORD32  u4_debug_frm_num = 0;
421*a97c2a1fSXin Li 
422*a97c2a1fSXin Li /*****************************************************************************/
423*a97c2a1fSXin Li /*                                                                           */
424*a97c2a1fSXin Li /*  Function Name : example_of_a_function                                    */
425*a97c2a1fSXin Li /*                                                                           */
426*a97c2a1fSXin Li /*  Description   : This function illustrates the use of C coding standards. */
427*a97c2a1fSXin Li /*                  switch/case, if, for, block comments have been shown     */
428*a97c2a1fSXin Li /*                  here.                                                    */
429*a97c2a1fSXin Li /*  Inputs        : <What inputs does the function take?>                    */
430*a97c2a1fSXin Li /*  Globals       : <Does it use any global variables?>                      */
431*a97c2a1fSXin Li /*  Processing    : <Describe how the function operates - include algorithm  */
432*a97c2a1fSXin Li /*                  description>                                             */
433*a97c2a1fSXin Li /*  Outputs       : <What does the function produce?>                        */
434*a97c2a1fSXin Li /*  Returns       : <What does the function return?>                         */
435*a97c2a1fSXin Li /*                                                                           */
436*a97c2a1fSXin Li /*  Issues        : <List any issues or problems with this function>         */
437*a97c2a1fSXin Li /*                                                                           */
438*a97c2a1fSXin Li /*  Revision History:                                                        */
439*a97c2a1fSXin Li /*                                                                           */
440*a97c2a1fSXin Li /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
441*a97c2a1fSXin Li /*         13 07 2002   Ittiam          Draft                                */
442*a97c2a1fSXin Li /*                                                                           */
443*a97c2a1fSXin Li /*****************************************************************************/
impeg2d_trace_mb_start(UWORD32 u4_mb_x,UWORD32 u4_mb_y)444*a97c2a1fSXin Li void impeg2d_trace_mb_start(UWORD32 u4_mb_x, UWORD32 u4_mb_y)
445*a97c2a1fSXin Li {
446*a97c2a1fSXin Li     UWORD32 u4_frm_num = impeg2d_frm_num_get();
447*a97c2a1fSXin Li 
448*a97c2a1fSXin Li    if(u4_frm_num == u4_debug_frm && u4_mb_x == u4_debug_mb_x &&  u4_mb_y == u4_debug_mb_y)
449*a97c2a1fSXin Li    {
450*a97c2a1fSXin Li //       printf("");
451*a97c2a1fSXin Li    }
452*a97c2a1fSXin Li }
453*a97c2a1fSXin Li 
454*a97c2a1fSXin Li /*****************************************************************************/
455*a97c2a1fSXin Li /*                                                                           */
456*a97c2a1fSXin Li /*  Function Name : example_of_a_function                                    */
457*a97c2a1fSXin Li /*                                                                           */
458*a97c2a1fSXin Li /*  Description   : This function illustrates the use of C coding standards. */
459*a97c2a1fSXin Li /*                  switch/case, if, for, block comments have been shown     */
460*a97c2a1fSXin Li /*                  here.                                                    */
461*a97c2a1fSXin Li /*  Inputs        : <What inputs does the function take?>                    */
462*a97c2a1fSXin Li /*  Globals       : <Does it use any global variables?>                      */
463*a97c2a1fSXin Li /*  Processing    : <Describe how the function operates - include algorithm  */
464*a97c2a1fSXin Li /*                  description>                                             */
465*a97c2a1fSXin Li /*  Outputs       : <What does the function produce?>                        */
466*a97c2a1fSXin Li /*  Returns       : <What does the function return?>                         */
467*a97c2a1fSXin Li /*                                                                           */
468*a97c2a1fSXin Li /*  Issues        : <List any issues or problems with this function>         */
469*a97c2a1fSXin Li /*                                                                           */
470*a97c2a1fSXin Li /*  Revision History:                                                        */
471*a97c2a1fSXin Li /*                                                                           */
472*a97c2a1fSXin Li /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
473*a97c2a1fSXin Li /*         13 07 2002   Ittiam          Draft                                */
474*a97c2a1fSXin Li /*                                                                           */
475*a97c2a1fSXin Li /*****************************************************************************/
impeg2d_frm_num_set(void)476*a97c2a1fSXin Li void impeg2d_frm_num_set(void)
477*a97c2a1fSXin Li {
478*a97c2a1fSXin Li     u4_debug_frm_num++;
479*a97c2a1fSXin Li }
480*a97c2a1fSXin Li 
481*a97c2a1fSXin Li 
482*a97c2a1fSXin Li /*****************************************************************************/
483*a97c2a1fSXin Li /*                                                                           */
484*a97c2a1fSXin Li /*  Function Name : example_of_a_function                                    */
485*a97c2a1fSXin Li /*                                                                           */
486*a97c2a1fSXin Li /*  Description   : This function illustrates the use of C coding standards. */
487*a97c2a1fSXin Li /*                  switch/case, if, for, block comments have been shown     */
488*a97c2a1fSXin Li /*                  here.                                                    */
489*a97c2a1fSXin Li /*  Inputs        : <What inputs does the function take?>                    */
490*a97c2a1fSXin Li /*  Globals       : <Does it use any global variables?>                      */
491*a97c2a1fSXin Li /*  Processing    : <Describe how the function operates - include algorithm  */
492*a97c2a1fSXin Li /*                  description>                                             */
493*a97c2a1fSXin Li /*  Outputs       : <What does the function produce?>                        */
494*a97c2a1fSXin Li /*  Returns       : <What does the function return?>                         */
495*a97c2a1fSXin Li /*                                                                           */
496*a97c2a1fSXin Li /*  Issues        : <List any issues or problems with this function>         */
497*a97c2a1fSXin Li /*                                                                           */
498*a97c2a1fSXin Li /*  Revision History:                                                        */
499*a97c2a1fSXin Li /*                                                                           */
500*a97c2a1fSXin Li /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
501*a97c2a1fSXin Li /*         13 07 2002   Ittiam          Draft                                */
502*a97c2a1fSXin Li /*                                                                           */
503*a97c2a1fSXin Li /*****************************************************************************/
impeg2d_frm_num_get(void)504*a97c2a1fSXin Li UWORD32 impeg2d_frm_num_get(void)
505*a97c2a1fSXin Li {
506*a97c2a1fSXin Li     return(u4_debug_frm_num);
507*a97c2a1fSXin Li }
508*a97c2a1fSXin Li 
509*a97c2a1fSXin Li #endif
510