Optimisation des boucles pour .....

Signaler
Messages postés
4
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
12 mars 2005
-
Messages postés
48
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 mars 2005
-
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

Messages postés
48
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 mars 2005

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
Messages postés
4
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
12 mars 2005

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.
Messages postés
48
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 mars 2005

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
Messages postés
48
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 mars 2005

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