Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAbstractCompression Class Referenceabstract

#include <kis_abstract_compression.h>

+ Inheritance diagram for KisAbstractCompression:

Public Member Functions

virtual void adjustForDataSize (qint32 dataSize)
 
virtual qint32 compress (const quint8 *input, qint32 inputLength, quint8 *output, qint32 outputLength)=0
 
virtual qint32 decompress (const quint8 *input, qint32 inputLength, quint8 *output, qint32 outputLength)=0
 
 KisAbstractCompression ()
 
virtual qint32 outputBufferSize (qint32 dataSize)=0
 
virtual ~KisAbstractCompression ()
 

Static Public Member Functions

static void delinearizeColors (quint8 *input, quint8 *output, qint32 dataSize, qint32 pixelSize)
 
static void linearizeColors (quint8 *input, quint8 *output, qint32 dataSize, qint32 pixelSize)
 

Detailed Description

Base class for compression operations

Definition at line 17 of file kis_abstract_compression.h.

Constructor & Destructor Documentation

◆ KisAbstractCompression()

KisAbstractCompression::KisAbstractCompression ( )

Definition at line 9 of file kis_abstract_compression.cpp.

10{
11}

◆ ~KisAbstractCompression()

KisAbstractCompression::~KisAbstractCompression ( )
virtual

Definition at line 13 of file kis_abstract_compression.cpp.

14{
15}

Member Function Documentation

◆ adjustForDataSize()

void KisAbstractCompression::adjustForDataSize ( qint32 dataSize)
virtual

Some algorithms may decide to optimize them work depending on the usual size of the data. Default implementation of KisAbstractCompression class does nothing.

Definition at line 17 of file kis_abstract_compression.cpp.

18{
19 Q_UNUSED(dataSize);
20}

◆ compress()

virtual qint32 KisAbstractCompression::compress ( const quint8 * input,
qint32 inputLength,
quint8 * output,
qint32 outputLength )
pure virtual

Compresses input buffer into output buffer. WARNING: Be careful, output buffer must be at least outputBufferSize(inputLength) size!

Parameters
inputthe input
inputLengththe input length
outputthe output
outputLengthis not used!
Returns
number of bytes written to the output buffer and 0 if error occurred.
See also
outputBufferSize()

Implemented in KisLzfCompression.

◆ decompress()

virtual qint32 KisAbstractCompression::decompress ( const quint8 * input,
qint32 inputLength,
quint8 * output,
qint32 outputLength )
pure virtual

Decompresses input buffer into output buffer. WARNING: output buffer must be able to fit the input data

Parameters
inputthe input
inputLengththe input length
outputthe output
outputLengthis not used!
Returns
number of bytes written to the output buffer and 0 if error occurred.

Implemented in KisLzfCompression.

◆ delinearizeColors()

void KisAbstractCompression::delinearizeColors ( quint8 * input,
quint8 * output,
qint32 dataSize,
qint32 pixelSize )
static

e.g. RRRGGGBBBAAA -> RGBARGBARGBA NOTE: performs mixing of bytes, not channels!

In the beginning, i wrote "delinearization" in a way, that looks like a "linearization", but it turned to be quite inefficient. It seems like reading from random positions is much faster than writing to random areas. So this version is 13% faster.

Definition at line 38 of file kis_abstract_compression.cpp.

40{
49 quint8 *outputByte = output;
50 quint8 *lastByte = output + dataSize -1;
51
52 qint32 strideSize = dataSize / pixelSize;
53 quint8 *startByte = input;
54
55 while (outputByte <= lastByte) {
56 quint8 *inputByte = startByte;
57
58 for(qint32 i = 0; i < pixelSize; i++) {
59 *outputByte = *inputByte;
60 outputByte++;
61 inputByte += strideSize;
62 }
63
64 startByte++;
65 }
66}

◆ linearizeColors()

void KisAbstractCompression::linearizeColors ( quint8 * input,
quint8 * output,
qint32 dataSize,
qint32 pixelSize )
static

Additional interface for jumbling color channels order e.g. RGBARGBARGBA -> RRRGGGBBBAAA NOTE: performs mixing of bytes, not channels!

Definition at line 22 of file kis_abstract_compression.cpp.

24{
25 quint8 *outputByte = output;
26 quint8 *lastByte = input + dataSize -1;
27
28 for(qint32 i = 0; i < pixelSize; i++) {
29 quint8 *inputByte = input + i;
30 while (inputByte <= lastByte) {
31 *outputByte = *inputByte;
32 outputByte++;
33 inputByte+=pixelSize;
34 }
35 }
36}

◆ outputBufferSize()

virtual qint32 KisAbstractCompression::outputBufferSize ( qint32 dataSize)
pure virtual

Returns minimal allowed size of output buffer for compression

Implemented in KisLzfCompression.


The documentation for this class was generated from the following files: