fix to pulseaudio support
This commit is contained in:
parent
00caefee04
commit
df521d34ba
|
@ -282,7 +282,7 @@ AC_ARG_WITH(pulseaudio-prefix,
|
|||
|
||||
if test "x${USE_PULSEAUDIO}" = "xyes" ; then
|
||||
AC_MSG_CHECKING( [for pulseaudio libraries at ${CONFIG_PULSEAUDIO_PREFIX}] )
|
||||
LA_SEARCH_LIB( PULSEAUDIO_LIB_LOC, PULSEAUDIO_INC_LOC, pulseaudio/asoundlib.h,
|
||||
LA_SEARCH_LIB( PULSEAUDIO_LIB_LOC, PULSEAUDIO_INC_LOC, libpulse.so, pulse/pulseaudio.h,
|
||||
${CONFIG_PULSEAUDIO_PREFIX})
|
||||
|
||||
if test "x${PULSEAUDIO_LIB_LOC}" != "x" ; then
|
||||
|
|
|
@ -204,226 +204,6 @@ PulseAudioDspSource :: read ( void * buf,
|
|||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Close the audio source
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
PulseAudioDspSource :: close ( void ) throw ( Exception )
|
||||
{
|
||||
if ( !isOpen() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
pa_simple_free(s);
|
||||
}
|
||||
|
||||
#endif // HAVE_PULSEAUDIO_LIB
|
||||
/*------------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2000-2007 Tyrell Corporation. All rights reserved.
|
||||
|
||||
Copyright (c) 2004
|
||||
LS Informationstechnik (LIKE)
|
||||
University of Erlangen Nuremberg
|
||||
All rights reserved.
|
||||
|
||||
Tyrell DarkIce
|
||||
|
||||
File : PulseAudioDspSource.cpp
|
||||
Version : $Revision: 461 $
|
||||
Author : $Author: rafael@riseup.net $
|
||||
Location : $HeadURL$
|
||||
|
||||
Copyright notice:
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
/* ============================================================ include files */
|
||||
|
||||
#include "AudioSource.h"
|
||||
|
||||
// compile only if configured for PULSEAUDIO
|
||||
#ifdef SUPPORT_PULSEAUDIO_DSP
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "Util.h"
|
||||
#include "Exception.h"
|
||||
#include "PulseAudioDspSource.h"
|
||||
|
||||
|
||||
/* =================================================== local data structures */
|
||||
|
||||
|
||||
/* ================================================ local constants & macros */
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* File identity
|
||||
*----------------------------------------------------------------------------*/
|
||||
static const char fileid[] = "$Id: PulseAudioDspSource.cpp 461 2009-12-01 12:57:31Z rafael@riseup.net $";
|
||||
|
||||
|
||||
/* =============================================== local function prototypes */
|
||||
|
||||
|
||||
/* ============================================================= module code */
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Initialize the object
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
PulseAudioDspSource :: init ( const char * paSourceName ) throw ( Exception )
|
||||
{
|
||||
|
||||
if (paSourceName == NULL)
|
||||
{
|
||||
throw Exception( __FILE__, __LINE__, "no paSourceName specified");
|
||||
}
|
||||
Reporter::reportEvent( 1, "Using PulseAudio source: ", paSourceName);
|
||||
Util::strEq( paSourceName , "default" );
|
||||
if (Util::strEq( paSourceName , "default" ))
|
||||
{
|
||||
sourceName = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceName = Util::strDup( paSourceName);
|
||||
}
|
||||
ss.channels = getChannel();
|
||||
ss.rate = getSampleRate();
|
||||
|
||||
//Supported for some bits per sample, both Big and Little endian
|
||||
if (isBigEndian())
|
||||
{
|
||||
switch (getBitsPerSample())
|
||||
{
|
||||
case 8:
|
||||
ss.format = PA_SAMPLE_U8;
|
||||
break;
|
||||
case 16:
|
||||
ss.format = PA_SAMPLE_S16BE;
|
||||
break;
|
||||
case 24:
|
||||
ss.format = PA_SAMPLE_S24BE;
|
||||
break;
|
||||
case 32:
|
||||
ss.format = PA_SAMPLE_S32BE;
|
||||
break;
|
||||
default:
|
||||
ss.format = PA_SAMPLE_INVALID;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (getBitsPerSample())
|
||||
{
|
||||
case 8:
|
||||
ss.format = PA_SAMPLE_U8;
|
||||
break;
|
||||
case 16:
|
||||
ss.format = PA_SAMPLE_S16LE;
|
||||
break;
|
||||
case 24:
|
||||
ss.format = PA_SAMPLE_S24LE;
|
||||
break;
|
||||
case 32:
|
||||
ss.format = PA_SAMPLE_S32LE;
|
||||
break;
|
||||
default:
|
||||
ss.format = PA_SAMPLE_INVALID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* De-initialize the object
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
PulseAudioDspSource :: strip ( void ) throw ( Exception )
|
||||
{
|
||||
if ( isOpen() ) {
|
||||
close();
|
||||
}
|
||||
|
||||
delete[] sourceName;
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Open the audio source
|
||||
*----------------------------------------------------------------------------*/
|
||||
bool
|
||||
PulseAudioDspSource :: open ( void ) throw ( Exception )
|
||||
{
|
||||
char client_name[255];
|
||||
|
||||
//to identify each darkice on pulseaudio server
|
||||
snprintf(client_name, 255, "darkice-%d", getpid());
|
||||
|
||||
if (!(s = pa_simple_new(NULL, client_name, PA_STREAM_RECORD, sourceName, "darkice record", &ss, NULL, NULL, &error))) {
|
||||
throw Exception( __FILE__, __LINE__, ": pa_simple_new() failed: %s\n", pa_strerror(error));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Check wether read() would return anything
|
||||
*----------------------------------------------------------------------------*/
|
||||
bool
|
||||
PulseAudioDspSource :: canRead ( unsigned int sec,
|
||||
unsigned int usec ) throw ( Exception )
|
||||
{
|
||||
//this seems to be a problem.
|
||||
//to explore in the future
|
||||
/* if ( !isOpen() ) {
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
* FIXME How to check if it can read?
|
||||
*/
|
||||
return true; // bad!!
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Read from the audio source
|
||||
*----------------------------------------------------------------------------*/
|
||||
unsigned int
|
||||
PulseAudioDspSource :: read ( void * buf,
|
||||
unsigned int len ) throw ( Exception )
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = pa_simple_read(s, buf, len, &error);
|
||||
if ( ret < 0) {
|
||||
throw Exception(__FILE__, __LINE__, ": pa_simple_read() failed: %s\n", pa_strerror(error));
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Close the audio source
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
|
Loading…
Reference in New Issue