2014-02-18 37 views
0

就我而言,我正在尝试使用QtMultimedia和libffmpeg作为解码器。 将ffmpeg导入为extern“C”,但ffmpeg的AVPixelFormat与QVideoFrame的PixelFormat相冲突。如果extern“C”包含与Qt库冲突,该怎么办?

确切错误:

'AVPixelFormat' : is not a member of 'QVideoFrame'

有谁知道一个可能的解决方案?

编辑:代码部分。

1部分:Qt VideoWidget Sample

第2部分:libffmpeg的使用,基于dranger tutorial

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

后您的代码.... – Sumeet

+0

你读过这个:http://qt-project.org/wiki/Qt-In-Namespace - 听起来像你可以使用他们的类名字空间来编译Qt,这可能会解决你的问题 – duselbaer

+0

QVideoFrame中的枚举是“PixelForm在”。您的变量是“AVPixelFormat”。我不明白应该如何冲突(并且错误消息不表明它)。添加导致错误的代码。 –

回答

1

这是通过在FFmpeg的pixfmt.h以下行造成

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

#undef PixelFormat 
#include <qt headers> 
0

你不能一味的extern “C” 标头是否含有C++代码。即使你通过这种碰撞,你也会在链接时遇到问题,当你的调用尝试链接到“C”符号时,但ffmpeg库会用C++链接导出它们。

如果您要导出C符号,我的建议是创建一个包装函数,该函数导出C但将C++调用放入库中。

#define PixelFormat AVPixelFormat

你可以试试下面的技巧,然后:

+0

afaik,ffmpeg是纯C的。我现在正在尝试的是几天前我想编译VS2013的Qt。而且,正如duselbär所说,会尝试使用命名空间设置进行编译。 – sputnik

+0

名称空间是C++ ... – Lother

相关问题