4

我正在编译一个同时使用 ffmpeg 和 Ogre 的项目。现在在 Windows 上,一切正常。

但是当我想用以下代码行编译一个文件时:

Ogre::PixelFormat format = Ogre::PF_BYTE_RGBA;

编译器给出以下错误:

error: ‘AVPixelFormat’ is not a member of ‘Ogre’

这在很多方面都很奇怪,因为我不仅用 :: 指定了 Ogre 命名空间,而且 Ogre 中也没有 AVPixelFormat。gcc 如何将“PixelFormat”与“AVPixelFormat”混淆?

我怎样才能摆脱它?

我很想在这里使用 int 而不是枚举,但是另一个 Ogre 函数要求格式位于 Ogre::PixelFormat 中。

4

2 回答 2

6

首先使用 对其进行预处理gcc -E,然后grep通过文件查找AVPixelFormatPixelFormat。我怀疑你有一个#define 或typedef浮动,你只需要找到发生这种情况的地方,而预编译的源文件就是这将变得明显的地方。

于 2012-12-07T15:57:26.133 回答
3

问题出在 avutil/pixfmt.h 中:

#define PixelFormat AVPixelFormat

这可以防止用户在他们自己的代码中的任何地方使用“PixelFormat”这个词,即使在命名空间中也是如此。

这是对仍然使用旧标识符的旧软件的兼容性破解。

如果您可以编辑代码,解决方案非常简单。只需在 C++ 代码中添加一个

#define FF_API_PIX_FMT 0

在包含 ffmpeg 标头之前。

这将禁用 pixfmt.h 标头中的 if:

#if FF_API_PIX_FMT
#define PixelFormat AVPixelFormat
...

来源:https ://trac.ffmpeg.org/ticket/4216

PS我知道这个问题很老,但不知何故我觉得没有解决方案,我需要一个解决方案,所以我添加了它。

于 2015-04-29T15:31:03.087 回答