Panda3D ffmpeg module doesn't compile with the most recent versions of ffmpeg, as the ArchLinux users will have noticed (since the package version of ffmpeg there is 1:1.0-1).
Some deprecated functions used by Panda3D have been removed.
Someone talked about it in the ArchLinux forum:
https://bbs.archlinux.org/viewtopic.php?id=145045
He presented downgrading as a solution, but it's more of a workaround :( !
I'll use his post to show you the errors and warning during compilation:
In file included from panda/src/movies/p3movies_composite2.cxx:3:0:
panda/src/movies/ffmpegVirtualFile.cxx: In member function ‘bool FfmpegVirtualFile::open_vfs(const Filename&)’:
panda/src/movies/ffmpegVirtualFile.cxx:123:68: error: ‘av_open_input_file’ was not declared in this scope
panda/src/movies/ffmpegVirtualFile.cxx: In member function ‘bool FfmpegVirtualFile::open_subfile(const SubfileInfo&)’:
panda/src/movies/ffmpegVirtualFile.cxx:179:68: error: ‘av_open_input_file’ was not declared in this scope
panda/src/movies/ffmpegVirtualFile.cxx: In member function ‘void FfmpegVirtualFile::close()’:
panda/src/movies/ffmpegVirtualFile.cxx:197:5: warning: ‘void av_close_input_file(AVFormatContext*)’ is deprecated (declared at /usr/include/libavformat/avformat.h:1533) [-Wdeprecated-declarations]
panda/src/movies/ffmpegVirtualFile.cxx:197:40: warning: ‘void av_close_input_file(AVFormatContext*)’ is deprecated (declared at /usr/include/libavformat/avformat.h:1533) [-Wdeprecated-declarations]
panda/src/movies/ffmpegVirtualFile.cxx: In static member function ‘static void FfmpegVirtualFile::register_protocol()’:
panda/src/movies/ffmpegVirtualFile.cxx:231:10: error: ‘URLProtocol’ does not name a type
panda/src/movies/ffmpegVirtualFile.cxx:232:3: error: ‘protocol’ was not declared in this scope
panda/src/movies/ffmpegVirtualFile.cxx:249:52: error: ‘av_register_protocol2’ was not declared in this scope
panda/src/movies/ffmpegVirtualFile.cxx: In static member function ‘static int FfmpegVirtualFile::pandavfs_open(URLContext*, const char*, int)’:
panda/src/movies/ffmpegVirtualFile.cxx:271:4: error: invalid use of incomplete type ‘struct URLContext’
In file included from panda/src/movies/ffmpegAudioCursor.h:26:0,
from panda/src/movies/ffmpegAudio.cxx:19,
from panda/src/movies/p3movies_composite2.cxx:1:
panda/src/movies/ffmpegVirtualFile.h:31:8: error: forward declaration of ‘struct URLContext’
In file included from panda/src/movies/p3movies_composite2.cxx:3:0:
panda/src/movies/ffmpegVirtualFile.cxx: In static member function ‘static int FfmpegVirtualFile::pandavfs_read(URLContext*, unsigned char*, int)’:
panda/src/movies/ffmpegVirtualFile.cxx:282:52: error: invalid use of incomplete type ‘struct URLContext’
In file included from panda/src/movies/ffmpegAudioCursor.h:26:0,
from panda/src/movies/ffmpegAudio.cxx:19,
from panda/src/movies/p3movies_composite2.cxx:1:
panda/src/movies/ffmpegVirtualFile.h:31:8: error: forward declaration of ‘struct URLContext’
In file included from panda/src/movies/p3movies_composite2.cxx:3:0:
panda/src/movies/ffmpegVirtualFile.cxx: In static member function ‘static int64_t FfmpegVirtualFile::pandavfs_seek(URLContext*, int64_t, int)’:
panda/src/movies/ffmpegVirtualFile.cxx:324:52: error: invalid use of incomplete type ‘struct URLContext’
In file included from panda/src/movies/ffmpegAudioCursor.h:26:0,
from panda/src/movies/ffmpegAudio.cxx:19,
from panda/src/movies/p3movies_composite2.cxx:1:
panda/src/movies/ffmpegVirtualFile.h:31:8: error: forward declaration of ‘struct URLContext’
In file included from panda/src/movies/p3movies_composite2.cxx:3:0:
panda/src/movies/ffmpegVirtualFile.cxx: In static member function ‘static int FfmpegVirtualFile::pandavfs_close(URLContext*)’:
panda/src/movies/ffmpegVirtualFile.cxx:365:4: error: invalid use of incomplete type ‘struct URLContext’
In file included from panda/src/movies/ffmpegAudioCursor.h:26:0,
from panda/src/movies/ffmpegAudio.cxx:19,
from panda/src/movies/p3movies_composite2.cxx:1:
panda/src/movies/ffmpegVirtualFile.h:31:8: error: forward declaration of ‘struct URLContext’
In file included from panda/src/movies/p3movies_composite2.cxx:4:0:
panda/src/movies/ffmpegAudioCursor.cxx: In constructor ‘FfmpegAudioCursor::FfmpegAudioCursor(FfmpegAudio*)’:
panda/src/movies/ffmpegAudioCursor.cxx:55:7: warning: ‘int av_find_stream_info(AVFormatContext*)’ is deprecated (declared at /usr/include/libavformat/avformat.h:1357) [-Wdeprecated-declarations]
panda/src/movies/ffmpegAudioCursor.cxx:55:38: warning: ‘int av_find_stream_info(AVFormatContext*)’ is deprecated (declared at /usr/include/libavformat/avformat.h:1357) [-Wdeprecated-declarations]
panda/src/movies/ffmpegAudioCursor.cxx:81:6: warning: ‘int avcodec_open(AVCodecContext*, AVCodec*)’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3380) [-Wdeprecated-declarations]
panda/src/movies/ffmpegAudioCursor.cxx:81:42: warning: ‘int avcodec_open(AVCodecContext*, AVCodec*)’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3380) [-Wdeprecated-declarations]
panda/src/movies/ffmpegAudioCursor.cxx: In member function ‘bool FfmpegAudioCursor::reload_buffer()’:
panda/src/movies/ffmpegAudioCursor.cxx:218:17: warning: ‘int avcodec_decode_audio3(AVCodecContext*, int16_t*, int*, AVPacket*)’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3658) [-Wdeprecated-declarations]
panda/src/movies/ffmpegAudioCursor.cxx:218:74: warning: ‘int avcodec_decode_audio3(AVCodecContext*, int16_t*, int*, AVPacket*)’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3658) [-Wdeprecated-declarations]
panda/src/movies/ffmpegAudioCursor.cxx: In member function ‘virtual void FfmpegAudioCursor::seek(double)’:
panda/src/movies/ffmpegAudioCursor.cxx:266:6: warning: ‘int avcodec_open(AVCodecContext*, AVCodec*)’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3380) [-Wdeprecated-declarations]
panda/src/movies/ffmpegAudioCursor.cxx:266:42: warning: ‘int avcodec_open(AVCodecContext*, AVCodec*)’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3380) [-Wdeprecated-declarations]
In file included from panda/src/movies/p3movies_composite2.cxx:5:0:
panda/src/movies/ffmpegVideoCursor.cxx: In member function ‘bool FfmpegVideoCursor::open_stream()’:
panda/src/movies/ffmpegVideoCursor.cxx:512:7: warning: ‘int av_find_stream_info(AVFormatContext*)’ is deprecated (declared at /usr/include/libavformat/avformat.h:1357) [-Wdeprecated-declarations]
panda/src/movies/ffmpegVideoCursor.cxx:512:38: warning: ‘int av_find_stream_info(AVFormatContext*)’ is deprecated (declared at /usr/include/libavformat/avformat.h:1357) [-Wdeprecated-declarations]
panda/src/movies/ffmpegVideoCursor.cxx:544:7: warning: ‘int avcodec_open(AVCodecContext*, AVCodec*)’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3380) [-Wdeprecated-declarations]
panda/src/movies/ffmpegVideoCursor.cxx:544:43: warning: ‘int avcodec_open(AVCodecContext*, AVCodec*)’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3380) [-Wdeprecated-declarations]
Storing dependency cache.
Elapsed Time: 8 min 5 sec
The following command returned a non-zero value: g++ -ftemplate-depth-30 -fPIC -c -o built/tmp/p3movies_composite2.o -Ibuilt/tmp -Ibuilt/include -I/usr/include/python2.7 -DMAKEPANDA= -Ipanda/src/movies -pthread -msse2 -O2 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -DBUILDING_PANDA panda/src/movies/p3movies_composite2.cxx
Attached is as partial solution. It fixes some of the problems I encountered regarding ffmpegAudioCurs or.cxx and ffmpegVideoCurs or.cxx. But the ffmpegVirtualFi le.cxx is a different subject. The whole API was trashed and redone, so the whole class needs to be overhauled now.
Old ffmpeg support is old. As the packager of a rolling release distro, I recommend removing the support for the older APIs (say, 5+ years) and add some minimum ffmpeg version as dependency. It would simplify greatly those #if checks of my patch and a lot more of previous code. Even other distros don't use any ffmpeg older than 0.8 anymore, so I don't think anyone loses. Food for thought.