mirror of
https://github.com/SatDump/SatDump
synced 2026-08-13 17:47:30 -04:00
134 lines
3.6 KiB
C++
134 lines
3.6 KiB
C++
/*
|
|
* Copyright 2011-2019, European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef CWTCoder_included
|
|
#define CWTCoder_included
|
|
|
|
/*******************************************************************************
|
|
|
|
TYPE:
|
|
Concrete class.
|
|
|
|
PURPOSE:
|
|
Base Wavelet Coder object featuring common functionalities between all possible coders.
|
|
|
|
FUNCTION:
|
|
This object is merely a container for common Wavelet-coder sub-objects
|
|
and is used to have a centralised initialisation point.
|
|
|
|
INTERFACES:
|
|
See 'INTERFACES' in the module declaration below
|
|
|
|
RESOURCES:
|
|
Heap Memory (>2K).
|
|
|
|
REFERENCE:
|
|
None.
|
|
|
|
PROCESSING:
|
|
The constructor takes a CDataFieldUncompressed image and a CCompressParam
|
|
and uses these to initilise the subobjects.
|
|
The CodeBuffer member function starts the actual coding.
|
|
The GetCompressedImage returns the CDataFieldCompressedImage after coding
|
|
|
|
DATA:
|
|
See 'DATA' in the module declaration below
|
|
|
|
LOGIC:
|
|
|
|
*******************************************************************************/
|
|
|
|
#include "CDataField.h"
|
|
#include "CompressWT.h"
|
|
#include "CImage.h"
|
|
#include "CBuffer.h"
|
|
|
|
namespace COMP
|
|
{
|
|
|
|
class CWTCoder
|
|
{
|
|
|
|
private:
|
|
// DATA:
|
|
|
|
CImage m_Image; // image data buffer
|
|
CWTParams m_Param; // compression parameters
|
|
CWBuffer m_Buf; // compressed data buffer
|
|
|
|
enum E_constants
|
|
{
|
|
e_ExpectedCompressionFactor = 1, // Expected compression factor, used
|
|
// to allocate the first CWBuffer.
|
|
};
|
|
|
|
// INTERFACES:
|
|
|
|
// Description: Performs the coding of the input buffer by block.
|
|
// Returns: Nothing.
|
|
void CodeBufferBlock(
|
|
const unsigned int i_Bs // block size
|
|
);
|
|
|
|
// Description: Performs the coding of the input buffer as a whole.
|
|
// Returns: Nothing.
|
|
void CodeBufferFull();
|
|
|
|
public:
|
|
// INTERFACES:
|
|
|
|
// Description: Creates a CWTCoder object, constructor.
|
|
// Returns: Nothing.
|
|
CWTCoder(
|
|
const Util::CDataFieldUncompressedImage &i_Cdfui, // buffer containing the image
|
|
// data to compress
|
|
const CWTParams &i_Param // parameters of the compression
|
|
)
|
|
: m_Image(i_Cdfui), m_Param(i_Param), m_Buf((unsigned __int32)(i_Cdfui.GetLength() * e_ExpectedCompressionFactor / 8))
|
|
{
|
|
PRECONDITION(m_Image.GetW() >= 1 && m_Image.GetH() >= 1);
|
|
PRECONDITION(m_Param.m_BitsPerPixel >= 1 && m_Param.m_BitsPerPixel <= 16);
|
|
PRECONDITION(m_Param.m_nWTlevels >= 3 && m_Param.m_nWTlevels <= 6);
|
|
PRECONDITION(m_Param.m_nLossyBitPlanes <= 15);
|
|
}
|
|
|
|
// Description: Destructor.
|
|
// Returns: Nothing.
|
|
~CWTCoder()
|
|
{
|
|
}
|
|
|
|
// Description: Performs the coding of the input buffer in the output buffer.
|
|
// Returns: Nothing.
|
|
void CodeBuffer();
|
|
|
|
// Description: Returns a CDFCI containing the compressed data buffer.
|
|
// Returns: The compressed data buffer.
|
|
Util::CDataFieldCompressedImage GetCompressedImage()
|
|
{
|
|
COMP_TRYTHIS
|
|
Util::CDataFieldCompressedImage cdfci(m_Buf,
|
|
(unsigned char)m_Image.GetNB(),
|
|
m_Image.GetW(),
|
|
m_Image.GetH());
|
|
return cdfci;
|
|
COMP_CATCHTHIS
|
|
}
|
|
};
|
|
|
|
} // end namespace
|
|
|
|
#endif
|