From 8d36db2dd831b916736383207f6c959badd68b9d Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sun, 23 Feb 2020 13:17:15 +0000 Subject: show average bitrate for shoutcast/icecast streams git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9243 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/vorbis/decoder_vorbis.cpp | 1 + src/plugins/Transports/http/httpstreamreader.cpp | 1 + src/qmmp/inputsource.cpp | 22 ++++++++++++++++++++++ src/qmmp/inputsource.h | 16 ++++++++++++++++ src/qmmp/qmmpaudioengine.cpp | 1 + 5 files changed, 41 insertions(+) (limited to 'src') diff --git a/src/plugins/Input/vorbis/decoder_vorbis.cpp b/src/plugins/Input/vorbis/decoder_vorbis.cpp index 37f795192..8828b7665 100644 --- a/src/plugins/Input/vorbis/decoder_vorbis.cpp +++ b/src/plugins/Input/vorbis/decoder_vorbis.cpp @@ -122,6 +122,7 @@ bool DecoderVorbis::initialize() { freq = ogginfo->rate; chan = ogginfo->channels; + setProperty(Qmmp::BITRATE, ogginfo->bitrate_nominal / 1000); } ChannelMap chmap = findChannelMap(chan); diff --git a/src/plugins/Transports/http/httpstreamreader.cpp b/src/plugins/Transports/http/httpstreamreader.cpp index 969788c2d..1faf8b6ee 100644 --- a/src/plugins/Transports/http/httpstreamreader.cpp +++ b/src/plugins/Transports/http/httpstreamreader.cpp @@ -437,6 +437,7 @@ void HttpStreamReader::checkBuffer() metaData.insert(Qmmp::TITLE, m_stream.header.value("icy-name")); metaData.insert(Qmmp::GENRE, m_stream.header.value("icy-genre")); m_parent->addMetaData(metaData); + m_parent->setProperty(Qmmp::BITRATE, m_stream.header.value("icy-br")); } sendStreamInfo(m_codec); } diff --git a/src/qmmp/inputsource.cpp b/src/qmmp/inputsource.cpp index 5a52d43a7..ff6303cc7 100644 --- a/src/qmmp/inputsource.cpp +++ b/src/qmmp/inputsource.cpp @@ -69,6 +69,28 @@ QMap InputSource::takeMetaData() return m_metaData; } +void InputSource::setProperty(Qmmp::TrackProperty key, const QVariant &value) +{ + QString strValue = value.toString(); + if(strValue.isEmpty() || strValue == "0") + m_properties.remove(key); + else + m_properties[key] = strValue; +} + +void InputSource::setProperties(const QMap &properties) +{ + for(const Qmmp::TrackProperty &key : properties.keys()) + { + setProperty(key, properties.value(key)); + } +} + +const QMap &InputSource::properties() const +{ + return m_properties; +} + void InputSource::addMetaData(const QMap &metaData) { m_metaData = metaData; diff --git a/src/qmmp/inputsource.h b/src/qmmp/inputsource.h index c5811c795..c4da56d37 100644 --- a/src/qmmp/inputsource.h +++ b/src/qmmp/inputsource.h @@ -96,6 +96,21 @@ public: * Attention: hasMetaData() should return \b true before use of this fuction. */ QMap takeMetaData(); + /*! + * Sets extra stream property. + * \param key Property key. + * \param value Property value. + */ + void setProperty(Qmmp::TrackProperty key, const QVariant &value); + /*! + * Updates all extra stream properties. + * \param properties New track properties. + */ + void setProperties(const QMap &properties); + /*! + * Returns stream properties + */ + const QMap &properties() const; /*! * Informs input source object about received stream information (for example icy data). * Call of this function is required for all non-local streams/files @@ -169,6 +184,7 @@ private: QString m_path; qint64 m_offset; QMap m_metaData; + QMap m_properties; QHash m_streamInfo; bool m_hasMetaData, m_hasStreamInfo; static void loadPlugins(); diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp index c73daaa94..d574296bc 100644 --- a/src/qmmp/qmmpaudioengine.cpp +++ b/src/qmmp/qmmpaudioengine.cpp @@ -381,6 +381,7 @@ void QmmpAudioEngine::run() nextURL.clear(); info.setValues(m); info.setValues(m_decoder->properties()); + info.updateValues(m_inputs[m_decoder]->properties()); info.setValues(m_decoder->replayGainInfo()); info.setDuration(m_decoder->totalTime()); if(StateHandler::instance()->dispatch(info)) -- cgit v1.2.3-13-gbd6f