10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/******************************************************************************
20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License");
60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License.
70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at:
80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0
100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software
120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS,
130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and
150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License.
160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/
180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @file
210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  ihevcd_statistics.h
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Contains macros for generating stats about hevc decoder
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Naveen SR
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions:
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef _IHEVCD_STATISTICS_H_
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define _IHEVCD_STATISTICS_H_
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h>
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h"
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h"
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h"
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ithread.h"
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h"
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h"
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h"
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h"
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_iquant_itrans_recon_ctb.h"
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_statistics.h"
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATISTICS_ENABLE 0
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if STATISTICS_ENABLE
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakartypedef struct
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 num_4x4_dst;
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 num_4x4;
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 num_8x8;
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 num_16x16;
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 num_32x32;
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 num_64x64;
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}stat_trans_t;
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakartypedef struct
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* 4x4 Subblock count */
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_4x4_dst[1];
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_4x4[1];
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_8x8[4];
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_16x16[16];
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_32x32[64];
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}stat_sblk_histogram_t;
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakartypedef struct
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* 4x4 Subblock count */
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_4x4_dst[16];
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_4x4[16];
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_8x8[64];
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_16x16[256];
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 trans_32x32[1024];
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}stat_coeff_histogram_t;
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakartypedef struct
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stat_trans_t stat_num_all_trans_block[2]; /* Y and UV */
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stat_trans_t stat_num_coded_trans_block[2]; /* Y and UV */
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stat_trans_t stat_num_coded_dc_block[2]; /* Y and UV */
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stat_trans_t stat_num_coded_one_coeff_block[2]; /* Y and UV */
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stat_sblk_histogram_t stat_last_sblk_pos_histogram; /* Y + UV */
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stat_sblk_histogram_t stat_num_coded_sblk_histogram; /* Y + UV */
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stat_coeff_histogram_t stat_num_coded_coeff_histogram; /* Y + UV */
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32   stat_pu_all_size_hist[16][16]; /* PU Sizes [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32   stat_pu_skip_size_hist[16][16]; /* PU sizes for skip [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32   stat_pu_inter_size_hist[16][16]; /* PU sizes for inter [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32   stat_pu_intra_size_hist[16][16]; /* PU sizes for intra [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32   stat_pu_bipred_size_hist[16][16]; /* PU sizes for bipred [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32   stat_pu_merge_size_hist[16][16]; /* PU sizes for merge [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32   stat_pu_zeromv_size_hist[16][16]; /* PU sizes for Zero MV [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32   stat_pu_zeromvfpel_size_hist[16][16]; /* PU sizes for Zero MV (includes subpel less than +/- 1 full pel units [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 last_sblk_pos_x; /* Last sblk pos of transform block in processing */
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 last_sblk_pos_y;
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 num_coded_sblk;
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 num_coded_coeffs;
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}statistics_t;
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_num_all_trans_blocks(TRANSFORM_TYPE e_trans_type, WORD32 c_idx);
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_num_trans_blocks(TRANSFORM_TYPE e_trans_type, WORD32 c_idx, WORD32 update_type);
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_sblk_and_coeff_histogram(TRANSFORM_TYPE e_trans_type, WORD32 t_skip_or_tq_bypass);
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_sblk_pos_init();
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_sblk_pos_update(TRANSFORM_TYPE e_trans_type, WORD32 t_skip_or_tq_bypass, UWORD32 sblk_x, UWORD32 sblk_y);
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_print_transform_statistics();
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_coeff_count();
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_pu_size(pu_t *ps_pu);
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_pu_skip_size(pu_t *ps_pu);
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif //STATISTICS_ENABLE
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if STATISTICS_ENABLE
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_INIT()  ihevcd_init_statistics();
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_ALL_TRANS(e_trans_type, c_idx) ihevcd_update_num_all_trans_blocks(e_trans_type, c_idx);
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ihevcd_update_num_trans_blocks(e_trans_type, c_idx, update_type);
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_PRINT() ihevcd_print_statistics();
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_INIT_SBLK_AND_COEFF_POS() ihevcd_sblk_pos_init();
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_LAST_SBLK_POS_UPDATE(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y) ihevcd_sblk_pos_update(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y);
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, t_skip_or_tq_bypass) ihevcd_update_sblk_and_coeff_histogram(e_trans_type, t_skip_or_tq_bypass);
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_COEFF_COUNT() ihevcd_update_coeff_count();
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_PU_SIZE(ps_pu) ihevcd_update_pu_size(ps_pu);
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_PU_SKIP_SIZE(ps_pu) ihevcd_update_pu_skip_size(ps_pu);
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_INIT()  ;
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_ALL_TRANS(e_trans_type, c_idx) ;
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ;
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_PRINT() ;
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_INIT_SBLK_AND_COEFF_POS() ;
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_LAST_SBLK_POS_UPDATE(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y) ;
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, t_skip_or_tq_bypass) ;
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_COEFF_COUNT() ;
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_PU_SIZE(ps_pu) ;
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_PU_SKIP_SIZE(ps_pu) ;
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif /* _IHEVCD_STATISTICS_H_ */
150