123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- //*@@@+++@@@@******************************************************************
- //
- // Copyright © Microsoft Corp.
- // 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.
- //
- //*@@@---@@@@******************************************************************
- #ifndef WMI_COMMON_H
- #define WMI_COMMON_H
- /*************************************************************************
- // Common typedef's
- *************************************************************************/
- typedef enum { ENCODER = 0, DECODER = 1 } CODINGMODE;
- typedef enum tagBand
- {
- BAND_HEADER = 0,
- BAND_DC = 1,
- BAND_LP = 2,
- BAND_AC = 3,
- BAND_FL = 4
- } BAND;
- /*************************************************************************
- struct / class definitions
- *************************************************************************/
- //#define SIGNATURE_BYTES 8 // Bytes for GDI+ signature
- #define CODEC_VERSION 1
- #define CODEC_SUBVERSION 0
- #define CODEC_SUBVERSION_NEWSCALING_SOFT_TILES 1
- #define CODEC_SUBVERSION_NEWSCALING_HARD_TILES 9
- #define CONTEXTX 8
- #define CTDC 5
- #define NUMVLCTABLES 21 // CONTEXTX * 2 + CTDC
- #define AVG_NDIFF 3
- #define MAXTOTAL 32767 // 511 should be enough
- /** Quantization related defines **/
- #define SHIFTZERO 1 /* >= 0 */
- #define QPFRACBITS 2 /* or 0 only supported */
- /** adaptive huffman encoding / decoding struct **/
- typedef struct CAdaptiveHuffman
- {
- Int m_iNSymbols;
- const Int *m_pTable;
- const Int *m_pDelta, *m_pDelta1;
- Int m_iTableIndex;
- const short *m_hufDecTable;
- Bool m_bInitialize;
- //Char m_pLabel[8]; // for debugging - label attached to constructor
- Int m_iDiscriminant, m_iDiscriminant1;
- Int m_iUpperBound;
- Int m_iLowerBound;
- } CAdaptiveHuffman;
- /************************************************************************************
- Context structures
- ************************************************************************************/
- typedef struct CAdaptiveModel {
- Int m_iFlcState[2];
- Int m_iFlcBits[2];
- BAND m_band;
- } CAdaptiveModel;
- typedef struct CCBPModel {
- Int m_iCount0[2];
- Int m_iCount1[2];
- Int m_iState[2];
- } CCBPModel;
- /*************************************************************************
- globals
- *************************************************************************/
- extern Int grgiZigzagInv4x4_lowpass[];
- extern Int grgiZigzagInv4x4H[];
- extern Int grgiZigzagInv4x4V[];
- extern const Int gSignificantRunBin[];
- extern const Int gSignificantRunFixedLength[];
- static const Int cblkChromas[] = {0,4,8,16, 16,16,16, 0,0};
- /*************************************************************************
- function declarations
- *************************************************************************/
- // common utilities
- Void Clean (CAdaptiveHuffman *pAdHuff);
- CAdaptiveHuffman *Allocate (Int iNSymbols, CODINGMODE cm);
- /* Timing functions */
- void reset_timing(double *time);
- void report_timing(const char *s, double time);
- // static double timeperclock;
- /** adaptive model functions **/
- Void UpdateModelMB (COLORFORMAT cf, Int iChannels, Int iLaplacianMean[], CAdaptiveModel *m_pModel);
- /** adaptive huffman encoder / decoder functions **/
- Void Adapt (CAdaptiveHuffman *pAdHuff, Bool bFixedTables);
- Void AdaptFixed (CAdaptiveHuffman *pAdHuff);
- Void AdaptDiscriminant (CAdaptiveHuffman *pAdHuff);
- #ifndef _PREFAST_
- #pragma warning(disable:4068)
- #endif
- #endif // WMI_COMMON_H
|