Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLegacyTileCompressor Class Reference

#include <kis_legacy_tile_compressor.h>

+ Inheritance diagram for KisLegacyTileCompressor:

Public Member Functions

void compressTileData (KisTileData *tileData, quint8 *buffer, qint32 bufferSize, qint32 &bytesWritten) override
 
bool decompressTileData (quint8 *buffer, qint32 bufferSize, KisTileData *tileData) override
 
 KisLegacyTileCompressor ()
 
bool readTile (QIODevice *stream, KisTiledDataManager *dm) override
 
qint32 tileDataBufferSize (KisTileData *tileData) override
 
bool writeTile (KisTileSP tile, KisPaintDeviceWriter &store) override
 
 ~KisLegacyTileCompressor () override
 
- Public Member Functions inherited from KisAbstractTileCompressor
 KisAbstractTileCompressor ()
 
virtual ~KisAbstractTileCompressor ()
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Private Member Functions

qint32 maxHeaderLength ()
 
bool writeHeader (KisTileSP tile, quint8 *buffer)
 

Additional Inherited Members

- Protected Member Functions inherited from KisAbstractTileCompressor
qint32 pixelSize (KisTiledDataManager *dm)
 
qint32 xToCol (KisTiledDataManager *dm, qint32 x)
 
qint32 yToRow (KisTiledDataManager *dm, qint32 y)
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

Definition at line 13 of file kis_legacy_tile_compressor.h.

Constructor & Destructor Documentation

◆ KisLegacyTileCompressor()

KisLegacyTileCompressor::KisLegacyTileCompressor ( )

Definition at line 13 of file kis_legacy_tile_compressor.cpp.

14{
15}

◆ ~KisLegacyTileCompressor()

KisLegacyTileCompressor::~KisLegacyTileCompressor ( )
override

Definition at line 17 of file kis_legacy_tile_compressor.cpp.

18{
19}

Member Function Documentation

◆ compressTileData()

void KisLegacyTileCompressor::compressTileData ( KisTileData * tileData,
quint8 * buffer,
qint32 bufferSize,
qint32 & bytesWritten )
overridevirtual

Compresses a tileData and writes it into the buffer. The buffer must be at least tileDataBufferSize() bytes long. Actual number of bytes written is returned using out-parameter bytesWritten

Parameters
tileDataan existing tile data. It should be created and acquired by the caller.
bufferthe buffer
bufferSizethe size of the buffer
bytesWrittenthe number of written bytes
See also
tileDataBufferSize()

Implements KisAbstractTileCompressor.

Definition at line 68 of file kis_legacy_tile_compressor.cpp.

72{
73 bytesWritten = 0;
74 const qint32 tileDataSize = TILE_DATA_SIZE(tileData->pixelSize());
75 Q_UNUSED(bufferSize);
76 Q_ASSERT(bufferSize >= tileDataSize);
77 memcpy(buffer, tileData->data(), tileDataSize);
78 bytesWritten += tileDataSize;
79}
quint32 pixelSize() const
quint8 * data() const
#define TILE_DATA_SIZE(pixelSize)

References KisTileData::data(), KisTileData::pixelSize(), and TILE_DATA_SIZE.

◆ decompressTileData()

bool KisLegacyTileCompressor::decompressTileData ( quint8 * buffer,
qint32 bufferSize,
KisTileData * tileData )
overridevirtual

Decompresses a tileData from a given buffer.

Parameters
bufferthe buffer
bufferSizethe size of the buffer
tileDataan existing tile data where the result will be written to. It should be created and acquired by the caller.

Implements KisAbstractTileCompressor.

Definition at line 81 of file kis_legacy_tile_compressor.cpp.

84{
85 const qint32 tileDataSize = TILE_DATA_SIZE(tileData->pixelSize());
86 if (bufferSize >= tileDataSize) {
87 memcpy(tileData->data(), buffer, tileDataSize);
88 return true;
89 }
90 return false;
91}

References KisTileData::data(), KisTileData::pixelSize(), and TILE_DATA_SIZE.

◆ maxHeaderLength()

qint32 KisLegacyTileCompressor::maxHeaderLength ( )
inlineprivate

Quite self describing

Definition at line 98 of file kis_legacy_tile_compressor.cpp.

99{
100 static const qint32 LEGACY_MAGIC_NUMBER = 79;
101 return LEGACY_MAGIC_NUMBER;
102}

◆ readTile()

bool KisLegacyTileCompressor::readTile ( QIODevice * stream,
KisTiledDataManager * dm )
overridevirtual

Decompresses the tile from the stream. Used by datamanager in load/save routines

