xref: /aosp_15_r20/external/libvpx/vpx_util/vpx_debug_util.c (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2019 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker 
11*fb1b10abSAndroid Build Coastguard Worker #include <assert.h>
12*fb1b10abSAndroid Build Coastguard Worker #include <stdio.h>
13*fb1b10abSAndroid Build Coastguard Worker #include <string.h>
14*fb1b10abSAndroid Build Coastguard Worker #include "vpx_util/vpx_debug_util.h"
15*fb1b10abSAndroid Build Coastguard Worker 
16*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_BITSTREAM_DEBUG || CONFIG_MISMATCH_DEBUG
17*fb1b10abSAndroid Build Coastguard Worker static int frame_idx_w = 0;
18*fb1b10abSAndroid Build Coastguard Worker static int frame_idx_r = 0;
19*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_set_frame_write(int frame_idx)20*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_set_frame_write(int frame_idx) { frame_idx_w = frame_idx; }
21*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_get_frame_write(void)22*fb1b10abSAndroid Build Coastguard Worker int bitstream_queue_get_frame_write(void) { return frame_idx_w; }
23*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_set_frame_read(int frame_idx)24*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_set_frame_read(int frame_idx) { frame_idx_r = frame_idx; }
25*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_get_frame_read(void)26*fb1b10abSAndroid Build Coastguard Worker int bitstream_queue_get_frame_read(void) { return frame_idx_r; }
27*fb1b10abSAndroid Build Coastguard Worker #endif
28*fb1b10abSAndroid Build Coastguard Worker 
29*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_BITSTREAM_DEBUG
30*fb1b10abSAndroid Build Coastguard Worker #define QUEUE_MAX_SIZE 2000000
31*fb1b10abSAndroid Build Coastguard Worker static int result_queue[QUEUE_MAX_SIZE];
32*fb1b10abSAndroid Build Coastguard Worker static int prob_queue[QUEUE_MAX_SIZE];
33*fb1b10abSAndroid Build Coastguard Worker 
34*fb1b10abSAndroid Build Coastguard Worker static int queue_r = 0;
35*fb1b10abSAndroid Build Coastguard Worker static int queue_w = 0;
36*fb1b10abSAndroid Build Coastguard Worker static int queue_prev_w = -1;
37*fb1b10abSAndroid Build Coastguard Worker static int skip_r = 0;
38*fb1b10abSAndroid Build Coastguard Worker static int skip_w = 0;
bitstream_queue_set_skip_write(int skip)39*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_set_skip_write(int skip) { skip_w = skip; }
40*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_set_skip_read(int skip)41*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_set_skip_read(int skip) { skip_r = skip; }
42*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_record_write(void)43*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_record_write(void) { queue_prev_w = queue_w; }
44*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_reset_write(void)45*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_reset_write(void) { queue_w = queue_prev_w; }
46*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_get_write(void)47*fb1b10abSAndroid Build Coastguard Worker int bitstream_queue_get_write(void) { return queue_w; }
48*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_get_read(void)49*fb1b10abSAndroid Build Coastguard Worker int bitstream_queue_get_read(void) { return queue_r; }
50*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_pop(int * result,int * prob)51*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_pop(int *result, int *prob) {
52*fb1b10abSAndroid Build Coastguard Worker   if (!skip_r) {
53*fb1b10abSAndroid Build Coastguard Worker     if (queue_w == queue_r) {
54*fb1b10abSAndroid Build Coastguard Worker       printf("buffer underflow queue_w %d queue_r %d\n", queue_w, queue_r);
55*fb1b10abSAndroid Build Coastguard Worker       assert(0);
56*fb1b10abSAndroid Build Coastguard Worker     }
57*fb1b10abSAndroid Build Coastguard Worker     *result = result_queue[queue_r];
58*fb1b10abSAndroid Build Coastguard Worker     *prob = prob_queue[queue_r];
59*fb1b10abSAndroid Build Coastguard Worker     queue_r = (queue_r + 1) % QUEUE_MAX_SIZE;
60*fb1b10abSAndroid Build Coastguard Worker   }
61*fb1b10abSAndroid Build Coastguard Worker }
62*fb1b10abSAndroid Build Coastguard Worker 
bitstream_queue_push(int result,const int prob)63*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_push(int result, const int prob) {
64*fb1b10abSAndroid Build Coastguard Worker   if (!skip_w) {
65*fb1b10abSAndroid Build Coastguard Worker     result_queue[queue_w] = result;
66*fb1b10abSAndroid Build Coastguard Worker     prob_queue[queue_w] = prob;
67*fb1b10abSAndroid Build Coastguard Worker     queue_w = (queue_w + 1) % QUEUE_MAX_SIZE;
68*fb1b10abSAndroid Build Coastguard Worker     if (queue_w == queue_r) {
69*fb1b10abSAndroid Build Coastguard Worker       printf("buffer overflow queue_w %d queue_r %d\n", queue_w, queue_r);
70*fb1b10abSAndroid Build Coastguard Worker       assert(0);
71*fb1b10abSAndroid Build Coastguard Worker     }
72*fb1b10abSAndroid Build Coastguard Worker   }
73*fb1b10abSAndroid Build Coastguard Worker }
74*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_BITSTREAM_DEBUG
75*fb1b10abSAndroid Build Coastguard Worker 
76*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_MISMATCH_DEBUG
77*fb1b10abSAndroid Build Coastguard Worker static int frame_buf_idx_r = 0;
78*fb1b10abSAndroid Build Coastguard Worker static int frame_buf_idx_w = 0;
79*fb1b10abSAndroid Build Coastguard Worker #define MAX_FRAME_BUF_NUM 20
80*fb1b10abSAndroid Build Coastguard Worker #define MAX_FRAME_STRIDE 1920
81*fb1b10abSAndroid Build Coastguard Worker #define MAX_FRAME_HEIGHT 1080
82*fb1b10abSAndroid Build Coastguard Worker static uint16_t
83*fb1b10abSAndroid Build Coastguard Worker     frame_pre[MAX_FRAME_BUF_NUM][3]
84*fb1b10abSAndroid Build Coastguard Worker              [MAX_FRAME_STRIDE * MAX_FRAME_HEIGHT];  // prediction only
85*fb1b10abSAndroid Build Coastguard Worker static uint16_t
86*fb1b10abSAndroid Build Coastguard Worker     frame_tx[MAX_FRAME_BUF_NUM][3]
87*fb1b10abSAndroid Build Coastguard Worker             [MAX_FRAME_STRIDE * MAX_FRAME_HEIGHT];  // prediction + txfm
88*fb1b10abSAndroid Build Coastguard Worker static int frame_stride = MAX_FRAME_STRIDE;
89*fb1b10abSAndroid Build Coastguard Worker static int frame_height = MAX_FRAME_HEIGHT;
90*fb1b10abSAndroid Build Coastguard Worker static int frame_size = MAX_FRAME_STRIDE * MAX_FRAME_HEIGHT;
mismatch_move_frame_idx_w(void)91*fb1b10abSAndroid Build Coastguard Worker void mismatch_move_frame_idx_w(void) {
92*fb1b10abSAndroid Build Coastguard Worker   frame_buf_idx_w = (frame_buf_idx_w + 1) % MAX_FRAME_BUF_NUM;
93*fb1b10abSAndroid Build Coastguard Worker   if (frame_buf_idx_w == frame_buf_idx_r) {
94*fb1b10abSAndroid Build Coastguard Worker     printf("frame_buf overflow\n");
95*fb1b10abSAndroid Build Coastguard Worker     assert(0);
96*fb1b10abSAndroid Build Coastguard Worker   }
97*fb1b10abSAndroid Build Coastguard Worker }
98*fb1b10abSAndroid Build Coastguard Worker 
mismatch_reset_frame(int num_planes)99*fb1b10abSAndroid Build Coastguard Worker void mismatch_reset_frame(int num_planes) {
100*fb1b10abSAndroid Build Coastguard Worker   int plane;
101*fb1b10abSAndroid Build Coastguard Worker   for (plane = 0; plane < num_planes; ++plane) {
102*fb1b10abSAndroid Build Coastguard Worker     memset(frame_pre[frame_buf_idx_w][plane], 0,
103*fb1b10abSAndroid Build Coastguard Worker            sizeof(frame_pre[frame_buf_idx_w][plane][0]) * frame_size);
104*fb1b10abSAndroid Build Coastguard Worker     memset(frame_tx[frame_buf_idx_w][plane], 0,
105*fb1b10abSAndroid Build Coastguard Worker            sizeof(frame_tx[frame_buf_idx_w][plane][0]) * frame_size);
106*fb1b10abSAndroid Build Coastguard Worker   }
107*fb1b10abSAndroid Build Coastguard Worker }
108*fb1b10abSAndroid Build Coastguard Worker 
mismatch_move_frame_idx_r(void)109*fb1b10abSAndroid Build Coastguard Worker void mismatch_move_frame_idx_r(void) {
110*fb1b10abSAndroid Build Coastguard Worker   if (frame_buf_idx_w == frame_buf_idx_r) {
111*fb1b10abSAndroid Build Coastguard Worker     printf("frame_buf underflow\n");
112*fb1b10abSAndroid Build Coastguard Worker     assert(0);
113*fb1b10abSAndroid Build Coastguard Worker   }
114*fb1b10abSAndroid Build Coastguard Worker   frame_buf_idx_r = (frame_buf_idx_r + 1) % MAX_FRAME_BUF_NUM;
115*fb1b10abSAndroid Build Coastguard Worker }
116*fb1b10abSAndroid Build Coastguard Worker 
mismatch_record_block_pre(const uint8_t * src,int src_stride,int plane,int pixel_c,int pixel_r,int blk_w,int blk_h,int highbd)117*fb1b10abSAndroid Build Coastguard Worker void mismatch_record_block_pre(const uint8_t *src, int src_stride, int plane,
118*fb1b10abSAndroid Build Coastguard Worker                                int pixel_c, int pixel_r, int blk_w, int blk_h,
119*fb1b10abSAndroid Build Coastguard Worker                                int highbd) {
120*fb1b10abSAndroid Build Coastguard Worker   const uint16_t *src16 = highbd ? CONVERT_TO_SHORTPTR(src) : NULL;
121*fb1b10abSAndroid Build Coastguard Worker   int r, c;
122*fb1b10abSAndroid Build Coastguard Worker 
123*fb1b10abSAndroid Build Coastguard Worker   if (pixel_c + blk_w >= frame_stride || pixel_r + blk_h >= frame_height) {
124*fb1b10abSAndroid Build Coastguard Worker     printf("frame_buf undersized\n");
125*fb1b10abSAndroid Build Coastguard Worker     assert(0);
126*fb1b10abSAndroid Build Coastguard Worker   }
127*fb1b10abSAndroid Build Coastguard Worker 
128*fb1b10abSAndroid Build Coastguard Worker   for (r = 0; r < blk_h; ++r) {
129*fb1b10abSAndroid Build Coastguard Worker     for (c = 0; c < blk_w; ++c) {
130*fb1b10abSAndroid Build Coastguard Worker       frame_pre[frame_buf_idx_w][plane]
131*fb1b10abSAndroid Build Coastguard Worker                [(r + pixel_r) * frame_stride + c + pixel_c] =
132*fb1b10abSAndroid Build Coastguard Worker                    src16 ? src16[r * src_stride + c] : src[r * src_stride + c];
133*fb1b10abSAndroid Build Coastguard Worker     }
134*fb1b10abSAndroid Build Coastguard Worker   }
135*fb1b10abSAndroid Build Coastguard Worker #if 0
136*fb1b10abSAndroid Build Coastguard Worker   {
137*fb1b10abSAndroid Build Coastguard Worker     int ref_frame_idx = 3;
138*fb1b10abSAndroid Build Coastguard Worker     int ref_plane = 1;
139*fb1b10abSAndroid Build Coastguard Worker     int ref_pixel_c = 162;
140*fb1b10abSAndroid Build Coastguard Worker     int ref_pixel_r = 16;
141*fb1b10abSAndroid Build Coastguard Worker     if (frame_idx_w == ref_frame_idx && plane == ref_plane &&
142*fb1b10abSAndroid Build Coastguard Worker         ref_pixel_c >= pixel_c && ref_pixel_c < pixel_c + blk_w &&
143*fb1b10abSAndroid Build Coastguard Worker         ref_pixel_r >= pixel_r && ref_pixel_r < pixel_r + blk_h) {
144*fb1b10abSAndroid Build Coastguard Worker       printf(
145*fb1b10abSAndroid Build Coastguard Worker           "\nrecord_block_pre frame_idx %d plane %d pixel_c %d pixel_r %d blk_w"
146*fb1b10abSAndroid Build Coastguard Worker           " %d blk_h %d\n",
147*fb1b10abSAndroid Build Coastguard Worker           frame_idx_w, plane, pixel_c, pixel_r, blk_w, blk_h);
148*fb1b10abSAndroid Build Coastguard Worker     }
149*fb1b10abSAndroid Build Coastguard Worker   }
150*fb1b10abSAndroid Build Coastguard Worker #endif
151*fb1b10abSAndroid Build Coastguard Worker }
mismatch_record_block_tx(const uint8_t * src,int src_stride,int plane,int pixel_c,int pixel_r,int blk_w,int blk_h,int highbd)152*fb1b10abSAndroid Build Coastguard Worker void mismatch_record_block_tx(const uint8_t *src, int src_stride, int plane,
153*fb1b10abSAndroid Build Coastguard Worker                               int pixel_c, int pixel_r, int blk_w, int blk_h,
154*fb1b10abSAndroid Build Coastguard Worker                               int highbd) {
155*fb1b10abSAndroid Build Coastguard Worker   const uint16_t *src16 = highbd ? CONVERT_TO_SHORTPTR(src) : NULL;
156*fb1b10abSAndroid Build Coastguard Worker   int r, c;
157*fb1b10abSAndroid Build Coastguard Worker   if (pixel_c + blk_w >= frame_stride || pixel_r + blk_h >= frame_height) {
158*fb1b10abSAndroid Build Coastguard Worker     printf("frame_buf undersized\n");
159*fb1b10abSAndroid Build Coastguard Worker     assert(0);
160*fb1b10abSAndroid Build Coastguard Worker   }
161*fb1b10abSAndroid Build Coastguard Worker 
162*fb1b10abSAndroid Build Coastguard Worker   for (r = 0; r < blk_h; ++r) {
163*fb1b10abSAndroid Build Coastguard Worker     for (c = 0; c < blk_w; ++c) {
164*fb1b10abSAndroid Build Coastguard Worker       frame_tx[frame_buf_idx_w][plane]
165*fb1b10abSAndroid Build Coastguard Worker               [(r + pixel_r) * frame_stride + c + pixel_c] =
166*fb1b10abSAndroid Build Coastguard Worker                   src16 ? src16[r * src_stride + c] : src[r * src_stride + c];
167*fb1b10abSAndroid Build Coastguard Worker     }
168*fb1b10abSAndroid Build Coastguard Worker   }
169*fb1b10abSAndroid Build Coastguard Worker #if 0
170*fb1b10abSAndroid Build Coastguard Worker   {
171*fb1b10abSAndroid Build Coastguard Worker     int ref_frame_idx = 3;
172*fb1b10abSAndroid Build Coastguard Worker     int ref_plane = 1;
173*fb1b10abSAndroid Build Coastguard Worker     int ref_pixel_c = 162;
174*fb1b10abSAndroid Build Coastguard Worker     int ref_pixel_r = 16;
175*fb1b10abSAndroid Build Coastguard Worker     if (frame_idx_w == ref_frame_idx && plane == ref_plane &&
176*fb1b10abSAndroid Build Coastguard Worker         ref_pixel_c >= pixel_c && ref_pixel_c < pixel_c + blk_w &&
177*fb1b10abSAndroid Build Coastguard Worker         ref_pixel_r >= pixel_r && ref_pixel_r < pixel_r + blk_h) {
178*fb1b10abSAndroid Build Coastguard Worker       printf(
179*fb1b10abSAndroid Build Coastguard Worker           "\nrecord_block_tx frame_idx %d plane %d pixel_c %d pixel_r %d blk_w "
180*fb1b10abSAndroid Build Coastguard Worker           "%d blk_h %d\n",
181*fb1b10abSAndroid Build Coastguard Worker           frame_idx_w, plane, pixel_c, pixel_r, blk_w, blk_h);
182*fb1b10abSAndroid Build Coastguard Worker     }
183*fb1b10abSAndroid Build Coastguard Worker   }
184*fb1b10abSAndroid Build Coastguard Worker #endif
185*fb1b10abSAndroid Build Coastguard Worker }
mismatch_check_block_pre(const uint8_t * src,int src_stride,int plane,int pixel_c,int pixel_r,int blk_w,int blk_h,int highbd)186*fb1b10abSAndroid Build Coastguard Worker void mismatch_check_block_pre(const uint8_t *src, int src_stride, int plane,
187*fb1b10abSAndroid Build Coastguard Worker                               int pixel_c, int pixel_r, int blk_w, int blk_h,
188*fb1b10abSAndroid Build Coastguard Worker                               int highbd) {
189*fb1b10abSAndroid Build Coastguard Worker   const uint16_t *src16 = highbd ? CONVERT_TO_SHORTPTR(src) : NULL;
190*fb1b10abSAndroid Build Coastguard Worker   int mismatch = 0;
191*fb1b10abSAndroid Build Coastguard Worker   int r, c;
192*fb1b10abSAndroid Build Coastguard Worker   if (pixel_c + blk_w >= frame_stride || pixel_r + blk_h >= frame_height) {
193*fb1b10abSAndroid Build Coastguard Worker     printf("frame_buf undersized\n");
194*fb1b10abSAndroid Build Coastguard Worker     assert(0);
195*fb1b10abSAndroid Build Coastguard Worker   }
196*fb1b10abSAndroid Build Coastguard Worker 
197*fb1b10abSAndroid Build Coastguard Worker   for (r = 0; r < blk_h; ++r) {
198*fb1b10abSAndroid Build Coastguard Worker     for (c = 0; c < blk_w; ++c) {
199*fb1b10abSAndroid Build Coastguard Worker       if (frame_pre[frame_buf_idx_r][plane]
200*fb1b10abSAndroid Build Coastguard Worker                    [(r + pixel_r) * frame_stride + c + pixel_c] !=
201*fb1b10abSAndroid Build Coastguard Worker           (uint16_t)(src16 ? src16[r * src_stride + c]
202*fb1b10abSAndroid Build Coastguard Worker                            : src[r * src_stride + c])) {
203*fb1b10abSAndroid Build Coastguard Worker         mismatch = 1;
204*fb1b10abSAndroid Build Coastguard Worker       }
205*fb1b10abSAndroid Build Coastguard Worker     }
206*fb1b10abSAndroid Build Coastguard Worker   }
207*fb1b10abSAndroid Build Coastguard Worker   if (mismatch) {
208*fb1b10abSAndroid Build Coastguard Worker     int rr, cc;
209*fb1b10abSAndroid Build Coastguard Worker     printf(
210*fb1b10abSAndroid Build Coastguard Worker         "\ncheck_block_pre failed frame_idx %d plane %d "
211*fb1b10abSAndroid Build Coastguard Worker         "pixel_c %d pixel_r "
212*fb1b10abSAndroid Build Coastguard Worker         "%d blk_w %d blk_h %d\n",
213*fb1b10abSAndroid Build Coastguard Worker         frame_idx_r, plane, pixel_c, pixel_r, blk_w, blk_h);
214*fb1b10abSAndroid Build Coastguard Worker     printf("enc\n");
215*fb1b10abSAndroid Build Coastguard Worker     for (rr = 0; rr < blk_h; ++rr) {
216*fb1b10abSAndroid Build Coastguard Worker       for (cc = 0; cc < blk_w; ++cc) {
217*fb1b10abSAndroid Build Coastguard Worker         printf("%d ", frame_pre[frame_buf_idx_r][plane]
218*fb1b10abSAndroid Build Coastguard Worker                                [(rr + pixel_r) * frame_stride + cc + pixel_c]);
219*fb1b10abSAndroid Build Coastguard Worker       }
220*fb1b10abSAndroid Build Coastguard Worker       printf("\n");
221*fb1b10abSAndroid Build Coastguard Worker     }
222*fb1b10abSAndroid Build Coastguard Worker 
223*fb1b10abSAndroid Build Coastguard Worker     printf("dec\n");
224*fb1b10abSAndroid Build Coastguard Worker     for (rr = 0; rr < blk_h; ++rr) {
225*fb1b10abSAndroid Build Coastguard Worker       for (cc = 0; cc < blk_w; ++cc) {
226*fb1b10abSAndroid Build Coastguard Worker         printf("%d ",
227*fb1b10abSAndroid Build Coastguard Worker                src16 ? src16[rr * src_stride + cc] : src[rr * src_stride + cc]);
228*fb1b10abSAndroid Build Coastguard Worker       }
229*fb1b10abSAndroid Build Coastguard Worker       printf("\n");
230*fb1b10abSAndroid Build Coastguard Worker     }
231*fb1b10abSAndroid Build Coastguard Worker     assert(0);
232*fb1b10abSAndroid Build Coastguard Worker   }
233*fb1b10abSAndroid Build Coastguard Worker }
mismatch_check_block_tx(const uint8_t * src,int src_stride,int plane,int pixel_c,int pixel_r,int blk_w,int blk_h,int highbd)234*fb1b10abSAndroid Build Coastguard Worker void mismatch_check_block_tx(const uint8_t *src, int src_stride, int plane,
235*fb1b10abSAndroid Build Coastguard Worker                              int pixel_c, int pixel_r, int blk_w, int blk_h,
236*fb1b10abSAndroid Build Coastguard Worker                              int highbd) {
237*fb1b10abSAndroid Build Coastguard Worker   const uint16_t *src16 = highbd ? CONVERT_TO_SHORTPTR(src) : NULL;
238*fb1b10abSAndroid Build Coastguard Worker   int mismatch = 0;
239*fb1b10abSAndroid Build Coastguard Worker   int r, c;
240*fb1b10abSAndroid Build Coastguard Worker   if (pixel_c + blk_w >= frame_stride || pixel_r + blk_h >= frame_height) {
241*fb1b10abSAndroid Build Coastguard Worker     printf("frame_buf undersized\n");
242*fb1b10abSAndroid Build Coastguard Worker     assert(0);
243*fb1b10abSAndroid Build Coastguard Worker   }
244*fb1b10abSAndroid Build Coastguard Worker 
245*fb1b10abSAndroid Build Coastguard Worker   for (r = 0; r < blk_h; ++r) {
246*fb1b10abSAndroid Build Coastguard Worker     for (c = 0; c < blk_w; ++c) {
247*fb1b10abSAndroid Build Coastguard Worker       if (frame_tx[frame_buf_idx_r][plane]
248*fb1b10abSAndroid Build Coastguard Worker                   [(r + pixel_r) * frame_stride + c + pixel_c] !=
249*fb1b10abSAndroid Build Coastguard Worker           (uint16_t)(src16 ? src16[r * src_stride + c]
250*fb1b10abSAndroid Build Coastguard Worker                            : src[r * src_stride + c])) {
251*fb1b10abSAndroid Build Coastguard Worker         mismatch = 1;
252*fb1b10abSAndroid Build Coastguard Worker       }
253*fb1b10abSAndroid Build Coastguard Worker     }
254*fb1b10abSAndroid Build Coastguard Worker   }
255*fb1b10abSAndroid Build Coastguard Worker   if (mismatch) {
256*fb1b10abSAndroid Build Coastguard Worker     int rr, cc;
257*fb1b10abSAndroid Build Coastguard Worker     printf(
258*fb1b10abSAndroid Build Coastguard Worker         "\ncheck_block_tx failed frame_idx %d plane %d pixel_c "
259*fb1b10abSAndroid Build Coastguard Worker         "%d pixel_r "
260*fb1b10abSAndroid Build Coastguard Worker         "%d blk_w %d blk_h %d\n",
261*fb1b10abSAndroid Build Coastguard Worker         frame_idx_r, plane, pixel_c, pixel_r, blk_w, blk_h);
262*fb1b10abSAndroid Build Coastguard Worker     printf("enc\n");
263*fb1b10abSAndroid Build Coastguard Worker     for (rr = 0; rr < blk_h; ++rr) {
264*fb1b10abSAndroid Build Coastguard Worker       for (cc = 0; cc < blk_w; ++cc) {
265*fb1b10abSAndroid Build Coastguard Worker         printf("%d ", frame_tx[frame_buf_idx_r][plane]
266*fb1b10abSAndroid Build Coastguard Worker                               [(rr + pixel_r) * frame_stride + cc + pixel_c]);
267*fb1b10abSAndroid Build Coastguard Worker       }
268*fb1b10abSAndroid Build Coastguard Worker       printf("\n");
269*fb1b10abSAndroid Build Coastguard Worker     }
270*fb1b10abSAndroid Build Coastguard Worker 
271*fb1b10abSAndroid Build Coastguard Worker     printf("dec\n");
272*fb1b10abSAndroid Build Coastguard Worker     for (rr = 0; rr < blk_h; ++rr) {
273*fb1b10abSAndroid Build Coastguard Worker       for (cc = 0; cc < blk_w; ++cc) {
274*fb1b10abSAndroid Build Coastguard Worker         printf("%d ",
275*fb1b10abSAndroid Build Coastguard Worker                src16 ? src16[rr * src_stride + cc] : src[rr * src_stride + cc]);
276*fb1b10abSAndroid Build Coastguard Worker       }
277*fb1b10abSAndroid Build Coastguard Worker       printf("\n");
278*fb1b10abSAndroid Build Coastguard Worker     }
279*fb1b10abSAndroid Build Coastguard Worker     assert(0);
280*fb1b10abSAndroid Build Coastguard Worker   }
281*fb1b10abSAndroid Build Coastguard Worker }
282*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_MISMATCH_DEBUG
283