aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Output/pulseaudio/outputpulseaudio.cpp7
-rw-r--r--src/plugins/Output/pulseaudio/outputpulseaudio.h2
-rw-r--r--src/qmmp/output.cpp5
-rw-r--r--src/qmmp/output.h5
-rw-r--r--src/qmmp/outputfactory.h21
-rw-r--r--src/qmmp/outputwriter.cpp12
-rw-r--r--src/qmmp/outputwriter_p.h3
7 files changed, 35 insertions, 20 deletions
diff --git a/src/plugins/Output/pulseaudio/outputpulseaudio.cpp b/src/plugins/Output/pulseaudio/outputpulseaudio.cpp
index 478d6cdc7..65fa0bff6 100644
--- a/src/plugins/Output/pulseaudio/outputpulseaudio.cpp
+++ b/src/plugins/Output/pulseaudio/outputpulseaudio.cpp
@@ -223,6 +223,13 @@ void OutputPulseAudio::resume()
process(op);
}
+void OutputPulseAudio::setMuted(bool mute)
+{
+ pa_operation *op = pa_context_set_sink_input_mute(m_ctx, pa_stream_get_index(m_stream), mute,
+ OutputPulseAudio::context_success_cb, nullptr);
+ pa_operation_unref(op);
+}
+
void OutputPulseAudio::setVolume(const VolumeSettings &v)
{
pa_cvolume volume = VolumePulseAudio::volumeSettingsToCvolume(v, audioParameters().channels());
diff --git a/src/plugins/Output/pulseaudio/outputpulseaudio.h b/src/plugins/Output/pulseaudio/outputpulseaudio.h
index bd601fc05..ff320abf8 100644
--- a/src/plugins/Output/pulseaudio/outputpulseaudio.h
+++ b/src/plugins/Output/pulseaudio/outputpulseaudio.h
@@ -48,6 +48,7 @@ public:
void reset() override;
void suspend() override;
void resume() override;
+ void setMuted(bool mute) override;
void setVolume(const VolumeSettings &v);
static OutputPulseAudio *instance;
@@ -62,7 +63,6 @@ private:
//callbacks
static void subscribe_cb(pa_context *ctx, pa_subscription_event_type t, uint32_t index, void *data);
static void info_cb(pa_context *ctx, const pa_sink_input_info * info, int, void * data);
- //converters
static void context_success_cb(pa_context *, int success, void *data);
static void stream_success_cb(pa_stream *, int success, void *data);
diff --git a/src/qmmp/output.cpp b/src/qmmp/output.cpp
index ff5bd0495..cc3555558 100644
--- a/src/qmmp/output.cpp
+++ b/src/qmmp/output.cpp
@@ -65,6 +65,11 @@ void Output::suspend()
void Output::resume()
{}
+void Output::setMuted(bool mute)
+{
+ Q_UNUSED(mute);
+}
+
void Output::setTrackInfo(const TrackInfo &info)
{
Q_UNUSED(info);
diff --git a/src/qmmp/output.h b/src/qmmp/output.h
index 8a2b359ce..26cb1e8a9 100644
--- a/src/qmmp/output.h
+++ b/src/qmmp/output.h
@@ -77,6 +77,11 @@ public:
*/
virtual void resume();
/*!
+ * Mutes/Restores volume. Default implementation does nothing.
+ * @param mute - state of volume (\b true - mute, \b false - restore)
+ */
+ virtual void setMuted(bool mute);
+ /*!
* Sets track information for output.
* Default implementation does nothing.
* Reimplement this function to receive metadata.
diff --git a/src/qmmp/outputfactory.h b/src/qmmp/outputfactory.h
index 33fc750af..6263d4533 100644
--- a/src/qmmp/outputfactory.h
+++ b/src/qmmp/outputfactory.h
@@ -31,24 +31,15 @@ class Volume;
class Decoder;
class Output;
-/*! @brief Helper class to store output plugin properies.
+/*! @brief Helper structure to store output plugin properies.
* @author Ilya Kotov <forkotov02@ya.ru>
*/
-class QMMP_EXPORT OutputProperties
+struct OutputProperties
{
-public:
- /*!
- * Constructor
- */
- OutputProperties()
- {
- hasAbout = false;
- hasSettings = false;
- }
- QString name; /*!< Effect plugin full name */
- QString shortName; /*!< Effect plugin short name for internal usage */
- bool hasAbout; /*!< Should be \b true if plugin has about dialog, otherwise returns \b false */
- bool hasSettings; /*!< Should be \b true if plugin has settings dialog, otherwise returns \b false */
+ QString name; /*!< Effect plugin full name */
+ QString shortName; /*!< Effect plugin short name for internal usage */
+ bool hasAbout = false; /*!< Should be \b true if plugin has about dialog, otherwise returns \b false */
+ bool hasSettings = false; /*!< Should be \b true if plugin has settings dialog, otherwise returns \b false */
};
/*! @brief %Output plugin interface (output factory).
* @author Ilya Kotov <forkotov02@ya.ru>
diff --git a/src/qmmp/outputwriter.cpp b/src/qmmp/outputwriter.cpp
index b4da5af2f..c549612a4 100644
--- a/src/qmmp/outputwriter.cpp
+++ b/src/qmmp/outputwriter.cpp
@@ -130,6 +130,12 @@ void OutputWriter::stop()
void OutputWriter::setMuted(bool muted)
{
m_muted = muted;
+ if(isRunning() && m_output)
+ {
+ m_mutex.lock();
+ m_output->setMuted(muted);
+ m_mutex.unlock();
+ }
}
void OutputWriter::finish()
@@ -247,6 +253,8 @@ void OutputWriter::run()
m_mutex.unlock ();
return;
}
+ if(m_muted)
+ m_output->setMuted(true);
m_mutex.unlock ();
bool done = false;
@@ -315,8 +323,8 @@ void OutputWriter::run()
dispatchVisual(b);
if (SoftwareVolume::instance())
SoftwareVolume::instance()->changeVolume(b, m_channels);
- if (m_muted)
- memset(b->data, 0, b->size * sizeof(float));
+ //if (m_muted)
+ // memset(b->data, 0, b->size * sizeof(float));
if(m_channel_converter)
m_channel_converter->applyEffect(b);
l = 0;
diff --git a/src/qmmp/outputwriter_p.h b/src/qmmp/outputwriter_p.h
index 5f87e8ed9..e0309d74e 100644
--- a/src/qmmp/outputwriter_p.h
+++ b/src/qmmp/outputwriter_p.h
@@ -111,14 +111,13 @@ private:
ChannelMap m_chan_map;
Qmmp::AudioFormat m_format;
qint64 m_bytesPerMillisecond;
- std::atomic_bool m_user_stop, m_pause;
+ std::atomic_bool m_user_stop, m_pause, m_muted;
bool m_prev_pause;
std::atomic_bool m_finish;
bool m_useEq;
qint64 m_totalWritten, m_currentMilliseconds;
QmmpSettings *m_settings;
Output *m_output;
- std::atomic_bool m_muted;
AudioParameters m_in_params;
AudioConverter *m_format_converter;
ChannelConverter *m_channel_converter;