dcmjpeg/include/dcmtk/dcmjpeg/djcodece.h

00001 /*
00002  *
00003  *  Copyright (C) 2001-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:  dcmjpeg
00015  *
00016  *  Author:  Marco Eichelberg, Norbert Olges
00017  *
00018  *  Purpose: abstract codec class for JPEG encoders.
00019  *
00020  *  Last Update:      $Author: joergr $
00021  *  Update Date:      $Date: 2010-10-14 13:17:17 $
00022  *  CVS/RCS Revision: $Revision: 1.10 $
00023  *  Status:           $State: Exp $
00024  *
00025  *  CVS/RCS Log at end of file
00026  *
00027  */
00028 
00029 #ifndef DJCODEC_H
00030 #define DJCODEC_H
00031 
00032 #include "dcmtk/config/osconfig.h"
00033 #include "dcmtk/ofstd/oftypes.h"
00034 #include "dcmtk/dcmdata/dccodec.h"    /* for class DcmCodec */
00035 #include "dcmtk/dcmjpeg/djutils.h"    /* for enums */
00036 #include "dcmtk/ofstd/oflist.h"
00037 #include "dcmtk/ofstd/ofstring.h"     /* for class OFString */
00038 
00039 class DataInterface;
00040 class DJEncoder;
00041 class DcmDataset;
00042 class DJCodecParameter;
00043 class DJDecoder;
00044 class DcmItem;
00045 class DcmPixelItem;
00046 class DicomImage;
00047 class DcmTagKey;
00048 
00049 
00057 class DJCodecEncoder : public DcmCodec
00058 {
00059 public:
00060 
00062   DJCodecEncoder();
00063 
00065   virtual ~DJCodecEncoder();
00066 
00077   virtual OFCondition decode(
00078     const DcmRepresentationParameter * fromRepParam,
00079     DcmPixelSequence * pixSeq,
00080     DcmPolymorphOBOW& uncompressedPixelData,
00081     const DcmCodecParameter * cp,
00082     const DcmStack& objStack) const;
00083 
00109   virtual OFCondition decodeFrame(
00110     const DcmRepresentationParameter * fromParam,
00111     DcmPixelSequence * fromPixSeq,
00112     const DcmCodecParameter * cp,
00113     DcmItem *dataset,
00114     Uint32 frameNo,
00115     Uint32& startFragment,
00116     void *buffer,
00117     Uint32 bufSize,
00118     OFString& decompressedColorModel) const;
00119 
00134   virtual OFCondition encode(
00135     const Uint16 * pixelData,
00136     const Uint32 length,
00137     const DcmRepresentationParameter * toRepParam,
00138     DcmPixelSequence * & pixSeq,
00139     const DcmCodecParameter *cp,
00140     DcmStack & objStack) const;
00141 
00156   virtual OFCondition encode(
00157     const E_TransferSyntax fromRepType,
00158     const DcmRepresentationParameter * fromRepParam,
00159     DcmPixelSequence * fromPixSeq,
00160     const DcmRepresentationParameter * toRepParam,
00161     DcmPixelSequence * & toPixSeq,
00162     const DcmCodecParameter * cp,
00163     DcmStack & objStack) const;
00164 
00172   virtual OFBool canChangeCoding(
00173     const E_TransferSyntax oldRepType,
00174     const E_TransferSyntax newRepType) const;
00175 
00189   virtual OFCondition determineDecompressedColorModel(
00190     const DcmRepresentationParameter *fromParam,
00191     DcmPixelSequence *fromPixSeq,
00192     const DcmCodecParameter *cp,
00193     DcmItem *dataset,
00194     OFString &decompressedColorModel) const;
00195 
00200   virtual E_TransferSyntax supportedTransferSyntax() const = 0;
00201 
00202 protected:
00203 
00208   static void appendCompressionRatio(OFString& arg, double ratio);
00209 
00221   static OFCondition togglePlanarConfiguration8(
00222     Uint8 *pixelData,
00223     const unsigned long numValues,
00224     const Uint16 samplesPerPixel,
00225     const Uint16 oldPlanarConfig);
00226 
00238   static OFCondition togglePlanarConfiguration16(
00239     Uint16 *pixelData,
00240     const unsigned long numValues,
00241     const Uint16 samplesPerPixel,
00242     const Uint16 oldPlanarConfig);
00243 
00244 private:
00245 
00262   virtual OFCondition encodeColorImage(
00263     OFBool YBRmode,
00264     DcmItem *dataset,
00265     const DcmRepresentationParameter * toRepParam,
00266     DcmPixelSequence * & pixSeq,
00267     const DJCodecParameter *cp,
00268     double& compressionRatio) const;
00269 
00283   virtual OFCondition encodeMonochromeImage(
00284         DcmItem *dataset,
00285         const DcmRepresentationParameter * toRepParam,
00286         DcmPixelSequence * & pixSeq,
00287         const DJCodecParameter *cp,
00288         double& compressionRatio) const;
00289 
00302   virtual OFCondition encodeTrueLossless(
00303     const DcmRepresentationParameter * toRepParam,
00304     DcmPixelSequence * & pixSeq,
00305     const DcmCodecParameter *cp,
00306     DcmStack & objStack) const;
00307 
00315   virtual OFCondition updateLossyCompressionRatio(DcmItem *dataset, double ratio) const;
00316 
00327   virtual OFCondition updateDerivationDescription(
00328     DcmItem *dataset,
00329     const DcmRepresentationParameter * toRepParam,
00330     const DJCodecParameter *cp,
00331     Uint8 bitsPerSample,
00332     double ratio) const;
00333 
00339   virtual OFCondition adjustOverlays(DcmItem *dataset, DicomImage& image) const;
00340 
00345   virtual OFBool isLosslessProcess() const = 0;
00346 
00357   virtual void createDerivationDescription(
00358     const DcmRepresentationParameter * toRepParam,
00359     const DJCodecParameter *cp,
00360     Uint8 bitsPerSample,
00361     double ratio,
00362     OFString& derivationDescription) const = 0;
00363 
00371   virtual DJEncoder *createEncoderInstance(
00372     const DcmRepresentationParameter * toRepParam,
00373     const DJCodecParameter *cp,
00374     Uint8 bitsPerSample) const = 0;
00375 
00384   static OFCondition correctVOIWindows(DcmItem *dataset, double voiOffset, double voiFactor);
00385 
00386   OFCondition updatePlanarConfiguration(
00387     DcmItem *item,
00388     const Uint16 newPlanConf) const;
00389 };
00390 
00391 #endif
00392 
00393 /*
00394  * CVS/RCS Log
00395  * $Log: djcodece.h,v $
00396  * Revision 1.10  2010-10-14 13:17:17  joergr
00397  * Updated copyright header. Added reference to COPYRIGHT file.
00398  *
00399  * Revision 1.9  2009-11-17 16:46:01  joergr
00400  * Added new method that allows for determining the color model of the
00401  * decompressed image.
00402  *
00403  * Revision 1.8  2008-05-29 10:48:44  meichel
00404  * Implemented new method DcmPixelData::getUncompressedFrame
00405  *   that permits frame-wise access to compressed and uncompressed
00406  *   objects without ever loading the complete object into main memory.
00407  *   For this new method to work with compressed images, all classes derived from
00408  *   DcmCodec need to implement a new method decodeFrame(). For now, only
00409  *   dummy implementations returning an error code have been defined.
00410  *
00411  * Revision 1.7  2005/12/08 16:59:12  meichel
00412  * Changed include path schema for all DCMTK header files
00413  *
00414  * Revision 1.6  2005/12/01 11:13:01  onken
00415  * Minor code modifications for gcc 4
00416  *
00417  * Revision 1.5  2005/11/29 11:00:40  onken
00418  * *** empty log message ***
00419  *
00420  * Revision 1.4  2005/11/29 08:50:34  onken
00421  * Added support for "true" lossless compression in dcmjpeg, that doesn't
00422  *   use dcmimage classes, but compresses raw pixel data (8 and 16 bit) to
00423  *   avoid losses in quality caused by color space conversions or modality
00424  *   transformations etc.
00425  * Corresponding commandline option in dcmcjpeg (new default)
00426  *
00427  * Revision 1.3  2003/07/04 13:26:22  meichel
00428  * Replaced forward declarations for OFString with explicit includes,
00429  *   needed when compiling with HAVE_STD_STRING
00430  *
00431  * Revision 1.2  2002/05/24 14:58:04  meichel
00432  * Moved helper methods that are useful for different compression techniques
00433  *   from module dcmjpeg to module dcmdata
00434  *
00435  * Revision 1.1  2001/11/13 15:56:16  meichel
00436  * Initial release of module dcmjpeg
00437  *
00438  *
00439  */


Generated on 6 Jan 2011 for OFFIS DCMTK Version 3.6.0 by Doxygen 1.5.1