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 // License Agreement 11 // For Open Source Computer Vision Library 12 // 13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. 14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved. 15 // Third party copyrights are property of their respective owners. 16 // 17 // Redistribution and use in source and binary forms, with or without modification, 18 // are permitted provided that the following conditions are met: 19 // 20 // * Redistribution's of source code must retain the above copyright notice, 21 // this list of conditions and the following disclaimer. 22 // 23 // * Redistribution's in binary form must reproduce the above copyright notice, 24 // this list of conditions and the following disclaimer in the documentation 25 // and/or other materials provided with the distribution. 26 // 27 // * The name of the copyright holders may not be used to endorse or promote products 28 // derived from this software without specific prior written permission. 29 // 30 // This software is provided by the copyright holders and contributors "as is" and 31 // any express or implied warranties, including, but not limited to, the implied 32 // warranties of merchantability and fitness for a particular purpose are disclaimed. 33 // In no event shall the Intel Corporation or contributors be liable for any direct, 34 // indirect, incidental, special, exemplary, or consequential damages 35 // (including, but not limited to, procurement of substitute goods or services; 36 // loss of use, data, or profits; or business interruption) however caused 37 // and on any theory of liability, whether in contract, strict liability, 38 // or tort (including negligence or otherwise) arising in any way out of 39 // the use of this software, even if advised of the possibility of such damage. 40 // 41 //M*/ 42 43 #ifndef _BITSTRM_H_ 44 #define _BITSTRM_H_ 45 46 #include <stdio.h> 47 48 namespace cv 49 { 50 51 enum 52 { 53 RBS_THROW_EOS=-123, // <end of stream> exception code 54 RBS_THROW_FORB=-124, // <forrbidden huffman code> exception code 55 RBS_HUFF_FORB=2047, // forrbidden huffman code "value" 56 RBS_BAD_HEADER=-125 // invalid header 57 }; 58 59 typedef unsigned long ulong; 60 61 // class RBaseStream - base class for other reading streams. 62 class RBaseStream 63 { 64 public: 65 //methods 66 RBaseStream(); 67 virtual ~RBaseStream(); 68 69 virtual bool open( const String& filename ); 70 virtual bool open( const Mat& buf ); 71 virtual void close(); 72 bool isOpened(); 73 void setPos( int pos ); 74 int getPos(); 75 void skip( int bytes ); 76 77 protected: 78 79 bool m_allocated; 80 uchar* m_start; 81 uchar* m_end; 82 uchar* m_current; 83 FILE* m_file; 84 int m_block_size; 85 int m_block_pos; 86 bool m_is_opened; 87 88 virtual void readBlock(); 89 virtual void release(); 90 virtual void allocate(); 91 }; 92 93 94 // class RLByteStream - uchar-oriented stream. 95 // l in prefix means that the least significant uchar of a multi-uchar value goes first 96 class RLByteStream : public RBaseStream 97 { 98 public: 99 virtual ~RLByteStream(); 100 101 int getByte(); 102 int getBytes( void* buffer, int count ); 103 int getWord(); 104 int getDWord(); 105 }; 106 107 // class RMBitStream - uchar-oriented stream. 108 // m in prefix means that the most significant uchar of a multi-uchar value go first 109 class RMByteStream : public RLByteStream 110 { 111 public: 112 virtual ~RMByteStream(); 113 114 int getWord(); 115 int getDWord(); 116 }; 117 118 // WBaseStream - base class for output streams 119 class WBaseStream 120 { 121 public: 122 //methods 123 WBaseStream(); 124 virtual ~WBaseStream(); 125 126 virtual bool open( const String& filename ); 127 virtual bool open( std::vector<uchar>& buf ); 128 virtual void close(); 129 bool isOpened(); 130 int getPos(); 131 132 protected: 133 134 uchar* m_start; 135 uchar* m_end; 136 uchar* m_current; 137 int m_block_size; 138 int m_block_pos; 139 FILE* m_file; 140 bool m_is_opened; 141 std::vector<uchar>* m_buf; 142 143 virtual void writeBlock(); 144 virtual void release(); 145 virtual void allocate(); 146 }; 147 148 149 // class WLByteStream - uchar-oriented stream. 150 // l in prefix means that the least significant uchar of a multi-byte value goes first 151 class WLByteStream : public WBaseStream 152 { 153 public: 154 virtual ~WLByteStream(); 155 156 void putByte( int val ); 157 void putBytes( const void* buffer, int count ); 158 void putWord( int val ); 159 void putDWord( int val ); 160 }; 161 162 163 // class WLByteStream - uchar-oriented stream. 164 // m in prefix means that the least significant uchar of a multi-byte value goes last 165 class WMByteStream : public WLByteStream 166 { 167 public: 168 virtual ~WMByteStream(); 169 void putWord( int val ); 170 void putDWord( int val ); 171 }; 172 173 inline unsigned BSWAP(unsigned v) 174 { 175 return (v<<24)|((v&0xff00)<<8)|((v>>8)&0xff00)|((unsigned)v>>24); 176 } 177 178 bool bsIsBigEndian( void ); 179 180 } 181 182 #endif/*_BITSTRM_H_*/ 183