From 63b23d605bc0d8cd8da047abed010e3047a202fe Mon Sep 17 00:00:00 2001 From: glenux Date: Sun, 30 Oct 2005 23:23:23 +0000 Subject: [PATCH] --- src/Makefile.am | 3 +- src/rle2/Makefile.am | 10 ++--- src/rle2/eydrle2.cpp | 20 +++++++++ src/rle2/eydrle2_compress.cpp | 57 +++++++++++++++++++++++++ src/rle2/eydrle2_init.cpp | 71 ++++++++++++++++++++++++++++++++ src/rle2/eydrle2_main.cpp | 15 +++++++ src/rle2/eydrle2_uncompress.cpp | 63 ++++++++++++++++++++++++++++ src/tests/exemple2.bmp | Bin 0 -> 8062 bytes src/tests/exemple2.pcx | Bin 0 -> 30819 bytes src/tests/exemple2.ppm | Bin 0 -> 192060 bytes 10 files changed, 233 insertions(+), 6 deletions(-) create mode 100644 src/tests/exemple2.bmp create mode 100644 src/tests/exemple2.pcx create mode 100644 src/tests/exemple2.ppm diff --git a/src/Makefile.am b/src/Makefile.am index 5ffd94c..a77fef1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,2 +1,3 @@ -SUBDIRS = lib rle1 rle2 #rleGolomb +SUBDIRS = lib rle1 rle2 +#rleGolomb diff --git a/src/rle2/Makefile.am b/src/rle2/Makefile.am index 5dff133..17cdfaf 100644 --- a/src/rle2/Makefile.am +++ b/src/rle2/Makefile.am @@ -2,7 +2,7 @@ SUBDIRS = . -bin_PROGRAMS = eydrle +bin_PROGRAMS = eydrle2 #eyd_SOURCES += parser.hh \ # source_lexer.hh @@ -18,10 +18,10 @@ INCLUDES= -I../lib/ -I./ @GLIB2_CFLAGS@ @TARGET_READLINE_INC@ #eyd_INCLUDE = -eydrle_SOURCES = eydrle.cpp eydrle_init.cpp eydrle_main.cpp eydrle_compress.cpp eydrle_uncompress.cpp -eydrle_SOURCES += eydrle.hh -eydrle_LDADD = -leyd -eydrle_LDFLAGS = @LDFLAGS@ -L../lib -L../lib/.libs +eydrle2_SOURCES = eydrle2.cpp eydrle2_init.cpp eydrle2_main.cpp eydrle2_compress.cpp eydrle2_uncompress.cpp +eydrle2_SOURCES += eydrle2.hh +eydrle2_LDADD = -leyd +eydrle2_LDFLAGS = @LDFLAGS@ -L../lib -L../lib/.libs #bitcopy_SOURCES = bitcopy.cpp #bitcopy_LDADD = -leyd diff --git a/src/rle2/eydrle2.cpp b/src/rle2/eydrle2.cpp index e69de29..f6cebc6 100644 --- a/src/rle2/eydrle2.cpp +++ b/src/rle2/eydrle2.cpp @@ -0,0 +1,20 @@ +#include "eydrle.hh" + +namespace EydTools { + EydRle::EydRle(){ + _mode_compress = EYDRLE_MODE_UNDEF; + _input_file.clear(); + _output_file.clear(); + _cellsize = 8; // one octet each time (by default); + } + + void EydRle::run(){ + if (_mode_compress == EYDRLE_MODE_COMPRESS){ + this->compress(); + } else { + this->uncompress(); + } + } + +} + diff --git a/src/rle2/eydrle2_compress.cpp b/src/rle2/eydrle2_compress.cpp index e69de29..6b11cfd 100644 --- a/src/rle2/eydrle2_compress.cpp +++ b/src/rle2/eydrle2_compress.cpp @@ -0,0 +1,57 @@ +#include "eydrle.hh" + +namespace EydTools { + void EydRle::compress(){ + EydLib::BitGroup data; + + EydLib::BitReader bitread(_cellsize, 256); + bitread.open(_input_file); + + EydLib::BitWriter bitwrite(_cellsize,256); + bitwrite.open(_output_file); + unsigned char c = (unsigned char)_cellsize; + bitwrite.writeDirect(&c, 1); + + EydLib::BitCompressor compressor(_cellsize); + + printf("File opened\n"); + + bool done=false; + std::vector record; + while(!done){ + try{ + data = bitread.read(); + compressor.append(data); + + if (compressor.hasContent()){ + std::list compressedData = compressor.flush(); + std::list::iterator cmpDataIt; + for(cmpDataIt = compressedData.begin(); + cmpDataIt != compressedData.end(); + cmpDataIt++){ + bitwrite.write((*cmpDataIt)); // cellule + } + } + } catch (EydLib::eBitReaderEndOfFile& e) { + done = true; + // on flushe le contenu de record + compressor.flushRleData(); + std::list compressedData = compressor.flush(); + std::list::iterator cmpDataIt; + for(cmpDataIt = compressedData.begin(); + cmpDataIt != compressedData.end(); + cmpDataIt++){ + bitwrite.write((*cmpDataIt)); // cellule + } + } catch (std::exception& e){ + printf("ERROR\n"); + } + } + printf("compression done\n"); + + bitread.close(); + bitwrite.close(); + + printf("file closed\n"); + } +} diff --git a/src/rle2/eydrle2_init.cpp b/src/rle2/eydrle2_init.cpp index e69de29..fab3347 100644 --- a/src/rle2/eydrle2_init.cpp +++ b/src/rle2/eydrle2_init.cpp @@ -0,0 +1,71 @@ +#include "eydrle.hh" + +namespace EydTools { + + bool EydRle::init(int argc, char ** argv){ + _mode_compress = EYDRLE_MODE_UNDEF; + + int i; + for (i = 1; i + 1 < argc; i = i + 2){ + char * opt = argv[i]; //GOOD + char * val = argv[i+1]; //GOOD + if ( (strcmp(opt, "--mode") == 0) || (strcmp(opt,"-m") == 0) ){ + switch(val[0]){ + case 'c': + case 'C': + _mode_compress = EYDRLE_MODE_COMPRESS; + break; + case 'u': + case 'U': + _mode_compress = EYDRLE_MODE_UNCOMPRESS; + break; + default: + _mode_compress = EYDRLE_MODE_UNDEF; + break; + } + continue; + } + + if ( (strcmp(opt, "--input") == 0) || (strcmp(opt,"-i") == 0) ){ + _input_file = val; + } + + if ( (strcmp(opt, "--output") == 0) || (strcmp(opt,"-o") == 0) ){ + _output_file = val; + } + + if ( (strcmp(opt, "--cellsize") == 0) || (strcmp(opt,"-c") == 0) ){ + _cellsize = atoi(val); + } + + // printf("Option = %s, ",argv[i]); + // printf("value = %s\n",argv[i+1]); + } + + if ((_mode_compress == EYDRLE_MODE_UNDEF) || + (_input_file.length() == 0)) { + printf("\nUsage: %s \n", argv[0]); + printf("\nWhere options could be:\n"); + printf("-m, --mode (c|u) Compress or uncompress\n"); + printf("-i, --input File to compress | uncompress\n"); + printf("-o, --output Destination file\n"); + printf("-c, --cellsize Cell size (in bits)\n"); + return false; + } + + if (_output_file.length() == 0){ + if (_mode_compress == EYDRLE_MODE_COMPRESS){ + _output_file = _input_file + ".rl1"; + } else { + _output_file = _input_file + ".rl1_orig"; + } + } + + // setting rle + EydLib::BitGroup rleFinal(_cellsize); + _rle = rleFinal; + + return true; + } + +} diff --git a/src/rle2/eydrle2_main.cpp b/src/rle2/eydrle2_main.cpp index e69de29..c91b7ef 100644 --- a/src/rle2/eydrle2_main.cpp +++ b/src/rle2/eydrle2_main.cpp @@ -0,0 +1,15 @@ +#include "eydrle.hh" + +using namespace std; +using namespace EydTools; + +int main(int argc, char **argv){ + bool ready; + EydRle eydrle; + ready = eydrle.init(argc, argv); + if (ready) { + eydrle.run(); + } + + return 0; +} diff --git a/src/rle2/eydrle2_uncompress.cpp b/src/rle2/eydrle2_uncompress.cpp index e69de29..cd73346 100644 --- a/src/rle2/eydrle2_uncompress.cpp +++ b/src/rle2/eydrle2_uncompress.cpp @@ -0,0 +1,63 @@ +#include "eydrle.hh" + +namespace EydTools { + void EydRle::uncompress(){ + EydLib::BitGroup data; + + EydLib::BitReader bitread(_cellsize, 256); + bitread.open(_input_file); + + unsigned char c; + bitread.readDirect(&c, 1); + //TODO: fixer cell_size en fonction de "c"; + + if (c != _cellsize){ + printf("WARNING : File cellsize is %d, but uncompressing with %d\n",c, _cellsize); + } + + EydLib::BitWriter bitwrite(_cellsize,256); + bitwrite.open(_output_file); + + EydLib::BitUncompressor uncompressor(_cellsize); + + printf("File opened\n"); + + bool done=false; + std::vector record; + while(!done){ + try{ + data = bitread.read(); + uncompressor.append(data); + + if (uncompressor.hasContent()){ + std::list uncompressedData = uncompressor.flush(); + std::list::iterator uncmpDataIt; + for(uncmpDataIt = uncompressedData.begin(); + uncmpDataIt != uncompressedData.end(); + uncmpDataIt++){ + bitwrite.write((*uncmpDataIt)); // cellule + } + } + } catch (EydLib::eBitReaderEndOfFile& e) { + done = true; + // on flushe le contenu de record + // uncompressor.flushRleData(); + std::list uncompressedData = uncompressor.flush(); + std::list::iterator uncmpDataIt; + for(uncmpDataIt = uncompressedData.begin(); + uncmpDataIt != uncompressedData.end(); + uncmpDataIt++){ + bitwrite.write((*uncmpDataIt)); // cellule + } + } catch (std::exception& e){ + printf("ERROR\n"); + } + } + printf("uncompression done\n"); + + bitread.close(); + bitwrite.close(); + + printf("file closed\n"); + } +} diff --git a/src/tests/exemple2.bmp b/src/tests/exemple2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7cc3d1bc7c6c323882746976ae4fc54eebf21dc6 GIT binary patch literal 8062 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 J|IBXA{|jF@lU4u# literal 0 HcmV?d00001 diff --git a/src/tests/exemple2.pcx b/src/tests/exemple2.pcx new file mode 100644 index 0000000000000000000000000000000000000000..45a39e414eecec00fb59857d36ee9ddde2333b36 GIT binary patch literal 30819 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 literal 0 HcmV?d00001 diff --git a/src/tests/exemple2.ppm b/src/tests/exemple2.ppm new file mode 100644 index 0000000000000000000000000000000000000000..53ea6ef7f3e723ad80c00ee1ac09ac360aecec06 GIT binary patch literal 192060 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 z zX+HO)bK=V8n0N-0!Fd4kqb{>af*m;rUs9(zSL{^ZGu1QCuQ-6}tnm;`iPQnekGjkz z33lWhd`X?=T(MJq&s5=e5qw(SguNCw&U=*L-rAYk^F zlnpz{{7%gV@Xma$A_bsO;GA6=9wY9rb(g8Ut$LP)HrGQC8PiZZw{E{ zlgUDG*=oeL1U4_F16eC>N-~l-x6B@xj3jm(+qrG0R($qnur_8kv1~ae&W6dSI&m^& z0ag#Mo%yDD_P}H$ao&?v!eon|k#f%d*+2v^Hy$L+>B%iS-X5!X0EdQ*Oq{i|ME+eQ z%@aE{`N@=%5ilb#=>Y?<-GE)nJSw0%CtpGPr%n7NxwPHK>tM#JWdz`yAU$Bf^dFdA z$~-FIP-UrtNmh2*ImyXXPmcFyoCY;!=fs#L5f=a_Pu!|U@C0WA{<76rHmQ?wWWI7@ z24FK&e3B&*6i6GRK}k;SswRKW)FOg_S`A;pvU%hsbzqPRC`%lGXEKtKOiU^P20%4n zP6Oo9Je_9-bpkJ%yczhi)mXOW&5q1hS${93mOYb%(TXL86u|Qm$OcMiNOeitP!eMS z##xJGkZ-NPS-i%Qa?2w=XH!j_weT;2Y!G&qhE$iN4J9!GmbNA7NWM#(NxiuuF@{TU z&Ze3;%i+&J>h9b99QnNnfYVi+VME%GCcrkq!91lMb2w%xi8N1PjpiW%OFt?=HZXu} z0;_l?pbE+H3S!H0Fxd(40Pw(Ef@ScYoLk5OrYD)SfdT0RTb-U{mYzvwgnk303CgJv z50V%@8#JO$kZNL_Ng7Yai)p0>&0Pbu-ikha7` zb^tQ~XENXk@B^j?29E$_0md}rFZDdqP&V2yB(OQ(R4Y4e>;hCgM?3)3WWWVZ$xNJ#8Z;JTvUa8Cd*a9czc6V|PsYvf)N~r}oW(O5FjnDI)0wz}jAzeOli6X) z1=3^w%%B3YZDQLl&C7dsS0%sepWD-!cwV0UJ9YBeIdL+({xq#RRBuFB*u`S49ouVWIQpp3DRb~ z^T1amd0{@;jLXj`6+A(yj0X8SJDKd9s+sf@E<-icSXss@fjBxrer(HeNmj%j-l@U>mbEmT0VRMNzs>n7^+p4`91fD)Ee1oiEOFylgu&Jix&m6PKEjalYJe1~VeYn{Of%ra7?}Pv=y{ zEDbmf@BqrdSO!Kw6%rJ{14tEY_3Xh6IQvln1ShZu=LC+x?;0k*V-8gnDQAskt`Re! z3?8kXJu`UrpVexs1IPl(KgWBgv-ke#OeXQ+Dr|t|89UW{zKUZ`zDQ1jhXJIN7()Sj z^2IRYFcUbn>`Cb!b4CGHXVr4=(n(uIFazWS1BmZHIuoD$OXnnECUC!b)Lfe64bJQV z@2V6@X*ZS!n|V}#FG&?C$%D-jFL9U&(vx^P-)4SNE%*HFeir>~@RNSXPpbXde~n+? M|C9bupRE1=0otUEMF0Q* literal 0 HcmV?d00001