1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _JBIG2_SEGMENT_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _JBIG2_SEGMENT_H_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "JBig2_Define.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "JBig2_SymbolDict.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "JBig2_PatternDict.h"
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "JBig2_Module.h"
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "JBig2_HuffmanTable.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JBIG2_GET_INT32(buf) (((buf)[0]<<24) | ((buf)[1]<<16) | ((buf)[2]<<8) | (buf)[3])
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JBIG2_GET_INT16(buf) (((buf)[0]<<8) | (buf)[1])
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_SEGMENT_HEADER_UNPARSED,
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_SEGMENT_DATA_UNPARSED,
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_SEGMENT_PARSE_COMPLETE,
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_SEGMENT_PAUSED,
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_SEGMENT_ERROR
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} JBig2_SegmentState;
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_VOID_POINTER	= 0,
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_IMAGE_POINTER,
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_SYMBOL_DICT_POINTER,
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_PATTERN_DICT_POINTER,
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBIG2_HUFFMAN_TABLE_POINTER
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} JBig2_ResultType;
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJBig2_Segment : public CJBig2_Object
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CJBig2_Segment();
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CJBig2_Segment();
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void init();
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void clean();
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD m_dwNumber;
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    union {
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        struct {
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_BYTE type					:	6;
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_BYTE page_association_size	:	1;
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_BYTE deferred_non_retain		:	1;
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        } s;
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_BYTE c;
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } m_cFlags;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32 m_nReferred_to_segment_count;
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD * m_pReferred_to_segment_numbers;
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD m_dwPage_association;
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD m_dwData_length;
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD m_dwHeader_Length;
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BYTE  *m_pData;
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBig2_SegmentState m_State;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    JBig2_ResultType m_nResultType;
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    union {
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CJBig2_SymbolDict	*sd;
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CJBig2_PatternDict	*pd;
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CJBig2_Image		*im;
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CJBig2_HuffmanTable	*ht;
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_LPVOID			 vd;
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } m_Result;
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
69