Bug#1081354: fix compilation of performous against ffmpeg 7

Nicola Ferralis feranick at hotmail.com
Tue Sep 10 23:42:14 BST 2024


package: performous
Version: 1.3.0+dfsg-1

The source code of performous is incompatible with the current version of FFmpeg 7, leading to a crash when trying to compile against it.
The attached patch fixes the issues, allowing successful compilation.

I am using Ubuntu 24.04 and Debian Unstable.
-------------- next part --------------
diff -Nru performous-1.3.0+ds.orig/game/ffmpeg.cc performous-1.3.0+ds/game/ffmpeg.cc
--- performous-1.3.0+ds.orig/game/ffmpeg.cc	2024-09-10 14:00:52.414736705 -0400
+++ performous-1.3.0+ds/game/ffmpeg.cc	2024-09-10 18:32:16.119087659 -0400
@@ -290,8 +290,18 @@
 		// setup resampler
 		m_resampleContext.reset(swr_alloc());
 		if (!m_resampleContext) throw std::runtime_error("Cannot create resampling context");
-		av_opt_set_int(m_resampleContext.get(), "in_channel_layout", m_codecContext->channel_layout ? static_cast<std::int64_t>(m_codecContext->channel_layout) : av_get_default_channel_layout(m_codecContext->channels), 0);
-		av_opt_set_int(m_resampleContext.get(), "out_channel_layout", av_get_default_channel_layout(AUDIO_CHANNELS), 0);
+		if (av_channel_layout_check(&m_codecContext->ch_layout)) {
+			av_opt_set_chlayout(m_resampleContext.get(), "in_channel_layout",&m_codecContext->ch_layout, 0);
+		} else {
+			AVChannelLayout ch_layout_in;
+			av_channel_layout_default(&ch_layout_in, m_codecContext->ch_layout.nb_channels);
+			av_opt_set_chlayout(m_resampleContext.get(), "in_channel_layout", &ch_layout_in, 0);
+			av_channel_layout_uninit(&ch_layout_in);
+		}
+		AVChannelLayout ch_layout_out;
+		av_channel_layout_default(&ch_layout_out, AUDIO_CHANNELS);
+		av_channel_layout_uninit(&ch_layout_out);
+		av_opt_set_chlayout(m_resampleContext.get(), "out_channel_layout", &ch_layout_out, 0);
 		av_opt_set_int(m_resampleContext.get(), "in_sample_rate", m_codecContext->sample_rate, 0);
 		av_opt_set_int(m_resampleContext.get(), "out_sample_rate", static_cast<int>(m_rate), 0);
 		av_opt_set_int(m_resampleContext.get(), "in_sample_fmt", m_codecContext->sample_fmt, 0);


More information about the Pkg-games-devel mailing list