diff options
| -rw-r--r-- | src/plugins/Input/Input.pro | 28 | ||||
| -rw-r--r-- | src/qmmp/channelmap.cpp | 89 | ||||
| -rw-r--r-- | src/qmmp/channelmap.h | 2 | ||||
| -rw-r--r-- | src/qmmp/decoder.cpp | 6 | ||||
| -rw-r--r-- | src/qmmp/decoder.h | 2 |
5 files changed, 103 insertions, 24 deletions
diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro index e7436688a..1b903e9d3 100644 --- a/src/plugins/Input/Input.pro +++ b/src/plugins/Input/Input.pro @@ -1,53 +1,53 @@ include(../../../qmmp.pri) TEMPLATE = subdirs -SUBDIRS += mad vorbis #cue sndfile wavpack +SUBDIRS += mad vorbis cue sndfile wavpack contains(CONFIG, FLAC_PLUGIN){ SUBDIRS += flac } contains(CONFIG, MUSEPACK_PLUGIN){ -# SUBDIRS += mpc + SUBDIRS += mpc } contains(CONFIG, MODPLUG_PLUGIN){ -# SUBDIRS += modplug + SUBDIRS += modplug } contains(CONFIG, FFMPEG_PLUGIN){ -# contains(CONFIG, FFMPEG_LEGACY){ -# SUBDIRS += ffmpeg_legacy -# }else{ -# SUBDIRS += ffmpeg -# } + contains(CONFIG, FFMPEG_LEGACY){ + SUBDIRS += ffmpeg_legacy + }else{ + SUBDIRS += ffmpeg + } } contains(CONFIG, GME_PLUGIN){ -# SUBDIRS += gme + SUBDIRS += gme } contains(CONFIG, OPUS_PLUGIN){ -# SUBDIRS += opus + SUBDIRS += opus } contains(CONFIG, CDAUDIO_PLUGIN){ -# SUBDIRS += cdaudio + SUBDIRS += cdaudio } contains(CONFIG, SID_PLUGIN){ -# SUBDIRS += sid + SUBDIRS += sid } unix{ contains(CONFIG, AAC_PLUGIN){ -# SUBDIRS += aac + SUBDIRS += aac } contains(CONFIG, WILDMIDI_PLUGIN){ -# SUBDIRS += wildmidi + SUBDIRS += wildmidi } diff --git a/src/qmmp/channelmap.cpp b/src/qmmp/channelmap.cpp index 34fdde17a..24e90c1ce 100644 --- a/src/qmmp/channelmap.cpp +++ b/src/qmmp/channelmap.cpp @@ -23,18 +23,18 @@ #include "channelmap.h" Qmmp::ChannelPosition ChannelMap::m_internal_map[9] = { Qmmp::CHAN_FRONT_LEFT, - Qmmp::CHAN_FRONT_RIGHT, - Qmmp::CHAN_REAR_LEFT, - Qmmp::CHAN_REAR_RIGHT, - Qmmp::CHAN_FRONT_CENTER, - Qmmp::CHAN_REAR_CENTER, - Qmmp::CHAN_LFE, - Qmmp::CHAN_SIDE_LEFT, - Qmmp::CHAN_SIDE_RIGHT, - }; + Qmmp::CHAN_FRONT_RIGHT, + Qmmp::CHAN_REAR_LEFT, + Qmmp::CHAN_REAR_RIGHT, + Qmmp::CHAN_FRONT_CENTER, + Qmmp::CHAN_REAR_CENTER, + Qmmp::CHAN_LFE, + Qmmp::CHAN_SIDE_LEFT, + Qmmp::CHAN_SIDE_RIGHT }; -ChannelMap::ChannelMap() +ChannelMap::ChannelMap(int channels) { + generateMap(channels); } int ChannelMap::mask() const @@ -84,3 +84,72 @@ const QString ChannelMap::toString() const } return list.join(","); } + +void ChannelMap::generateMap(int channels) +{ + int mask = 0; + + switch (channels) + { + case 1: + mask = Qmmp::CHAN_FRONT_LEFT; + break; + case 2: + mask = Qmmp::CHAN_FRONT_LEFT + | Qmmp::CHAN_FRONT_RIGHT; + break; + case 3: + mask = Qmmp::CHAN_FRONT_LEFT + | Qmmp::CHAN_FRONT_RIGHT + | Qmmp::CHAN_FRONT_CENTER; + break; + case 4: + mask = Qmmp::CHAN_FRONT_LEFT + | Qmmp::CHAN_FRONT_RIGHT + | Qmmp::CHAN_REAR_LEFT + | Qmmp::CHAN_REAR_RIGHT; + break; + case 5: + mask = Qmmp::CHAN_FRONT_LEFT + | Qmmp::CHAN_FRONT_RIGHT + | Qmmp::CHAN_FRONT_CENTER + | Qmmp::CHAN_REAR_LEFT + | Qmmp::CHAN_REAR_RIGHT; + break; + case 6: + mask = Qmmp::CHAN_FRONT_LEFT + | Qmmp::CHAN_FRONT_RIGHT + | Qmmp::CHAN_FRONT_CENTER + | Qmmp::CHAN_LFE + | Qmmp::CHAN_REAR_LEFT + | Qmmp::CHAN_REAR_RIGHT; + break; + case 7: + mask = Qmmp::CHAN_FRONT_LEFT + | Qmmp::CHAN_FRONT_RIGHT + | Qmmp::CHAN_FRONT_CENTER + | Qmmp::CHAN_LFE + | Qmmp::CHAN_REAR_CENTER + | Qmmp::CHAN_SIDE_LEFT + | Qmmp::CHAN_SIDE_RIGHT; + break; + case 8: + mask = Qmmp::CHAN_FRONT_LEFT + | Qmmp::CHAN_FRONT_RIGHT + | Qmmp::CHAN_FRONT_CENTER + | Qmmp::CHAN_LFE + | Qmmp::CHAN_REAR_LEFT + | Qmmp::CHAN_REAR_RIGHT + | Qmmp::CHAN_SIDE_LEFT + | Qmmp::CHAN_SIDE_RIGHT; + break; + default: + ; + } + + for(int i = 0; i < 9; ++i) + { + if(mask & m_internal_map[i]) + append(m_internal_map[i]); + } +} diff --git a/src/qmmp/channelmap.h b/src/qmmp/channelmap.h index 19196b8f5..def4e4a57 100644 --- a/src/qmmp/channelmap.h +++ b/src/qmmp/channelmap.h @@ -28,6 +28,7 @@ class ChannelMap : public QList<Qmmp::ChannelPosition> { public: ChannelMap(); + ChannelMap(int channels); int mask() const; const ChannelMap remaped() const; @@ -35,6 +36,7 @@ public: private: static Qmmp::ChannelPosition m_internal_map[9]; + void generateMap(int channels); }; #endif // CHANNELMAP_H diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp index 1aa9fc4de..2733f5555 100644 --- a/src/qmmp/decoder.cpp +++ b/src/qmmp/decoder.cpp @@ -38,6 +38,12 @@ void Decoder::configure(quint32 srate, const ChannelMap &map, Qmmp::AudioFormat m_parameters = AudioParameters(srate, map, format); } +void Decoder::configure(quint32 srate, int channels, Qmmp::AudioFormat f) +{ + qDebug("Decoder: using internal channel order"); + m_parameters = AudioParameters(srate, ChannelMap(channels), f); +} + qint64 Decoder::read(float *data, qint64 samples) { Q_UNUSED(data); diff --git a/src/qmmp/decoder.h b/src/qmmp/decoder.h index 8e76f3a93..38c65967c 100644 --- a/src/qmmp/decoder.h +++ b/src/qmmp/decoder.h @@ -180,6 +180,8 @@ protected: */ void configure(quint32 srate, const ChannelMap &map, Qmmp::AudioFormat f = Qmmp::PCM_S16LE); + void configure(quint32 srate, int channels, Qmmp::AudioFormat f = Qmmp::PCM_S16LE); + private: static void loadPlugins(); static DecoderFactory *m_lastFactory; |
