diff options
| -rw-r--r-- | src/plugins/Output/pulseaudio/outputpulseaudio.cpp | 7 | ||||
| -rw-r--r-- | src/plugins/Output/pulseaudio/outputpulseaudio.h | 2 | ||||
| -rw-r--r-- | src/qmmp/output.cpp | 5 | ||||
| -rw-r--r-- | src/qmmp/output.h | 5 | ||||
| -rw-r--r-- | src/qmmp/outputfactory.h | 21 | ||||
| -rw-r--r-- | src/qmmp/outputwriter.cpp | 12 | ||||
| -rw-r--r-- | src/qmmp/outputwriter_p.h | 3 |
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; |
