Make xine analyzer optional

This commit is contained in:
Jonas Kvinge 2019-05-28 18:37:51 +02:00
parent 20f9108ebf
commit 8b05af7ca3
5 changed files with 48 additions and 8 deletions

View File

@ -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 <iostream>
#include <xine/metronom.h>
int main() {
metronom_t metronom;
std::cout << metronom.pts_per_smpls;
return 0;
}
"
XINE_ANALYZER)
endif()
# Set up definitions and paths

View File

@ -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

View File

@ -47,6 +47,7 @@
#cmakedefine HAVE_VLC
#cmakedefine HAVE_XINE
#cmakedefine HAVE_PHONON
#cmakedefine XINE_ANALYZER
#cmakedefine HAVE_TIDAL

View File

@ -29,7 +29,9 @@
#include <time.h>
#include <unistd.h>
#include <xine.h>
#include <xine/metronom.h>
#ifdef XINE_ANALYZER
# include <xine/metronom.h>
#endif
#include <memory>
#include <cstdlib>
@ -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<char*>("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;

View File

@ -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<PruneScopeThread> 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