Recherche avancée

Médias (3)

Mot : - Tags -/plugin

Autres articles (62)

  • 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 ;

  • List of compatible distributions

    26 avril 2011, par

    The table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
    If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...)

Sur d’autres sites (10148)

  • mov : store display matrix in a stream side data

    16 mai 2014, par Vittorio Giovara
    mov : store display matrix in a stream side data
    

    Signed-off-by : Anton Khirnov <anton@khirnov.net>

    • [DBH] libavformat/isom.h
    • [DBH] libavformat/mov.c
  • hevc : store the VPS list as an AVBufferRef, just like the others *PS

    10 décembre 2013, par Gildas Cocherel
    hevc : store the VPS list as an AVBufferRef, just like the others *PS
    

    Signed-off-by : Anton Khirnov <anton@khirnov.net>

    • [DBH] libavcodec/hevc.c
    • [DBH] libavcodec/hevc.h
    • [DBH] libavcodec/hevc_ps.c
  • Why i am not able to store AVFrame* to buffer

    14 octobre 2019, par sam

    I want to store AVframe* to a buffer.
    I am reading a AVI file and would want to store the AVframe* to a std::vector Buffer.

    I am able to save AVFrame *av_frame to the buffer but i want to save AVFrame *gl_frame to the buffer and reuse it later to update GL_TEXTURE_2D.

    But nothing gets saved in the buffer when i try to save AVFrame *gl_frame.

    This is the structure for Application data.

    typedef struct {

       AVFormatContext *fmt_ctx;
       int stream_idx;
       AVStream *video_stream;
       AVCodecContext *codec_ctx;
       AVCodec *decoder;
       AVPacket *packet;
       AVFrame *av_frame;
       AVFrame *gl_frame;
       struct SwsContext *conv_ctx;
       unsigned int  frame_tex;

    }AppData;

    i Initialize the structure.

    // Do Clip Realted Stuff
       avformat_network_init();
       initializeAppData();

       // open video
       if (avformat_open_input(&amp;data.fmt_ctx, stdstrPathOfVideo.c_str(), NULL, NULL) &lt; 0) {
           clearAppData();
           return;
       }

       // find stream info
       if (avformat_find_stream_info(data.fmt_ctx, NULL) &lt; 0) {
           clearAppData();
           return;
       }

       // find the video stream
       for (unsigned int i = 0; i &lt; data.fmt_ctx->nb_streams; ++i)
       {
           if (data.fmt_ctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
           {
               data.stream_idx = i;
               break;
           }
       }


       if (data.stream_idx == -1)
       {
           clearAppData();
           return;
       }

       data.video_stream = data.fmt_ctx->streams[data.stream_idx];
       data.codec_ctx = data.video_stream->codec;

       // find the decoder
       data.decoder = avcodec_find_decoder(data.codec_ctx->codec_id);
       if (data.decoder == NULL)
       {
           clearAppData();
           return;
       }

       // open the decoder
       if (avcodec_open2(data.codec_ctx, data.decoder, NULL) &lt; 0)
       {
           clearAppData();
           return;
       }

       // allocate the video frames
       data.av_frame = av_frame_alloc();
       data.gl_frame = av_frame_alloc();
       int size = avpicture_get_size(AV_PIX_FMT_RGBA, data.codec_ctx->width,
           data.codec_ctx->height);
       uint8_t *internal_buffer = (uint8_t *)av_malloc(size * sizeof(uint8_t));
       avpicture_fill((AVPicture *)data.gl_frame, internal_buffer, AV_PIX_FMT_RGBA,
           data.codec_ctx->width, data.codec_ctx->height);
       data.packet = (AVPacket *)av_malloc(sizeof(AVPacket));

    Current code works when i save data.av_frame but when i try to replace it with data.gl_frame than nothing gets saved.

    How can i save data->gl_frame to buffer.

    bool Sum_ClipPlayer::Sum_ClipPlayer::initReadFrame()
    {
       do {

           glBindTexture(GL_TEXTURE_2D, data.frame_tex);
           int error = av_read_frame(data.fmt_ctx, data.packet);

           if (error)
           {          
               av_free_packet(data.packet);
               return false;
           }


           if (data.packet->stream_index == data.stream_idx)
           {
               int frame_finished = 0;

               if (avcodec_decode_video2(data.codec_ctx, data.av_frame, &amp;frame_finished,
                   data.packet) &lt; 0) {
                   av_free_packet(data.packet);
                   return false;
               }

               if (frame_finished)
               {              
                   if (!data.conv_ctx)
                   {
                       data.conv_ctx = sws_getContext(data.codec_ctx->width,
                           data.codec_ctx->height, data.codec_ctx->pix_fmt,
                           data.codec_ctx->width, data.codec_ctx->height, AV_PIX_FMT_RGBA,
                           SWS_BICUBIC, NULL, NULL, NULL);
                   }
                   sws_scale(data.conv_ctx, data.av_frame->data, data.av_frame->linesize, 0,
                       data.codec_ctx->height, data.gl_frame->data, data.gl_frame->linesize);

                   glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, data.codec_ctx->width,
                       data.codec_ctx->height, GL_RGBA, GL_UNSIGNED_BYTE,
                       data.gl_frame->data[0]);    


                   AVFrame *cachedValue = av_frame_alloc();
                   cachedValue->format = data.av_frame->format;
                   cachedValue->width = data.av_frame->width;
                   cachedValue->height = data.av_frame->height;
                   cachedValue->channels = data.av_frame->channels;
                   cachedValue->channel_layout = data.av_frame->channel_layout;
                   cachedValue->nb_samples = data.av_frame->nb_samples;
                   av_frame_get_buffer(cachedValue, 32);
                   av_frame_copy(cachedValue, data.av_frame);
                   av_frame_copy_props(cachedValue, data.av_frame);
                   cache.push_back(cachedValue);
               }
           }


       } while (data.packet->stream_index != data.stream_idx);
       return true;
    }