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.

cusax-fix
Lyubomir Marinov 17 years ago
parent f8434b8cb9
commit 06ab94d92e

@ -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;

Loading…
Cancel
Save