summaryrefslogtreecommitdiff
path: root/src/mesh/assimp-master/contrib/Open3DGC/o3dgcArithmeticCodec.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesh/assimp-master/contrib/Open3DGC/o3dgcArithmeticCodec.h')
-rw-r--r--src/mesh/assimp-master/contrib/Open3DGC/o3dgcArithmeticCodec.h340
1 files changed, 0 insertions, 340 deletions
diff --git a/src/mesh/assimp-master/contrib/Open3DGC/o3dgcArithmeticCodec.h b/src/mesh/assimp-master/contrib/Open3DGC/o3dgcArithmeticCodec.h
deleted file mode 100644
index 6c1fb06..0000000
--- a/src/mesh/assimp-master/contrib/Open3DGC/o3dgcArithmeticCodec.h
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
-Copyright (c) 2004 Amir Said (said@ieee.org) & William A. Pearlman (pearlw@ecse.rpi.edu)
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright notice, this list of
- conditions and the following disclaimer in the documentation and/or other materials
- provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGE.
-*/
-
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// -
-// **************************** -
-// ARITHMETIC CODING EXAMPLES -
-// **************************** -
-// -
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// -
-// Fast arithmetic coding implementation -
-// -> 32-bit variables, 32-bit product, periodic updates, table decoding -
-// -
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// -
-// Version 1.00 - April 25, 2004 -
-// -
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// -
-// WARNING -
-// ========= -
-// -
-// The only purpose of this program is to demonstrate the basic principles -
-// of arithmetic coding. It is provided as is, without any express or -
-// implied warranty, without even the warranty of fitness for any particular -
-// purpose, or that the implementations are correct. -
-// -
-// Permission to copy and redistribute this code is hereby granted, provided -
-// that this warning and copyright notices are not removed or altered. -
-// -
-// Copyright (c) 2004 by Amir Said (said@ieee.org) & -
-// William A. Pearlman (pearlw@ecse.rpi.edu) -
-// -
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// -
-// A description of the arithmetic coding method used here is available in -
-// -
-// Lossless Compression Handbook, ed. K. Sayood -
-// Chapter 5: Arithmetic Coding (A. Said), pp. 101-152, Academic Press, 2003 -
-// -
-// A. Said, Introduction to Arithetic Coding Theory and Practice -
-// HP Labs report HPL-2004-76 - http://www.hpl.hp.com/techreports/ -
-// -
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-// - - Definitions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-#ifndef O3DGC_ARITHMETIC_CODEC
-#define O3DGC_ARITHMETIC_CODEC
-
-#include <stdio.h>
-#include "o3dgcCommon.h"
-#include <assimp/defs.h>
-
-namespace o3dgc
-{
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- // - - Class definitions - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- class Static_Bit_Model // static model for binary data
- {
- public:
-
- Static_Bit_Model(void);
-
- void set_probability_0(double); // set probability of symbol '0'
-
- private: // . . . . . . . . . . . . . . . . . . . . . .
- unsigned bit_0_prob;
- friend class Arithmetic_Codec;
- };
-
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- class Static_Data_Model // static model for general data
- {
- public:
-
- Static_Data_Model(void);
- ~Static_Data_Model(void);
-
- unsigned model_symbols(void) { return data_symbols; }
-
- void set_distribution(unsigned number_of_symbols,
- const double probability[] = 0); // 0 means uniform
-
- private: // . . . . . . . . . . . . . . . . . . . . . .
- unsigned * distribution, * decoder_table;
- unsigned data_symbols, last_symbol, table_size, table_shift;
- friend class Arithmetic_Codec;
- };
-
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- class Adaptive_Bit_Model // adaptive model for binary data
- {
- public:
-
- Adaptive_Bit_Model(void);
-
- void reset(void); // reset to equiprobable model
-
- private: // . . . . . . . . . . . . . . . . . . . . . .
- void update(void);
- unsigned update_cycle, bits_until_update;
- unsigned bit_0_prob, bit_0_count, bit_count;
- friend class Arithmetic_Codec;
- };
-
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- class Adaptive_Data_Model // adaptive model for binary data
- {
- public:
-
- Adaptive_Data_Model(void);
- Adaptive_Data_Model(unsigned number_of_symbols);
- ~Adaptive_Data_Model(void);
-
- unsigned model_symbols(void) { return data_symbols; }
-
- void reset(void); // reset to equiprobable model
- void set_alphabet(unsigned number_of_symbols);
-
- private: // . . . . . . . . . . . . . . . . . . . . . .
- void update(bool);
- unsigned * distribution, * symbol_count, * decoder_table;
- unsigned total_count, update_cycle, symbols_until_update;
- unsigned data_symbols, last_symbol, table_size, table_shift;
- friend class Arithmetic_Codec;
- };
-
-
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- // - - Encoder and decoder class - - - - - - - - - - - - - - - - - - - - - - -
-
- // Class with both the arithmetic encoder and decoder. All compressed data is
- // saved to a memory buffer
-
- class Arithmetic_Codec
- {
- public:
-
- Arithmetic_Codec(void);
- ~Arithmetic_Codec(void);
- Arithmetic_Codec(unsigned max_code_bytes,
- unsigned char * user_buffer = 0); // 0 = assign new
-
- unsigned char * buffer(void) { return code_buffer; }
-
- void set_buffer(unsigned max_code_bytes,
- unsigned char * user_buffer = 0); // 0 = assign new
-
- void start_encoder(void);
- void start_decoder(void);
- void read_from_file(FILE * code_file); // read code data, start decoder
-
- unsigned stop_encoder(void); // returns number of bytes used
- unsigned write_to_file(FILE * code_file); // stop encoder, write code data
- void stop_decoder(void);
-
- void put_bit(unsigned bit);
- unsigned get_bit(void);
-
- void put_bits(unsigned data, unsigned number_of_bits);
- unsigned get_bits(unsigned number_of_bits);
-
- void encode(unsigned bit,
- Static_Bit_Model &);
- unsigned decode(Static_Bit_Model &);
-
- void encode(unsigned data,
- Static_Data_Model &);
- unsigned decode(Static_Data_Model &);
-
- void encode(unsigned bit,
- Adaptive_Bit_Model &);
- unsigned decode(Adaptive_Bit_Model &);
-
- void encode(unsigned data,
- Adaptive_Data_Model &);
- unsigned decode(Adaptive_Data_Model &);
-
-// This section was added by K. Mammou
- void ExpGolombEncode(unsigned int symbol,
- int k,
- Static_Bit_Model & bModel0,
- Adaptive_Bit_Model & bModel1)
- {
- while(1)
- {
- if (symbol >= (unsigned int)(1<<k))
- {
- encode(1, bModel1);
- symbol = symbol - (1<<k);
- k++;
- }
- else
- {
- encode(0, bModel1); // now terminated zero of unary part
- while (k--) // next binary part
- {
- encode((signed short)((symbol>>k)&1), bModel0);
- }
- break;
- }
- }
- }
-
-
- unsigned ExpGolombDecode(int k,
- Static_Bit_Model & bModel0,
- Adaptive_Bit_Model & bModel1)
- {
- unsigned int l;
- int symbol = 0;
- int binary_symbol = 0;
- do
- {
- l=decode(bModel1);
- if (l==1)
- {
- symbol += (1<<k);
- k++;
- }
- }
- while (l!=0);
- while (k--) //next binary part
- if (decode(bModel0)==1)
- {
- binary_symbol |= (1<<k);
- }
- return (unsigned int) (symbol+binary_symbol);
- }
-//----------------------------------------------------------
-
- private: // . . . . . . . . . . . . . . . . . . . . . .
- void propagate_carry(void);
- void renorm_enc_interval(void);
- void renorm_dec_interval(void);
- unsigned char * code_buffer, * new_buffer, * ac_pointer;
- unsigned base, value, length; // arithmetic coding state
- unsigned buffer_size, mode; // mode: 0 = undef, 1 = encoder, 2 = decoder
- };
- inline long DecodeIntACEGC(Arithmetic_Codec & acd,
- Adaptive_Data_Model & mModelValues,
- Static_Bit_Model & bModel0,
- Adaptive_Bit_Model & bModel1,
- const unsigned long exp_k,
- const unsigned long M)
- {
- unsigned long uiValue = acd.decode(mModelValues);
- if (uiValue == M)
- {
- uiValue += acd.ExpGolombDecode(exp_k, bModel0, bModel1);
- }
- return UIntToInt(uiValue);
- }
- inline unsigned long DecodeUIntACEGC(Arithmetic_Codec & acd,
- Adaptive_Data_Model & mModelValues,
- Static_Bit_Model & bModel0,
- Adaptive_Bit_Model & bModel1,
- const unsigned long exp_k,
- const unsigned long M)
- {
- unsigned long uiValue = acd.decode(mModelValues);
- if (uiValue == M)
- {
- uiValue += acd.ExpGolombDecode(exp_k, bModel0, bModel1);
- }
- return uiValue;
- }
-
- inline void EncodeIntACEGC(long predResidual,
- Arithmetic_Codec & ace,
- Adaptive_Data_Model & mModelValues,
- Static_Bit_Model & bModel0,
- Adaptive_Bit_Model & bModel1,
- const unsigned long M)
- {
- unsigned long uiValue = IntToUInt(predResidual);
- if (uiValue < M)
- {
- ace.encode(uiValue, mModelValues);
- }
- else
- {
- ace.encode(M, mModelValues);
- ace.ExpGolombEncode(uiValue-M, 0, bModel0, bModel1);
- }
- }
- inline void EncodeUIntACEGC(long predResidual,
- Arithmetic_Codec & ace,
- Adaptive_Data_Model & mModelValues,
- Static_Bit_Model & bModel0,
- Adaptive_Bit_Model & bModel1,
- const unsigned long M)
- {
- unsigned long uiValue = (unsigned long) predResidual;
- if (uiValue < M)
- {
- ace.encode(uiValue, mModelValues);
- }
- else
- {
- ace.encode(M, mModelValues);
- ace.ExpGolombEncode(uiValue-M, 0, bModel0, bModel1);
- }
- }
-
-}
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-#endif
-