See also
decompressTile()

Implements KisAbstractTileCompressor.

Definition at line 43 of file kis_legacy_tile_compressor.cpp.

44{
45 const qint32 tileDataSize = TILE_DATA_SIZE(pixelSize(dm));
46
47 const qint32 bufferSize = maxHeaderLength() + 1;
48 quint8 *headerBuffer = new quint8[bufferSize];
49
50 qint32 x, y;
51 qint32 width, height;
52
53 stream->readLine((char *)headerBuffer, bufferSize);
54 sscanf((char *) headerBuffer, "%d,%d,%d,%d", &x, &y, &width, &height);
55
56 qint32 row = yToRow(dm, y);
57 qint32 col = xToCol(dm, x);
58
59 KisTileSP tile = dm->getTile(col, row, true);
60
61 tile->lockForWrite();
62 stream->read((char *)tile->data(), tileDataSize);
63 tile->unlockForWrite();
64
65 return true;
66}
qint32 xToCol(KisTiledDataManager *dm, qint32 x)
qint32 yToRow(KisTiledDataManager *dm, qint32 y)
qint32 pixelSize(KisTiledDataManager *dm)
void lockForWrite()
Definition kis_tile.cc:221
void unlockForWrite()
Definition kis_tile.cc:264
quint8 * data() const
Definition kis_tile.h:85
KisTileSP getTile(qint32 col, qint32 row, bool writable)

References KisTile::data(), KisTiledDataManager::getTile(), KisTile::lockForWrite(), maxHeaderLength(), KisAbstractTileCompressor::pixelSize(), TILE_DATA_SIZE, KisTile::unlockForWrite(), KisAbstractTileCompressor::xToCol(), and KisAbstractTileCompressor::yToRow().

◆ tileDataBufferSize()

qint32 KisLegacyTileCompressor::tileDataBufferSize ( KisTileData * tileData)
overridevirtual

Return the number of bytes needed for compressing one tile

Implements KisAbstractTileCompressor.

Definition at line 93 of file kis_legacy_tile_compressor.cpp.

94{
95 return TILE_DATA_SIZE(tileData->pixelSize());
96}

References KisTileData::pixelSize(), and TILE_DATA_SIZE.

◆ writeHeader()

bool KisLegacyTileCompressor::writeHeader ( KisTileSP tile,
quint8 * buffer )
inlineprivate

Writes header into the buffer. Buffer size should be maxHeaderLength() + 1 bytes at least (to fit terminating '\0')

Definition at line 104 of file kis_legacy_tile_compressor.cpp.

106{
107 qint32 x, y;
108 qint32 width, height;
109
110 tile->extent().getRect(&x, &y, &width, &height);
111 sprintf((char *)buffer, "%d,%d,%d,%d\n", x, y, width, height);
112
113 return true;
114}
QRect extent() const
Definition kis_tile.h:99

References KisTile::extent().

◆ writeTile()

bool KisLegacyTileCompressor::writeTile ( KisTileSP tile,
KisPaintDeviceWriter & store )
overridevirtual

Compresses the tile and writes it into the stream. Used by datamanager in load/save routines

See also
compressTile()

Implements KisAbstractTileCompressor.

Definition at line 21 of file kis_legacy_tile_compressor.cpp.

22{
23 const qint32 tileDataSize = TILE_DATA_SIZE(tile->pixelSize());
24
25 const qint32 bufferSize = maxHeaderLength() + 1;
26 QScopedArrayPointer<quint8> headerBuffer(new quint8[bufferSize]);
27
28 bool retval = writeHeader(tile, headerBuffer.data());
29 Q_ASSERT(retval); // currently the code returns true unconditionally
30 if (!retval) {
31 return false;
32 }
33
34 store.write((char *)headerBuffer.data(), strlen((char *)headerBuffer.data()));
35
36 tile->lockForRead();
37 retval = store.write((char *)tile->data(), tileDataSize);
38 tile->unlockForRead();
39
40 return retval;
41}
bool writeHeader(KisTileSP tile, quint8 *buffer)
virtual bool write(const QByteArray &data)=0
void lockForRead() const
Definition kis_tile.cc:208
void unlockForRead() const
Definition kis_tile.cc:275
qint32 pixelSize() const
Definition kis_tile.h:113

References KisSharedPtr< T >::data(), KisTile::data(), KisTile::lockForRead(), maxHeaderLength(), KisTile::pixelSize(), TILE_DATA_SIZE, KisTile::unlockForRead(), KisPaintDeviceWriter::write(), and writeHeader().


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