texTable *readHG3Image(int fd, HG3StdInfo stdInfo, HG3ImgHeader imgHdr, char *texName, ulong texIndex, texTable *next) { uchar *tempBuff = NULL, *buff = NULL, *cmdBuff = NULL, *RGBABuff = NULL, *outBuff = NULL; ulong originalLen = imgHdr.originalLen, originalCmdLen = imgHdr.originalCmdLen, outLen; int err; texTable *ret = NULL; smalloc(tempBuff, imgHdr.compressedLen); smalloc(buff, imgHdr.originalLen); read(fd, tempBuff, imgHdr.compressedLen); err = uncompress(buff, &originalLen, tempBuff, imgHdr.compressedLen); if(err != Z_OK) { printf("uncompress error on buff\n"); printf("%d %d %d %d\n", err, Z_BUF_ERROR, Z_MEM_ERROR, Z_DATA_ERROR); return NULL; } free(tempBuff); tempBuff = NULL; smalloc(tempBuff, imgHdr.cmdLen); smalloc(cmdBuff, imgHdr.originalCmdLen); read(fd, tempBuff, imgHdr.cmdLen); err = uncompress(cmdBuff, &originalCmdLen, tempBuff, imgHdr.cmdLen); if(err != Z_OK) { printf("uncompress error on cmdBuff\n"); printf("%d %d %d %d\n", err, Z_BUF_ERROR, Z_MEM_ERROR, Z_DATA_ERROR); return NULL; } free(tempBuff); tempBuff = NULL; outBuff = unRLE(buff, originalLen, cmdBuff, originalCmdLen, &outLen); smalloc(RGBABuff, outLen); unDelta(outBuff, outLen, stdInfo.width, stdInfo.height, stdInfo.bpp / 8, RGBABuff); free(buff); free(cmdBuff); free(outBuff); ret = addTex(next, texName, texIndex, stdInfo.width, stdInfo.height, stdInfo.bpp / 8, RGBABuff); free(RGBABuff); return ret; }
void decompressionPretraitement(char* chemin, char* name, char* extention, char * deco) { int f,d; extentionDossierCalcul(chemin,&f,&d); char* format = malloc(sizeof(char)*(f+1)); char* dossier = malloc(sizeof(char)*(d+1)); extentionDossierCreation(chemin,format,dossier,&f,&d); char fichierRetour[strlen(dossier)+strlen(name)+1+strlen(extention)]; if (strcmp("",extention)==0) { strcpy(fichierRetour,dossier); strcat(fichierRetour,name); } else { strcpy(fichierRetour,dossier); strcat(fichierRetour,name); strcat(fichierRetour,"."); strcat(fichierRetour,extention); } //decodage if (strcmp("-m",deco)==0) { printf("Lancement avec prétraitement mtf \n"); FILE *F3= ouvertureFichierLecture(chemin); FILE *F4 = ouvertureFichierEcriture ("../bin/temp.txt"); decodage(F3,F4); fermetureFichier(F3); fermetureFichier(F4); FILE* src=ouvertureFichierLecture("../bin/temp.txt"); FILE* resultat=ouvertureFichierEcriture(fichierRetour); unMTF(src,resultat); fermetureFichier(src); fermetureFichier(resultat); } else if (strcmp("-r",deco)==0) { printf("Lancement avec prétraitement rle\n"); FILE *F3= ouvertureFichierLecture(chemin); FILE *F4 = ouvertureFichierEcriture ("../bin/temp.txt"); decodage(F3,F4); fermetureFichier(F3); fermetureFichier(F4); FILE* src=ouvertureFichierLecture("../bin/temp.txt"); FILE* resultat=ouvertureFichierEcriture(fichierRetour); unRLE(src,resultat); fermetureFichier(src); fermetureFichier(resultat); } else if (strcmp("-mr",deco)==0) { printf("Lancement prétraitement avec mtf et rel \n"); FILE *F3= ouvertureFichierLecture(chemin); FILE *F4 = ouvertureFichierEcriture ("../bin/temp.txt"); decodage(F3,F4); fermetureFichier(F3); fermetureFichier(F4); FILE* src=ouvertureFichierLecture("../bin/temp.txt"); FILE* resultat=ouvertureFichierEcriture(fichierRetour); decomp_MTF_RLE(src,resultat); fermetureFichier(src); fermetureFichier(resultat); } else if (strcmp("-rm",deco)==0) { printf("Lancement prétraitement avec mtf et rel \n"); FILE *F3= ouvertureFichierLecture(chemin); FILE *F4 = ouvertureFichierEcriture ("../bin/temp.txt"); decodage(F3,F4); fermetureFichier(F3); fermetureFichier(F4); FILE* src=ouvertureFichierLecture("../bin/temp.txt"); FILE* resultat=ouvertureFichierEcriture(fichierRetour); decomp_RLE_MTF(src,resultat); fermetureFichier(src); fermetureFichier(resultat); } else if (strcmp("",deco)==0) { FILE *F3= ouvertureFichierLecture(chemin); FILE *F4 = ouvertureFichierEcriture (fichierRetour); decodage(F3,F4); fermetureFichier(F3); fermetureFichier(F4); } else{printf("%s",MODEDEMPLOIE);} }