diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/include/pa_unix_oss.h portaudio-v19/include/pa_unix_oss.h --- ../../../portaudio/include/pa_unix_oss.h 1970-01-01 01:00:00.000000000 +0100 +++ portaudio-v19/include/pa_unix_oss.h 2008-03-18 11:39:39.000000000 +0000 @@ -0,0 +1,104 @@ +#ifndef PA_UNIX_OSS_H +#define PA_UNIX_OSS_H + +/* + * $Id: portaudio.patch,v 1.10 2009-06-30 04:52:59 llucius Exp $ + * PortAudio Portable Real-Time Audio Library + * OSS-specific extensions + * + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/** @file + * OSS-specific PortAudio API extension header file. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +const char *PaOSS_GetStreamInputDevice( PaStream *s ); + +const char *PaOSS_GetStreamOutputDevice( PaStream *s ); + +#ifdef __cplusplus +} +#endif + +#endif +#ifndef PA_UNIX_OSS_H +#define PA_UNIX_OSS_H + +/* + * $Id: portaudio.patch,v 1.10 2009-06-30 04:52:59 llucius Exp $ + * PortAudio Portable Real-Time Audio Library + * OSS-specific extensions + * + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * Any person wishing to distribute modifications to the Software is + * requested to send the modifications to the original developer so that + * they can be incorporated into the canonical version. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/** @file + * OSS-specific PortAudio API extension header file. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +const char *PaOSS_GetStreamInputDevice( PaStream *s ); + +const char *PaOSS_GetStreamOutputDevice( PaStream *s ); + +#ifdef __cplusplus +} +#endif + +#endif diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/include/pa_win_ds.h portaudio-v19/include/pa_win_ds.h --- ../../../portaudio/include/pa_win_ds.h 2008-03-18 11:27:43.000000000 +0000 +++ portaudio-v19/include/pa_win_ds.h 2008-03-18 11:39:39.000000000 +0000 @@ -92,6 +92,21 @@ }PaWinDirectSoundStreamInfo; +/** Retrieve the GUID of the input device. + + @param stream The stream to query. + + @return A pointer to the GUID, or NULL if none. +*/ +LPGUID PaWinDS_GetStreamInputGUID( PaStream* s ); + +/** Retrieve the GUID of the output device. + + @param stream The stream to query. + + @return A pointer to the GUID, or NULL if none. +*/ +LPGUID PaWinDS_GetStreamOutputGUID( PaStream* s ); #ifdef __cplusplus diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/include/portaudio.h portaudio-v19/include/portaudio.h --- ../../../portaudio/include/portaudio.h 2008-03-18 11:27:43.000000000 +0000 +++ portaudio-v19/include/portaudio.h 2008-03-18 11:39:39.000000000 +0000 @@ -1106,6 +1106,15 @@ signed long Pa_GetStreamWriteAvailable( PaStream* stream ); +/** Retrieve the host type handling an open stream. + + @return Returns a non-negative value representing the host API type + handling an open stream or, a PaErrorCode (which are always negative) + if PortAudio is not initialized or an error is encountered. +*/ +PaHostApiTypeId Pa_GetStreamHostApiType( PaStream* stream ); + + /* Miscellaneous utilities */ diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/src/common/pa_front.c portaudio-v19/src/common/pa_front.c --- ../../../portaudio/src/common/pa_front.c 2008-03-18 11:27:45.000000000 +0000 +++ portaudio-v19/src/common/pa_front.c 2008-03-18 11:39:39.000000000 +0000 @@ -1211,8 +1211,10 @@ hostApiInputParametersPtr, hostApiOutputParametersPtr, sampleRate, framesPerBuffer, streamFlags, streamCallback, userData ); - if( result == paNoError ) + if( result == paNoError ) { AddOpenStream( *stream ); + PA_STREAM_REP(*stream)->hostApiType = hostApi->info.type; + } PA_LOGAPI(("Pa_OpenStream returned:\n" )); @@ -1724,6 +1726,32 @@ return result; } +PaHostApiTypeId Pa_GetStreamHostApiType( PaStream* stream ) +{ + PaError error = PaUtil_ValidateStreamPointer( stream ); + PaHostApiTypeId result; + +#ifdef PA_LOG_API_CALLS + PaUtil_DebugPrint("Pa_GetStreamHostApiType called:\n" ); + PaUtil_DebugPrint("\tPaStream* stream: 0x%p\n", stream ); +#endif + + if( error == paNoError ) + { + result = PA_STREAM_REP(stream)->hostApiType; + } + else + { + result = (PaHostApiTypeId) error; + } + +#ifdef PA_LOG_API_CALLS + PaUtil_DebugPrint("Pa_GetStreamHostApiType returned:\n" ); + PaUtil_DebugPrint("\tPaError: %d ( %s )\n\n", result, Pa_GetErrorText( result ) ); +#endif + + return result; +} PaError Pa_GetSampleSize( PaSampleFormat format ) { diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/src/common/pa_stream.c portaudio-v19/src/common/pa_stream.c --- ../../../portaudio/src/common/pa_stream.c 2008-03-18 11:27:45.000000000 +0000 +++ portaudio-v19/src/common/pa_stream.c 2008-03-18 11:39:39.000000000 +0000 @@ -93,6 +93,8 @@ streamRepresentation->streamInfo.inputLatency = 0.; streamRepresentation->streamInfo.outputLatency = 0.; streamRepresentation->streamInfo.sampleRate = 0.; + + streamRepresentation->hostApiType = 0; } diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/src/common/pa_stream.h portaudio-v19/src/common/pa_stream.h --- ../../../portaudio/src/common/pa_stream.h 2008-03-18 11:27:45.000000000 +0000 +++ portaudio-v19/src/common/pa_stream.h 2008-03-18 11:39:39.000000000 +0000 @@ -152,6 +152,7 @@ PaStreamFinishedCallback *streamFinishedCallback; void *userData; PaStreamInfo streamInfo; + PaHostApiTypeId hostApiType; } PaUtilStreamRepresentation; diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c portaudio-v19/src/hostapi/coreaudio/pa_mac_core_blocking.c --- ../../../portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c 2008-03-18 11:27:44.000000000 +0000 +++ portaudio-v19/src/hostapi/coreaudio/pa_mac_core_blocking.c 2008-03-18 11:39:39.000000000 +0000 @@ -66,6 +66,9 @@ #ifdef MOSX_USE_NON_ATOMIC_FLAG_BITS # define OSAtomicOr32( a, b ) ( (*(b)) |= (a) ) # define OSAtomicAnd32( a, b ) ( (*(b)) &= (a) ) +#elif MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_3 +# define OSAtomicOr32( a, b ) BitOrAtomic( a, (UInt32 *) b ) +# define OSAtomicAnd32( a, b ) BitAndAtomic( a, (UInt32 *) b ) #else # include #endif diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/src/hostapi/dsound/pa_win_ds.c portaudio-v19/src/hostapi/dsound/pa_win_ds.c --- ../../../portaudio/src/hostapi/dsound/pa_win_ds.c 2008-03-18 11:27:44.000000000 +0000 +++ portaudio-v19/src/hostapi/dsound/pa_win_ds.c 2008-03-18 11:39:39.000000000 +0000 @@ -221,6 +221,7 @@ /* DirectSound specific data. */ /* Output */ + LPGUID pOutputGuid; LPDIRECTSOUND pDirectSound; LPDIRECTSOUNDBUFFER pDirectSoundOutputBuffer; DWORD outputBufferWriteOffsetBytes; /* last write position */ @@ -236,6 +237,7 @@ double dsw_framesWritten; double framesPlayed; /* Input */ + LPGUID pInputGuid; LPDIRECTSOUNDCAPTURE pDirectSoundCapture; LPDIRECTSOUNDCAPTUREBUFFER pDirectSoundInputBuffer; INT bytesPerInputFrame; @@ -1544,8 +1546,8 @@ PaWinDsDeviceInfo *inputWinDsDeviceInfo, *outputWinDsDeviceInfo; PaDeviceInfo *inputDeviceInfo, *outputDeviceInfo; int inputChannelCount, outputChannelCount; - PaSampleFormat inputSampleFormat, outputSampleFormat; - PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat; + PaSampleFormat inputSampleFormat = 0, outputSampleFormat = 0; + PaSampleFormat hostInputSampleFormat = 0, hostOutputSampleFormat = 0; unsigned long suggestedInputLatencyFrames, suggestedOutputLatencyFrames; PaWinDirectSoundStreamInfo *inputStreamInfo, *outputStreamInfo; PaWinWaveFormatChannelMask inputChannelMask, outputChannelMask; @@ -1803,6 +1805,13 @@ PA_DS_SET_LAST_DIRECTSOUND_ERROR( hr ); goto error; } + + stream->pOutputGuid = outputWinDsDeviceInfo->lpGUID; + if( stream->pOutputGuid == NULL ) + { + stream->pOutputGuid = (GUID *) &DSDEVID_DefaultPlayback; + } + hr = InitOutputBuffer( stream, hostOutputSampleFormat, (unsigned long) (sampleRate + 0.5), @@ -1842,6 +1851,12 @@ goto error; } + stream->pInputGuid = inputWinDsDeviceInfo->lpGUID; + if( stream->pInputGuid == NULL ) + { + stream->pInputGuid = (GUID *)&DSDEVID_DefaultCapture; + } + hr = paWinDsDSoundEntryPoints.DirectSoundCaptureCreate( ((PaWinDsDeviceInfo*)hostApi->deviceInfos[inputParameters->device])->lpGUID, &stream->pDirectSoundCapture, NULL ); @@ -2522,4 +2537,19 @@ } +/***********************************************************************************/ +LPGUID PaWinDS_GetStreamInputGUID( PaStream* s ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + return stream->pInputGuid; +} + +/***********************************************************************************/ +LPGUID PaWinDS_GetStreamOutputGUID( PaStream* s ) +{ + PaWinDsStream *stream = (PaWinDsStream*)s; + + return stream->pOutputGuid; +} diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/src/hostapi/oss/pa_unix_oss.c portaudio-v19/src/hostapi/oss/pa_unix_oss.c --- ../../../portaudio/src/hostapi/oss/pa_unix_oss.c 2008-03-18 11:27:43.000000000 +0000 +++ portaudio-v19/src/hostapi/oss/pa_unix_oss.c 2008-03-18 11:39:39.000000000 +0000 @@ -1983,3 +1983,26 @@ return result; } +const char *PaOSS_GetStreamInputDevice( PaStream* s ) +{ + PaOssStream *stream = (PaOssStream*)s; + + if( stream->capture ) + { + return stream->capture->devName; + } + + return NULL; +} + +const char *PaOSS_GetStreamOutputDevice( PaStream* s ) +{ + PaOssStream *stream = (PaOssStream*)s; + + if( stream->playback ) + { + return stream->playback->devName; + } + + return NULL; +} diff -ur -N --exclude CVS --exclude .svn --exclude Makefile.in --exclude Makefile --exclude aclocal.m4 --exclude configure --exclude 'config.*' --exclude '*.patch' --exclude ltmain.sh --exclude autom4te.cache ../../../portaudio/src/hostapi/oss/pa_unix_oss.c portaudio-v19/src/hostapi/oss/pa_unix_oss.c --- ../../../portaudio/src/hostapi/alsa/pa_linux_alsa.c 2008-03-18 11:27:43.000000000 +0000 +++ portaudio-v19/src/hostapi/alsa/pa_linux_alsa.c 2008-03-18 11:39:39.000000000 +0000 @@ -1,5 +1,5 @@ /* - * $Id: portaudio.patch,v 1.10 2009-06-30 04:52:59 llucius Exp $ + * $Id: portaudio.patch,v 1.10 2009-06-30 04:52:59 llucius Exp $ * PortAudio Portable Real-Time Audio Library * Latest Version at: http://www.portaudio.com * ALSA implementation by Joshua Haberman and Arve Knudsen @@ -134,6 +134,7 @@ StreamDirection streamDir; snd_pcm_channel_area_t *channelAreas; /* Needed for channel adaption */ + int card; } PaAlsaStreamComponent; /* Implementation specific stream structure */ @@ -1161,6 +1162,7 @@ { PaError result = paNoError; PaSampleFormat userSampleFormat = params->sampleFormat, hostSampleFormat; + snd_pcm_info_t* pcmInfo; assert( params->channelCount > 0 ); /* Make sure things have an initial value */ @@ -1181,6 +1183,9 @@ self->device = params->device; PA_ENSURE( AlsaOpen( &alsaApi->baseHostApiRep, params, streamDir, &self->pcm ) ); + + snd_pcm_info_alloca( &pcmInfo ); + self->card = snd_pcm_info_get_card( pcmInfo ); self->nfds = snd_pcm_poll_descriptors_count( self->pcm ); hostSampleFormat = PaUtil_SelectClosestAvailableFormat( GetAvailableFormats( self->pcm ), userSampleFormat ); @@ -3646,9 +3651,7 @@ /* XXX: More descriptive error? */ PA_UNLESS( stream->capture.pcm, paDeviceUnavailable ); - snd_pcm_info_alloca( &pcmInfo ); - PA_ENSURE( snd_pcm_info( stream->capture.pcm, pcmInfo ) ); - *card = snd_pcm_info_get_card( pcmInfo ); + *card = stream->capture.card; error: return result; @@ -3664,9 +3667,7 @@ /* XXX: More descriptive error? */ PA_UNLESS( stream->playback.pcm, paDeviceUnavailable ); - snd_pcm_info_alloca( &pcmInfo ); - PA_ENSURE( snd_pcm_info( stream->playback.pcm, pcmInfo ) ); - *card = snd_pcm_info_get_card( pcmInfo ); + *card = stream->playback.card; error: return result;