Non compressing png writer is ok.

This commit is contained in:
James Grogan 2022-11-25 09:43:14 +00:00
parent 33369b1775
commit e4f9393ee7
18 changed files with 196 additions and 23 deletions

View file

@ -233,7 +233,7 @@ std::string DeflateBlock::getMetaData() const
sstr << "Final block: " << mInFinalBlock << '\n';
sstr << "Compression method: " << Deflate::toString(mCompressionMethod) << '\n';
sstr << "Uncompressed block length: " << mUncompressedBlockLength << '\n';
return sstr.str();
}
@ -242,11 +242,10 @@ bool DeflateBlock::isFinalBlock() const
return mInFinalBlock;
}
void DeflateBlock::readHeader()
bool DeflateBlock::read()
{
auto working_byte = mInputStream->getCurrentByte();
std::cout << "Into process data "<< std::endl;
std::cout << mInputStream->logNextNBytes(9);
auto working_byte = *mInputStream->readNextByte();
std::cout << "Into process data, starts with: "<< ByteUtils::toString(working_byte) << std::endl;
unsigned char final_block{0};
mInputStream->readNextNBits(1, final_block);
@ -255,26 +254,58 @@ void DeflateBlock::readHeader()
unsigned char compression_type{0};
mInputStream->readNextNBits(2, compression_type);
mCompressionMethod = static_cast<Deflate::CompressionMethod>(compression_type);
if (mCompressionMethod == Deflate::CompressionMethod::NONE)
{
auto byte0 = *mInputStream->readNextByte();
auto byte1 = *mInputStream->readNextByte();
mUncompressedBlockLength = (byte0 << 8) | byte1;
std::cout << "Check block 0: " << ByteUtils::toString(byte0) << std::endl;
std::cout << "Check block 1: " << ByteUtils::toString(byte1) << std::endl;
auto byte2 = *mInputStream->readNextByte();
auto byte3 = *mInputStream->readNextByte();
uint16_t len_check = (byte2 << 8) | byte3;
std::cout << "Check block 2: " << ByteUtils::toString(byte2) << std::endl;
std::cout << "Check block 3: " << ByteUtils::toString(byte3) << std::endl;
//if (!(byte0 ==(~byte2) && byte1 ==(~byte3)))
//{
//std::cout << "Uncompressed block length check failed - aborting." << std::endl;
//return false;
//}
//else
//{
for(unsigned idx=0; idx<mUncompressedBlockLength;idx++)
{
mOutputStream->writeByte(*mInputStream->readNextByte());
}
//}
}
return true;
}
void DeflateBlock::write(uint16_t datalength)
{
mUncompressedBlockLength = datalength;
unsigned char working_block{0};
working_block |= static_cast<unsigned char>(mInFinalBlock);
working_block |= (static_cast<unsigned char>(mCompressionMethod) << 1);
if (mCompressionMethod == Deflate::CompressionMethod::NONE)
{
std::cout << "Writing compression block header " << static_cast<int>(working_block) << std::endl;
std::cout << "Writing compression block header " << ByteUtils::toString(working_block) << std::endl;
mOutputStream->writeByte(working_block);
std::cout << "Writing data length " << datalength << " " << ByteUtils::toString(datalength) << std::endl;
std::cout << "Writing data length " << mUncompressedBlockLength << " " << ByteUtils::toString(mUncompressedBlockLength) << std::endl;
mOutputStream->writeWord(datalength);
std::cout << "Writing iverse data length " << ~datalength << " " << ByteUtils::toString(~datalength) << std::endl;
mOutputStream->writeWord(static_cast<uint16_t>(~datalength));
std::cout << "Writing iverse data length " << ~mUncompressedBlockLength << " " << ByteUtils::toString(~mUncompressedBlockLength) << std::endl;
mOutputStream->writeWord(static_cast<uint16_t>(~mUncompressedBlockLength));
for(unsigned idx=0; idx<datalength;idx++)
for(unsigned idx=0; idx<mUncompressedBlockLength;idx++)
{
auto byte = *mInputStream->readNextByte();
//std::cout << "Writing next byte " << static_cast<int>(byte) << std::endl;