Move the sources to trunk
[opencv] / otherlibs / VlGrFmts / grfmt_jpeg.h
1 /*M///////////////////////////////////////////////////////////////////////////////////////
2 //
3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4 //
5 //  By downloading, copying, installing or using the software you agree to this license.
6 //  If you do not agree to this license, do not download, install,
7 //  copy or use the software.
8 //
9 //
10 //                        Intel License Agreement
11 //                For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2000, Intel Corporation, all rights reserved.
14 // Third party copyrights are property of their respective owners.
15 //
16 // Redistribution and use in source and binary forms, with or without modification,
17 // are permitted provided that the following conditions are met:
18 //
19 //   * Redistribution's of source code must retain the above copyright notice,
20 //     this list of conditions and the following disclaimer.
21 //
22 //   * Redistribution's in binary form must reproduce the above copyright notice,
23 //     this list of conditions and the following disclaimer in the documentation
24 //     and/or other materials provided with the distribution.
25 //
26 //   * The name of Intel Corporation may not be used to endorse or promote products
27 //     derived from this software without specific prior written permission.
28 //
29 // This software is provided by the copyright holders and contributors "as is" and
30 // any express or implied warranties, including, but not limited to, the implied
31 // warranties of merchantability and fitness for a particular purpose are disclaimed.
32 // In no event shall the Intel Corporation or contributors be liable for any direct,
33 // indirect, incidental, special, exemplary, or consequential damages
34 // (including, but not limited to, procurement of substitute goods or services;
35 // loss of use, data, or profits; or business interruption) however caused
36 // and on any theory of liability, whether in contract, strict liability,
37 // or tort (including negligence or otherwise) arising in any way out of
38 // the use of this software, even if advised of the possibility of such damage.
39 //
40 //M*/
41
42 #ifndef _RD_JPEG_H_
43 #define _RD_JPEG_H_
44
45 #include "grfmt_base.h"
46 #include "bitstrm.h"
47
48 class RMJpegBitStream : public RMBitStream
49 {
50 public:
51     RMByteStream  m_low_strm;
52     
53     RMJpegBitStream();
54     ~RMJpegBitStream();
55
56     virtual bool  Open( const char* filename );
57     virtual void  Close();
58
59     void  Flush(); // flushes high-level bit stream
60     void  AlignOnByte();
61     int   FindMarker();
62
63 protected:
64     virtual void  ReadBlock();
65 };
66
67
68 //////////////////// JPEG reader /////////////////////
69
70 class GrFmtJpegReader : public GrFmtReader
71 {
72 public:
73     
74     GrFmtJpegReader();
75     ~GrFmtJpegReader();
76
77     int   GetColor();
78     bool  ReadHeader();
79     bool  ReadData( uchar* data, int step, int color );
80     void  Close();
81
82 protected:
83
84     int   m_offset; // offset of first scan
85     int   m_version; // JFIF version
86     int   m_planes; // 3 (YCrCb) or 1 (Gray)
87     int   m_precision; // 8 or 12-bit per sample
88     int   m_type; // SOF type
89     int   m_MCUs; // MCUs in restart interval
90     int   m_ss, m_se, m_ah, m_al; // progressive JPEG parameters
91     
92     // information about each component
93     struct cmp_info
94     {
95         char h;  // horizontal sampling factor
96         char v;  // vertical   sampling factor
97         char tq; // quantization table index
98         char td, ta; // DC & AC huffman tables
99         int  dc_pred; // DC predictor
100     };
101     
102     cmp_info m_ci[3];
103
104     int     m_tq[4][64];
105     bool    m_is_tq[4];
106     
107     short*  m_td[4];
108     bool    m_is_td[4];
109     
110     short*  m_ta[4];
111     bool    m_is_ta[4];
112     
113     RMJpegBitStream   m_strm;
114
115 protected:
116
117     bool  load_quant_tables( int length );
118     bool  load_huffman_tables( int length );
119     void  ProcessScan( int* idx, int ns, uchar* data, int step, int color );
120     void  ResetDecoder();
121     void  GetBlock( int* block, int c );
122 };
123
124 #endif/*_RD_JPEG_H_*/
125