1 // vil_j2k: Written by Rob Radtke (rob@) and Harry Voorhees (hlv@) of 2 // Stellar Science Ltd. Co. (stellarscience.com) for 3 // Air Force Research Laboratory, 2005. 4 // Do not remove the following notice 5 // Modifications approved for public release, distribution unlimited 6 // DISTAR Case 14074 7 // 8 #ifndef NCSJPCVILIOSTREAM_H 9 #define NCSJPCVILIOSTREAM_H 10 11 #include <NCSJPCIOStream.h> 12 13 #include <vil/vil_stream.h> 14 15 /** 16 * Wrapper class that allows you to effectively "convert" a vil_stream 17 * to a CNCSJPCIOStream. This class is used by vil_j2k_image to read JPEG 2000 18 * imagery. A couple of notes: 19 * 1) This stream's home position (ie. the place it goes when you call Seek(0,START), 20 * is the current position of the stream that is passed to Open() at the time of that call. 21 * \sa Open() for more info. 22 * 23 * Known Issues: 24 * 1) As of 2/24/05, the writing capability of this class has not been tested. In 25 * theory it should work just fine though. 26 * 27 * 2) It is necessary to provide a unique string name to an open CNCSJPCIO 28 * stream. The original code always used the same name "VIL". The result is 29 * that all resources access the same J2K data, since the ecw library 30 * accesses streams by name. Only one stream with the same name can exist, 31 * which is the first one opened with that name. The fix is to provide a 32 * unique name, based on a static unsigned short integer that is maintained 33 * and appended to the stream name prefix. JLM April 13, 2009 34 */ 35 class CNCSJPCVilIOStream : public CNCSJPCIOStream 36 { 37 public: 38 CNCSJPCVilIOStream(); 39 ~CNCSJPCVilIOStream(); 40 41 /** 42 * Pass me the stream you want me to wrap. stream->tell() at the time 43 * of this function call will become my home position. see \sa mHomePos for 44 * more details on what that means. 45 */ 46 virtual CNCSError Open( vil_stream* stream, bool bWrite = false ); 47 48 virtual CNCSError Close(); 49 50 virtual bool NCS_FASTCALL Seek (); 51 52 virtual bool NCS_FASTCALL Seek (INT64 offset, Origin origin = CURRENT); 53 54 virtual INT64 NCS_FASTCALL Tell(); 55 56 virtual INT64 NCS_FASTCALL Size(); 57 58 virtual bool NCS_FASTCALL Read (void* buffer, UINT32 count); 59 60 virtual bool NCS_FASTCALL Write (void* buffer, UINT32 count); 61 62 protected: 63 /** 64 * The stream I get all my data from (and write too) 65 */ 66 vil_stream* mVilStream; 67 /** 68 * This position is my home position (ie. mVilStream->tell() when it was 69 * passed into me). All Seek()'s with an origin of START will be relative 70 * to me. Tell() is the position relative to this position etc. 71 */ 72 vil_streampos mHomePos; 73 74 static unsigned short mId; /*unique id */ 75 }; 76 77 #endif //NCSJPCVILIOSTREAM_H 78