aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/portaudio
diff options
context:
space:
mode:
authorLyubomir Marinov <lyubomir.marinov@jitsi.org>2009-10-11 22:13:26 +0000
committerLyubomir Marinov <lyubomir.marinov@jitsi.org>2009-10-11 22:13:26 +0000
commit06ab94d92ed1ea79258f194dac96dba9c3b000ac (patch)
treede5a600d58192458684a6e99504333a71a3d48c9 /src/native/portaudio
parentf8434b8cb93412ffe6b1e289fa346d076e77f1e9 (diff)
downloadjitsi-06ab94d92ed1ea79258f194dac96dba9c3b000ac.zip
jitsi-06ab94d92ed1ea79258f194dac96dba9c3b000ac.tar.gz
jitsi-06ab94d92ed1ea79258f194dac96dba9c3b000ac.tar.bz2
In the native part of the PortAudio support, takes into account blocking mode and doesn't execute code which is meant for non-blocking mode.
Diffstat (limited to 'src/native/portaudio')
-rw-r--r--src/native/portaudio/net_java_sip_communicator_impl_media_protocol_portaudio_PortAudio.c59
1 files changed, 36 insertions, 23 deletions
diff --git a/src/native/portaudio/net_java_sip_communicator_impl_media_protocol_portaudio_PortAudio.c b/src/native/portaudio/net_java_sip_communicator_impl_media_protocol_portaudio_PortAudio.c
index 35b7f20..29969b0 100644
--- a/src/native/portaudio/net_java_sip_communicator_impl_media_protocol_portaudio_PortAudio.c
+++ b/src/native/portaudio/net_java_sip_communicator_impl_media_protocol_portaudio_PortAudio.c
@@ -106,19 +106,23 @@ Java_net_java_sip_communicator_impl_media_protocol_portaudio_PortAudio_Pa_1OpenS
sampleRate,
framesPerBuffer,
streamFlags,
- streamCallback == NULL ? NULL : PortAudioStream_callback,
+ streamCallback ? PortAudioStream_callback : NULL,
stream);
if (paNoError == errorCode)
{
- stream->inputFrameSize = PortAudio_getFrameSize(inputStreamParameters);
- stream->outputFrameSize
- = PortAudio_getFrameSize(outputStreamParameters);
-
- errorCode
- = Pa_SetStreamFinishedCallback(
- stream->stream,
- PortAudioStream_finishedCallback);
+ if (streamCallback)
+ {
+ stream->inputFrameSize
+ = PortAudio_getFrameSize(inputStreamParameters);
+ stream->outputFrameSize
+ = PortAudio_getFrameSize(outputStreamParameters);
+
+ errorCode
+ = Pa_SetStreamFinishedCallback(
+ stream->stream,
+ PortAudioStream_finishedCallback);
+ }
return (jlong) stream;
}
@@ -183,14 +187,20 @@ Java_net_java_sip_communicator_impl_media_protocol_portaudio_PortAudio_Pa_1ReadS
(JNIEnv *env, jclass clazz, jlong stream, jbyteArray buffer, jlong frames)
{
jbyte* data = (*env)->GetByteArrayElements(env, buffer, NULL);
- PaError errorCode = Pa_ReadStream(
- ((PortAudioStream *) stream)->stream,
- data,
- frames);
- (*env)->ReleaseByteArrayElements(env, buffer, data, 0);
- if (paNoError != errorCode && errorCode != paInputOverflowed)
- PortAudio_throwException(env, errorCode);
+ if (data)
+ {
+ PaError errorCode
+ = Pa_ReadStream(
+ ((PortAudioStream *) stream)->stream,
+ data,
+ frames);
+
+ (*env)->ReleaseByteArrayElements(env, buffer, data, 0);
+
+ if ((paNoError != errorCode) && (paInputOverflowed != errorCode))
+ PortAudio_throwException(env, errorCode);
+ }
}
JNIEXPORT jlong JNICALL
@@ -528,15 +538,15 @@ PortAudioStream_new(JNIEnv *env, jobject streamCallback)
}
stream->stream = NULL;
- if ((*env)->GetJavaVM(env, &(stream->vm)) < 0)
- {
- free(stream);
- PortAudio_throwException(env, paInternalError);
- return NULL;
- }
-
if (streamCallback)
{
+ if ((*env)->GetJavaVM(env, &(stream->vm)) < 0)
+ {
+ free(stream);
+ PortAudio_throwException(env, paInternalError);
+ return NULL;
+ }
+
stream->streamCallback = (*env)->NewGlobalRef(env, streamCallback);
if (!(stream->streamCallback))
{
@@ -546,7 +556,10 @@ PortAudioStream_new(JNIEnv *env, jobject streamCallback)
}
}
else
+ {
+ stream->vm = NULL;
stream->streamCallback = NULL;
+ }
stream->env = NULL;
stream->streamCallbackMethodID = NULL;