blob: be1b3bd7897d2b4460895cae25bfa5884d84b65a [file] [log] [blame]
//========================================================================
//
// JBIG2Stream.h
//
// Copyright 2002-2003 Glyph & Cog, LLC
//
//========================================================================
//========================================================================
//
// Modified under the Poppler project - http://poppler.freedesktop.org
//
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
// Copyright (C) 2009 David Benjamin <davidben@mit.edu>
// Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================
#ifndef JBIG2STREAM_H
#define JBIG2STREAM_H
#ifdef USE_GCC_PRAGMAS
#pragma interface
#endif
#include "goo/gtypes.h"
#include "Object.h"
#include "Stream.h"
class GooList;
class JBIG2Segment;
class JBIG2Bitmap;
class JArithmeticDecoder;
class JArithmeticDecoderStats;
class JBIG2HuffmanDecoder;
struct JBIG2HuffmanTable;
class JBIG2MMRDecoder;
//------------------------------------------------------------------------
class JBIG2Stream: public FilterStream {
public:
JBIG2Stream(Stream *strA, Object *globalsStreamA);
virtual ~JBIG2Stream();
virtual StreamKind getKind() { return strJBIG2; }
virtual void reset();
virtual void close();
virtual Goffset getPos();
virtual int getChar();
virtual int lookChar();
virtual GooString *getPSFilter(int psLevel, const char *indent);
virtual GBool isBinary(GBool last = gTrue);
private:
virtual GBool hasGetChars() { return true; }
virtual int getChars(int nChars, Guchar *buffer);
void readSegments();
GBool readSymbolDictSeg(Guint segNum, Guint length,
Guint *refSegs, Guint nRefSegs);
void readTextRegionSeg(Guint segNum, GBool imm,
GBool lossless, Guint length,
Guint *refSegs, Guint nRefSegs);
JBIG2Bitmap *readTextRegion(GBool huff, GBool refine,
int w, int h,
Guint numInstances,
Guint logStrips,
int numSyms,
JBIG2HuffmanTable *symCodeTab,
Guint symCodeLen,
JBIG2Bitmap **syms,
Guint defPixel, Guint combOp,
Guint transposed, Guint refCorner,
int sOffset,
JBIG2HuffmanTable *huffFSTable,
JBIG2HuffmanTable *huffDSTable,
JBIG2HuffmanTable *huffDTTable,
JBIG2HuffmanTable *huffRDWTable,
JBIG2HuffmanTable *huffRDHTable,
JBIG2HuffmanTable *huffRDXTable,
JBIG2HuffmanTable *huffRDYTable,
JBIG2HuffmanTable *huffRSizeTable,
Guint templ,
int *atx, int *aty);
void readPatternDictSeg(Guint segNum, Guint length);
void readHalftoneRegionSeg(Guint segNum, GBool imm,
GBool lossless, Guint length,
Guint *refSegs, Guint nRefSegs);
void readGenericRegionSeg(Guint segNum, GBool imm,
GBool lossless, Guint length);
void mmrAddPixels(int a1, int blackPixels,
int *codingLine, int *a0i, int w);
void mmrAddPixelsNeg(int a1, int blackPixels,
int *codingLine, int *a0i, int w);
JBIG2Bitmap *readGenericBitmap(GBool mmr, int w, int h,
int templ, GBool tpgdOn,
GBool useSkip, JBIG2Bitmap *skip,
int *atx, int *aty,
int mmrDataLength);
void readGenericRefinementRegionSeg(Guint segNum, GBool imm,
GBool lossless, Guint length,
Guint *refSegs,
Guint nRefSegs);
JBIG2Bitmap *readGenericRefinementRegion(int w, int h,
int templ, GBool tpgrOn,
JBIG2Bitmap *refBitmap,
int refDX, int refDY,
int *atx, int *aty);
void readPageInfoSeg(Guint length);
void readEndOfStripeSeg(Guint length);
void readProfilesSeg(Guint length);
void readCodeTableSeg(Guint segNum, Guint length);
void readExtensionSeg(Guint length);
JBIG2Segment *findSegment(Guint segNum);
void discardSegment(Guint segNum);
void resetGenericStats(Guint templ,
JArithmeticDecoderStats *prevStats);
void resetRefinementStats(Guint templ,
JArithmeticDecoderStats *prevStats);
void resetIntStats(int symCodeLen);
GBool readUByte(Guint *x);
GBool readByte(int *x);
GBool readUWord(Guint *x);
GBool readULong(Guint *x);
GBool readLong(int *x);
Object globalsStream;
Guint pageW, pageH, curPageH;
Guint pageDefPixel;
JBIG2Bitmap *pageBitmap;
Guint defCombOp;
GooList *segments; // [JBIG2Segment]
GooList *globalSegments; // [JBIG2Segment]
Stream *curStr;
Guchar *dataPtr;
Guchar *dataEnd;
JArithmeticDecoder *arithDecoder;
JArithmeticDecoderStats *genericRegionStats;
JArithmeticDecoderStats *refinementRegionStats;
JArithmeticDecoderStats *iadhStats;
JArithmeticDecoderStats *iadwStats;
JArithmeticDecoderStats *iaexStats;
JArithmeticDecoderStats *iaaiStats;
JArithmeticDecoderStats *iadtStats;
JArithmeticDecoderStats *iaitStats;
JArithmeticDecoderStats *iafsStats;
JArithmeticDecoderStats *iadsStats;
JArithmeticDecoderStats *iardxStats;
JArithmeticDecoderStats *iardyStats;
JArithmeticDecoderStats *iardwStats;
JArithmeticDecoderStats *iardhStats;
JArithmeticDecoderStats *iariStats;
JArithmeticDecoderStats *iaidStats;
JBIG2HuffmanDecoder *huffDecoder;
JBIG2MMRDecoder *mmrDecoder;
};
#endif