IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Optimisation d'un projet en C


Sujet :

C

  1. #21
    Membre confirmé Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Par défaut
    Bout de Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #define  MAX_IMAGE 30000
     
    // Variable globale
    char* MonTableauDeNomDeFichiers[MAX_IMAGE]; 
     
    // à l'extérieur de la fonction avant la boucle dans ton 'main'.
    InitialiseLesNomsDuTableau (MonTableauDeNomDeFichiers);
    ...
    // Dans ta fonction à la place de sprintf("...");
    nom_image = MonTableaux[num];
    Tu perdras du temps à l'initialisation pas pendant le calcul,
    il me semble .

    VALA

  2. #22
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Bien, je vais apporter toutes ces modifications, et je vous tiens au courant des résultats.... Merci

    J'ai une autre question: déclarer dans mon cas des CONST ou STATIC est il nécessaire (je pense à taille_totale, le décalage, et sans doute d'autre chose que j'ai aps en tête...)

  3. #23
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Bien j'ai déjà fait ceci:

    POur l'initialisation des variables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    unsigned char *buf = imgbuffer, *position;
        int decal=(5*taille_totale/4);
        position = calloc(3*taille_totale, sizeof(unsigned char));
        if (position == NULL) {
            perror("Erreur sur malloc");
            exit(EXIT_FAILURE);
        }
    Dans la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    *position = 1.164*(*buf-16)+2.018*(imgbuffer[taille_totale+j]-128);buf++;position++;
    	*position = 1.164*(*buf-16)-0.813*(imgbuffer[taille_totale+j]-128)-0.391*(imgbuffer[decal+j]-128);position++;
    	*position = 1.164*(*buf-16)+1.596*(imgbuffer[decal+j]-128);position++;
    et pour l'écriture dans le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fp, position);
    Mais maintenant mes images sont toute noire!!!!!!!

  4. #24
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Je pense que tu peux regarder aussi du coté de "register" pour les variables utilisés en abondance

  5. #25
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    C'est comme si tous mes triplets "rgb" donnés par position était égal à 0!!!!!!

  6. #26
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    D'abord il y a un truc que je ne comprends pas dans ton code d'orgine :

    tu avais l'air de n'incrémenter qu'une seule fois par boucle p.. (mais on ne voit pas la fin de la deuxième ligne)... Est-ce que c'est une faute de copier/coller, ou est-ce que c'était ça que tu voulais ?

    Si oui, est-ce que tu voulais le faire à cet endroit précis (entre le b et le g) ??

    Si tu voulais bie n'incrémenter qu'une seule fois, alors c'est de ma faute (ton buf++ est équivalent à ton ancien p++)

    MAis ta première version ne te donnait pas des images noires ??

    Ensuite tu ne t'es pas servi du bon pointeur :

    Rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *pos=NULL ;
     
    pos = position ;
     
    /* et après fait pos++ */
    En enfin tu fprintf ou fwrite position...

    là tu as imprimé à la FIN du tableau (tu avais incrémenté position, et tu fprintf position)

    Enfin fprintf s'appele fprintf ( fp, "%s", position)

    ou fwrite....

  7. #27
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Flophx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fp, position);
    Peut-être parce que fprintf ne s'utilise pas comme cela ?

    Pour ce que tu veux faire, utilise plutôt fwrite.

    Jc

  8. #28
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et tu peux encore accéler un petit peu en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    unsigned char  val1, val2 ;
     
     
    /* à l'intérieur de la boucle, juste avant le premier *position=  */
     
    val1 = imgbuffer[taille_totale+j] ;
    val2 = imgbuffer[decal+j] ;
     
    *position = 1.164*(*buf-16)+2.018*(val1-128);buf++;position++;
    	*position = 1.164*(*buf-16)-0.813*(val1-128)-0.391*(val2-128);position++;
    	*position = 1.164*(*buf-16)+1.596*(val2-128);position++;

  9. #29
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Oui, je n'incrémente q'une fois p, car en fait, ca marche comme suit: YYYYUV, il faut incrémenter p indépendamment de J; de plus, c'est l'utilisation des pointeurs que je maîtrise mal, parce qu'avant d'utiliser le pointeur position, ca marchait!!! Je vais chercher l'erreur, et je vous dis ce qu'il en est

  10. #30
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Ce que je comprends pas, c'est où mettre le Il le faut en début de boucle ou avant chaque incrémentation position++??

  11. #31
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    bon j'ai pas dû être clair...

    Il faut l'intialiser AVANT la boucle..

    tu fais la déclaration , puis l'allocation de position.
    Là, tu affecte le pointeur pos comme étant le début du tableau (pos = position)

    Ensuite dans la boucle tu incrémenteras po, qui donc se déplacera dans le tableau position....

    Et tant que tu y es tu peux accélérer encore et soit faire l'allocation dynamique de position dans la routine appellante, soit si ton programme ne contient que ça la mettre en global.. Mais c'est plus joli dans la routine appellante, et là du coup tu ne le fais qu'une seule fois...

  12. #32
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    bon, mes images sont toujours noires....

    je me demande si la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprinf(fd, "%s", position);
    est la bonne. En effet, lorsque j'ouvre un fichier ppm déjà créé avant les modifications, avec un éditeur de texte, j'obtiens un message d'erreur disant qu'il n'arrive pas à lire un fichier "binaire". En revanche, avec mes images noires, je peux l'ouvrir, et j'obtiens 3 lignes, (entete en P6, puis taille de l'image, et une dernière qui contient ce qui est écrit par la fonction précitée).

    Je pense que je recopie l'adresse du pointeur "position", mais pas son contenu... Quelqu'un est-il d'accord avec mon analyse, et éventuellement sait comment corriger ce problème??

  13. #33
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Bien, je vous poste mon code dernière version, avec des images toujours aussi noires......
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #include <string.h>
    #include "image.h"
    void extractPix(unsigned char* imgbuffer, int hauteur, int largeur, int num)
    {
     
        unsigned char *buf = imgbuffer, *position=NULL, *pos=NULL;
        int decal=(5*taille_totale/4);
        position= calloc(3*taille_totale, sizeof(unsigned char));
        if (position == NULL) {
            perror("Erreur sur malloc");
            exit(EXIT_FAILURE);
        }
        sprintf(nom_image,"Image_%.05d.ppm", num);
        printf("nom_image = '%s'\n",nom_image);
     
    	fp = fopen(nom_image, "w");
     
    	if(fp==NULL)
    		{
    			printf("Impossible d'ouvrir le fichier\n");
    			exit(-1);
    		}
     
    	fprintf(fp, "P6\n%d %d\n255\n",largeur, hauteur);
     
       	pos=position;
       	jDebut=1;
       	j = jDebut;
       		for(ligne=0;ligne<hauteur;ligne++)   
      			 {
         				 if(ligne%2!=0)
           				 j=jDebut;
         		else
    		         jDebut=j;
    		for(colonne=0;colonne<largeur;colonne++)
       			{
     
    	*position = 1.164*(*buf-16)+2.018*(imgbuffer[taille_totale+j]-128);buf++;position++;
    	*position = 1.164*(*buf-16)-0.813*(imgbuffer[taille_totale+j]-128)-0.391*(imgbuffer[decal+j]-128);position++;
    	*position = 1.164*(*buf-16)+1.596*(imgbuffer[decal+j]-128);pos++;
     
     
           	  if(colonne%2==0)
                j++;
          }
       }
    printf("resultat: %s\n", position);
    fprintf(fp, "%s", position);
    fflush(fp);
    fclose(fp);
    }

  14. #34
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    OK je comprends mieux.....!!


    Tu ne te sers pas correctment des pointeurs pos et position ...
    Dans le code tel que tu l'as écrit je ne comprend pas à quoi tu pensais que pouvais servir pos.. Tu écris toujours dans position...


    Position est le BUFFER (donc ne change pas)
    pos est la position dans le buffer.
    (c'est la même chose que imgbuffer et buf.. imgbuffer est l'adresse de l'image, buf la position dans l'image, et après tu incrémentes buf).

    Par rapport à ton code, voici ce que tu devrais faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #include <string.h>
    #include "image.h"
    void extractPix(unsigned char* imgbuffer, int hauteur, int largeur, int num)
    {
        size_t statut ;
        unsigned char *buf = imgbuffer, *position=NULL, *pos=NULL;
        int decal=(5*taille_totale/4);
     
        position= calloc(3*taille_totale, sizeof(unsigned char));
        if (position == NULL) {
            perror("Erreur sur malloc");
            exit(EXIT_FAILURE);
        }
        sprintf(nom_image,"Image_%.05d.ppm", num);
        printf("nom_image = '%s'\n",nom_image);
     
        fp = fopen(nom_image, "w");
     
        if(fp==NULL)
         {
             printf("Impossible d'ouvrir le fichier\n");
             exit(-1);
         }
     
        fprintf(fp, "P6\n%d %d\n255\n",largeur, hauteur);
     
        pos=position;
        jDebut=1;
        j = jDebut;
        for(ligne=0;ligne<hauteur;ligne++)   
          {
               if(ligne%2!=0)
                    j=jDebut;
               else
                    jDebut=j;
     
               for(colonne=0;colonne<largeur;colonne++)
       	{
     	     *pos = 1.164*(*buf-16)+2.018*(imgbuffer[taille_totale+j]-128);buf++;pos++;
    	    *pos = 1.164*(*buf-16)-0.813*(imgbuffer[taille_totale+j]-128)-0.391*(imgbuffer[decal+j]-128);pos++;
    	    *pos = 1.164*(*buf-16)+1.596*(imgbuffer[decal+j]-128);pos++;
     
     
           	     if(colonne%2==0)
                         j++;
                 }
          }
     
      printf("resultat: %s\n", position);
      fprintf(fp, "%s", position);
     
      fflush(fp);
      fclose(fp);
    }
    Tu devrais aussi utiliser fwrite à la place de printf..
    (au pire reviens aux "putc((int)*pos, fp)" avant d'incrémenter pos, mais avec fwrite ça devrait marcher).

  15. #35
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Bien, j'ai donc taper ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite(position, 3*taille_totale, 1, fp);
    J'ai donc de nouveau des images en couleurs (c'est plus les bonnes, mais il suffit d'un petit décalage, dpnc aucun soucis).

    Certes je n'ai pas tout essayé pour améliorer la vitesse, néanmoins, pour le moment, je n'ai aucune amélioration réelle, il faut toujours aux alentours de 2'25 pour réaliser 1500 prises, au lieu de la minute espérée....

    Je n'ai encore fais que des améliorations de code, sans toucher à la mémoire... Mais ça m'inquiète un peu.... Un espoir dans l'allocation de mémoire pour améliorer sensiblement la vitesse??

  16. #36
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Comme je l'ai dit dans un des postes précédents, tu peux éventuellement, si tu connais à l'avance la taille des images, allouer ta mémoire pour position AVANT l'appel à extractPix..

    Soit (ce qui serait le mieux) avant de déclencher ton traitement de 1500 images faire une petite routine qui prend un certain nombre de paramètres en entrée, alloue position, et fait une boucle d'appels à extractpix en lui rajoutant position en paramètre, soit (SI et SEULEMENT SI il n'y a pas moyen de faire autrement) en mettant position en parmètre global (TRES nettement moins bien).

    Que veux-tu dire par
    je n'ai pas tout essayé pour améliorer la vitesse
    ?

    Quant au temps général, essaye-juste de mettre en commentaire une fois ta fonction extractPix.. C'est peut-être ta fonction de capture qui prend du temps alors........

    Les chiffres que tu dis donnent 1/10 seconde par image....

    (et aussi enlève tes 2 printf...)

  17. #37
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Bien, dans l'ordre:

    - Il me reste des modifications à faire en ce qui concerne l'allocation de la mémoire, AVANT d'utiliser extraxPix, vu que je connais tout ce qui concerne mes images, car tout est fixé avant l'appel. Je peux donc fixer toutes les allocations de mémoire dès le début. Maintenant, est ce que je peux le faire dans les .h, ou il faut le faire dans les .c??

    - Je viens de faire le test, et là, ben c'est sans appel: sans extrapix, il faut 2'30 pour parvenir à faire 1500 captures.... j'utilise une fonction de V4L, donc, je vois pas comment optimiser là.....

  18. #38
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Surtout pas dans les .h

    Normalement les .h de devraient servir qu'à :

    *contenir des definitions d'include ou de variables ou de constantes communes à plusieurs modules

    *contenir des définitions de fonctions PUBLIQUES de certains modules , c'est à dire pouvant être appelés par d'autres..

    Il faut donc le faire dans les .c, au plus près possible du besoin..

    Par exemple dans ton cas :

    - détermination du répertoire
    - définition des tailles et paramètres connus d'avance
    - appel d'une routine "processing"
    - dans cette routine :
    allocation de mémoire
    boucle
    capture
    extractPix
    libération de mémoire
    - suite des traitements

    Je sais pas ce qu'est V4L....

  19. #39
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Voici le code de la fonction qui acquiert les images...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    void captureImage(void (*ptrfonction) (unsigned char*, int, int, int), int rep)
    {
      int i, nbcapture=0;
      int image=0;
    if(ioctl(descrpFichier, VIDIOCGMBUF, &mbuf)<0)
    {
    perror("VIDIOCGMBUF");
    exit(-1);
    }
     
    ptr = (unsigned char*)mmap(0, mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED,descrpFichier,0);
    if(ptr==(unsigned char*) -1){
    perror("mmap");
    exit(1);
    }
     /*Les demandes de captures sont mises dans la file d'attente du buffer*/
      mapbuf.height = HEIGHT ;
      mapbuf.width = WIDTH;
      mapbuf.format = PALETTE;
     
      while(nbcapture<1500){
    printf("Début de traitement\n");
    /* Obtenir l'image */
        if (ioctl(descrpFichier, VIDIOCMCAPTURE, &mapbuf) < 0) {
          perror ("VIDIOCMCAPTURE");
          exit (1);
        }
     
        /* Pour vérifier qu'elle est bien acquise */
        if (ioctl(descrpFichier, VIDIOCSYNC, &mapbuf.frame) < 0) {
          perror ("VIDIOCSYNC");
          exit (1);
        }
     
    	ptrfonction(ptr,HEIGHT, WIDTH, nbcapture);
    	nbcapture++;
    }
    printf("Traitement achevé\n");
    }

  20. #40
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    En ce qui concerne le pseudo algo que j'ai mis juste au dessus, avec ta manière de fonctionner c'est plus tout à fait comme ça..mais pratiquement, sauf que la capture est pas dans la boucle..

    Par contre, donc, le vrai noeud du problème est cette fonction d'acquisition..

    Tu peux peut-être (je ne sais , jamais utilisé la vidéo sous Linux, mais d'après ce lien :

    http://linux.bytesex.org/v4l2/API.html

    )
    1) utiliser ce qu'il disnt pour faire du 'double buffering"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /* setup everything */
    VIDIOCMCAPTURE(0)
    while (whatever) {
       VIDIOCMCAPTURE(1)
       VIDIOCSYNC(0)
       /* process frame 0 while the hardware captures frame 1 */
       VIDIOCMCAPTURE(0)
       VIDIOCSYNC(1)
       /* process frame 1 while the hardware captures frame 0 */
    }
    2) ne pas te servir de mmap et faire des read

Discussions similaires

  1. Optimisation de mon projet
    Par CLeBeR dans le forum VB.NET
    Réponses: 36
    Dernier message: 23/12/2013, 18h29
  2. Optimisation Projet Feuille exploitation en VBA
    Par rakhann974 dans le forum Contribuez
    Réponses: 5
    Dernier message: 31/05/2013, 08h49
  3. Projet de migration + optimisation de BDD
    Par saxophtrion dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 27/05/2013, 13h12
  4. Optimisation Projet Feuille exploitation en VBA
    Par rakhann974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/02/2013, 11h46
  5. [XL-2007] Projet d'optimisation de relève de mesures
    Par m@tix dans le forum Conception
    Réponses: 0
    Dernier message: 28/06/2011, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo