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 48namespace cv 49{ 50 51enum 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 59typedef unsigned long ulong; 60 61// class RBaseStream - base class for other reading streams. 62class RBaseStream 63{ 64public: 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 77protected: 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 96class RLByteStream : public RBaseStream 97{ 98public: 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 109class RMByteStream : public RLByteStream 110{ 111public: 112 virtual ~RMByteStream(); 113 114 int getWord(); 115 int getDWord(); 116}; 117 118// WBaseStream - base class for output streams 119class WBaseStream 120{ 121public: 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 132protected: 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 151class WLByteStream : public WBaseStream 152{ 153public: 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 165class WMByteStream : public WLByteStream 166{ 167public: 168 virtual ~WMByteStream(); 169 void putWord( int val ); 170 void putDWord( int val ); 171}; 172 173inline unsigned BSWAP(unsigned v) 174{ 175 return (v<<24)|((v&0xff00)<<8)|((v>>8)&0xff00)|((unsigned)v>>24); 176} 177 178bool bsIsBigEndian( void ); 179 180} 181 182#endif/*_BITSTRM_H_*/ 183