Replace use of deprecated gstreamer low-percent
- Add settings for low-watermark and high-watermark - Add button to reset buffer settings to defaults
This commit is contained in:
@@ -46,8 +46,9 @@ Engine::Base::Base()
|
||||
rg_mode_(0),
|
||||
rg_preamp_(0),
|
||||
rg_compression_(true),
|
||||
buffer_duration_nanosec_(4000),
|
||||
buffer_min_fill_(33),
|
||||
buffer_duration_nanosec_(BackendSettingsPage::kDefaultBufferDuration * kNsecPerMsec),
|
||||
buffer_low_watermark_(BackendSettingsPage::kDefaultBufferLowWatermark),
|
||||
buffer_high_watermark_(BackendSettingsPage::kDefaultBufferHighWatermark),
|
||||
fadeout_enabled_(true),
|
||||
crossfade_enabled_(true),
|
||||
autocrossfade_enabled_(false),
|
||||
@@ -105,8 +106,9 @@ void Engine::Base::ReloadSettings() {
|
||||
|
||||
volume_control_ = s.value("volume_control", true).toBool();
|
||||
|
||||
buffer_duration_nanosec_ = s.value("bufferduration", 4000).toLongLong() * kNsecPerMsec;
|
||||
buffer_min_fill_ = s.value("bufferminfill", 33).toInt();
|
||||
buffer_duration_nanosec_ = s.value("bufferduration", BackendSettingsPage::kDefaultBufferDuration).toLongLong() * kNsecPerMsec;
|
||||
buffer_low_watermark_ = s.value("bufferlowwatermark", BackendSettingsPage::kDefaultBufferLowWatermark).toDouble();
|
||||
buffer_high_watermark_ = s.value("bufferhighwatermark", BackendSettingsPage::kDefaultBufferHighWatermark).toDouble();
|
||||
|
||||
rg_enabled_ = s.value("rgenabled", false).toBool();
|
||||
rg_mode_ = s.value("rgmode", 0).toInt();
|
||||
|
||||
@@ -186,7 +186,8 @@ public:
|
||||
|
||||
// Buffering
|
||||
quint64 buffer_duration_nanosec_;
|
||||
int buffer_min_fill_;
|
||||
double buffer_low_watermark_;
|
||||
double buffer_high_watermark_;
|
||||
|
||||
// Fadeout
|
||||
bool fadeout_enabled_;
|
||||
|
||||
@@ -758,7 +758,8 @@ std::shared_ptr<GstEnginePipeline> GstEngine::CreatePipeline() {
|
||||
ret->set_equalizer_enabled(equalizer_enabled_);
|
||||
ret->set_replaygain(rg_enabled_, rg_mode_, rg_preamp_, rg_compression_);
|
||||
ret->set_buffer_duration_nanosec(buffer_duration_nanosec_);
|
||||
ret->set_buffer_min_fill(buffer_min_fill_);
|
||||
ret->set_buffer_low_watermark(buffer_low_watermark_);
|
||||
ret->set_buffer_high_watermark(buffer_high_watermark_);
|
||||
|
||||
ret->AddBufferConsumer(this);
|
||||
for (GstBufferConsumer *consumer : buffer_consumers_) {
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "core/signalchecker.h"
|
||||
#include "core/timeconstants.h"
|
||||
#include "core/song.h"
|
||||
#include "settings/backendsettingspage.h"
|
||||
#include "enginebase.h"
|
||||
#include "gstengine.h"
|
||||
#include "gstenginepipeline.h"
|
||||
@@ -80,8 +81,9 @@ GstEnginePipeline::GstEnginePipeline(GstEngine *engine)
|
||||
rg_mode_(0),
|
||||
rg_preamp_(0.0),
|
||||
rg_compression_(true),
|
||||
buffer_duration_nanosec_(1 * kNsecPerSec),
|
||||
buffer_min_fill_(33),
|
||||
buffer_duration_nanosec_(BackendSettingsPage::kDefaultBufferDuration * kNsecPerMsec),
|
||||
buffer_low_watermark_(BackendSettingsPage::kDefaultBufferLowWatermark),
|
||||
buffer_high_watermark_(BackendSettingsPage::kDefaultBufferHighWatermark),
|
||||
buffering_(false),
|
||||
segment_start_(0),
|
||||
segment_start_received_(false),
|
||||
@@ -203,8 +205,12 @@ void GstEnginePipeline::set_buffer_duration_nanosec(const qint64 buffer_duration
|
||||
buffer_duration_nanosec_ = buffer_duration_nanosec;
|
||||
}
|
||||
|
||||
void GstEnginePipeline::set_buffer_min_fill(int percent) {
|
||||
buffer_min_fill_ = percent;
|
||||
void GstEnginePipeline::set_buffer_low_watermark(const double value) {
|
||||
buffer_low_watermark_ = value;
|
||||
}
|
||||
|
||||
void GstEnginePipeline::set_buffer_high_watermark(const double value) {
|
||||
buffer_high_watermark_ = value;
|
||||
}
|
||||
|
||||
bool GstEnginePipeline::InitFromUrl(const QByteArray &stream_url, const QUrl original_url, const qint64 end_nanosec) {
|
||||
@@ -382,10 +388,12 @@ bool GstEnginePipeline::InitAudioBin() {
|
||||
|
||||
g_object_set(G_OBJECT(audioqueue_), "max-size-buffers", 0, nullptr);
|
||||
g_object_set(G_OBJECT(audioqueue_), "max-size-bytes", 0, nullptr);
|
||||
g_object_set(G_OBJECT(audioqueue_), "max-size-time", buffer_duration_nanosec_, nullptr);
|
||||
g_object_set(G_OBJECT(audioqueue_), "low-percent", buffer_min_fill_, nullptr);
|
||||
if (buffer_duration_nanosec_ > 0) {
|
||||
qLog(Info) << "Setting buffer duration:" << buffer_duration_nanosec_ << "low watermark:" << buffer_low_watermark_ << "high watermark:" << buffer_high_watermark_;
|
||||
g_object_set(G_OBJECT(audioqueue_), "use-buffering", true, nullptr);
|
||||
g_object_set(G_OBJECT(audioqueue_), "max-size-time", buffer_duration_nanosec_, nullptr);
|
||||
g_object_set(G_OBJECT(audioqueue_), "low-watermark", buffer_low_watermark_, nullptr);
|
||||
g_object_set(G_OBJECT(audioqueue_), "high-watermark", buffer_high_watermark_, nullptr);
|
||||
}
|
||||
|
||||
// Link all elements
|
||||
@@ -748,7 +756,7 @@ gboolean GstEnginePipeline::BusCallback(GstBus*, GstMessage *msg, gpointer self)
|
||||
|
||||
}
|
||||
|
||||
GstBusSyncReply GstEnginePipeline::BusCallbackSync(GstBus *, GstMessage *msg, gpointer self) {
|
||||
GstBusSyncReply GstEnginePipeline::BusCallbackSync(GstBus*, GstMessage *msg, gpointer self) {
|
||||
|
||||
GstEnginePipeline *instance = reinterpret_cast<GstEnginePipeline*>(self);
|
||||
|
||||
|
||||
@@ -71,8 +71,9 @@ class GstEnginePipeline : public QObject {
|
||||
void set_stereo_balancer_enabled(const bool enabled);
|
||||
void set_equalizer_enabled(const bool enabled);
|
||||
void set_replaygain(const bool enabled, const int mode, const float preamp, const bool compression);
|
||||
void set_buffer_duration_nanosec(qint64 duration_nanosec);
|
||||
void set_buffer_min_fill(int percent);
|
||||
void set_buffer_duration_nanosec(const qint64 duration_nanosec);
|
||||
void set_buffer_low_watermark(const double value);
|
||||
void set_buffer_high_watermark(const double value);
|
||||
|
||||
// Creates the pipeline, returns false on error
|
||||
bool InitFromUrl(const QByteArray &stream_url, const QUrl original_url, const qint64 end_nanosec);
|
||||
@@ -211,7 +212,8 @@ class GstEnginePipeline : public QObject {
|
||||
|
||||
// Buffering
|
||||
quint64 buffer_duration_nanosec_;
|
||||
int buffer_min_fill_;
|
||||
double buffer_low_watermark_;
|
||||
double buffer_high_watermark_;
|
||||
bool buffering_;
|
||||
|
||||
// These get called when there is a new audio buffer available
|
||||
|
||||
Reference in New Issue
Block a user