aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input')
-rw-r--r--src/plugins/Input/Input.pro28
-rw-r--r--src/plugins/Input/flac/decoder_flac.cpp77
-rw-r--r--src/plugins/Input/flac/decoder_flac.h1
-rw-r--r--src/plugins/Input/mad/decoder_mad.cpp7
4 files changed, 95 insertions, 18 deletions
diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro
index 9b00864e6..0149aa949 100644
--- a/src/plugins/Input/Input.pro
+++ b/src/plugins/Input/Input.pro
@@ -1,53 +1,53 @@
include(../../../qmmp.pri)
-SUBDIRS += mad cue vorbis sndfile wavpack
TEMPLATE = subdirs
+SUBDIRS += mad #cue vorbis 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/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp
index acd76f159..4dfca6839 100644
--- a/src/plugins/Input/flac/decoder_flac.cpp
+++ b/src/plugins/Input/flac/decoder_flac.cpp
@@ -393,17 +393,25 @@ bool DecoderFLAC::initialize()
data()->ok = 0;
return false;
}
+ ChannelMap channel_map = findChannelMap(data()->channels);
+
+ if(channel_map.isEmpty())
+ {
+ qWarning("DecoderFLAC: unsupported number of channels: %d", data()->channels);
+ return false;
+ }
+
switch(data()->bits_per_sample)
{
case 8:
- configure(data()->sample_rate, data()->channels, Qmmp::PCM_S8);
+ configure(data()->sample_rate, channel_map, Qmmp::PCM_S8);
break;
case 16:
- configure(data()->sample_rate, data()->channels, Qmmp::PCM_S16LE);
+ configure(data()->sample_rate, channel_map, Qmmp::PCM_S16LE);
break;
case 24:
case 32:
- configure(data()->sample_rate, data()->channels, Qmmp::PCM_S32LE);
+ configure(data()->sample_rate, channel_map, Qmmp::PCM_S32LE);
break;
default:
return false;
@@ -555,3 +563,66 @@ uint DecoderFLAC::findID3v2(char *data, ulong size) //retuns ID3v2 tag size
}
return 0;
}
+
+ChannelMap DecoderFLAC::findChannelMap(int channels)
+{
+ ChannelMap map;
+ switch (channels)
+ {
+ case 1:
+ map << Qmmp::CHAN_FRONT_LEFT;
+ break;
+ case 2:
+ map << Qmmp::CHAN_FRONT_LEFT
+ << Qmmp::CHAN_FRONT_RIGHT;
+ break;
+ case 3:
+ map << Qmmp::CHAN_FRONT_LEFT
+ << Qmmp::CHAN_FRONT_RIGHT
+ << Qmmp::CHAN_FRONT_CENTER;
+ break;
+ case 4:
+ map << Qmmp::CHAN_FRONT_LEFT
+ << Qmmp::CHAN_FRONT_RIGHT
+ << Qmmp::CHAN_REAR_LEFT
+ << Qmmp::CHAN_REAR_RIGHT;
+ break;
+ case 5:
+ map << Qmmp::CHAN_FRONT_LEFT
+ << Qmmp::CHAN_FRONT_RIGHT
+ << Qmmp::CHAN_FRONT_CENTER
+ << Qmmp::CHAN_REAR_LEFT
+ << Qmmp::CHAN_REAR_RIGHT;
+ break;
+ case 6:
+ map << 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:
+ map << 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:
+ map << 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:
+ ;
+ }
+ return map;
+}
diff --git a/src/plugins/Input/flac/decoder_flac.h b/src/plugins/Input/flac/decoder_flac.h
index e64e376eb..4b4a2f668 100644
--- a/src/plugins/Input/flac/decoder_flac.h
+++ b/src/plugins/Input/flac/decoder_flac.h
@@ -82,6 +82,7 @@ private:
// helper functions
void deinit();
uint findID3v2(char *data, ulong size); //retuns ID3v2 tag size
+ ChannelMap findChannelMap(int channels);
struct flac_data *m_data;
qint64 length_in_bytes;
diff --git a/src/plugins/Input/mad/decoder_mad.cpp b/src/plugins/Input/mad/decoder_mad.cpp
index b4087c06b..08b2486fb 100644
--- a/src/plugins/Input/mad/decoder_mad.cpp
+++ b/src/plugins/Input/mad/decoder_mad.cpp
@@ -120,7 +120,12 @@ bool DecoderMAD::initialize()
mad_frame_mute (&m_frame);
m_stream.next_frame = 0;
m_stream.sync = 0;
- configure(m_freq, m_channels, Qmmp::PCM_S16LE);
+ ChannelMap map;
+ if(m_channels == 1)
+ map << Qmmp::CHAN_FRONT_LEFT;
+ else
+ map << Qmmp::CHAN_FRONT_LEFT << Qmmp::CHAN_FRONT_RIGHT;
+ configure(m_freq, map, Qmmp::PCM_S16LE);
m_inited = true;
return true;
}