Optimisation des boucles pour .....

zorrofes Messages postés 4 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 12 mars 2005 - 28 janv. 2005 à 04:50
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005 - 16 mars 2005 à 20:20
Bonjour les amis,

j ai un code C d un programme de traitement de video/images. Mon projet c de bien comprendre (deinterlacing/interlacing) entrelacement et desentrelacement pour bien modifier le code c que j ai.

Car ds ce code, j ai des boucles et je dois les optimiser le maximum possible.
Alors s il vous plait si qlq1 connait les methodes de:
**entrelacement et desentrelacement
**optimisation du code C et les etapes a suivre.
Veuillez m aider.
Mes remerciements.

Pour avoir 1e idee:


char *im_scr_path "/home/images/trevor_field_0.pgm";


char *im_f_path = "/home/images/trevor_field_0_deinter.pgm";


/* int im_height; */


/* int im_width; */


int first_field=0;








#define TEST





#ifdef TEST


pix_type ** read_raw_pgm_file(pix_type **im_src, int *im_height, int *im_width){


FILE *LireBin;





char tampon;


char* num;


unsigned int* dim;


unsigned int itr_x;


unsigned int itr_y;


int err;


unsigned char num_tmp;





/* Read raw PGM image file */


LireBin = fopen(im_scr_path, "rb");





if (!LireBin){


printf("ERREUR d ouverture\n");


return;


}








num = malloc(3);


dim = malloc(3*sizeof(unsigned int)) ;


if (feof(LireBin)){


printf("FILE OPEN ERROR \n");


return;


}





/* Read raw PGM image file header */


for(itr_x=0; itr_x

4 réponses

cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
28 janv. 2005 à 07:06
De ce que je vois tes boucle servent tres souvent a faire des read/write deans un fichier.

tu peux deja optimiser en faisant un fread de 3 elements au lieu de for irt_x .; itr_x < 3 : itr_x++
Example:

dans pix_type ** read_raw_pgm_file(...




for(itr_x=0; itr_x
0
zorrofes Messages postés 4 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 12 mars 2005
12 mars 2005 à 19:50
Nashua

Merci pour ta reponse, oui vraiment tu as raison, le malloc() a pris beaucoup de temps et je n ai pas gagne de nbre de cycle lors l execution.

Concernant:
fseek (LireBin,3L,SEEK_CUR); // je n ai jamais utilise 3L et fseek et seek_cur,????

Merci.
0
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
16 mars 2005 à 20:12
Je ne sais pas ce que tu utilises comme OS et compilo. SEEK_CUR viens
du monde unix, mais je pense tout de meme que c'est dans stdio.h ou
meme dans posix. Je suis desole de ne pouvoir en faire plus. Si tu es
dans unix ou Linux fais un man fseek ou lseek.

Yves
0
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
16 mars 2005 à 20:20
Si tu travailles avec VC ++ fesek est documente.

fseek, ftell, lseek sont des fonctions permettant de deplacer les pointeurs de lecture et ecriture dans le fichier a partir

- de la position courante ( SEEK_CUR)

- du debut du fichier (SEEK_SET)

- ou de la fin (SEEK_END)

Pour le 3L c'est juste 3Bytes convertius dans le format long (
fseek attend un long dans l'argument 2) tu peux aussi faire un
cast ( long ) 3.

Yves
0