clangen / musikcube

a cross-platform, terminal-based music player, audio engine, metadata indexer, and server in c++
https://musikcube.com
BSD 3-Clause "New" or "Revised" License
4.09k stars 295 forks source link

FFMpeg < 7 compatibility broken in 3.0.3? `error: 'AVChannelLayout' does not name a type` #690

Open barracuda156 opened 4 days ago

barracuda156 commented 4 days ago

Apparently FFMpeg 4.4.4 compatibility has been broken in 3.0.3?

:info:build [ 15%] Building CXX object src/plugins/server/CMakeFiles/server.dir/HttpServer.cpp.o
:info:build cd /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/build/src/plugins/server && /opt/local/bin/g++-mp-14 -DASIO_STANDALONE -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB -DDISABLE_UPDATE_CHECK -D_WEBSOCKETPP_CPP11_RANDOM_DEVICE_ -D_WEBSOCKETPP_CPP11_TYPE_TRAITS_ -Dserver_EXPORTS -I/include -I/opt/openssl/include -I/opt/ncurses/include -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/server/3rdparty/include -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/musikcore -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/musikcube -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/musikcube/cursespp -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/3rdparty/include -pipe -I/opt/local/libexec/openssl3/include -O0 -g -DNDEBUG -I/opt/local/libexec/openssl3/include -isystem/opt/local/include -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++17 -Wno-unused-result -Wno-deprecated-declarations -arch ppc -mmacosx-version-min=10.6 -fPIC -MD -MT src/plugins/server/CMakeFiles/server.dir/HttpServer.cpp.o -MF CMakeFiles/server.dir/HttpServer.cpp.o.d -o CMakeFiles/server.dir/HttpServer.cpp.o -c /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/server/HttpServer.cpp
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:87:8: error: 'AVChannelLayout' does not name a type
:info:build    87 | static AVChannelLayout resolveChannelLayout(size_t channelCount) {
:info:build       |        ^~~~~~~~~~~~~~~
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp: In member function 'bool FfmpegDecoder::InitializeResampler()':
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:291:30: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
:info:build   291 |         &this->codecContext->ch_layout,
:info:build       |                              ^~~~~~~~~
:info:build       |                              channel_layout
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:294:30: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
:info:build   294 |         &this->codecContext->ch_layout,
:info:build       |                              ^~~~~~~~~
:info:build       |                              channel_layout
:info:build [ 15%] Building C object src/plugins/macosmediakeys/CMakeFiles/macosmediakeys.dir/NSObject+SPInvocationGrabbing.m.o
:info:build cd /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/build/src/plugins/macosmediakeys && /opt/local/bin/gcc-mp-14 -DASIO_STANDALONE -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB -DDISABLE_UPDATE_CHECK -D_WEBSOCKETPP_CPP11_RANDOM_DEVICE_ -D_WEBSOCKETPP_CPP11_TYPE_TRAITS_ -Dmacosmediakeys_EXPORTS -I/include -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/musikcore -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/musikcube -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/musikcube/cursespp -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/3rdparty/include -F//System/Library/Frameworks -pipe -I/opt/local/libexec/openssl3/include -Os -std=c99 -fobjc-exceptions -DNDEBUG -I/opt/local/libexec/openssl3/include -isystem/opt/local/include -arch ppc -mmacosx-version-min=10.6 -fPIC -MD -MT src/plugins/macosmediakeys/CMakeFiles/macosmediakeys.dir/NSObject+SPInvocationGrabbing.m.o -MF CMakeFiles/macosmediakeys.dir/NSObject+SPInvocationGrabbing.m.o.d -o CMakeFiles/macosmediakeys.dir/NSObject+SPInvocationGrabbing.m.o -c /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/macosmediakeys/NSObject+SPInvocationGrabbing.m
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:289:17: error: 'swr_alloc_set_opts2' was not declared in this scope; did you mean 'swr_alloc_set_opts'?
:info:build   289 |     int error = swr_alloc_set_opts2(
:info:build       |                 ^~~~~~~~~~~~~~~~~~~
:info:build       |                 swr_alloc_set_opts
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp: In member function 'virtual bool FfmpegDecoder::Open(musik::core::sdk::IDataStream*)':
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:328:13: error: invalid conversion from 'int (*)(void*, const uint8_t*, int)' {aka 'int (*)(void*, const unsigned char*, int)'} to 'int (*)(void*, uint8_t*, int)' {aka 'int (*)(void*, unsigned char*, int)'} [-fpermissive]
:info:build   328 |             writeCallback,
:info:build       |             ^~~~~~~~~~~~~
:info:build       |             |
:info:build       |             int (*)(void*, const uint8_t*, int) {aka int (*)(void*, const unsigned char*, int)}
:info:build In file included from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.h:43,
:info:build                  from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:35:
:info:build /opt/local/include/libavformat/avio.h:468:25: note:   initializing argument 6 of 'AVIOContext* avio_alloc_context(unsigned char*, int, int, void*, int (*)(void*, uint8_t*, int), int (*)(void*, uint8_t*, int), int64_t (*)(void*, int64_t, int))'
:info:build   468 |                   int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
:info:build       |                   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:392:53: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
:info:build   392 |                             if (this->codecContext->ch_layout.nb_channels == 0) {
:info:build       |                                                     ^~~~~~~~~
:info:build       |                                                     channel_layout
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:393:53: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
:info:build   393 |                                 this->codecContext->ch_layout =
:info:build       |                                                     ^~~~~~~~~
:info:build       |                                                     channel_layout
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:394:78: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
:info:build   394 |                                     resolveChannelLayout(this->codecContext->ch_layout.nb_channels);
:info:build       |                                                                              ^~~~~~~~~
:info:build       |                                                                              channel_layout
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:394:37: error: 'resolveChannelLayout' was not declared in this scope
:info:build   394 |                                     resolveChannelLayout(this->codecContext->ch_layout.nb_channels);
:info:build       |                                     ^~~~~~~~~~~~~~~~~~~~
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:408:60: error: 'AVCodecParameters' {aka 'struct AVCodecParameters'} has no member named 'ch_layout'; did you mean 'channel_layout'?
:info:build   408 |                         this->channels = stream->codecpar->ch_layout.nb_channels;
:info:build       |                                                            ^~~~~~~~~
:info:build       |                                                            channel_layout
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp: In member function 'AVFrame* FfmpegDecoder::AllocFrame(AVFrame*, AVSampleFormat, int, int)':
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:619:15: error: 'AVChannelLayout' does not name a type
:info:build   619 |         const AVChannelLayout channelLayout = this->codecContext->ch_layout.nb_channels == 0
:info:build       |               ^~~~~~~~~~~~~~~
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:623:19: error: 'AVFrame' {aka 'struct AVFrame'} has no member named 'ch_layout'; did you mean 'channel_layout'?
:info:build   623 |         original->ch_layout = channelLayout;
:info:build       |                   ^~~~~~~~~
:info:build       |                   channel_layout
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/musikcube-3.0.3/src/plugins/ffmpegdecoder/FfmpegDecoder.cpp:623:31: error: 'channelLayout' was not declared in this scope
:info:build   623 |         original->ch_layout = channelLayout;
:info:build       |                               ^~~~~~~~~~~~~
:info:build make[2]: *** [src/plugins/ffmpegdecoder/CMakeFiles/ffmpegdecoder.dir/FfmpegDecoder.cpp.o] Error 1
:info:build make[2]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_multimedia_musikcube/musikcube/work/build'
:info:build make[1]: *** [src/plugins/ffmpegdecoder/CMakeFiles/ffmpegdecoder.dir/all] Error 2
:info:build make[1]: *** Waiting for unfinished jobs....

If so, the build should require FFMpeg 6 to be present and either disable the module otherwise (preferably) or fail at configure.

barracuda156 commented 4 days ago

@clangen It also fails with FFMpeg 6, looks like it is just broken now.

barracuda156 commented 4 days ago

Broken by https://github.com/clangen/musikcube/commit/fdacf36f3db8e7a70cf1bebd2c7d334110d0f916

barracuda156 commented 4 days ago

This is problematic, since it breaks the build for most systems.

MacPorts has ffmpeg 6.1.1: https://github.com/macports/macports-ports/blob/169504d70ab969c160518b462421ee5ca4c99642/multimedia/ffmpeg6/Portfile#L16-L19 and ffmpeg 4.4.4: https://github.com/macports/macports-ports/blob/169504d70ab969c160518b462421ee5ca4c99642/multimedia/ffmpeg/Portfile#L20-L21

FreeBSD has ffpmeg 6.1.1: https://github.com/freebsd/freebsd-ports/blob/6c86fe31b7a64610c7055d3b5dad2a8b04c85405/multimedia/ffmpeg/Makefile#L1-L2

OpenBSD has ffmpeg 4.4.4: https://github.com/openbsd/ports/blob/87b656f20ab41c52212c95bdfea3ed96276fead7/graphics/ffmpeg/Makefile#L3-L4