From 5e9b91b6e706216352c7218b7b00b51d2168c03f Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Wed, 8 Oct 2014 17:13:01 +0000 Subject: pulseaudio: added multichannel support git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4549 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Output/pulseaudio/outputpulseaudio.cpp | 24 ++++++++++++++++++++-- src/plugins/Output/pulseaudio/outputpulseaudio.h | 4 +++- 2 files changed, 25 insertions(+), 3 deletions(-) (limited to 'src/plugins/Output/pulseaudio') diff --git a/src/plugins/Output/pulseaudio/outputpulseaudio.cpp b/src/plugins/Output/pulseaudio/outputpulseaudio.cpp index 70bf26dd7..4f97eb3bb 100644 --- a/src/plugins/Output/pulseaudio/outputpulseaudio.cpp +++ b/src/plugins/Output/pulseaudio/outputpulseaudio.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2012 by Ilya Kotov * + * Copyright (C) 2006-2014 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -26,6 +26,18 @@ extern "C"{ OutputPulseAudio::OutputPulseAudio(): Output() { m_connection = 0; + + m_pa_channels[Qmmp::CHAN_NULL] = PA_CHANNEL_POSITION_INVALID; + m_pa_channels[Qmmp::CHAN_FRONT_CENTER] = PA_CHANNEL_POSITION_MONO; + m_pa_channels[Qmmp::CHAN_FRONT_LEFT] = PA_CHANNEL_POSITION_FRONT_LEFT; + m_pa_channels[Qmmp::CHAN_FRONT_RIGHT] = PA_CHANNEL_POSITION_FRONT_RIGHT; + m_pa_channels[Qmmp::CHAN_REAR_LEFT] = PA_CHANNEL_POSITION_REAR_LEFT; + m_pa_channels[Qmmp::CHAN_REAR_RIGHT] = PA_CHANNEL_POSITION_REAR_RIGHT; + m_pa_channels[Qmmp::CHAN_FRONT_CENTER] = PA_CHANNEL_POSITION_FRONT_CENTER; + m_pa_channels[Qmmp::CHAN_LFE] = PA_CHANNEL_POSITION_LFE; + m_pa_channels[Qmmp::CHAN_SIDE_LEFT] = PA_CHANNEL_POSITION_SIDE_LEFT; + m_pa_channels[Qmmp::CHAN_SIDE_RIGHT] = PA_CHANNEL_POSITION_SIDE_RIGHT; + m_pa_channels[Qmmp::CHAN_REAR_CENTER] = PA_CHANNEL_POSITION_REAR_CENTER; } OutputPulseAudio::~OutputPulseAudio() @@ -58,13 +70,21 @@ bool OutputPulseAudio::initialize(quint32 freq, ChannelMap map, Qmmp::AudioForma ss.channels = map.count(); ss.rate = freq; int error; + + pa_channel_map pa_map; + pa_map.channels = map.count(); + for(int i = 0; i < map.count(); i++) + { + pa_map.map[0] = m_pa_channels[map.value(i)]; + } + m_connection = pa_simple_new(NULL, // Use the default server. "Qmmp", // Our application's name. PA_STREAM_PLAYBACK, NULL, // Use the default device. "Music", // Description of our stream. &ss, // Our sample format. - NULL, // Use default channel map + &pa_map, // Our channel map NULL, // Use default buffering attributes. &error // Error code. ); diff --git a/src/plugins/Output/pulseaudio/outputpulseaudio.h b/src/plugins/Output/pulseaudio/outputpulseaudio.h index 2a8064988..74e0af445 100644 --- a/src/plugins/Output/pulseaudio/outputpulseaudio.h +++ b/src/plugins/Output/pulseaudio/outputpulseaudio.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2012 by Ilya Kotov * + * Copyright (C) 2006-2014 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -22,6 +22,7 @@ #define OUTPUTPULSEAUDIO_H #include +#include extern "C"{ #include } @@ -47,6 +48,7 @@ private: // helper functions void uninitialize(); pa_simple *m_connection; + QHash m_pa_channels; }; #endif // OUTPUTPULSEAUDIO_H -- cgit v1.2.3-13-gbd6f