From 8b05af7ca3bb0190e0a3ee168d33c7e014d5827d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 28 May 2019 18:37:51 +0200 Subject: [PATCH] Make xine analyzer optional --- CMakeLists.txt | 13 +++++++++++++ src/CMakeLists.txt | 3 +++ src/config.h.in | 1 + src/engine/xineengine.cpp | 27 +++++++++++++++++++++------ src/engine/xineengine.h | 12 ++++++++++-- 5 files changed, 48 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c8919d9..eaf04dbb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -357,6 +357,19 @@ if (APPLE AND USE_BUNDLE AND NOT USE_BUNDLE_DIR) set(USE_BUNDLE_DIR "../PlugIns") endif() +if(HAVE_XINE) + check_cxx_source_compiles(" + #define METRONOM_INTERNAL + #include + #include + int main() { + metronom_t metronom; + std::cout << metronom.pts_per_smpls; + return 0; + } + " + XINE_ANALYZER) +endif() # Set up definitions and paths diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ca0218ed..1c35b384 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -579,6 +579,9 @@ optional_source(HAVE_XINE SOURCES engine/xineengine.cpp engine/xinescope.c HEADERS engine/xineengine.h ) +optional_source(XINE_ANALYZER + SOURCES engine/xinescope.c +) # VLC optional_source(HAVE_VLC diff --git a/src/config.h.in b/src/config.h.in index dc1d2380..1b2d09da 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -47,6 +47,7 @@ #cmakedefine HAVE_VLC #cmakedefine HAVE_XINE #cmakedefine HAVE_PHONON +#cmakedefine XINE_ANALYZER #cmakedefine HAVE_TIDAL diff --git a/src/engine/xineengine.cpp b/src/engine/xineengine.cpp index b883353a..c80694bd 100644 --- a/src/engine/xineengine.cpp +++ b/src/engine/xineengine.cpp @@ -29,7 +29,9 @@ #include #include #include -#include +#ifdef XINE_ANALYZER +# include +#endif #include #include @@ -63,7 +65,9 @@ #include "enginebase.h" #include "enginetype.h" #include "xineengine.h" -#include "xinescope.h" +#ifdef XINE_ANALYZER +# include "xinescope.h" +#endif #include "settings/backendsettingspage.h" @@ -84,9 +88,11 @@ XineEngine::XineEngine(TaskManager *task_manager) audioport_(nullptr), stream_(nullptr), eventqueue_(nullptr), +#ifdef XINE_ANALYZER post_(nullptr), - preamp_(1.0), prune_(nullptr), +#endif + preamp_(1.0), have_metadata_(false) { type_ = Engine::Xine; @@ -118,7 +124,7 @@ bool XineEngine::Init() { xine_init(xine_); -#ifndef XINE_SAFE_MODE +#if !defined(XINE_SAFE_MODE) && defined(XINE_ANALYZER) prune_.reset(new PruneScopeThread(this)); prune_->start(); #endif @@ -172,7 +178,7 @@ bool XineEngine::OpenAudioDriver() { return false; } -#ifndef XINE_SAFE_MODE +#if !defined(XINE_SAFE_MODE) && defined(XINE_ANALYZER) post_ = scope_plugin_new(xine_, audioport_); if (!post_) { xine_close_audio_driver(xine_, audioport_); @@ -190,10 +196,12 @@ bool XineEngine::OpenAudioDriver() { void XineEngine::CloseAudioDriver() { +#ifdef XINE_ANALYZER if (post_) { xine_post_dispose(xine_, post_); post_ = nullptr; } +#endif if (audioport_) { xine_close_audio_driver(xine_, audioport_); @@ -260,12 +268,14 @@ bool XineEngine::EnsureStream() { void XineEngine::Cleanup() { +#ifdef XINE_ANALYZER // Wait until the prune scope thread is done if (prune_) { prune_->exit(); prune_->wait(); } prune_.reset(); +#endif CloseStream(); CloseAudioDriver(); @@ -309,7 +319,7 @@ bool XineEngine::Load(const QUrl &media_url, const QUrl &original_url, Engine::T int result = xine_open(stream_, media_url.toString().toUtf8()); if (result) { -#ifndef XINE_SAFE_MODE +#if !defined(XINE_SAFE_MODE) && defined(XINE_ANALYZER) xine_post_out_t *source = xine_get_audio_source(stream_); xine_post_in_t *target = (xine_post_in_t*)xine_post_input(post_, const_cast("audio in")); xine_post_wire(source, target); @@ -890,6 +900,8 @@ void XineEngine::DetermineAndShowErrorMessage() { } +#ifdef XINE_ANALYZER + const Engine::Scope &XineEngine::scope(int chunk_length) { if (!post_ || !stream_ || xine_get_status(stream_) != XINE_STATUS_PLAY) @@ -995,8 +1007,11 @@ void PruneScopeThread::run() { timer.start(1000); exec(); + } +#endif + EngineBase::PluginDetailsList XineEngine::GetPluginList() const { PluginDetailsList ret; diff --git a/src/engine/xineengine.h b/src/engine/xineengine.h index 9f7e2264..14dea0c6 100644 --- a/src/engine/xineengine.h +++ b/src/engine/xineengine.h @@ -65,7 +65,9 @@ class XineEngine : public Engine::Base { qint64 position_nanosec() const; qint64 length_nanosec() const; +#ifdef XINE_ANALYZER const Engine::Scope& scope(int chunk_length); +#endif OutputDetailsList GetOutputsList() const; bool ValidOutput(const QString &output); @@ -95,9 +97,11 @@ class XineEngine : public Engine::Base { xine_audio_port_t *audioport_; xine_stream_t *stream_; xine_event_queue_t *eventqueue_; +#ifdef XINE_ANALYZER xine_post_t *post_; - float preamp_; std::unique_ptr prune_; +#endif + float preamp_; QUrl media_url_; QUrl original_url_; @@ -134,13 +138,16 @@ class XineEngine : public Engine::Base { PluginDetailsList GetPluginList() const; -private slots: +#ifdef XINE_ANALYZER + private slots: void PruneScope(); +#endif signals: void InfoMessage(const QString&); }; +#ifdef XINE_ANALYZER class PruneScopeThread : public QThread { public: PruneScopeThread(XineEngine *parent); @@ -152,5 +159,6 @@ private: XineEngine *engine_; }; +#endif #endif