编译OSG和FFMPEG冲突的问题


As reported on http://bugs.gentoo.org/347481 the osg 2.8.3 release (and
current trunk probably as well, as far as I can tell) has problems
compiling against recent ffmpeg snapshots. The critical commit there is
SVN revision 25652 from 2010-11-02, which is now in git:

http://git.ffmpeg.org/?p=ffmpeg.git;a=commitdiff;h=262d1c5d2206467809fd

By default it introduces a preprocessor macro called SampleFormat:

#define SampleFormat AVSampleFormat

As a consequence, all references to SampleFormat in osg will be
rewritten, even if they refer to some other C++ namespace. This leads to
errors like this:

error: ‘AVSampleFormat’ in class ‘osg::AudioStream’ does not name a type

Luckily the commit also provides a means to avoid the definition. Simply
include this line before including the av*.h from ffmpeg:

#define FF_API_OLD_SAMPLE_FMT 0

I'd suggest you include this line in FFmpegHeaders.hpp:

--- OpenSceneGraph-2.8.3.orig/src/osgPlugins/ffmpeg/FFmpegHeaders.hpp
+++ OpenSceneGraph-2.8.3/src/osgPlugins/ffmpeg/FFmpegHeaders.hpp
@@ -6,6 +6,7 @@
extern "C"
{
#define __STDC_CONSTANT_MACROS
+#define FF_API_OLD_SAMPLE_FMT 0
#include <errno.h> // for error codes defined in avformat.h
#include <stdint.h>
#include <avcodec.h>

You can also download this patch from the Gentoo bug report:
http://bugs.gentoo.org/attachment.cgi?id=261477
Feel free to include this in the osg sources.

If you want to reply to this mail, please cc a personal copy to me, as I
won't follow list mails too closely.

Greetings,
Martin von Gagern
原文地址:https://www.cnblogs.com/juncent/p/2049044.html