Здравствуйте.
Используя 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");
Сообщение отредактировал ViGOur - 20.8.2013, 16:57
Причина редактирования: Учимся использовать тег CODE