aboutsummaryrefslogtreecommitdiffstats
path: root/src/media/UAudioPlayback_Portaudio.pas
diff options
context:
space:
mode:
authortobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-04-30 13:49:10 +0000
committertobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-04-30 13:49:10 +0000
commitc61600bfdda6608feb6a390d20e2e1200afe93f6 (patch)
treec5bd160c48f737e940f2f4e60e583d37d972ca11 /src/media/UAudioPlayback_Portaudio.pas
parentc75faaea68dd7be35fd56b3caf91483c7eef0611 (diff)
downloadusdx-c61600bfdda6608feb6a390d20e2e1200afe93f6.tar.gz
usdx-c61600bfdda6608feb6a390d20e2e1200afe93f6.tar.xz
usdx-c61600bfdda6608feb6a390d20e2e1200afe93f6.zip
portaudio playback (not used by default) segfault fixed
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2321 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'src/media/UAudioPlayback_Portaudio.pas')
-rw-r--r--src/media/UAudioPlayback_Portaudio.pas22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/media/UAudioPlayback_Portaudio.pas b/src/media/UAudioPlayback_Portaudio.pas
index ddbd03d6..6fbae6e3 100644
--- a/src/media/UAudioPlayback_Portaudio.pas
+++ b/src/media/UAudioPlayback_Portaudio.pas
@@ -307,22 +307,16 @@ var
paApiIndex : TPaHostApiIndex;
paApiInfo : PPaHostApiInfo;
paOutDevice : TPaDeviceIndex;
- err: TPaError;
begin
Result := false;
-
AudioCore := TAudioCore_Portaudio.GetInstance();
// initialize portaudio
- err := Pa_Initialize();
- if(err <> paNoError) then
- begin
- Log.LogError(Pa_GetErrorText(err), 'TAudioInput_Portaudio.InitializeRecord');
+ if (not AudioCore.Initialize()) then
Exit;
- end;
paApiIndex := AudioCore.GetPreferredApiIndex();
- if(paApiIndex = -1) then
+ if (paApiIndex = -1) then
begin
Log.LogError('No working Audio-API found', 'TAudioPlayback_Portaudio.InitializeAudioPlaybackEngine');
Exit;
@@ -364,13 +358,19 @@ end;
procedure TAudioPlayback_Portaudio.StopAudioPlaybackEngine();
begin
if (paStream <> nil) then
- Pa_StopStream(paStream);
+ begin
+ Pa_CloseStream(paStream);
+ // wait until stream is closed, otherwise Terminate() might cause a segfault
+ while (Pa_IsStreamActive(paStream) = 1) do
+ ;
+ paStream := nil;
+ end;
end;
function TAudioPlayback_Portaudio.FinalizeAudioPlaybackEngine(): boolean;
begin
- Pa_Terminate();
- Result := true;
+ StopAudioPlaybackEngine();
+ Result := AudioCore.Terminate();
end;
function TAudioPlayback_Portaudio.GetLatency(): double;