00001 00002 /*! 00003 *************************************************************************** 00004 * \file 00005 * biariencode.h 00006 * 00007 * \brief 00008 * Headerfile for binary arithmetic encoding routines 00009 * 00010 * \author 00011 * - Detlev Marpe 00012 * - Gabi Blaettermann 00013 * - Gunnar Marten 00014 * 00015 * Copyright (C) 2000 HEINRICH HERTZ INSTITUTE All Rights Reserved. 00016 * 00017 * \date 00018 * 21. Oct 2000 00019 ************************************************************************** 00020 */ 00021 00022 00023 #ifndef _BIARIENCOD_H_ 00024 #define _BIARIENCOD_H_ 00025 00026 00027 /************************************************************************ 00028 * D e f i n i t i o n s 00029 *********************************************************************** 00030 */ 00031 00032 // some definitions to increase the readability of the source code 00033 00034 #define B_BITS 10 // Number of bits to represent the whole coding interval 00035 #define BITS_TO_LOAD 16 00036 #define MAX_BITS 26 //(B_BITS + BITS_TO_LOAD) 00037 #define ONE 0x04000000 //(1 << MAX_BITS) 00038 #define ONE_M1 0x03FFFFFF //(ONE - 1) 00039 #define HALF 0x0200 //(1 << (B_BITS-1)) 00040 #define QUARTER 0x0100 //(1 << (B_BITS-2)) 00041 #define MIN_BITS_TO_GO 0 00042 #define B_LOAD_MASK 0xFFFF // ((1<<BITS_TO_LOAD) - 1) 00043 00044 int get_pic_bin_count(void); 00045 void reset_pic_bin_count(void); 00046 void set_pic_bin_count(EncodingEnvironmentPtr eep); 00047 00048 void arienco_start_encoding(EncodingEnvironmentPtr eep, unsigned char *code_buffer, int *code_len); 00049 void arienco_reset_EC(EncodingEnvironmentPtr eep); 00050 void arienco_done_encoding(EncodingEnvironmentPtr eep); 00051 void biari_init_context (BiContextTypePtr ctx, const char* ini); 00052 void rescale_cum_freq(BiContextTypePtr bi_ct); 00053 void biari_encode_symbol(EncodingEnvironmentPtr eep, signed short symbol, BiContextTypePtr bi_ct ); 00054 void biari_encode_symbol_eq_prob(EncodingEnvironmentPtr eep, signed short symbol); 00055 void biari_encode_symbol_final(EncodingEnvironmentPtr eep, signed short symbol); 00056 00057 /*! 00058 ************************************************************************ 00059 * \brief 00060 * Returns the number of currently written bits 00061 ************************************************************************ 00062 */ 00063 static inline int arienco_bits_written(EncodingEnvironmentPtr eep) 00064 { 00065 return (((*eep->Ecodestrm_len) + eep->Epbuf + 1) << 3) + (eep->Echunks_outstanding * BITS_TO_LOAD) + BITS_TO_LOAD - eep->Ebits_to_go; 00066 } 00067 00068 #endif // BIARIENCOD_H 00069