/****************************************************************************** * * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ /** ******************************************************************************* * @file * ih264e_statistics.h * * @brief * Contains macros for generating stats about h264 encoder * * @author * ittiam * * @remarks * None * ******************************************************************************* */ #ifndef IH264E_STATISTICS_H_ #define IH264E_STATISTICS_H_ #if CAVLC_LEVEL_STATS /*****************************************************************************/ /* Extern global declarations */ /*****************************************************************************/ /** ****************************************************************************** * @brief In cavlc encoding, a lut is used for encoding levels. It is not possible * to use look up for all possible levels. The extent to which look up is generated * is based on the statistics that were collected in the following global variables. * * gu4_cavlc_level_bin_lt_4 represents the number coefficients with abs(level) < 4 * gu4_cavlc_level_bin_lt_16 represents the number coefficients with 4 < abs(level) < 16 * gu4_cavlc_level_bin_lt_32 represents the number coefficients with 16 < abs(level) < 32 * and so on ... * ****************************************************************************** */ extern UWORD32 gu4_cavlc_level_bin_lt_4; extern UWORD32 gu4_cavlc_level_bin_lt_16; extern UWORD32 gu4_cavlc_level_bin_lt_32; extern UWORD32 gu4_cavlc_level_bin_lt_64; extern UWORD32 gu4_cavlc_level_bin_lt_128; extern UWORD32 gu4_cavlc_level_bin_else_where; extern UWORD32 gu4_cavlc_level_lut_hit_rate; /*****************************************************************************/ /* Extern function declarations */ /*****************************************************************************/ /** ****************************************************************************** * @brief print cavlc stats ****************************************************************************** */ void print_cavlc_level_stats(void); #define GATHER_CAVLC_STATS1() \ if (u4_abs_level < 4)\ gu4_cavlc_level_bin_lt_4 ++; \ else if (u4_abs_level < 16) \ gu4_cavlc_level_bin_lt_16 ++; \ else if (u4_abs_level < 32) \ gu4_cavlc_level_bin_lt_32 ++; \ else if (u4_abs_level < 64) \ gu4_cavlc_level_bin_lt_64 ++; \ else if (u4_abs_level < 128) \ gu4_cavlc_level_bin_lt_128 ++; \ else \ gu4_cavlc_level_bin_else_where ++; #define GATHER_CAVLC_STATS2() \ gu4_cavlc_level_lut_hit_rate ++; #else #define GATHER_CAVLC_STATS1() #define GATHER_CAVLC_STATS2() #endif #if GATING_STATS /*****************************************************************************/ /* Extern global declarations */ /*****************************************************************************/ /** ****************************************************************************** * @brief During encoding at fastest preset, some times if the inter threshold * is lesser than the predefined threshold, intra analysis is not done. The * below variable keeps track of the number of mb for which intra analysis is not * done * ****************************************************************************** */ extern UWORD32 gu4_mb_gated_cnt; /*****************************************************************************/ /* Extern function declarations */ /*****************************************************************************/ /** ****************************************************************************** * @brief print gating stats ****************************************************************************** */ void print_gating_stats(void); #define GATHER_GATING_STATS() \ gu4_mb_gated_cnt ++; #else #define GATHER_GATING_STATS() #endif #endif /* IH264E_STATISTICS_H_ */