Recherche avancée

Médias (1)

Mot : - Tags -/MediaSPIP 0.2

Autres articles (42)

  • Mise à jour de la version 0.1 vers 0.2

    24 juin 2013, par

    Explications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
    Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

Sur d’autres sites (2548)

  • FFmpeg : undefined references to av_frame_alloc()

    6 août 2014, par dontrythisathome

    I want to get into FFmpeg developing and i started following these samples tutorial here : here

    I started with the first tutorial - tutorial01.c - but i run into this problem ’undefined references to av_frame_alloc()’.

    I’m on Ubuntu 12.04 LTS.

    This is my program :

    /*
    * File:   main.c
    * Author: dontrythisathome
    *
    * Created on 3 giugno 2014, 23.02
    */

    #include
    #include <libavcodec></libavcodec>avcodec.h>
    #include <libavformat></libavformat>avformat.h>
    #include <libavutil></libavutil>frame.h>
    #include <libswscale></libswscale>swscale.h>
    /*
    *
    */
    void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame)
       {
           FILE   *pFile;
           char  szFilename[32];
           int       y;

           //Apre il file
           sprintf(szFilename, "frame%d.ppm", iFrame);
           pFile=fopen(szFilename, "wb");
           if(pFile==NULL)
           {return; }

           //Scrive l'intestazione del file ( Larghezza x Altezza su video)
           fprintf(pFile, "P6\n%d %d\n255\n", width, height);

           //Scrive i data pixel
           for(y=0; ydata[0]+y*pFrame->linesize[0], 1, width*3, pFile);
           }

           //Chiude il file
           fclose(pFile);
         }
    /*
    *
    */
    /*Main Function*/
    int main(int argc, char *argv[])
    {
       AVFormatContext *pFormatCtx;
       int                                     i, videoStreamIdx;
       AVCodecContext   *pCodecCtx;
       AVCodec                      *pCodec;
       AVFrame                      *pFrame;
       AVFrame                      *pFrameRGB;
       AVPacket                     packet;
       int                                     frameFinished;
       int                                     numBytes;
       uint8_t                           *buffer;
       static struct SwsContext  *img_convert_ctx;

       if(argc &lt; 2){
           printf("Inserisci un file video\n");
           return -1;
       }

       //Registra tutti i formati e i codec
       av_register_all();

       //Apre il file video
       if(avformat_open_input(&amp;pFormatCtx, argv[1], NULL, NULL) != 0)
       {return -1;} //Impossibile aprire il file

       //Recupera le informazioni dello stream
       if(avformat_find_stream_info(pFormatCtx, NULL) &lt; 0)
       {return -1;} // Couldn't find stream information

       //Versa le informazioni del file sullo standard error
       av_dump_format(pFormatCtx, 0, argv[1], 0);

       //Trova il primo stream video
       videoStreamIdx=-1;
       for(i=0; inb_streams; i++)
       {
           if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
           { videoStreamIdx=i;
               break;}
       }

       if(videoStreamIdx==-1)
           return -1; // Impossibile trovare lo stream video

       // Punta al contenuto del codec per lo stream video
       pCodecCtx = pFormatCtx->streams[videoStreamIdx]->codec;

       // Trova il decoder per lo stream video
       pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
       if(pCodec==NULL)
       {
           fprintf(stderr, "Codec Non Supportato!\n");
           return -1; //Impossibile trovare il codec
       }

       //Apre il codec
       if(avcodec_open2(pCodecCtx, pCodec, NULL) &lt; 0)
       {return -1;} //Impossibile aprire il codec

       //Alloca il frame video
       pFrame = av_frame_alloc();

       //Alloca una struct AVFrame
       pFrameRGB = av_frame_alloc();
       if(pFrameRGB==NULL)
       {return -1;}

       //Determina la grandezza necessaria per il buffer e lo alloca
       numBytes = avpicture_get_size(PIX_FMT_RGB24,
                                                                               pCodecCtx->width,
                                                                               pCodecCtx->height);

       buffer = (uint8_t *) av_malloc(numBytes*sizeof(uint8_t));

       //Assegna le parti appropriate del buffer sulla superficie dell'immagine in pFrameRGB
       //Tenere presente che pFrameRGB è un AVFrame, ma AVFrame è una superset di AVPicture
       avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24, pCodecCtx->width, pCodecCtx->height);

       int w = pCodecCtx->width;
       int h = pCodecCtx->height;
       img_convert_ctx = sws_getContext(w, h, pCodecCtx->pix_fmt,
                                                                                          w, h, PIX_FMT_RGB24,
                                                                                           SWS_LANCZOS, NULL, NULL, NULL);

       //Legge i frame e salva i primi 5 frame su disco
      i=0;
      while((av_read_frame(pFormatCtx, &amp;packet)>=0) &amp;&amp; (i&lt;5))
      {
          //Questo è il packet dello stream video?
          if(packet.stream_index==videoStreamIdx)
          {
              //Decodifica il frame video
              avcodec_decode_video2(pCodecCtx, pFrame, &amp;frameFinished, &amp;packet);

              //Si è riusiciti ad ottenere il frame video?
              if(frameFinished)
              {
                  i++;
                  sws_scale(img_convert_ctx, (const uint8_t * const *)pFrame->data,
                                           pFrame->linesize, 0, pCodecCtx->height,
                                           pFrameRGB->data, pFrameRGB->linesize);
                  SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, i);
              }
          }

          //Libera il pacchetto che era allocato da av_read_frame
          av_free_packet(&amp;packet);
      }

      //Libera l'immagine RGB
      av_free(buffer);
      av_free(pFrameRGB);

      //Libera il frame YUV
      av_free(pFrame);

      //Chiude il codec
      avcodec_close(pCodecCtx);

      //Chiude il file video
      avformat_close_input(&amp;pFormatCtx);

      /*FINE PROGRAMMA*/

       return 0;
    }

    This is the build output :

    "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
    make[1]: ingresso nella directory "/home/dontrythisathome/Programmazione/C-C++/SimpleMediaPlayerForAndroid"
    "/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/simplemediaplayerforandroid
    make[2]: ingresso nella directory "/home/dontrythisathome/Programmazione/C-C++/SimpleMediaPlayerForAndroid"
    mkdir -p dist/Debug/GNU-Linux-x86
    gcc     -o dist/Debug/GNU-Linux-x86/simplemediaplayerforandroid build/Debug/GNU-Linux-x86/main.o -L/usr/lib/x86_64-linux-gnu -lavformat -lavcodec -lavutil -lswscale -lz -lbz2
    build/Debug/GNU-Linux-x86/main.o: In function `main':
    /home/dontrythisathome/Programmazione/C-C++/SimpleMediaPlayerForAndroid/main.c:105: undefined reference to `av_frame_alloc'
    /home/dontrythisathome/Programmazione/C-C++/SimpleMediaPlayerForAndroid/main.c:108: undefined reference to `av_frame_alloc'
    collect2: ld returned 1 exit status
    make[2]: *** [dist/Debug/GNU-Linux-x86/simplemediaplayerforandroid] Errore 1
    make[2]: uscita dalla directory "/home/dontrythisathome/Programmazione/C-C++/SimpleMediaPlayerForAndroid"
    make[1]: *** [.build-conf] Errore 2
    make[1]: uscita dalla directory "/home/dontrythisathome/Programmazione/C-C++/SimpleMediaPlayerForAndroid"
    make: *** [.build-impl] Errore 2

    BUILD FAILED (exit value 2, total time: 143ms)

    I also linked the correct library path and headers path because there is no error with that.

    But when i try to build the program from the terminal with these commands :

    gcc -o prog1 /home/dontrythisathome/Programmazione/C-C++/SimpleMediaPlayerForAndroid/main.c -lavformat -lavcodec -lavutil -lswscale -lz -lbz2

    And the output is different :

    /home/dontrythisathome/Programmazione/C-C++/SimpleMediaPlayerForAndroid/main.c:11:29: fatal error: libavutil/frame.h: File o directory non esistente
    compilation terminated.

    The output says that there is no file or directory existing.
    What is the problem ?