Я пытаюсь использовать DLL FFmpeg с помощью Visual Studio 2012, и я получаю нарушение прав доступа во время выполнения, когда я звоню avcodec_find_encoder
, Вот код:
// TestFFmpeg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
extern "C" {
#include "libavcodec\avcodec.h"#include "libavformat\avformat.h"}
#define INBUF_SIZE 4096
int _tmain(int argc, _TCHAR* argv[])
{
AVCodec *codec;
const char *videoFilename = "C:\\Users\\Public\\Videos\\Sample Videos\\Wildlife.wmv";
av_register_all(); // This works; however, no parameters or return values.
codec = avcodec_find_encoder(CODEC_ID_WMV3); // Run time Access Violation HERE
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
return 0;
}
Вот сообщение об ошибке:
Необработанное исключение в 0x75C18B60 (msvcrt.dll) в TestFFmpeg.exe: 0xC0000005: расположение чтения нарушения доступа 0x00000049.
Трассировка стека:
msvcrt.dll!_strcmp() Unknown
avcodec-54.dll!6a56caac() Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for avcodec-54.dll]
> TestFFmpeg.exe!wmain(int argc, wchar_t * * argv) Line 23 C++
TestFFmpeg.exe!__tmainCRTStartup() Line 533 C
TestFFmpeg.exe!wmainCRTStartup() Line 377 C
kernel32.dll!@BaseThreadInitThunk@12() Unknown
ntdll.dll!___RtlUserThreadStart@8() Unknown
ntdll.dll!__RtlUserThreadStart@8() Unknown
Я предполагаю, что есть проблема с возвратом codec
указатель, но я новичок в C ++ и понятия не имею, как это исправить. Я попробовал соглашения о вызовах cdecl, stdcall и fastcall — ни одна из них не исправила проблему. Я использую последнюю 32-битную DLL от Zeranoe. Какие-либо предложения?
РЕДАКТИРОВАТЬ:
Я вызвал другие функции в DLL, и они работают. Например, avformat_open_input
работает правильно. Я могу передать параметры, и функция возвращает успешное возвращаемое значение (0) и заполняет структуру контекста формата. av_find_stream_info
работает так же. Я до сих пор не могу понять, почему avcodec_find_decoder
создает нарушение доступа.
Наконец-то исправили. Я сделал два шага, и я не уверен, какой из них работал (хе):
Кажется, теперь все работает нормально.
Других решений пока нет …