Skip to content

0.48.0 fails to build with ffmpeg >= 7.0

0.48.0 fails to build with the just released ffmpeg 7.0:

[...]
[  1%] Building CXX object extern/osg-ffmpeg-videoplayer/CMakeFiles/osg-ffmpeg-videoplayer.dir/videostate.cpp.o
cd /var/tmp/paludis/build/games-engines-openmw-0.48.0/work/build/extern/osg-ffmpeg-videoplayer && /usr/bin/x86_64-pc-linux-gnu-c++ -DBOOST_NO_CXX11_SCOPED_ENUMS=ON -DMYGUI_DONT_REPLACE_NULLPTR -DNO_LUAJIT -DTIXML_USE_STL -D__STDC_CONSTANT_MACROS -I/etc/env.d/alternatives/ffmpeg/7/usr/x86_64-pc-linux-gnu/include -isystem /var/tmp/paludis/build/games-engines-openmw-0.48.0/work/openmw-openmw-0.48.0/extern/sol_config -isystem /var/tmp/paludis/build/games-engines-openmw-0.48.0/work/openmw-openmw-0.48.0/extern/sol3 -isystem /usr/x86_64-pc-linux-gnu/include/lua5.1 -isystem /usr/x86_64-pc-linux-gnu/include/bullet -isystem /usr/x86_64-pc-linux-gnu/include/AL -isystem /usr/x86_64-pc-linux-gnu/include/MYGUI -isystem /usr/x86_64-pc-linux-gnu/include/SDL2 -isystem /var/tmp/paludis/build/games-engines-openmw-0.48.0/work/openmw-openmw-0.48.0/. -Wall -Wextra -Wundef -Wno-unused-parameter -pedantic -Wno-long-long -march=native -O2 -pipe -Wno-unused-but-set-parameter -std=gnu++20 -fdiagnostics-color=always -MD -MT extern/osg-ffmpeg-videoplayer/CMakeFiles/osg-ffmpeg-videoplayer.dir/videostate.cpp.o -MF CMakeFiles/osg-ffmpeg-videoplayer.dir/videostate.cpp.o.d -o CMakeFiles/osg-ffmpeg-videoplayer.dir/videostate.cpp.o -c /var/tmp/paludis/build/games-engines-openmw-0.48.0/work/openmw-openmw-0.48.0/extern/osg-ffmpeg-videoplayer/videostate.cpp
/var/tmp/paludis/build/games-engines-openmw-0.48.0/work/openmw-openmw-0.48.0/extern/osg-ffmpeg-videoplayer/videostate.cpp: In member function 'void Video::VideoState::init(std::unique_ptr<std::basic_istream<char> >&&, const std::string&)':
/var/tmp/paludis/build/games-engines-openmw-0.48.0/work/openmw-openmw-0.48.0/extern/osg-ffmpeg-videoplayer/videostate.cpp:730:44: error: invalid conversion from 'int (*)(void*, uint8_t*, int)' {aka 'int (*)(void*, unsigned char*, int)'} to 'int (*)(void*, const uint8_t*, int)' {aka 'int (*)(void*, const unsigned char*, int)'} [-fpermissive]
  730 |     AVIOContext *ioCtx = avio_alloc_context(nullptr, 0, 0, this, istream_read, istream_write, istream_seek);
      |                          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                            |
      |                                            int (*)(void*, uint8_t*, int) {aka int (*)(void*, unsigned char*, int)}
In file included from /etc/env.d/alternatives/ffmpeg/7/usr/x86_64-pc-linux-gnu/include/libavformat/avformat.h:319,
                 from /var/tmp/paludis/build/games-engines-openmw-0.48.0/work/openmw-openmw-0.48.0/extern/osg-ffmpeg-videoplayer/videostate.hpp:27,
                 from /var/tmp/paludis/build/games-engines-openmw-0.48.0/work/openmw-openmw-0.48.0/extern/osg-ffmpeg-videoplayer/videostate.cpp:1:
/etc/env.d/alternatives/ffmpeg/7/usr/x86_64-pc-linux-gnu/include/libavformat/avio.h:404:25: note:   initializing argument 6 of 'AVIOContext* avio_alloc_context(unsigned char*, int, int, void*, int (*)(void*, uint8_t*, int), int (*)(void*, const uint8_t*, int), int64_t (*)(void*, int64_t, int))'
  404 |                   int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
      |                   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~