00001 /* 00002 * 00003 * Copyright (C) 1994-2010, OFFIS e.V. 00004 * All rights reserved. See COPYRIGHT file for details. 00005 * 00006 * This software and supporting documentation were developed by 00007 * 00008 * OFFIS e.V. 00009 * R&D Division Health 00010 * Escherweg 2 00011 * D-26121 Oldenburg, Germany 00012 * 00013 * 00014 * Module: dcmdata 00015 * 00016 * Author: Marco Eichelberg 00017 * 00018 * Purpose: zlib compression filter for output streams 00019 * 00020 * Last Update: $Author: joergr $ 00021 * Update Date: $Date: 2010-10-14 13:15:41 $ 00022 * CVS/RCS Revision: $Revision: 1.5 $ 00023 * Status: $State: Exp $ 00024 * 00025 * CVS/RCS Log at end of file 00026 * 00027 */ 00028 00029 #ifndef DCOSTRMZ_H 00030 #define DCOSTRMZ_H 00031 00032 #include "dcmtk/config/osconfig.h" 00033 00034 #ifdef WITH_ZLIB 00035 00036 #include "dcmtk/dcmdata/dcostrma.h" /* for DcmOutputFilter */ 00037 00038 BEGIN_EXTERN_C 00039 #include <zlib.h> 00040 END_EXTERN_C 00041 00046 extern OFGlobal<int> dcmZlibCompressionLevel; 00047 00050 class DcmZLibOutputFilter: public DcmOutputFilter 00051 { 00052 public: 00053 00055 DcmZLibOutputFilter(); 00056 00058 virtual ~DcmZLibOutputFilter(); 00059 00064 virtual OFBool good() const; 00065 00070 virtual OFCondition status() const; 00071 00077 virtual OFBool isFlushed() const; 00078 00086 virtual offile_off_t avail() const; 00087 00093 virtual offile_off_t write(const void *buf, offile_off_t buflen); 00094 00100 virtual void flush(); 00101 00108 virtual void append(DcmConsumer& consumer); 00109 00110 private: 00111 00113 DcmZLibOutputFilter(const DcmZLibOutputFilter&); 00114 00116 DcmZLibOutputFilter& operator=(const DcmZLibOutputFilter&); 00117 00122 void flushOutputBuffer(); 00123 00134 offile_off_t compress(const void *buf, offile_off_t buflen, OFBool finalize); 00135 00142 offile_off_t fillInputBuffer(const void *buf, offile_off_t buflen); 00143 00151 void compressInputBuffer(OFBool finalize); 00152 00154 DcmConsumer *current_; 00155 00157 z_streamp zstream_; 00158 00160 OFCondition status_; 00161 00163 OFBool flushed_; 00164 00166 unsigned char *inputBuf_; 00167 00169 offile_off_t inputBufStart_; 00170 00172 offile_off_t inputBufCount_; 00173 00175 unsigned char *outputBuf_; 00176 00178 offile_off_t outputBufStart_; 00179 00181 offile_off_t outputBufCount_; 00182 00183 }; 00184 00185 #endif 00186 #endif 00187 00188 /* 00189 * CVS/RCS Log: 00190 * $Log: dcostrmz.h,v $ 00191 * Revision 1.5 2010-10-14 13:15:41 joergr 00192 * Updated copyright header. Added reference to COPYRIGHT file. 00193 * 00194 * Revision 1.4 2008-06-23 12:09:13 joergr 00195 * Fixed inconsistencies in Doxygen API documentation. 00196 * 00197 * Revision 1.3 2007/02/19 16:06:09 meichel 00198 * Class DcmOutputStream and related classes are now safe for use with 00199 * large files (2 GBytes or more) if supported by compiler and operating system. 00200 * 00201 * Revision 1.2 2005/12/08 16:28:27 meichel 00202 * Changed include path schema for all DCMTK header files 00203 * 00204 * Revision 1.1 2002/08/27 16:55:37 meichel 00205 * Initial release of new DICOM I/O stream classes that add support for stream 00206 * compression (deflated little endian explicit VR transfer syntax) 00207 * 00208 * 00209 */ 00210