dcmdata/include/dccodec.h

00001 /* 00002 * 00003 * Copyright (C) 1994-2003, OFFIS 00004 * 00005 * This software and supporting documentation were developed by 00006 * 00007 * Kuratorium OFFIS e.V. 00008 * Healthcare Information and Communication Systems 00009 * Escherweg 2 00010 * D-26121 Oldenburg, Germany 00011 * 00012 * THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND OFFIS MAKES NO WARRANTY 00013 * REGARDING THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR 00014 * FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES OR 00015 * ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND 00016 * PERFORMANCE OF THE SOFTWARE IS WITH THE USER. 00017 * 00018 * Module: dcmdata 00019 * 00020 * Author: Andreas Barth 00021 * 00022 * Purpose: Interface of abstract class DcmCodec and the class DcmCodecStruct 00023 * 00024 * Last Update: $Author: joergr $ 00025 * Update Date: $Date: 2003/06/12 13:35:23 $ 00026 * Source File: $Source: /share/dicom/cvs-depot/dcmtk/dcmdata/include/dccodec.h,v $ 00027 * CVS/RCS Revision: $Revision: 1.15 $ 00028 * Status: $State: Exp $ 00029 * 00030 * CVS/RCS Log at end of file 00031 * 00032 */ 00033 00034 #ifndef DCCODEC_H 00035 #define DCCODEC_H 00036 00037 #include "osconfig.h" /* make sure OS specific configuration is included first */ 00038 #include "dctypes.h" 00039 #include "dcerror.h" 00040 #include "dcxfer.h" 00041 #include "oflist.h" 00042 00043 class DcmStack; 00044 class DcmRepresentationParameter; 00045 class DcmPixelSequence; 00046 class DcmPolymorphOBOW; 00047 class DcmItem; 00048 class DcmTagKey; 00049 00054 class DcmCodecParameter 00055 { 00056 public: 00058 DcmCodecParameter() {} 00059 00061 DcmCodecParameter(const DcmCodecParameter&) {} 00062 00064 virtual ~DcmCodecParameter() {} 00065 00070 virtual DcmCodecParameter *clone() const = 0; 00071 00075 virtual const char *className() const = 0; 00076 00077 }; 00078 00079 00090 class DcmCodec 00091 { 00092 public: 00094 DcmCodec() {} 00095 00106 virtual OFCondition decode( 00107 const DcmRepresentationParameter * fromRepParam, 00108 DcmPixelSequence * pixSeq, 00109 DcmPolymorphOBOW& uncompressedPixelData, 00110 const DcmCodecParameter * cp, 00111 const DcmStack& objStack) const = 0; 00112 00127 virtual OFCondition encode( 00128 const Uint16 * pixelData, 00129 const Uint32 length, 00130 const DcmRepresentationParameter * toRepParam, 00131 DcmPixelSequence * & pixSeq, 00132 const DcmCodecParameter *cp, 00133 DcmStack & objStack) const = 0; 00134 00149 virtual OFCondition encode( 00150 const E_TransferSyntax fromRepType, 00151 const DcmRepresentationParameter * fromRepParam, 00152 DcmPixelSequence * fromPixSeq, 00153 const DcmRepresentationParameter * toRepParam, 00154 DcmPixelSequence * & toPixSeq, 00155 const DcmCodecParameter * cp, 00156 DcmStack & objStack) const = 0; 00157 00165 virtual OFBool canChangeCoding( 00166 const E_TransferSyntax oldRepType, 00167 const E_TransferSyntax newRepType) const = 0; 00168 00169 00170 // static helper methods that have proven useful in codec classes derived from DcmCodec 00171 00179 static OFCondition insertStringIfMissing(DcmItem *dataset, const DcmTagKey& tag, const char *val); 00180 00189 static OFCondition convertToSecondaryCapture(DcmItem *dataset); 00190 00196 static OFCondition newInstance(DcmItem *dataset); 00197 00202 static OFCondition updateImageType(DcmItem *dataset); 00203 00204 }; 00205 00206 00211 class DcmCodecList 00212 { 00213 00214 public: 00215 00217 virtual ~DcmCodecList(); 00218 00233 static OFCondition registerCodec( 00234 const DcmCodec *aCodec, 00235 const DcmRepresentationParameter *aDefaultRepParam, 00236 const DcmCodecParameter *aCodecParameter); 00237 00243 static OFCondition deregisterCodec(const DcmCodec *aCodec); 00244 00253 static OFCondition updateCodecParameter( 00254 const DcmCodec *aCodec, 00255 const DcmCodecParameter *aCodecParameter); 00256 00269 static OFCondition decode( 00270 const DcmXfer & fromType, 00271 const DcmRepresentationParameter * fromParam, 00272 DcmPixelSequence * fromPixSeq, 00273 DcmPolymorphOBOW& uncompressedPixelData, 00274 DcmStack & pixelStack); 00275 00292 static OFCondition encode( 00293 const E_TransferSyntax fromRepType, 00294 const Uint16 * pixelData, 00295 const Uint32 length, 00296 const E_TransferSyntax toRepType, 00297 const DcmRepresentationParameter * toRepParam, 00298 DcmPixelSequence * & pixSeq, 00299 DcmStack & pixelStack); 00300 00318 static OFCondition encode( 00319 const E_TransferSyntax fromRepType, 00320 const DcmRepresentationParameter * fromParam, 00321 DcmPixelSequence * fromPixSeq, 00322 const E_TransferSyntax toRepType, 00323 const DcmRepresentationParameter * toRepParam, 00324 DcmPixelSequence * & toPixSeq, 00325 DcmStack & pixelStack); 00326 00327 00336 static OFBool canChangeCoding( 00337 const E_TransferSyntax fromRepType, 00338 const E_TransferSyntax toRepType); 00339 00340 private: 00341 00347 DcmCodecList( 00348 const DcmCodec *aCodec, 00349 const DcmRepresentationParameter *aDefaultRepParam, 00350 const DcmCodecParameter *aCodecParameter); 00351 00353 DcmCodecList(const DcmCodecList &); 00354 00356 DcmCodecList &operator=(const DcmCodecList &); 00357 00359 const DcmCodec * codec; 00360 00362 const DcmRepresentationParameter * defaultRepParam; 00363 00365 const DcmCodecParameter * codecParameter; 00366 00368 static OFList<DcmCodecList *> registeredCodecs; 00369 00370 #ifdef _REENTRANT 00371 00372 static OFReadWriteLock codecLock; 00373 #endif 00374 00375 // dummy friend declaration to prevent gcc from complaining 00376 // that this class only defines private constructors and has no friends. 00377 friend class DcmCodecListDummyFriend; 00378 }; 00379 00380 00381 #endif 00382 00383 /* 00384 ** CVS/RCS Log: 00385 ** $Log: dccodec.h,v $ 00386 ** Revision 1.15 2003/06/12 13:35:23 joergr 00387 ** Fixed inconsistent API documentation reported by Doxygen. 00388 ** 00389 ** Revision 1.14 2002/05/24 14:51:41 meichel 00390 ** Moved helper methods that are useful for different compression techniques 00391 ** from module dcmjpeg to module dcmdata 00392 ** 00393 ** Revision 1.13 2002/02/27 14:21:20 meichel 00394 ** Declare dcmdata read/write locks only when compiled in multi-thread mode 00395 ** 00396 ** Revision 1.12 2001/11/12 16:29:51 meichel 00397 ** Added dummy friend class declaration to singleton class DcmCodecList 00398 ** to keep gcc from squawking. 00399 ** 00400 ** Revision 1.11 2001/11/08 16:19:39 meichel 00401 ** Changed interface for codec registration. Now everything is thread-safe 00402 ** and multiple codecs can be registered for a single transfer syntax (e.g. 00403 ** one encoder and one decoder). 00404 ** 00405 ** Revision 1.10 2001/09/25 17:19:07 meichel 00406 ** Updated abstract class DcmCodecParameter for use with dcmjpeg. 00407 ** Added new function deregisterGlobalCodec(). 00408 ** 00409 ** Revision 1.9 2001/06/01 15:48:34 meichel 00410 ** Updated copyright header 00411 ** 00412 ** Revision 1.8 2001/05/25 09:53:51 meichel 00413 ** Modified DcmCodec::decode() interface, required for future dcmjpeg module. 00414 ** 00415 ** Revision 1.7 2000/09/27 08:19:54 meichel 00416 ** Minor changes in DcmCodec interface, required for future dcmjpeg module. 00417 ** 00418 ** Revision 1.6 2000/04/14 16:09:12 meichel 00419 ** Made function DcmCodec and related functions thread safe. 00420 ** registerGlobalCodec() should not be called anymore from the constructor 00421 ** of global objects. 00422 ** 00423 ** Revision 1.5 2000/03/08 16:26:11 meichel 00424 ** Updated copyright header. 00425 ** 00426 ** Revision 1.4 1999/03/31 09:24:31 meichel 00427 ** Updated copyright header in module dcmdata 00428 ** 00429 ** Revision 1.3 1998/07/15 15:48:43 joergr 00430 ** Removed several compiler warnings reported by gcc 2.8.1 with 00431 ** additional options, e.g. missing copy constructors and assignment 00432 ** operators, initialization of member variables in the body of a 00433 ** constructor instead of the member initialization list, hiding of 00434 ** methods by use of identical names, uninitialized member variables, 00435 ** missing const declaration of char pointers. Replaced tabs by spaces. 00436 ** 00437 ** Revision 1.2 1997/07/24 13:07:45 andreas 00438 ** - Make DcmCodec:canChangeCoding abstract 00439 ** 00440 ** Revision 1.1 1997/07/21 07:54:57 andreas 00441 ** - New environment for encapsulated pixel representations. DcmPixelData 00442 ** can contain different representations and uses codecs to convert 00443 ** between them. Codecs are derived from the DcmCodec class. New error 00444 ** codes are introduced for handling of representations. New internal 00445 ** value representation (only for ident()) for PixelData 00446 ** 00447 */


Generated on 4 Nov 2004 for OFFIS DCMTK Version 3.5.3 by Doxygen 1.3.8