From 4c84ef7b799340d2cd54eab7fed810b5a20bb664 Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Mon, 29 Nov 2010 13:16:37 +0000 Subject: [PATCH] Opens the PortAudio streams with a valid framesPerBuffer value in order to make it possible to use the pseudo-blocking PortAudio stream interface implemented in r7982. --- .../media/protocol/portaudio/DataSource.java | 3 ++- .../protocol/portaudio/PortAudioStream.java | 2 +- .../renderer/audio/PortAudioRenderer.java | 18 ++++++++---------- .../service/protocol/media/MediaAwareCall.java | 5 +---- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/portaudio/DataSource.java b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/portaudio/DataSource.java index 103b66342..931a3ee1f 100644 --- a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/portaudio/DataSource.java +++ b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/portaudio/DataSource.java @@ -145,7 +145,8 @@ protected void doConnect() * override and be sure that there will be no request to close a connection * if the connection has not been opened yet. */ - protected synchronized void doDisconnect() + @Override + protected void doDisconnect() { try { diff --git a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/portaudio/PortAudioStream.java b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/portaudio/PortAudioStream.java index 82067b8a8..d415fdc7e 100644 --- a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/portaudio/PortAudioStream.java +++ b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/portaudio/PortAudioStream.java @@ -278,7 +278,7 @@ synchronized void setDeviceIndex(int deviceIndex) inputParameters, 0 /* outputParameters */, sampleRate, - PortAudio.FRAMES_PER_BUFFER_UNSPECIFIED, + framesPerBuffer, PortAudio.STREAM_FLAGS_CLIP_OFF | PortAudio.STREAM_FLAGS_DITHER_OFF, null /* streamCallback */); diff --git a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/audio/PortAudioRenderer.java b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/audio/PortAudioRenderer.java index 1108d1fab..5bcff9b1b 100644 --- a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/audio/PortAudioRenderer.java +++ b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/audio/PortAudioRenderer.java @@ -376,6 +376,11 @@ public synchronized void open() inputFormat.getSampleSizeInBits()); double sampleRate = inputFormat.getSampleRate(); + framesPerBuffer + = (int) + ((sampleRate * PortAudio.DEFAULT_MILLIS_PER_BUFFER) + / (channels * 1000)); + try { outputParameters @@ -390,7 +395,7 @@ public synchronized void open() 0 /* inputParameters */, outputParameters, sampleRate, - PortAudio.FRAMES_PER_BUFFER_UNSPECIFIED, + framesPerBuffer, PortAudio.STREAM_FLAGS_CLIP_OFF | PortAudio.STREAM_FLAGS_DITHER_OFF, null /* streamCallback */); @@ -410,10 +415,6 @@ public synchronized void open() if (stream == 0) throw new ResourceUnavailableException("Pa_OpenStream"); - framesPerBuffer - = (int) - ((sampleRate * PortAudio.DEFAULT_MILLIS_PER_BUFFER) - / (channels * 1000)); bytesPerBuffer = PortAudio.Pa_GetSampleSize(sampleFormat) * channels @@ -529,12 +530,9 @@ else if(gainControl.getDB() != 0) } } - PortAudio - .Pa_WriteStream( + PortAudio.Pa_WriteStream( stream, - buffer, - offset, - framesPerBuffer, + buffer, offset, framesPerBuffer, numberOfWrites); int bytesWritten = numberOfWrites * bytesPerBuffer; diff --git a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java index 07e5036ff..173ce7039 100644 --- a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java +++ b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java @@ -361,10 +361,7 @@ public MediaDevice getDefaultDevice(MediaType mediaType) } if(device == null) - { - device = mediaService.getDefaultDevice(mediaType, - mediaUseCase); - } + device = mediaService.getDefaultDevice(mediaType, mediaUseCase); if (MediaType.AUDIO.equals(mediaType)) {