Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Другие библиотеки _ чтение видео в ffmpeg

Автор: Андрей Егорович 20.8.2013, 16:47

Здравствуйте.
Используя ffmpeg в visual studio 2008 пытаюсь прочесть видео используя чуть переделанный пример из http://svn.perian.org/ffmpeg/libavcodec/api-example.c, но после сохранения изображение получается очень сильно искажённым.
Функции вытаскиваю из dll

...
static AVCodec * (*find_decoder) (enum AVCodecID id);
static AVCodecContext *(*alloc_context)(AVCodec *);
static void (*init_packet)(AVPacket *pkt);
static AVFrame* (*alloc_frame)(void);
static int (*codec_open2)(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
static int (*codec_decode_video2) (AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, const AVPacket *avpkt);
static void (*avcodec_init)(void);
...
HINSTANCE h = LoadLibrary(TEXT("avcodec-55.dll"));
     find_decoder = NULL;
     alloc_context = NULL;
     init_packet = NULL;
     alloc_frame = NULL;
     codec_open2 = NULL;
     codec_decode_video2 = NULL;
     avcodec_init = NULL;

     if (!h) {
         return false;
     }

     find_decoder = (AVCodec *(*)(enum AVCodecID id))GetProcAddress(h, "avcodec_find_decoder");
     alloc_context = (AVCodecContext *(*)(AVCodec *))GetProcAddress(h, "avcodec_alloc_context3");
     alloc_frame = (AVFrame *(*)(void))GetProcAddress(h, "avcodec_alloc_frame");
     init_packet = (void (*)(AVPacket *))GetProcAddress(h, "av_init_packet");
     codec_open2 = (int (*)(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options))GetProcAddress(h, "avcodec_open2");
     codec_decode_video2 = (int (*) (AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, const AVPacket *avpkt))GetProcAddress(h, "avcodec_decode_video2");
     avcodec_init = (void (*)(void))GetProcAddress(h, "avcodec_init");

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)