diff options
author | Johannes Schickel | 2013-08-11 23:36:57 +0200 |
---|---|---|
committer | Johannes Schickel | 2013-09-16 15:55:36 +0200 |
commit | ac66cc921904387518f2e0b2a14670e9598defe4 (patch) | |
tree | f539abdbbbc443f711e7dbf164fc6f72ee6e6747 /graphics/decoders/jpeg.h | |
parent | 9d9833537f98a24b9be37e426917856bb1193be1 (diff) | |
download | scummvm-rg350-ac66cc921904387518f2e0b2a14670e9598defe4.tar.gz scummvm-rg350-ac66cc921904387518f2e0b2a14670e9598defe4.tar.bz2 scummvm-rg350-ac66cc921904387518f2e0b2a14670e9598defe4.zip |
GRAPHICS: Implement JPEGDecoder based on libjpeg.
Diffstat (limited to 'graphics/decoders/jpeg.h')
-rw-r--r-- | graphics/decoders/jpeg.h | 83 |
1 files changed, 6 insertions, 77 deletions
diff --git a/graphics/decoders/jpeg.h b/graphics/decoders/jpeg.h index d59b72adf4..53e7bb10c8 100644 --- a/graphics/decoders/jpeg.h +++ b/graphics/decoders/jpeg.h @@ -40,11 +40,6 @@ class SeekableReadStream; namespace Graphics { -struct PixelFormat; - -#define JPEG_MAX_QUANT_TABLES 4 -#define JPEG_MAX_HUFF_TABLES 2 - class JPEGDecoder : public ImageDecoder { public: JPEGDecoder(); @@ -55,85 +50,19 @@ public: bool loadStream(Common::SeekableReadStream &str); const Surface *getSurface() const; - bool isLoaded() const { return _numComp && _w && _h; } - uint16 getWidth() const { return _w; } - uint16 getHeight() const { return _h; } - const Surface *getComponent(uint c) const; + const Surface &getYComponent() const { return _yComponent; } + const Surface &getUComponent() const { return _uComponent; } + const Surface &getVComponent() const { return _vComponent; } private: - Common::SeekableReadStream *_stream; - uint16 _w, _h; - uint16 _restartInterval; - // mutable so that we can convert to RGB only during // a getSurface() call while still upholding the // const requirement in other ImageDecoders mutable Graphics::Surface *_rgbSurface; - // Image components - uint8 _numComp; - struct Component { - // Global values - uint8 id; - uint8 factorH; - uint8 factorV; - uint8 quantTableSelector; - - // Scan specific values - uint8 DCentropyTableSelector; - uint8 ACentropyTableSelector; - int16 DCpredictor; - - // Result image for this component - Surface surface; - }; - - Component *_components; - - // Scan components - uint8 _numScanComp; - Component **_scanComp; - Component *_currentComp; - - // Maximum sampling factors, used to calculate the interleaving of the MCU - uint8 _maxFactorV; - uint8 _maxFactorH; - - // Quantization tables - uint16 *_quant[JPEG_MAX_QUANT_TABLES]; - - // Huffman tables - struct HuffmanTable { - uint8 count; - uint8 *values; - uint8 *sizes; - uint16 *codes; - } _huff[2 * JPEG_MAX_HUFF_TABLES]; - - // Marker read functions - bool readJFIF(); - bool readSOF0(); - bool readDHT(); - bool readSOS(); - bool readDQT(); - bool readDRI(); - - // Helper functions - bool readMCU(uint16 xMCU, uint16 yMCU); - bool readDataUnit(uint16 x, uint16 y); - int16 readDC(); - void readAC(int16 *out); - int16 readSignedBits(uint8 numBits); - - // Huffman decoding - uint8 readHuff(uint8 table); - uint8 readBit(); - uint8 _bitsData; - uint8 _bitsNumber; - - // Inverse Discrete Cosine Transformation - static void idct1D8x8(int32 src[8], int32 dest[64], int32 ps, int32 half); - static void idct2D8x8(int32 block[64]); + Graphics::Surface _yComponent; + Graphics::Surface _uComponent; + Graphics::Surface _vComponent; }; } // End of Graphics namespace |