text: /*
   *
   *  Copyright (C) 1994-2005, OFFIS
   *
   *  This software and supporting documentation were developed by
   *
   *    Kuratorium OFFIS e.V.
   *    Healthcare Information and Communication Systems
   *    Escherweg 2
   *    D-26121 Oldenburg, Germany
   *
   *  THIS SOFTWARE IS MADE AVAILABLE,  AS IS,  AND OFFIS MAKES NO  WARRANTY
   *  REGARDING  THE  SOFTWARE,  ITS  PERFORMANCE,  ITS  MERCHANTABILITY  OR
   *  FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES  OR
   *  ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND
   *  PERFORMANCE OF THE SOFTWARE IS WITH THE USER.
   *
   *  Module:  dcmdata
   *
   *  Author:  Marco Eichelberg
   *
   *  Purpose: encoder codec class for RLE
   *
   *  Last Update:      $Author: meichel $
   *  Update Date:      $Date: 2005/12/08 16:28:34 $
   *  Source File:      $Source: /share/dicom/cvs-depot/dcmtk/dcmdata/include/dcmtk/dcmdata/dcrlecce.h,v $
   *  CVS/RCS Revision: $Revision: 1.3 $
   *  Status:           $State: Exp $
   *
   *  CVS/RCS Log at end of file
   *
   */
  
  #ifndef DCRLECCE_H
  #define DCRLECCE_H
  
  #include "dcmtk/config/osconfig.h"
  #include "dcmtk/dcmdata/dccodec.h"  /* for class DcmCodec */
  
  class DcmItem;
  
  /** encoder class for RLE.
   *  This class only supports compression, it neither implements
   *  decoding nor transcoding.
   */
  class DcmRLECodecEncoder: public DcmCodec
  {
  public:  
   
    /// default constructor
    DcmRLECodecEncoder();
  
    /// destructor
    virtual ~DcmRLECodecEncoder();
  
    /** decompresses the given pixel sequence and
     *  stores the result in the given uncompressedPixelData element.
     *  @param fromRepParam current representation parameter of compressed data, may be NULL
     *  @param pixSeq compressed pixel sequence
     *  @param uncompressedPixelData uncompressed pixel data stored in this element
     *  @param cp codec parameters for this codec
     *  @param objStack stack pointing to the location of the pixel data
     *    element in the current dataset.
     *  @return EC_Normal if successful, an error code otherwise.
     */
    virtual OFCondition decode(
      const DcmRepresentationParameter * fromRepParam,
      DcmPixelSequence * pixSeq,
      DcmPolymorphOBOW& uncompressedPixelData,
      const DcmCodecParameter * cp,
      const DcmStack& objStack) const;
  
    /** compresses the given uncompressed DICOM image and stores
     *  the result in the given pixSeq element.
     *  @param pixelData pointer to the uncompressed image data in OW format
     *    and local byte order
     *  @param length of the pixel data field in bytes
     *  @param toRepParam representation parameter describing the desired
     *    compressed representation (e.g. JPEG quality)
     *  @param pixSeq compressed pixel sequence (pointer to new DcmPixelSequence object
     *    allocated on heap) returned in this parameter upon success.   
     *  @param cp codec parameters for this codec
     *  @param objStack stack pointing to the location of the pixel data
     *    element in the current dataset.
     *  @return EC_Normal if successful, an error code otherwise.
     */
    virtual OFCondition encode(
      const Uint16 * pixelData,
      const Uint32 length,
      const DcmRepresentationParameter * toRepParam,
      DcmPixelSequence * & pixSeq,
      const DcmCodecParameter *cp,
      DcmStack & objStack) const;
  
    /** transcodes (re-compresses) the given compressed DICOM image and stores
     *  the result in the given toPixSeq element.
     *  @param fromRepType current transfer syntax of the compressed image
     *  @param fromRepParam current representation parameter of compressed data, may be NULL
     *  @param fromPixSeq compressed pixel sequence
     *  @param toRepParam representation parameter describing the desired
     *    new compressed representation (e.g. JPEG quality)
     *  @param toPixSeq compressed pixel sequence (pointer to new DcmPixelSequence object
     *    allocated on heap) returned in this parameter upon success.   
     *  @param cp codec parameters for this codec
     *  @param objStack stack pointing to the location of the pixel data
     *    element in the current dataset.
     *  @return EC_Normal if successful, an error code otherwise.
     */
    virtual OFCondition encode(
      const E_TransferSyntax fromRepType,
      const DcmRepresentationParameter * fromRepParam,
      DcmPixelSequence * fromPixSeq,
      const DcmRepresentationParameter * toRepParam,
      DcmPixelSequence * & toPixSeq,
      const DcmCodecParameter * cp,
      DcmStack & objStack) const;
  
    /** checks if this codec is able to convert from the
     *  given current transfer syntax to the given new
     *  transfer syntax
     *  @param oldRepType current transfer syntax
     *  @param newRepType desired new transfer syntax
     *  @return true if transformation is supported by this codec, false otherwise.
     */
    virtual OFBool canChangeCoding(
      const E_TransferSyntax oldRepType,
      const E_TransferSyntax newRepType) const;
  
  private: 
  
    /// private undefined copy constructor
    DcmRLECodecEncoder(const DcmRLECodecEncoder&);
    
    /// private undefined copy assignment operator
    DcmRLECodecEncoder& operator=(const DcmRLECodecEncoder&);
  
    /** create Derivation Description.
     *  @param dataset dataset to be modified
     *  @param ratio image compression ratio. This is the real effective ratio 
     *    between compressed and uncompressed image, i. e. 2.5 means a 2.5:1 compression.
     *  @return EC_Normal if successful, an error code otherwise
     */
    static OFCondition updateDerivationDescription(
        DcmItem *dataset,
        double ratio);
    
  };
  
  #endif
  
  /*
   * CVS/RCS Log
   * $Log: dcrlecce.h,v $
   * Revision 1.3  2005/12/08 16:28:34  meichel
   * Changed include path schema for all DCMTK header files
   *
   * Revision 1.2  2003/03/21 13:06:46  meichel
   * Minor code purifications for warnings reported by MSVC in Level 4
   *
   * Revision 1.1  2002/06/06 14:52:35  meichel
   * Initial release of the new RLE codec classes
   *   and the dcmcrle/dcmdrle tools in module dcmdata
   *
   *
   */
  