Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | Related Pages

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 29 Apr 2005 for OFFIS DCMTK Version 3.5.3 by Doxygen 1.4.2