Recherche avancée

Médias (3)

Mot : - Tags -/collection

Autres articles (99)

  • Multilang : améliorer l’interface pour les blocs multilingues

    18 février 2011, par

    Multilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
    Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela.

  • Participer à sa traduction

    10 avril 2011

    Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
    Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
    Actuellement MediaSPIP n’est disponible qu’en français et (...)

  • MediaSPIP 0.1 Beta version

    25 avril 2011, par

    MediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

Sur d’autres sites (14020)

  • Converting uint8_t data to AVFrame with FFmpeg

    30 octobre 2017, par J.Lefebvre

    I am currently working in C++ with the Autodesk 3DStudio Max 2014 SDK (toolset 100) and the Ffmpeg library in Visual Studio 2015 and trying to convert a DIB (Device Independent Bitmap) to uint8_t pointer array and then convert these data to an AVFrame.

    I don’t have any errors, but my video is still black and without meta data.
    (no time display, etc)

    I made approximatively the same with a Visual Studio Console application to convert jpeg image sequence from disk and this is working fine.
    (The only difference is that instead of converting jpeg to AVFrame with the Ffmpeg library, I try to convert raw data to an AVFrame.)

    So I think the problem could be either on the DIB conversion to the uint8_t data or the uint8_t data to the AVFrame.
    (The second is more plausible, because I used the SFML library to display a window with my rgb uint8_t* data for debuging and it is working fine.)

    I first initialize the ffmpeg library :

    This function is called once at the beginning.

    int Converter::Initialize(AVCodecID codec_id, int width, int height, int fps, const char *filename)
    {
       avcodec_register_all();
       av_register_all();

       AVCodec *codec;
       inputFrame = NULL;
       codecContext = NULL;
       pkt = NULL;
       file = NULL;
       outputFilename = new char[strlen(filename)]();
       *outputFilename = '\0';
       strcpy(outputFilename, filename);

       int ret;

       //Initializing AVCodecContext and getting PixelFormat supported by encoder
       codec = avcodec_find_encoder(codec_id);
       if (!codec)
           return 1;

       AVPixelFormat pixFormat = codec->pix_fmts[0];
       codecContext = avcodec_alloc_context3(codec);
       if (!codecContext)
           return 1;

       codecContext->bit_rate = 400000;
       codecContext->width = width;
       codecContext->height = height;
       codecContext->time_base.num = 1;
       codecContext->time_base.den = fps;
       codecContext->gop_size = 10;
       codecContext->max_b_frames = 1;
       codecContext->pix_fmt = pixFormat;

       if (codec_id == AV_CODEC_ID_H264)
           av_opt_set(codecContext->priv_data, "preset", "slow", 0);

       //Actually opening the encoder
       if (avcodec_open2(codecContext, codec, NULL) < 0)
           return 1;

       file = fopen(outputFilename, "wb");
       if (!file)
           return 1;

       inputFrame = av_frame_alloc();
       inputFrame->format = codecContext->pix_fmt;
       inputFrame->width = codecContext->width;
       inputFrame->height = codecContext->height;

       ret = av_image_alloc(inputFrame->data, inputFrame->linesize, codecContext->width, codecContext->height, codecContext->pix_fmt, 32);

       if (ret < 0)
           return 1;

       return 0;
    }

    Then for each frame, I get the DIB and convert to a uint8_t* it with this function :

    uint8_t* Util::ToUint8_t(RGBQUAD *data, int width, int height)
    {
       uint8_t* buf = (uint8_t*)data;

       int imageSize = width * height;
       size_t rgbquad_size = sizeof(RGBQUAD);
       size_t total_bytes = imageSize * rgbquad_size;
       uint8_t * pCopyBuffer = new uint8_t[total_bytes];

       for (int x = 0; x < width; x++)
       {
           for (int y = 0; y < height; y++)
           {
               int index = (x + width * y) * rgbquad_size;
               int invertIndex = (x + width* (height - y - 1)) * rgbquad_size;

               //BGRA to RGBA
               pCopyBuffer[index] = buf[invertIndex + 2];
               pCopyBuffer[index + 1] = buf[invertIndex + 1];
               pCopyBuffer[index + 2] = buf[invertIndex];
               pCopyBuffer[index + 3] = 0xFF;
           }
       }

       return pCopyBuffer;
    }

    void GetDIBBuffer(Interface* ip, BITMAPINFO *bmi, uint8_t** outBuffer)
    {
       int size;

       ViewExp& view = ip->GetActiveViewExp();

       view.getGW()->getDIB(NULL, &size);

       bmi = (BITMAPINFO *)malloc(size);
       BITMAPINFOHEADER *bmih = (BITMAPINFOHEADER *)bmi;
       view.getGW()->getDIB(bmi, &size);

       uint8_t * pCopyBuffer = Util::ToUint8_t(bmi->bmiColors, bmih->biWidth, bmih->biHeight);

       *outBuffer = pCopyBuffer;
    }

    This function is used to get the DIB :

    void GetViewportDIB(Interface* ip, BITMAPINFO *bmi, BITMAPINFOHEADER *bmih, BitmapInfo biFile, Bitmap *map)
    {
       int size;

       if (!biFile.Name()[0])
           return;

       ViewExp& view = ip->GetActiveViewExp();

       view.getGW()->getDIB(NULL, &size);

       bmi = (BITMAPINFO *)malloc(size);
       bmih = (BITMAPINFOHEADER *)bmi;

       view.getGW()->getDIB(bmi, &size);

       biFile.SetWidth((WORD)bmih->biWidth);
       biFile.SetHeight((WORD)bmih->biHeight);
       biFile.SetType(BMM_TRUE_32);

       map = TheManager->Create(&biFile);
       map->OpenOutput(&biFile);
       map->FromDib(bmi);
       map->Write(&biFile);
       map->Close(&biFile);
    }

    And after the conversion to AVFrame and video encoding :

    The EncodeFromMem function is call each frame.

    int Converter::EncodeFromMem(const char *outputDir, int frameNumber, uint8_t* data)
    {
       int ret;

       inputFrame->pts = frameNumber;
       EncodeFrame(data, codecContext, inputFrame, &pkt, file);

       return 0;
    }

    static void RgbToYuv(uint8_t *rgb, AVCodecContext *c, AVFrame *frame)
    {
       struct SwsContext *swsCtx = NULL;
       const int in_linesize[1] = { 3 * c->width };// RGB stride
       swsCtx = sws_getCachedContext(swsCtx, c->width, c->height, AV_PIX_FMT_RGB24, c->width, c->height, AV_PIX_FMT_YUV420P, 0, 0, 0, 0);
       sws_scale(swsCtx, (const uint8_t * const *)&rgb, in_linesize, 0, c->height, frame->data, frame->linesize);
    }

    static void EncodeFrame(uint8_t *rgb, AVCodecContext *c, AVFrame *frame, AVPacket **pkt, FILE *file)
    {
       int ret, got_output;

       RgbToYuv(rgb, c, frame);

       *pkt = av_packet_alloc();
       av_init_packet(*pkt);
       (*pkt)->data = NULL;
       (*pkt)->size = 0;

       ret = avcodec_encode_video2(c, *pkt, frame, &got_output);
       if (ret < 0)
       {
           fprintf(stderr, "Error encoding frame/n");
           exit(1);
       }
       if (got_output)
       {
           fwrite((*pkt)->data, 1, (*pkt)->size, file);
           av_packet_unref(*pkt);
       }
    }

    To finish I have a function that write the packets and free the memory :
    This function is called once at the end of the time range.

    int Converter::Finalize()
    {
       int ret, got_output;
       uint8_t endcode[] = { 0, 0, 1, 0xb7 };

       /* get the delayed frames */
       do
       {
           fflush(stdout);
           ret = avcodec_encode_video2(codecContext, pkt, NULL, &got_output);
           if (ret < 0)
           {
               fprintf(stderr, "Error encoding frame/n");
               return 1;
           }
           if (got_output)
           {
               fwrite(pkt->data, 1, pkt->size, file);
               av_packet_unref(pkt);
           }
       } while (got_output);

       fwrite(endcode, 1, sizeof(endcode), file);
       fclose(file);

       avcodec_close(codecContext);
       av_free(codecContext);

       av_frame_unref(inputFrame);
       av_frame_free(&inputFrame);
       //av_freep(&inputFrame->data[0]); //Crash

       delete outputFilename;
       outputFilename = 0;

       return 0;
    }

    EDIT :

    I modify my RgbToYuv function and create another one to convert back the yuv frame to an rgb one.

    This not really solve the problem, but maybe focus the problem on the conversion from YuvToRgb.

    This is the result of the conversion from YUV to RGB :

     ![YuvToRgb result] : https://img42.com/kHqpt+

    static void YuvToRgb(AVCodecContext *c, AVFrame *frame)
    {
       struct SwsContext *img_convert_ctx = sws_getContext(c->width, c->height, AV_PIX_FMT_YUV420P, c->width, c->height, AV_PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL);
       AVFrame * rgbPictInfo = av_frame_alloc();
       avpicture_fill((AVPicture*)rgbPictInfo, *(frame)->data, AV_PIX_FMT_RGB24, c->width, c->height);
       sws_scale(img_convert_ctx, frame->data, frame->linesize, 0, c->height, rgbPictInfo->data, rgbPictInfo->linesize);

       Util::DebugWindow(c->width, c->height, rgbPictInfo->data[0]);
    }
    static void RgbToYuv(uint8_t *rgb, AVCodecContext *c, AVFrame *frame)
    {
       AVFrame * rgbPictInfo = av_frame_alloc();
       avpicture_fill((AVPicture*)rgbPictInfo, rgb, AV_PIX_FMT_RGBA, c->width, c->height);

       struct SwsContext *swsCtx = sws_getContext(c->width, c->height, AV_PIX_FMT_RGBA, c->width, c->height, AV_PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL);
       avpicture_fill((AVPicture*)frame, rgb, AV_PIX_FMT_YUV420P, c->width, c->height);    
       sws_scale(swsCtx, rgbPictInfo->data, rgbPictInfo->linesize, 0, c->height, frame->data, frame->linesize);

       YuvToRgb(c, frame);
    }
  • cap.isOpened() : returns false in CentOS for Python 3 and OpenCV 3.1.0

    29 octobre 2017, par Mona Jalal

    So cap from opencv 3 doesn’t work in CentOS. I had no problem in OSX or Windows 7 which I tried initially.
    Here is the example code :

    import cv2
    cap = cv2.VideoCapture('/home/grad3/jalal/PycharmProjects/hw4_cs58‌​5/Concession_LAN_8‌​‌​00‌​k.mp4',cv2.CAP_FFMPEG)

    if not cap.isOpened():
       print('not opened')

    while True:
       ret,frame = cap.read()

       if ret == False:
           print('frame empty')
           break
       cv2.imshow('frame', frame)
       if cv2.waitKey(1) == ord('q'):
           break

    And I get :

    /usr/local/anaconda3/bin/python /home/grad3/jalal/PycharmProjects/hw4_cs585/test.py
    not opened
    frame empty

    Process finished with exit code 0

    I can open the video using ffplay vid_name and also here is the result of https://pastebin.com/YGk2DDCi here https://pastebin.com/HSyHSsEZ (ffmpeg codecs). How should I fix this ?

    I have opencv 3.1.0 and here’s some sys info.

    $ uname -a
    Linux goku.bu.edu 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

    and

    $ lsb_release -a
    LSB Version:    :core-4.1-amd64:core-4.1-noarch
    Distributor ID: CentOS
    Description:    CentOS Linux release 7.4.1708 (Core)
    Release:    7.4.1708
    Codename:   Core

    cv2. getBuildInformation()
    General configuration for OpenCV 3.1.0 =====================================
     Version control:               unknown

     Platform:
       Host:                        Linux 4.8.0-46-generic x86_64
       CMake:                       3.6.3
       CMake generator:             Unix Makefiles
       CMake build tool:            /usr/bin/gmake
       Configuration:               Release

     C/C++:
       Built as dynamic libs?:      YES
       C++ Compiler:                /opt/rh/devtoolset-2/root/usr/bin/c++  (ver 4.8.2)
       C++ flags (Release):         -I/cs/software/anaconda3/include    -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -fopenmp -O3 -DNDEBUG  -DNDEBUG
       C++ flags (Debug):           -I/cs/software/anaconda3/include    -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -fopenmp -g  -O0 -DDEBUG -D_DEBUG
       C Compiler:                  /opt/rh/devtoolset-2/root/usr/bin/cc
       C flags (Release):           -I/cs/software/anaconda3/include    -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fopenmp -O3 -DNDEBUG  -DNDEBUG
       C flags (Debug):             -I/cs/software/anaconda3/include    -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fopenmp -g  -O0 -DDEBUG -D_DEBUG
       Linker flags (Release):
       Linker flags (Debug):
       Precompiled headers:         YES
       Extra dependencies:          /cs/software/anaconda3/lib/libjpeg.so /cs/software/anaconda3/lib/libpng.so /cs/software/anaconda3/lib/libtiff.so /cs/software/anaconda3/lib/libhdf5.so /usr/lib64/librt.so /usr/lib64/libpthread.so /cs/software/anaconda3/lib/libz.so /usr/lib64/libdl.so /usr/lib64/libm.so dl m pthread rt
       3rdparty dependencies:       libwebp libjasper IlmImf libprotobuf

     OpenCV modules:
       To be built:                 core flann hdf imgproc ml photo reg surface_matching video dnn fuzzy imgcodecs shape videoio highgui objdetect plot superres xobjdetect xphoto bgsegm bioinspired dpm face features2d line_descriptor saliency text calib3d ccalib datasets rgbd stereo structured_light tracking videostab xfeatures2d ximgproc aruco optflow stitching python3
       Disabled:                    world contrib_world
       Disabled by dependency:      -
       Unavailable:                 cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2 ts viz cvv matlab sfm

     GUI:
       QT:                          NO
       GTK+:                        NO
       GThread :                    NO
       GtkGlExt:                    NO
       OpenGL support:              NO
       VTK support:                 NO

     Media I/O:
       ZLib:                        /cs/software/anaconda3/lib/libz.so (ver 1.2.8)
       JPEG:                        /cs/software/anaconda3/lib/libjpeg.so (ver 80)
       WEBP:                        build (ver 0.3.1)
       PNG:                         /cs/software/anaconda3/lib/libpng.so (ver 1.6.27)
       TIFF:                        /cs/software/anaconda3/lib/libtiff.so (ver 42 - 4.0.6)
       JPEG 2000:                   build (ver 1.900.1)
       OpenEXR:                     build (ver 1.7.1)
       GDAL:                        NO

     Video I/O:
       DC1394 1.x:                  NO
       DC1394 2.x:                  NO
       FFMPEG:                      NO
         codec:                     NO
         format:                    NO
         util:                      NO
         swscale:                   NO
         resample:                  NO
         gentoo-style:              NO
       GStreamer:                   NO
       OpenNI:                      NO
       OpenNI PrimeSensor Modules:  NO
       OpenNI2:                     NO
       PvAPI:                       NO
       GigEVisionSDK:               NO
       UniCap:                      NO
       UniCap ucil:                 NO
       V4L/V4L2:                    YES/YES
       XIMEA:                       NO
       Xine:                        NO
       gPhoto2:                     NO

     Parallel framework:            OpenMP

     Other third-party libraries:
       Use IPP:                     9.0.1 [9.0.1]
            at:                     /opt/conda/conda-bld/opencv_1491943704081/work/opencv-3.1.0/3rdparty/ippicv/unpack/ippicv_lnx
       Use IPP Async:               NO
       Use VA:                      NO
       Use Intel VA-API/OpenCL:     NO
       Use Eigen:                   YES (ver 3.2.8)
       Use Cuda:                    NO
       Use OpenCL:                  NO
       Use custom HAL:              NO

     Python 2:
       Interpreter:                 (ver 3.5.3)

     Python 3:
       Interpreter:                 /cs/software/anaconda3/bin/python (ver 3.5.3)
       Libraries:                   /cs/software/anaconda3/lib/libpython3.5m.so (ver 3.5.3)
       numpy:                       /cs/software/anaconda3/lib/python3.5/site-packages/numpy/core/include (ver 1.12.1)
       packages path:               /cs/software/anaconda3/lib/python3.5/site-packages

     Python (for build):            

     Java:
       ant:                         NO
       JNI:                         NO
       Java wrappers:               NO
       Java tests:                  NO

     Matlab:                        NO

     Tests and samples:
       Tests:                       NO
       Performance tests:           NO
       C/C++ Examples:              NO

     Install path:                  /cs/software/anaconda3

     cvconfig.h is in:              /opt/conda/conda-bld/opencv_1491943704081/work/opencv-3.1.0/build
    -----------------------------------------------------------------

    UPDATE : tried .avi and .flv formats and the same problem !

  • OpenGL + ffmpeg slow in fullscreen mode

    28 mars 2013, par fusha

    I'm trying to play a video file using ffmpeg and OpenGL + SDL. The playback is very slow and flickering. The code is an accumulation from different blogs/sites and I'm not really very sure what is going on. Sorry to post such a long code but this is the minimized version. My actual code does not play well in windowed mode also. Somehow the version below plays smoothly in windowed mode.

    #ifndef INT64_C
    #define INT64_C(c) (int64_t)(c)
    #define UINT64_C(c) (uint64_t)(c)
    #endif

    extern "C" {
    #include <libavcodec></libavcodec>avcodec.h>
    #include <libavformat></libavformat>avformat.h>
    #include <libswscale></libswscale>swscale.h>
    }
    #include
    #include <gl></gl>gl.h>

    int fullscreen = 1, videoStream = -1, frameFinished=0;
    const PixelFormat CONV_FORMAT = PIX_FMT_RGB24;
    const char *fname = "moviesample.mp4";
    AVFormatContext *pFormatCtx = NULL;
    AVCodecContext  *pCodecCtx = NULL;
    AVCodec         *pCodec = NULL;
    AVFrame         *pFrame = 0, *pFrameRGB = 0;
    AVPacket        packet;
    AVDictionary    *optionsDict = NULL;
    struct SwsContext *sws_ctx = NULL;
    GLuint texture_video;

    void av_init();
    void draw_frame();

    int main(int argc, const char **argv) {
     SDL_Event event;

     av_init();

     uint16_t width = fullscreen ? 1600 : pCodecCtx->width;
     uint16_t height = fullscreen ? 900 : pCodecCtx->height;

     SDL_Init(SDL_INIT_EVERYTHING);
     SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
     SDL_SetVideoMode(width, height, 32,
         SDL_OPENGL | SDL_HWPALETTE  | SDL_HWSURFACE | SDL_HWACCEL |
         (fullscreen ? SDL_FULLSCREEN : 0)
         );

     glEnable(GL_TEXTURE_2D);
     glClearColor(0.0f, 0.4f, 0.4f, 0.0f);
     glViewport(0, 0, width, height);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     glMatrixMode( GL_MODELVIEW );
     glLoadIdentity( );
     glShadeModel( GL_SMOOTH );
     glGenTextures(1, &amp;texture_video);
     glBindTexture(GL_TEXTURE_2D, texture_video);
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pCodecCtx->width, pCodecCtx->height,
         0, GL_RGB, GL_UNSIGNED_BYTE, pFrameRGB->data[0]);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

     sws_ctx = sws_getCachedContext(sws_ctx, pCodecCtx->width, pCodecCtx->height,
         pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height, CONV_FORMAT,
         SWS_BICUBIC, NULL, NULL, NULL);

     while (1) {

       draw_frame();

       SDL_GL_SwapBuffers();

       SDL_PollEvent(&amp;event);

       switch(event.type) {
         case SDL_QUIT:
           SDL_Quit();
           exit(0);
           break;
         case SDL_KEYDOWN:
           if (event.key.keysym.sym == SDLK_ESCAPE) {
             SDL_Quit();
             exit(0);
           }
           break;
         default:
           break;
       }
     }
     return 0;
    }

    void draw_frame() {
     if (av_read_frame(pFormatCtx, &amp;packet)>=0) {
       if(packet.stream_index==videoStream) {
         avcodec_decode_video2(pCodecCtx, pFrame, &amp;frameFinished, &amp;packet);
         if(frameFinished) {
           sws_scale (sws_ctx, (uint8_t const * const *)pFrame->data,
               pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data,
               pFrameRGB->linesize);
           glBindTexture( GL_TEXTURE_2D, texture_video );
           glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
           glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
           glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pCodecCtx->width,
               pCodecCtx->height, GL_RGB, GL_UNSIGNED_BYTE, pFrameRGB->data[0]);
         }

         glClear(GL_COLOR_BUFFER_BIT);
         glScalef(1.0f, -1.0f, 1.0f);
         glBegin(GL_QUADS);
         glTexCoord2f(0.0f, 0.0f);
         glVertex3f(-1.0f, -1.0f, 0.0f);
         glTexCoord2f(0.0f, 1.0f);
         glVertex3f(-1.0f, 1.0f, 0.0f);
         glTexCoord2f(1.0f, 1.0f);
         glVertex3f(1.0f, 1.0f, 0.0f);
         glTexCoord2f(1.0f, 0.0f);
         glVertex3f(1.0f, -1.0f, 0.0f);
         glEnd();
         glScalef(1.0f, -1.0f, 1.0f);

       }
       av_free_packet(&amp;packet);
     } else {
       av_seek_frame(pFormatCtx, videoStream, 0,  AVSEEK_FLAG_FRAME);
     }

    }

    void av_init() {
     av_register_all();
     avformat_open_input(&amp;pFormatCtx, fname, NULL, NULL);
     avformat_find_stream_info(pFormatCtx, NULL);
     for(uint8_t i=0; inb_streams; i++)
       if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
         videoStream=i;
         break;
       }
     pCodecCtx = pFormatCtx->streams[videoStream]->codec;
     pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
     avcodec_open2(pCodecCtx, pCodec, &amp;optionsDict);
     pFrame = avcodec_alloc_frame();
     pFrameRGB = avcodec_alloc_frame();
     int bytes = avpicture_get_size(CONV_FORMAT, pCodecCtx->width,
       pCodecCtx->height);          
     uint8_t *video_buffer = (uint8_t*)av_malloc( bytes * sizeof(uint8_t) );
     avpicture_fill((AVPicture *)pFrameRGB, video_buffer, CONV_FORMAT,
         pCodecCtx->width, pCodecCtx->height);
    }