From 811af02f56a829fb2177d25b7eb4f93212a4ea9e Mon Sep 17 00:00:00 2001 From: Nix Date: Mon, 24 Nov 2014 13:02:07 +0000 Subject: Output: start with a null mixer. There are code paths (mostly error cases) in which it is possible to initialize an AudioOutput and then kill it without ever calling audio_output_new(). In such a case, its destructor will attempt to free a mixer that was never initialized, leading to an attempt to take out a lock on a mutex that was similarly never initialized, which hangs forever. Fix by always initializing the mixer appropriately. --- src/output/Init.cxx | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/output/Init.cxx b/src/output/Init.cxx index eafcec432..79ef4f998 100644 --- a/src/output/Init.cxx +++ b/src/output/Init.cxx @@ -48,6 +48,7 @@ AudioOutput::AudioOutput(const AudioOutputPlugin &_plugin) :plugin(_plugin), + mixer(nullptr), enabled(true), really_enabled(false), open(false), pause(false), -- cgit v1.2.3 From d8fc2db910a11dbbba53ba7ecf96d0e32a081076 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 8 Dec 2014 14:17:17 +0100 Subject: thread/Id: drop "::" prefix before pthread function names The "::" to explicitly refer to the global namespace appeared like a good idea in C++, but it breaks with C libraries that implement standard functions using macros (e.g. musl). --- src/thread/Id.hxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/thread/Id.hxx b/src/thread/Id.hxx index fa1cf2cab..2372a12f5 100644 --- a/src/thread/Id.hxx +++ b/src/thread/Id.hxx @@ -75,7 +75,7 @@ public: #ifdef WIN32 return ::GetCurrentThreadId(); #else - return ::pthread_self(); + return pthread_self(); #endif } @@ -84,7 +84,7 @@ public: #ifdef WIN32 return id == other.id; #else - return ::pthread_equal(id, other.id); + return pthread_equal(id, other.id); #endif } -- cgit v1.2.3 From 41b4a63f2b772eba1e436c82fc9c5c9766d4470e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 8 Dec 2014 14:25:34 +0100 Subject: decoder/ffmpeg: support FFmpeg 2.5 Version 2.5 fixed an API oddity, however it broke API compatibility, at least with C++. Disable the workaround when a libavformat version is detected that is recent enough. --- src/decoder/FfmpegDecoderPlugin.cxx | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/decoder/FfmpegDecoderPlugin.cxx b/src/decoder/FfmpegDecoderPlugin.cxx index 69e7a6c8b..8a0937903 100644 --- a/src/decoder/FfmpegDecoderPlugin.cxx +++ b/src/decoder/FfmpegDecoderPlugin.cxx @@ -394,10 +394,15 @@ ffmpeg_probe(Decoder *decoder, InputStream &is) avpd.filename = is.uri.c_str(); #ifdef AVPROBE_SCORE_MIME +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(56, 5, 1) /* this attribute was added in libav/ffmpeg version 11, but unfortunately it's "uint8_t" instead of "char", and it's not "const" - wtf? */ avpd.mime_type = (uint8_t *)const_cast(is.GetMimeType()); +#else + /* API problem fixed in FFmpeg 2.5 */ + avpd.mime_type = is.GetMimeType(); +#endif #endif return av_probe_input_format(&avpd, true); -- cgit v1.2.3