mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-01 08:09:41 +02:00
344 lines
12 KiB
Diff
344 lines
12 KiB
Diff
diff -wruN portaudio/include/pa_unix_oss.h portaudio-v19/include/pa_unix_oss.h
|
|
--- portaudio/include/pa_unix_oss.h 1969-12-31 18:00:00.000000000 -0600
|
|
+++ portaudio-v19/include/pa_unix_oss.h 2012-12-14 22:34:14.290247100 -0600
|
|
@@ -0,0 +1,52 @@
|
|
+#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 -wruN portaudio/include/pa_win_ds.h portaudio-v19/include/pa_win_ds.h
|
|
--- portaudio/include/pa_win_ds.h 2011-11-24 12:11:33.000000000 -0600
|
|
+++ portaudio-v19/include/pa_win_ds.h 2012-12-14 22:35:51.384817600 -0600
|
|
@@ -87,6 +87,22 @@
|
|
}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 -wruN portaudio/include/portaudio.h portaudio-v19/include/portaudio.h
|
|
--- portaudio/include/portaudio.h 2012-08-31 19:10:13.000000000 -0500
|
|
+++ portaudio-v19/include/portaudio.h 2012-12-14 22:34:14.368247200 -0600
|
|
@@ -1146,6 +1146,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 -wruN portaudio/src/common/pa_front.c portaudio-v19/src/common/pa_front.c
|
|
--- portaudio/src/common/pa_front.c 2012-12-04 12:39:48.000000000 -0600
|
|
+++ portaudio-v19/src/common/pa_front.c 2012-12-14 09:44:34.604344800 -0600
|
|
@@ -1216,8 +1216,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" ));
|
|
@@ -1729,6 +1731,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 -wruN portaudio/src/common/pa_stream.c portaudio-v19/src/common/pa_stream.c
|
|
--- portaudio/src/common/pa_stream.c 2008-02-15 01:50:33.000000000 -0600
|
|
+++ portaudio-v19/src/common/pa_stream.c 2012-12-14 09:44:34.607345000 -0600
|
|
@@ -93,6 +93,8 @@
|
|
streamRepresentation->streamInfo.inputLatency = 0.;
|
|
streamRepresentation->streamInfo.outputLatency = 0.;
|
|
streamRepresentation->streamInfo.sampleRate = 0.;
|
|
+
|
|
+ streamRepresentation->hostApiType = 0;
|
|
}
|
|
|
|
|
|
diff -wruN portaudio/src/common/pa_stream.h portaudio-v19/src/common/pa_stream.h
|
|
--- portaudio/src/common/pa_stream.h 2008-02-15 01:50:33.000000000 -0600
|
|
+++ portaudio-v19/src/common/pa_stream.h 2012-12-14 09:44:34.610345200 -0600
|
|
@@ -152,6 +152,7 @@
|
|
PaStreamFinishedCallback *streamFinishedCallback;
|
|
void *userData;
|
|
PaStreamInfo streamInfo;
|
|
+ PaHostApiTypeId hostApiType;
|
|
} PaUtilStreamRepresentation;
|
|
|
|
|
|
diff -wruN portaudio/src/hostapi/alsa/pa_linux_alsa.c portaudio-v19/src/hostapi/alsa/pa_linux_alsa.c
|
|
--- portaudio/src/hostapi/alsa/pa_linux_alsa.c 2012-05-18 11:04:30.000000000 -0500
|
|
+++ portaudio-v19/src/hostapi/alsa/pa_linux_alsa.c 2012-12-14 10:00:12.133968500 -0600
|
|
@@ -622,6 +622,7 @@
|
|
StreamDirection streamDir;
|
|
|
|
snd_pcm_channel_area_t *channelAreas; /* Needed for channel adaption */
|
|
+ int card;
|
|
} PaAlsaStreamComponent;
|
|
|
|
/* Implementation specific stream structure */
|
|
@@ -1840,6 +1841,7 @@
|
|
PaError result = paNoError;
|
|
PaSampleFormat userSampleFormat = params->sampleFormat, hostSampleFormat = paNoError;
|
|
assert( params->channelCount > 0 );
|
|
+ snd_pcm_info_t* pcmInfo;
|
|
|
|
/* Make sure things have an initial value */
|
|
memset( self, 0, sizeof (PaAlsaStreamComponent) );
|
|
@@ -1867,6 +1869,9 @@
|
|
PA_ENSURE( AlsaOpen( &alsaApi->baseHostApiRep, params, streamDir, &self->pcm ) );
|
|
self->nfds = alsa_snd_pcm_poll_descriptors_count( self->pcm );
|
|
|
|
+ snd_pcm_info_alloca( &pcmInfo );
|
|
+ self->card = snd_pcm_info_get_card( pcmInfo );
|
|
+
|
|
PA_ENSURE( hostSampleFormat = PaUtil_SelectClosestAvailableFormat( GetAvailableFormats( self->pcm ), userSampleFormat ) );
|
|
|
|
self->hostSampleFormat = hostSampleFormat;
|
|
@@ -4559,9 +4564,7 @@
|
|
/* XXX: More descriptive error? */
|
|
PA_UNLESS( stream->capture.pcm, paDeviceUnavailable );
|
|
|
|
- alsa_snd_pcm_info_alloca( &pcmInfo );
|
|
- PA_ENSURE( alsa_snd_pcm_info( stream->capture.pcm, pcmInfo ) );
|
|
- *card = alsa_snd_pcm_info_get_card( pcmInfo );
|
|
+ *card = stream->capture.card;
|
|
|
|
error:
|
|
return result;
|
|
@@ -4578,9 +4581,7 @@
|
|
/* XXX: More descriptive error? */
|
|
PA_UNLESS( stream->playback.pcm, paDeviceUnavailable );
|
|
|
|
- alsa_snd_pcm_info_alloca( &pcmInfo );
|
|
- PA_ENSURE( alsa_snd_pcm_info( stream->playback.pcm, pcmInfo ) );
|
|
- *card = alsa_snd_pcm_info_get_card( pcmInfo );
|
|
+ *card = stream->capture.card;
|
|
|
|
error:
|
|
return result;
|
|
diff -wruN 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 2012-11-09 20:55:20.000000000 -0600
|
|
+++ portaudio-v19/src/hostapi/dsound/pa_win_ds.c 2012-12-14 10:14:29.062982000 -0600
|
|
@@ -257,6 +257,7 @@
|
|
#endif
|
|
|
|
/* Output */
|
|
+ LPGUID pOutputGuid;
|
|
LPDIRECTSOUND pDirectSound;
|
|
LPDIRECTSOUNDBUFFER pDirectSoundPrimaryBuffer;
|
|
LPDIRECTSOUNDBUFFER pDirectSoundOutputBuffer;
|
|
@@ -272,6 +273,7 @@
|
|
INT finalZeroBytesWritten; /* used to determine when we've flushed the whole buffer */
|
|
|
|
/* Input */
|
|
+ LPGUID pInputGuid;
|
|
LPDIRECTSOUNDCAPTURE pDirectSoundCapture;
|
|
LPDIRECTSOUNDCAPTUREBUFFER pDirectSoundInputBuffer;
|
|
INT inputFrameSizeBytes;
|
|
@@ -1854,8 +1856,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;
|
|
int userRequestedHostInputBufferSizeFrames = 0;
|
|
int userRequestedHostOutputBufferSizeFrames = 0;
|
|
unsigned long suggestedInputLatencyFrames, suggestedOutputLatencyFrames;
|
|
@@ -2146,6 +2148,13 @@
|
|
goto error;
|
|
}
|
|
|
|
+ /* Portmixer support - fill in the GUID of the output stream */
|
|
+ stream->pOutputGuid = outputWinDsDeviceInfo->lpGUID;
|
|
+ if( stream->pOutputGuid == NULL )
|
|
+ {
|
|
+ stream->pOutputGuid = (GUID *) &DSDEVID_DefaultPlayback;
|
|
+ }
|
|
+
|
|
/* Calculate value used in latency calculation to avoid real-time divides. */
|
|
stream->secondsPerHostByte = 1.0 /
|
|
(stream->bufferProcessor.bytesPerHostOutputSample *
|
|
@@ -2187,6 +2196,13 @@
|
|
result = paBufferTooBig;
|
|
goto error;
|
|
}
|
|
+
|
|
+ /* Portmixer support - store the GUID of the input stream */
|
|
+ stream->pInputGuid = inputWinDsDeviceInfo->lpGUID;
|
|
+ if( stream->pInputGuid == NULL )
|
|
+ {
|
|
+ stream->pInputGuid = (GUID *)&DSDEVID_DefaultCapture;
|
|
+ }
|
|
}
|
|
|
|
/* open/create the DirectSound buffers */
|
|
@@ -2230,6 +2246,12 @@
|
|
|
|
if( outputParameters && !stream->pDirectSoundOutputBuffer )
|
|
{
|
|
+ stream->pOutputGuid = outputWinDsDeviceInfo->lpGUID;
|
|
+ if( stream->pOutputGuid == NULL )
|
|
+ {
|
|
+ stream->pOutputGuid = (GUID *) &DSDEVID_DefaultPlayback;
|
|
+ }
|
|
+
|
|
hr = InitOutputBuffer( stream,
|
|
(PaWinDsDeviceInfo*)hostApi->deviceInfos[outputParameters->device],
|
|
hostOutputSampleFormat,
|
|
@@ -3238,3 +3260,18 @@
|
|
return 0;
|
|
}
|
|
|
|
+/***********************************************************************************/
|
|
+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 -wruN 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 2011-05-02 12:07:11.000000000 -0500
|
|
+++ portaudio-v19/src/hostapi/oss/pa_unix_oss.c 2012-12-14 09:44:34.625346000 -0600
|
|
@@ -2028,3 +2028,26 @@
|
|
#endif
|
|
}
|
|
|
|
+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;
|
|
+}
|