我正在尝试使用 Visual Studio 2012 使用 FFmpeg dll,当我调用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;
}
这是错误消息:
TestFFmpeg.exe 中 0x75C18B60 (msvcrt.dll) 处的未处理异常: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 调用约定——没有一个能纠正这个问题。我正在使用来自 Zeranoe 的最新 32 位 DLL。有什么建议么?
编辑:我在 DLL 中调用了其他函数并且它们可以工作。例如,avformat_open_input
正常工作。我可以传递参数并且函数返回一个成功的返回值 (0) 并填充格式上下文结构。 av_find_stream_info
也可以。我仍然无法弄清楚为什么avcodec_find_decoder
会产生访问冲突。