This commit is contained in:
parent
aacad4200d
commit
dac71a8592
4 changed files with 231 additions and 0 deletions
58
src/lib/eyd_compressor_rle2.cpp
Normal file
58
src/lib/eyd_compressor_rle2.cpp
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
|
||||||
|
#include "eyd_compressor_rle2.hh"
|
||||||
|
|
||||||
|
namespace EydLib {
|
||||||
|
|
||||||
|
/*
|
||||||
|
class BitCompressorRle2 {
|
||||||
|
private:
|
||||||
|
BitGroup _last_group;
|
||||||
|
int _last_count;
|
||||||
|
std::list<BitGroup> _compressed;
|
||||||
|
|
||||||
|
public:
|
||||||
|
BitCompressorRle2();
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
void append(BitGroup bg);
|
||||||
|
std::list<BitGroup> flush();
|
||||||
|
bool hasContent();
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
BitCompressorRle2::BitCompressorRle2() {
|
||||||
|
_last_count = 0;
|
||||||
|
_compressed.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BitCompressorRle2::clear(){
|
||||||
|
// we clear everything
|
||||||
|
_last_count = 0;
|
||||||
|
_compressed.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BitCompressorRle2::appendBit(bool bit){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void BitCompressorRle2::append(BitGroup data){
|
||||||
|
// take the data and make it smaller...
|
||||||
|
// foreach bit of data, append it...
|
||||||
|
for (int i=0; i<data.size(); i++){
|
||||||
|
this->appendBit(data.getBitAt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::list<BitGroup> BitCompressorRle2::flush(){
|
||||||
|
// we add the data from _last* to the outlist
|
||||||
|
std::list<BitGroup> result;
|
||||||
|
result = _compressed;
|
||||||
|
_compressed.clear();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BitCompressorRle2::hasContent(){
|
||||||
|
return (!_compressed.empty());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
42
src/lib/eyd_compressor_rle2.hh
Normal file
42
src/lib/eyd_compressor_rle2.hh
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#ifndef _EYD_BITCOMPRESSOR_RLE2_HH
|
||||||
|
#define _EYD_BITCOMPRESSOR_RLE2_HH
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
#include "eyd_bitgroup.hh"
|
||||||
|
|
||||||
|
#include "eyd_global.hh"
|
||||||
|
#include "eyd_iface.hh"
|
||||||
|
|
||||||
|
|
||||||
|
namespace EydLib {
|
||||||
|
|
||||||
|
class BitCompressorRle2 {
|
||||||
|
private:
|
||||||
|
BitGroup _rle;
|
||||||
|
BitGroup _last_group;
|
||||||
|
int _last_count;
|
||||||
|
int _group_size;
|
||||||
|
std::list<BitGroup> _compressed;
|
||||||
|
|
||||||
|
void BitCompressorRle2::appendBit(bool bit);
|
||||||
|
|
||||||
|
public:
|
||||||
|
BitCompressorRle2::BitCompressorRle2();
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
void append(BitGroup bg);
|
||||||
|
std::list<BitGroup> flush();
|
||||||
|
bool hasContent();
|
||||||
|
|
||||||
|
void flushRleData();
|
||||||
|
void flushRawData();
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
86
src/lib/eyd_uncompressor_rle2.cpp
Normal file
86
src/lib/eyd_uncompressor_rle2.cpp
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
|
||||||
|
#include "eyd_uncompressor_rle2.hh"
|
||||||
|
|
||||||
|
namespace EydLib {
|
||||||
|
|
||||||
|
/*
|
||||||
|
class BitUncompressorRle2 {
|
||||||
|
private:
|
||||||
|
BitGroup _last_group;
|
||||||
|
int _last_count;
|
||||||
|
std::list<BitGroup> _uncompressed;
|
||||||
|
|
||||||
|
public:
|
||||||
|
BitUncompressorRle2();
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
void append(BitGroup bg);
|
||||||
|
std::list<BitGroup> flush();
|
||||||
|
bool hasContent();
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
BitUncompressorRle2::BitUncompressorRle2() {
|
||||||
|
_last_count = 0;
|
||||||
|
_status = UNCOMPRESSOR_RLE2_STATUS_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BitUncompressorRle2::clear(){
|
||||||
|
// we clear everything
|
||||||
|
_last_count = 0;
|
||||||
|
_uncompressed.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BitUncompressorRle2::append(BitGroup data){
|
||||||
|
switch (_status){
|
||||||
|
case UNCOMPRESSOR_RLE2_STATUS_NORMAL:
|
||||||
|
printf("STATUS NORMAL : %s\n", data.toString().c_str());
|
||||||
|
if (data == _rle){
|
||||||
|
// on change le status et on n'écrit rien
|
||||||
|
_status = UNCOMPRESSOR_RLE2_STATUS_GOTRLE;
|
||||||
|
} else {
|
||||||
|
// on écrit directement le resultat non décompressé
|
||||||
|
_uncompressed.push_back(data);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case UNCOMPRESSOR_RLE2_STATUS_GOTRLE:
|
||||||
|
printf("STATUS GOT RLE : %s\n", data.toString().c_str() );
|
||||||
|
if (data == _rle){
|
||||||
|
// deux RLE c'est 1 RLE
|
||||||
|
// on écrit juste un RLE
|
||||||
|
_uncompressed.push_back(data);
|
||||||
|
_status = UNCOMPRESSOR_RLE2_STATUS_NORMAL;
|
||||||
|
} else {
|
||||||
|
// un RLE et un différent c'est une longueur
|
||||||
|
// sauf si égal à 1 ou 2
|
||||||
|
_status = UNCOMPRESSOR_RLE2_STATUS_GOTLEN; // sauf si égal à RLE
|
||||||
|
_last_count = data.getValue(); // on stocke la value
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case UNCOMPRESSOR_RLE2_STATUS_GOTLEN:
|
||||||
|
printf("STATUS GOT LEN : %s\n", data.toString().c_str() );
|
||||||
|
// ce qu'on lit est la valeur
|
||||||
|
// on écrit donc _last_count fois data
|
||||||
|
for (int i=0; i<_last_count; i++){
|
||||||
|
_uncompressed.push_back(data);
|
||||||
|
}
|
||||||
|
_status = UNCOMPRESSOR_RLE2_STATUS_NORMAL;
|
||||||
|
_last_count = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::list<BitGroup> BitUncompressorRle2::flush(){
|
||||||
|
// we add the data from _last* to the outlist
|
||||||
|
std::list<BitGroup> result;
|
||||||
|
result = _uncompressed;
|
||||||
|
_uncompressed.clear();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BitUncompressorRle2::hasContent(){
|
||||||
|
return (!_uncompressed.empty());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
45
src/lib/eyd_uncompressor_rle2.hh
Normal file
45
src/lib/eyd_uncompressor_rle2.hh
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#ifndef _EYD_BITUNCOMPRESSOR_RLE2_HH
|
||||||
|
#define _EYD_BITUNCOMPRESSOR_RLE2_HH
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
#include "eyd_bitgroup.hh"
|
||||||
|
|
||||||
|
#include "eyd_global.hh"
|
||||||
|
#include "eyd_iface.hh"
|
||||||
|
|
||||||
|
|
||||||
|
namespace EydLib {
|
||||||
|
typedef enum {
|
||||||
|
UNCOMPRESSOR_RLE2_STATUS_NORMAL,
|
||||||
|
UNCOMPRESSOR_RLE2_STATUS_GOTLEN,
|
||||||
|
UNCOMPRESSOR_RLE2_STATUS_GOTRLE}
|
||||||
|
uncompressorRle2_status_t;
|
||||||
|
|
||||||
|
class BitUncompressorRle2 {
|
||||||
|
private:
|
||||||
|
BitGroup _rle;
|
||||||
|
int _last_count;
|
||||||
|
int _group_size;
|
||||||
|
std::list<BitGroup> _uncompressed;
|
||||||
|
uncompressorRle2_status_t _status;
|
||||||
|
|
||||||
|
public:
|
||||||
|
BitUncompressorRle2::BitUncompressorRle2();
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
void append(BitGroup bg);
|
||||||
|
std::list<BitGroup> flush();
|
||||||
|
bool hasContent();
|
||||||
|
|
||||||
|
void flushRleData();
|
||||||
|
void flushRawData();
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue