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 #ifndef VPX_VPX_UTIL_VPX_DEBUG_UTIL_H_ 12*fb1b10abSAndroid Build Coastguard Worker #define VPX_VPX_UTIL_VPX_DEBUG_UTIL_H_ 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_config.h" 15*fb1b10abSAndroid Build Coastguard Worker 16*fb1b10abSAndroid Build Coastguard Worker #include "vpx_dsp/prob.h" 17*fb1b10abSAndroid Build Coastguard Worker 18*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 19*fb1b10abSAndroid Build Coastguard Worker extern "C" { 20*fb1b10abSAndroid Build Coastguard Worker #endif 21*fb1b10abSAndroid Build Coastguard Worker 22*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_BITSTREAM_DEBUG || CONFIG_MISMATCH_DEBUG 23*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_set_frame_write(int frame_idx); 24*fb1b10abSAndroid Build Coastguard Worker int bitstream_queue_get_frame_write(void); 25*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_set_frame_read(int frame_idx); 26*fb1b10abSAndroid Build Coastguard Worker int bitstream_queue_get_frame_read(void); 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 /* This is a debug tool used to detect bitstream error. On encoder side, it 31*fb1b10abSAndroid Build Coastguard Worker * pushes each bit and probability into a queue before the bit is written into 32*fb1b10abSAndroid Build Coastguard Worker * the Arithmetic coder. On decoder side, whenever a bit is read out from the 33*fb1b10abSAndroid Build Coastguard Worker * Arithmetic coder, it pops out the reference bit and probability from the 34*fb1b10abSAndroid Build Coastguard Worker * queue as well. If the two results do not match, this debug tool will report 35*fb1b10abSAndroid Build Coastguard Worker * an error. This tool can be used to pin down the bitstream error precisely. 36*fb1b10abSAndroid Build Coastguard Worker * By combining gdb's backtrace method, we can detect which module causes the 37*fb1b10abSAndroid Build Coastguard Worker * bitstream error. */ 38*fb1b10abSAndroid Build Coastguard Worker int bitstream_queue_get_write(void); 39*fb1b10abSAndroid Build Coastguard Worker int bitstream_queue_get_read(void); 40*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_record_write(void); 41*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_reset_write(void); 42*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_pop(int *result, int *prob); 43*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_push(int result, const int prob); 44*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_set_skip_write(int skip); 45*fb1b10abSAndroid Build Coastguard Worker void bitstream_queue_set_skip_read(int skip); 46*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_BITSTREAM_DEBUG 47*fb1b10abSAndroid Build Coastguard Worker 48*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_MISMATCH_DEBUG 49*fb1b10abSAndroid Build Coastguard Worker void mismatch_move_frame_idx_w(void); 50*fb1b10abSAndroid Build Coastguard Worker void mismatch_move_frame_idx_r(void); 51*fb1b10abSAndroid Build Coastguard Worker void mismatch_reset_frame(int num_planes); 52*fb1b10abSAndroid Build Coastguard Worker void mismatch_record_block_pre(const uint8_t *src, int src_stride, int plane, 53*fb1b10abSAndroid Build Coastguard Worker int pixel_c, int pixel_r, int blk_w, int blk_h, 54*fb1b10abSAndroid Build Coastguard Worker int highbd); 55*fb1b10abSAndroid Build Coastguard Worker void mismatch_record_block_tx(const uint8_t *src, int src_stride, int plane, 56*fb1b10abSAndroid Build Coastguard Worker int pixel_c, int pixel_r, int blk_w, int blk_h, 57*fb1b10abSAndroid Build Coastguard Worker int highbd); 58*fb1b10abSAndroid Build Coastguard Worker void mismatch_check_block_pre(const uint8_t *src, int src_stride, int plane, 59*fb1b10abSAndroid Build Coastguard Worker int pixel_c, int pixel_r, int blk_w, int blk_h, 60*fb1b10abSAndroid Build Coastguard Worker int highbd); 61*fb1b10abSAndroid Build Coastguard Worker void mismatch_check_block_tx(const uint8_t *src, int src_stride, int plane, 62*fb1b10abSAndroid Build Coastguard Worker int pixel_c, int pixel_r, int blk_w, int blk_h, 63*fb1b10abSAndroid Build Coastguard Worker int highbd); 64*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_MISMATCH_DEBUG 65*fb1b10abSAndroid Build Coastguard Worker 66*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 67*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 68*fb1b10abSAndroid Build Coastguard Worker #endif 69*fb1b10abSAndroid Build Coastguard Worker 70*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VPX_UTIL_VPX_DEBUG_UTIL_H_ 71