Partage
  • Partager sur Facebook
  • Partager sur Twitter

lecture fichier argv

    27 avril 2011 à 20:20:44

    Bonjour!!

    Je suis étudiante et j'ai un projet de traitement de video à faire. Seulement je me retrouve face au 1er probleme: comment lire une video!!
    J'ai bcp cherché sur internet et j'en arrive à la conclusion que les librairies ffmpeg ou smpeg ne fonctionnent pas. J'ai donc fait un code, qui je pense devrait fonctionner et pourtant j'ai un message d'erreur : ""monprojet" a cessé de fonctionner".

    Voici mon code

    "PRINCIPAL.c":

    #include <stdio.h>
    #include <windows.h>
    #include "algorithme.h"

    // Le main n'est pas encore tout à fait terminé
    int main(int argc, char* argv[])
    {
    int id, res;
    char *nomFichier;
    Image *imCourante, *imPrecedente;
    long taille;
    FILE *ptfile ;

    // allocation de la memoire pour les images
    imCourante = CreateImage ();

    imPrecedente = CreateImage ();
    // ouverture du fichier en lecture en mode binaire
    ptfile = fopen(argv[1], "rb");
    //id = open(argv[0], O_RDONLY | O_BINARY);
    stockImage(ptfile, imPrecedente);


    }

    return 0;
    }



    "ALGORITHME.c"
    #include <io.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include "algorithme.h"


    Image* CreateImage ( )
    {
    Image *img ;
    img = malloc ( 3 * sizeof (Image*));
    img -> bufY = malloc ( LONGUEUR_TRAME_Y * LARGEUR_TRAME_Y * sizeof (unsigned char));
    img -> bufU = malloc ( LONGUEUR_TRAME_UV * LARGEUR_TRAME_UV * sizeof (unsigned char));
    img -> bufV = malloc ( LONGUEUR_TRAME_UV * LARGEUR_TRAME_UV * sizeof (unsigned char));

    return img;
    }
    //teste fin de parcours du fichier
    //renvoie 0 si OK
    int finFichier(int id, long tailleFichier){
    long endroit = tell(id);

    if((tailleFichier-endroit)<=0)
    return 0;
    else return 1;
    }

    //stockage d'une image à partir d'un fichier
    void stockImage(FILE *ptfile, Image* image){
    int resY, resU, resVz;

    fread(image->bufY, sizeof(unsigned char), LONGUEUR_TRAME_Y*LARGEUR_TRAME_Y, ptfile);
    fread(image->bufU, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
    fread(image->bufV, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
    }
    }

    //stockage d'une image à partir d'un fichier
    void stockImage(FILE *ptfile, Image* image){
    int resY, resU, resVz;

    fread(image->bufY, sizeof(unsigned char), LONGUEUR_TRAME_Y*LARGEUR_TRAME_Y, ptfile);
    fread(image->bufU, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
    fread(image->bufV, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
    }

    //comparaison de 2 blocs de pixels (comparaison au seuil)
    //1 si differents, 0 si pareils
    //resolution 11*9 -> 99 pixels par blocs, 297 entiers
    int compBlocs(unsigned char* bloc1, unsigned char* bloc2){
    int res, i;
    unsigned char tabRes[99]; //contient les resultats par pixel

    for(i=0; i=99; i++){
    if((bloc1[i]<=bloc2[i]+VALEUR_PIXEL) && (bloc1[i]<=bloc2[i]-VALEUR_PIXEL)){ //test d'encadrement de la valeur d'un pixel
    tabRes[i] = 1;}
    else tabRes[i] = 0;
    }

    for(i=0; i=99; i++){
    res+=tabRes[i];}

    res = res/99;

    if(res>=SEUIL_BLOC){
    return 0;}

    else return 1;
    }

    //comparaison des deux images (moyenne des blocs et comparaison au seuil)
    //renvoie 1 si elles sont differentes, 0 si elles sont pareilles
    int compImages(Image* im1, Image* im2){
    unsigned char tabBlocY1[32], tabBlocU1[16], tabBlocV1[16], tabBlocY2[32], tabBlocU2[16], tabBlocV2[16];
    unsigned char tabResY[32], tabResU[16], tabResV[16];
    int i, res, resY, resU, resV;

    divisBlocs2(im1, tabBlocY1, tabBlocU1, tabBlocV1); //division des trames en blocs
    divisBlocs2(im2, tabBlocY2, tabBlocU2, tabBlocV2);

    for(i=0; i=32; i++){ //comparaison des blocs de la trame Y
    res = compBlocs(tabBlocY1[i], tabBlocY2[i]);
    if(res){
    tabResY[i] = 1;}
    else tabResY[i] = 0;
    }

    for(i=0; i=16; i++){ //comparaison des blocs de la trame U
    res = compBlocs(tabBlocU1[i], tabBlocU2[i]);
    if(i){
    tabResU[i] = 1;}
    else tabResU[i] = 0;
    }

    for(i=0; i=16; i++){ //comparaison des blocs de la trame V
    res = compBlocs(tabBlocV1[i], tabBlocV2[i]);
    if(i){
    tabResV[i] = 1;}
    else tabResV[i] = 0;
    }

    // moyenne des resultats des blocs de chaque trame
    for(i=0; i=32; i++){
    resY += tabResY[i];}

    for(i=0; i=16; i++){
    resU += tabResU[i];
    resV += tabResV[i];}

    resY = resY/32;
    resU = resU/16;
    resV = resV/16;

    // comparaison avec le SEUIL_IMAGE
    if(resY>=((int)SEUIL_IMAGE) || (resU>=(int)SEUIL_IMAGE) || (resV>=(int)SEUIL_IMAGE)){
    return 0;}
    else return 1;
    }




    }




    //frames U et V
    for(i=0; i=LONGUEUR_TRAME_UV; i+=LONGUEUR_BLOC){
    for(j=0; j=LARGEUR_TRAME_UV; j+=LARGEUR_BLOC){
    tabBlocU[(i/LONGUEUR_BLOC)+(j/LARGEUR_BLOC)*LONGUEUR_TRAME_UV/LONGUEUR_BLOC] = image->bufU[i+(j*LONGUEUR_TRAME_UV)];
    tabBlocV[(i/LONGUEUR_BLOC)+(j/LARGEUR_BLOC)*LONGUEUR_TRAME_UV/LONGUEUR_BLOC] = image->bufV[i+(j*LONGUEUR_TRAME_UV)];
    }
    }
    }


    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2011 à 20:22:26

      Utilise les balise code en éditant.

      <code type="c"><code type="c">
      
      • Partager sur Facebook
      • Partager sur Twitter
        27 avril 2011 à 20:30:42

        desole je sais pas ce que c'est??
        • Partager sur Facebook
        • Partager sur Twitter
          27 avril 2011 à 20:44:59

          Salut,

          Tu peux modifier tes messages avec l'icône en forme de crayon. Florent te recommande de poster ton code sur le forum de cette manière : <code type="c"> TON CODE ICI </code>. Ainsi, il sera coloré et l'identation préservée. Ton message sera bien plus clair et agréable à lire. :)

          Bonne continuation !
          • Partager sur Facebook
          • Partager sur Twitter
          J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
            27 avril 2011 à 20:51:47

            Les balises codes



            Les balises codes sont des balises utilisées sur le forum afin de colorié le code que l'on poste.
            Par exemple :
            int main(void)
            {
                puts("Hello, World !");
                getchar();
                return 0;
            }
            

            Est bien plus lisible que :
            int main(void)
            {
            puts("Hello, World !");
            getchar();
            return 0;
            }

            Les balises code n'ont pas pour seul but de colorier les codes, elles servent aussi à la détection d'erreur simple comme par exemple dans ce printf :
            printf("Hello World ! ); // Il manque une guillemet
            

            De plus, les balises codes permettent de conserver l'indentation.

            Pour colorier comme ci-dessus les codes, il suffit de placer le code entre les balises codes, c'est à dire :
            <code type="c">Votre code ici !</code>

            Il existe différent type pour les balises, afin de colorier le C++, java, Lua, python, ...

            Vous pouvez trouver plus d'informations ici et ici.

            Tout code non présenté entre les balises codes peut entrainer un avertissement des modérateurs.
            • Partager sur Facebook
            • Partager sur Twitter

            🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

              27 avril 2011 à 22:13:43

              Bonjour!!

              Je suis étudiante et j'ai un projet de traitement de video à faire. Seulement je me retrouve face au 1er probleme: comment lire une video!!
              J'ai bcp cherché sur internet et j'en arrive à la conclusion que les librairies ffmpeg ou smpeg ne fonctionnent pas. J'ai donc fait un code, qui je pense devrait fonctionner et pourtant j'ai un message d'erreur : ""monprojet" a cessé de fonctionner".

              Voici mon code



              "PRINCIPAL.c":

              #include <stdio.h>
              #include <windows.h>
              #include "algorithme.h"
              
              // Le main n'est pas encore tout à fait terminé
              int main(int argc, char* argv[])
              {
              int id, res;
              char *nomFichier;
              Image *imCourante, *imPrecedente;
              long taille;
              FILE *ptfile ;
              
              // allocation de la memoire pour les images
              imCourante = CreateImage ();
              
              imPrecedente = CreateImage ();
              // ouverture du fichier en lecture en mode binaire
              ptfile = fopen(argv[1], "rb");
              //id = open(argv[0], O_RDONLY | O_BINARY);
              stockImage(ptfile, imPrecedente);
              
              
              }
              
              return 0;
              }
              
              
              
              "ALGORITHME.c"
              #include <io.h>
              #include <sys/stat.h>
              #include <fcntl.h>
              #include <string.h>
              #include <stdlib.h>
              #include <stdio.h>
              #include "algorithme.h"
              
              
              Image* CreateImage ( )
              {
              Image *img ;
              img = malloc ( 3 * sizeof (Image*));
              img -> bufY = malloc ( LONGUEUR_TRAME_Y * LARGEUR_TRAME_Y * sizeof (unsigned char));
              img -> bufU = malloc ( LONGUEUR_TRAME_UV * LARGEUR_TRAME_UV * sizeof (unsigned char));
              img -> bufV = malloc ( LONGUEUR_TRAME_UV * LARGEUR_TRAME_UV * sizeof (unsigned char));
              
              return img;
              }
              //teste fin de parcours du fichier
              //renvoie 0 si OK
              int finFichier(int id, long tailleFichier){
              long endroit = tell(id);
              
              if((tailleFichier-endroit)<=0)
              return 0;
              else return 1;
              }
              
              //stockage d'une image à partir d'un fichier
              void stockImage(FILE *ptfile, Image* image){
              int resY, resU, resVz;
              
              fread(image->bufY, sizeof(unsigned char), LONGUEUR_TRAME_Y*LARGEUR_TRAME_Y, ptfile);
              fread(image->bufU, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
              fread(image->bufV, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
              }
              }
              
              //stockage d'une image à partir d'un fichier
              void stockImage(FILE *ptfile, Image* image){
              int resY, resU, resVz;
              
              fread(image->bufY, sizeof(unsigned char), LONGUEUR_TRAME_Y*LARGEUR_TRAME_Y, ptfile);
              fread(image->bufU, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
              fread(image->bufV, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
              }
              
              //comparaison de 2 blocs de pixels (comparaison au seuil)
              //1 si differents, 0 si pareils
              //resolution 11*9 -> 99 pixels par blocs, 297 entiers
              int compBlocs(unsigned char* bloc1, unsigned char* bloc2){
              int res, i;
              unsigned char tabRes[99]; //contient les resultats par pixel
              
              for(i=0; i=99; i++){
              if((bloc1[i]<=bloc2[i]+VALEUR_PIXEL) && (bloc1[i]<=bloc2[i]-VALEUR_PIXEL)){ //test d'encadrement de la valeur d'un pixel
              tabRes[i] = 1;}
              else tabRes[i] = 0;
              }
              
              for(i=0; i=99; i++){
              res+=tabRes[i];}
              
              res = res/99;
              
              if(res>=SEUIL_BLOC){
              return 0;}
              
              else return 1;
              }
              
              //comparaison des deux images (moyenne des blocs et comparaison au seuil)
              //renvoie 1 si elles sont differentes, 0 si elles sont pareilles
              int compImages(Image* im1, Image* im2){
              unsigned char tabBlocY1[32], tabBlocU1[16], tabBlocV1[16], tabBlocY2[32], tabBlocU2[16], tabBlocV2[16];
              unsigned char tabResY[32], tabResU[16], tabResV[16];
              int i, res, resY, resU, resV;
              
              divisBlocs2(im1, tabBlocY1, tabBlocU1, tabBlocV1); //division des trames en blocs
              divisBlocs2(im2, tabBlocY2, tabBlocU2, tabBlocV2);
              
              for(i=0; i=32; i++){ //comparaison des blocs de la trame Y
              res = compBlocs(tabBlocY1[i], tabBlocY2[i]);
              if(res){
              tabResY[i] = 1;}
              else tabResY[i] = 0;
              }
              
              for(i=0; i=16; i++){ //comparaison des blocs de la trame U
              res = compBlocs(tabBlocU1[i], tabBlocU2[i]);
              if(i){
              tabResU[i] = 1;}
              else tabResU[i] = 0;
              }
              
              for(i=0; i=16; i++){ //comparaison des blocs de la trame V
              res = compBlocs(tabBlocV1[i], tabBlocV2[i]);
              if(i){
              tabResV[i] = 1;}
              else tabResV[i] = 0;
              }
              
              // moyenne des resultats des blocs de chaque trame
              for(i=0; i=32; i++){
              resY += tabResY[i];}
              
              for(i=0; i=16; i++){
              resU += tabResU[i];
              resV += tabResV[i];}
              
              resY = resY/32;
              resU = resU/16;
              resV = resV/16;
              
              // comparaison avec le SEUIL_IMAGE
              if(resY>=((int)SEUIL_IMAGE) || (resU>=(int)SEUIL_IMAGE) || (resV>=(int)SEUIL_IMAGE)){
              return 0;}
              else return 1;
              }
              
              
              
              
              }
              
              
              
              
              //frames U et V
              for(i=0; i=LONGUEUR_TRAME_UV; i+=LONGUEUR_BLOC){
              for(j=0; j=LARGEUR_TRAME_UV; j+=LARGEUR_BLOC){
              tabBlocU[(i/LONGUEUR_BLOC)+(j/LARGEUR_BLOC)*LONGUEUR_TRAME_UV/LONGUEUR_BLOC] = image->bufU[i+(j*LONGUEUR_TRAME_UV)];
              tabBlocV[(i/LONGUEUR_BLOC)+(j/LARGEUR_BLOC)*LONGUEUR_TRAME_UV/LONGUEUR_BLOC] = image->bufV[i+(j*LONGUEUR_TRAME_UV)];
              }
              }
              }
              


              Merci de votre aide
              • Partager sur Facebook
              • Partager sur Twitter
                8 juillet 2011 à 11:21:38

                Oupss dsl ^^"
                • Partager sur Facebook
                • Partager sur Twitter

                🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                  8 juillet 2011 à 11:23:38

                  Pour ce qui est de ton problème :

                  Perso j'ai utilisé Gstreamer pour lire des vidéos, c'est assez facile d'utilisation (si tu lis leur manuel et que tu te débrouilles un prog) et c'est assez puissant si tu veux aller loin !

                  C'est une librairie dispo ici ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 juillet 2011 à 13:45:03

                    Je précise que moi, c'est une erreur, rien à voir avec le sujet, je me suis carrément planté de sujet. ^^"
                    • Partager sur Facebook
                    • Partager sur Twitter

                    🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                    lecture fichier argv

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown