Example #1
0
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;
}
Example #2
0
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);}
	
}