diff options
author | Lyubomir Marinov <lyubomir.marinov@jitsi.org> | 2009-10-11 22:13:26 +0000 |
---|---|---|
committer | Lyubomir Marinov <lyubomir.marinov@jitsi.org> | 2009-10-11 22:13:26 +0000 |
commit | 06ab94d92ed1ea79258f194dac96dba9c3b000ac (patch) | |
tree | de5a600d58192458684a6e99504333a71a3d48c9 /src/native/portaudio | |
parent | f8434b8cb93412ffe6b1e289fa346d076e77f1e9 (diff) | |
download | jitsi-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.c | 59 |
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; |