/*!
 **************************************************************************
 *  \file enc_statistics.h
 *
 *  \brief
 *     statistics reports for the encoding process.
 *
 *  \author
 *      Main contributors (see contributors.h for copyright, address and affiliation details)
 *      - Alexis Tourapis                 <alexismt@ieee.org>
 *      - Karsten S�hring                 <suehring@hhi.de>
 *
 **************************************************************************
 */

#ifndef _ENC_STATISTICS_H_
#define _ENC_STATISTICS_H_
#include "global.h"

struct stat_parameters
{
  float  bitr;                        //!< bit rate for current frame, used only for output til terminal
  float  bitrate;                     //!< average bit rate for the sequence except first frame
  int64  bit_ctr;                     //!< counter for bit usage
  int64  bit_ctr_n;                   //!< bit usage for the current frame
  int64  bit_ctr_emulationprevention; //!< stored bits needed to prevent start code emulation
  int    bit_slice;                   //!< number of bits in current slice
  int    stored_bit_slice;            //!< keep number of bits in current slice (to restore status in case of MB re-encoding)  
  int    b8_mode_0_use     [NUM_SLICE_TYPES][2];
  int64  mode_use_transform[NUM_SLICE_TYPES][MAXMODE][2];
  int64  intra_chroma_mode[4];

  // B pictures
  int     NumberBFrames;

  int     frame_counter;
  int64   quant               [NUM_SLICE_TYPES];
  int64   num_macroblocks     [NUM_SLICE_TYPES];
  int     frame_ctr           [NUM_SLICE_TYPES];
  int64   bit_counter         [NUM_SLICE_TYPES];
  float   bitrate_st          [NUM_SLICE_TYPES];
  int64   mode_use            [NUM_SLICE_TYPES][MAXMODE]; //!< Macroblock mode usage for Intra frames
  int64   bit_use_mode        [NUM_SLICE_TYPES][MAXMODE]; //!< statistics of bit usage  
  int64   bit_use_mb_type     [NUM_SLICE_TYPES];
  int64   bit_use_header      [NUM_SLICE_TYPES];
  int64   tmp_bit_use_cbp     [NUM_SLICE_TYPES];
  int64   bit_use_coeffC      [NUM_SLICE_TYPES];
  int64   bit_use_coeff    [3][NUM_SLICE_TYPES];  
  int64   bit_use_delta_quant [NUM_SLICE_TYPES];
  int64   bit_use_stuffingBits[NUM_SLICE_TYPES];

  int   bit_ctr_parametersets;
  int   bit_ctr_parametersets_n;
  int64 bit_ctr_filler_data;
  int64 bit_ctr_filler_data_n;

};
typedef struct stat_parameters StatParameters;

#endif