changeset 40:6c22ddefdbfa

added method to access pointers stored as longs (safely i hope); fixed bugs in makefile committer: Omair Majid <omajid@redhat.com>
author Omair Majid <omajid@redhat.com>
date Fri, 01 Aug 2008 17:16:36 -0400
parents 92e04ec1b947
children 94378da8ecd1
files .externalToolBuilders/JNI builder.launch .externalToolBuilders/JNI cleaner.launch .project lib/dummy makefile src/jni-common.c src/jni-common.h src/org/openjdk/sound/EventLoop.java src/org/openjdk/sound/PulseAudioSourceDataLine.java src/org_openjdk_sound_EventLoop.c src/org_openjdk_sound_EventLoop.h src/org_openjdk_sound_PulseAudioSourceDataLine.c src/org_openjdk_sound_PulseAudioSourceDataLine.h src/org_openjdk_sound_PulseAudioTargetDataLine.h
diffstat 14 files changed, 139 insertions(+), 132 deletions(-) [+]
line wrap: on
line diff
--- a/.externalToolBuilders/JNI builder.launch	Fri Aug 01 13:02:00 2008 -0400
+++ b/.externalToolBuilders/JNI builder.launch	Fri Aug 01 17:16:36 2008 -0400
@@ -5,5 +5,5 @@
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/make"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
 <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/pulse-java}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${build_project}"/>
 </launchConfiguration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.externalToolBuilders/JNI cleaner.launch	Fri Aug 01 17:16:36 2008 -0400
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType">
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/make"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="clean"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="clean"/>
+<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${build_project}"/>
+</launchConfiguration>
--- a/.project	Fri Aug 01 13:02:00 2008 -0400
+++ b/.project	Fri Aug 01 17:16:36 2008 -0400
@@ -20,6 +20,16 @@
 				</dictionary>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+			<triggers>clean,</triggers>
+			<arguments>
+				<dictionary>
+					<key>LaunchConfigHandle</key>
+					<value>&lt;project&gt;/.externalToolBuilders/JNI cleaner.launch</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/dummy	Fri Aug 01 17:16:36 2008 -0400
@@ -0,0 +1,1 @@
+This is a dummy file to hack around git\'s inability to track empty directories
--- a/makefile	Fri Aug 01 13:02:00 2008 -0400
+++ b/makefile	Fri Aug 01 17:16:36 2008 -0400
@@ -1,18 +1,24 @@
-
 
 JAVAH=javah
 JAVAC=javac
 JAVA=java
+CC=gcc
+
+CFLAGS=-g
+LDFLAGS=-g
 
 # Standard targets
 
-all: lib/libpulse-java.so 
+all: lib/libpulse-java.so
 
 
 clean:
-	rm src/*.h src/org/openjdk/sound/*.class
-	rm -r bin
-	rm -r lib
+	-rm src/org_*.h src/org/openjdk/sound/*.class
+	-rm -r bin
+	-rm -r lib
+	mkdir -p lib
+	echo "This is a dummy file to hack around git\'s inability to track empty directories" > lib/dummy
+
 
 
 # Executables
@@ -30,16 +36,16 @@
 # Object files
 
 bin/org_openjdk_sound_EventLoop.o: src/org_openjdk_sound_EventLoop.c src/org_openjdk_sound_EventLoop.h bin
-	gcc -g -c -o $@ $<
+	gcc -g -DWITH_32BIT_PLATFORM -c -o $@ $<
 
 bin/org_openjdk_sound_PulseAudioSourceDataLine.o: src/org_openjdk_sound_PulseAudioSourceDataLine.c src/org_openjdk_sound_PulseAudioSourceDataLine.h bin
-	gcc -g -c -o $@ $<
+	gcc -g -DWITH_32BIT_PLATFORM -c -o $@ $<
 
 #bin/org_openjdk_sound_PulseAudioTargetDataLine.o: src/org_openjdk_sound_PulseAudioTargetDataLine.c src/org_openjdk_sound_PulseAudioTargetDataLine.h bin
-#	gcc -g -c -o $@ $<
+#	gcc -g -DWITH_32BIT_PLATFORM -c -o $@ $<
 
 bin/jni-common.o: src/jni-common.c src/jni-common.h
-	gcc -g -c -o $@ $<
+	gcc -g -DWITH_32BIT_PLATFORM -c -o $@ $<
 
 # Java headers
 
@@ -52,7 +58,10 @@
 #src/org_openjdk_sound_PulseAudioTargetDataLine.h: src/org/openjdk/sound/PulseAudioTargetDataLine.class
 #	javah -d src -classpath src org.openjdk.sound.PulseAudioTargetDataLine
 
+
 # Compile Java
+#  Actually, this is not the best thing to do; javac might do some crazy things
+#  but we are only doing this so we can get up to date jni header files
 
 src/org/openjdk/sound/EventLoop.class: src/org/openjdk/sound/EventLoop.java
 	javac -classpath src $<
--- a/src/jni-common.c	Fri Aug 01 13:02:00 2008 -0400
+++ b/src/jni-common.c	Fri Aug 01 17:16:36 2008 -0400
@@ -49,3 +49,44 @@
 	(*env)->SetLongField(env, obj, fid, value);
 }
 
+void* getJavaPointer(JNIEnv* env, jobject obj, char* name) {
+
+	/*
+	 * A reference snippet 
+	 * 
+	 int a_int = 0x1020;
+	 long a_long = 0x102030;
+	 long long a_long_long = 0x1020304150607080;
+	 printf("size of int: %d\nsize of long: %d\nsize of long long: %d\n", sizeof(int), sizeof(long), sizeof(long long));
+	 printf("int to long long: %X -> %llX\n", a_int, (long long) a_int);
+	 printf("long long to int: %llX -> %X\n", a_long_long, (int)a_long_long); 
+
+	 * this shows that long long -> int does a bitwise mask to get the lower order bits only
+	 * FIXME what about endianness? will it get the opposite bits?
+	 */
+
+	/*
+	 * jlong = 64 bits
+	 * long long = at least 64 bits
+	 */
+
+	long long value = getJavaLongField(env, obj, name);
+
+	jPointer result = (jPointer) value;
+	return (void*) result;
+
+}
+
+void setJavaPointer(JNIEnv* env, jobject obj, char* name, void* pointer_value) {
+
+	setJavaLongField(env, obj, name, (jPointer) pointer_value);
+
+}
+
+void* convertFromJavaPointer(jlong pointer) {
+
+	/* this truncates the jlong */
+	jPointer p = pointer;
+	return (void*) p;
+
+}
--- a/src/jni-common.h	Fri Aug 01 13:02:00 2008 -0400
+++ b/src/jni-common.h	Fri Aug 01 17:16:36 2008 -0400
@@ -7,6 +7,15 @@
  * 
  */
 
+#ifdef WITH_32BIT_PLATFORM
+#define jPointer jint 
+#elif WITH_64BIT_PLATFORM
+#define jPointer jlong
+#else
+# 	error Unsupported Platform
+#endif
+
+
 jint getJavaIntField(JNIEnv* env, jobject obj, char* fieldName);
 void setJavaIntField(JNIEnv* env, jobject obj, char* fieldName, jint value);
 
@@ -16,4 +25,12 @@
 void throwByName(JNIEnv* const env, const char* const name,
 		const char* const msg);
 
+
+void* getJavaPointer(JNIEnv* env, jobject obj, char* name);
+void setJavaPointer(JNIEnv* env, jobject obj, char*name, void* pointer_value);
+
+void* convertFromJavaPointer(jlong pointer);
+
+
 #endif
+
--- a/src/org/openjdk/sound/EventLoop.java	Fri Aug 01 13:02:00 2008 -0400
+++ b/src/org/openjdk/sound/EventLoop.java	Fri Aug 01 17:16:36 2008 -0400
@@ -5,8 +5,6 @@
 import java.util.List;
 import java.util.concurrent.Semaphore;
 
-import javax.sound.sampled.LineUnavailableException;
-
 import org.openjdk.sound.ContextEvent.Type;
 
 /*
@@ -44,12 +42,11 @@
 
 	private native void native_setup(String appName, String server);
 
-	private native int native_iterate(int mainloop, int timeout);
+	private native int native_iterate(int timeout);
 
 	private native void native_shutdown();
 
-	private native void native_set_sink_volume(int contextPointer,
-			int streamPointer, int volume);
+	private native void native_set_sink_volume(long streamPointer, int volume);
 
 	/*
 	 * These fields hold pointers
@@ -62,9 +59,9 @@
 	 * 
 	 */
 	@SuppressWarnings("unused")
-	private int contextPointer;
+	private long contextPointer;
 	@SuppressWarnings("unused")
-	private int mainloopPointer;
+	private long mainloopPointer;
 
 	/*
 	 * 
@@ -109,7 +106,7 @@
 				// timout = 0 means dont block
 				// setting it to even 1 makes the program crawl
 				// question is, why?
-				native_iterate(mainloopPointer, 0);
+				native_iterate(0);
 
 				if (Thread.interrupted()) {
 					native_shutdown();
@@ -184,19 +181,19 @@
 
 	}
 
-	public void setVolume(int streamPointer, int volume) {
+	public void setVolume(long streamPointer, int volume) {
 
 		synchronized (threadLock) {
-			native_set_sink_volume(contextPointer, streamPointer, volume);
+			native_set_sink_volume(streamPointer, volume);
 		}
 
 	}
 
-	public int getContextPointer() {
+	public long getContextPointer() {
 		return contextPointer;
 	}
 
-	public int getMainLoopPointer() {
+	public long getMainLoopPointer() {
 		return mainloopPointer;
 	}
 
--- a/src/org/openjdk/sound/PulseAudioSourceDataLine.java	Fri Aug 01 13:02:00 2008 -0400
+++ b/src/org/openjdk/sound/PulseAudioSourceDataLine.java	Fri Aug 01 17:16:36 2008 -0400
@@ -35,9 +35,9 @@
 	 * 
 	 */
 	@SuppressWarnings("unused")
-	private int streamPointer;
+	private long streamPointer;
 
-	private native void native_open(int contextPointer, String name,
+	private native void native_open(long contextPointer, String name,
 			String encoding, float rate, int size, int channels,
 			boolean bigEndian, int bufferSize);
 
--- a/src/org_openjdk_sound_EventLoop.c	Fri Aug 01 13:02:00 2008 -0400
+++ b/src/org_openjdk_sound_EventLoop.c	Fri Aug 01 17:16:36 2008 -0400
@@ -99,22 +99,22 @@
 		pa_context_connect(context, NULL, 0, NULL);
 	}
 
-	setJavaIntField(env, obj, "mainloopPointer", (int) mainloop);
-	setJavaIntField(env, obj, "contextPointer", (int) context);
+	setJavaPointer(env, obj, "mainloopPointer", mainloop);
+	setJavaPointer(env, obj, "contextPointer", context);
 	printf("native_setup() returning\n");
 	return;
 
 }
 
 /*
- * Class:     org_openjdk_sound_EventLoopThread
+ * Class:     org_openjdk_sound_EventLoop
  * Method:    native_iterate
  * Signature: (I)I
  */
 JNIEXPORT jint JNICALL Java_org_openjdk_sound_EventLoop_native_1iterate
-(JNIEnv* env, jobject obj, jint mainloopPointer, jint timeout) {
+(JNIEnv* env, jobject obj, jint timeout) {
 
-	pa_mainloop* mainloop = (pa_mainloop*)mainloopPointer;
+	pa_mainloop* mainloop = (pa_mainloop*) getJavaPointer(env, obj, "mainloopPointer");
 	assert(mainloop);
 
 	int returnval;
@@ -153,12 +153,10 @@
 	jfieldID fid; /* the field id */
 	jclass cls = (*env)->GetObjectClass(env,obj);
 
-	fid = (*env)->GetFieldID(env, cls, "mainloopPointer", "I");
-	pa_mainloop* mainloop = (pa_mainloop*) ((*env)->GetIntField(env, obj, fid));
+	pa_mainloop* mainloop = (pa_mainloop*) getJavaPointer(env, obj, "mainloopPointer");
 	assert(mainloop != NULL);
 
-	fid = (*env)->GetFieldID(env, cls, "contextPointer", "I");
-	pa_context* context = (pa_context*) ((*env)->GetIntField(env, obj, fid));
+	pa_context* context = (pa_context*) getJavaPointer(env, obj, "contextPointer");
 	assert(context != NULL);
 
 	pa_operation* o = pa_context_drain(context, context_drain_complete_callback, NULL);
@@ -225,15 +223,15 @@
 /*
  * Class:     org_openjdk_sound_EventLoop
  * Method:    native_set_sink_volume
- * Signature: (III)V
+ * Signature: (II)V
  */
 JNIEXPORT void JNICALL Java_org_openjdk_sound_EventLoop_native_1set_1sink_1volume
-(JNIEnv* env, jobject obj, jint contextPointer, jint streamPointer, jint volume) {
+(JNIEnv* env, jobject obj, jlong streamPointer, jint volume) {
 
 	int* new_volume = malloc(sizeof(int));
 	*new_volume = volume;
-	int stream_id = pa_stream_get_index((pa_stream*) streamPointer);
-	pa_context_get_sink_input_info((pa_context*) contextPointer ,stream_id,sink_input_change_volume, new_volume);
+	int stream_id = pa_stream_get_index((pa_stream*) convertFromJavaPointer(streamPointer));
+	pa_context_get_sink_input_info((pa_context*) getJavaPointer(env, obj,"contextPointer") ,stream_id,sink_input_change_volume, new_volume);
 	return;
 }
 
--- a/src/org_openjdk_sound_EventLoop.h	Fri Aug 01 13:02:00 2008 -0400
+++ b/src/org_openjdk_sound_EventLoop.h	Fri Aug 01 17:16:36 2008 -0400
@@ -18,10 +18,10 @@
 /*
  * Class:     org_openjdk_sound_EventLoop
  * Method:    native_iterate
- * Signature: (II)I
+ * Signature: (I)I
  */
 JNIEXPORT jint JNICALL Java_org_openjdk_sound_EventLoop_native_1iterate
-  (JNIEnv *, jobject, jint, jint);
+  (JNIEnv *, jobject, jint);
 
 /*
  * Class:     org_openjdk_sound_EventLoop
@@ -34,10 +34,10 @@
 /*
  * Class:     org_openjdk_sound_EventLoop
  * Method:    native_set_sink_volume
- * Signature: (III)V
+ * Signature: (JI)V
  */
 JNIEXPORT void JNICALL Java_org_openjdk_sound_EventLoop_native_1set_1sink_1volume
-  (JNIEnv *, jobject, jint, jint, jint);
+  (JNIEnv *, jobject, jlong, jint);
 
 #ifdef __cplusplus
 }
--- a/src/org_openjdk_sound_PulseAudioSourceDataLine.c	Fri Aug 01 13:02:00 2008 -0400
+++ b/src/org_openjdk_sound_PulseAudioSourceDataLine.c	Fri Aug 01 17:16:36 2008 -0400
@@ -69,13 +69,13 @@
 
 }
 
-/*
+/* 
  * Class:     org_openjdk_sound_PulseAudioSourceDataLine
  * Method:    native_open
- * Signature: (ILjava/lang/String;Ljava/lang/String;FIIZI)V
+ * Signature: (JLjava/lang/String;Ljava/lang/String;FIIZI)V
  */
 JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioSourceDataLine_native_1open
-(JNIEnv* env, jobject obj, jint contextPointer, jstring name, jstring encodingString, jfloat rate, jint size, jint channels, jboolean bigEndian, jint bufferSize) {
+(JNIEnv* env, jobject obj, jlong contextPointer, jstring name, jstring encodingString, jfloat rate, jint size, jint channels, jboolean bigEndian, jint bufferSize) {
 
 	//TODO: Need to deal with the buffer size. Currently ignored
 
@@ -84,7 +84,7 @@
 	java_context->env = env;
 	java_context->obj = (*env)->NewGlobalRef(env, obj);
 
-	pa_context* context = (pa_context*) contextPointer;
+	pa_context* context = (pa_context*) convertFromJavaPointer(contextPointer);
 	assert(context != NULL);
 
 	pa_sample_spec sample_spec;
@@ -126,7 +126,7 @@
 
 	pa_stream_set_state_callback(stream, stream_state_change_callback, java_context);
 
-	setJavaIntField(env, obj, "streamPointer", (int) stream);
+	setJavaPointer(env, obj, "streamPointer", stream);
 	printf("returning from native_open\n");
 
 }
@@ -139,11 +139,7 @@
 JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioSourceDataLine_native_1write
 (JNIEnv* env, jobject obj, jbyteArray data, jint offset, jint data_length) {
 
-	jclass cls = (*env)->GetObjectClass(env, obj);
-	jfieldID fid = (*env)->GetFieldID(env, cls, "streamPointer", "I");
-	assert(fid);
-
-	pa_stream* stream = (pa_stream*) (*env)->GetIntField(env, obj, fid);
+	pa_stream* stream = (pa_stream*) getJavaPointer(env, obj, "streamPointer");
 	jbyte* data_buffer = (*env)->GetByteArrayElements(env, data, NULL);
 	jbyte* buffer_start = data_buffer + offset;
 	pa_stream_write(stream, buffer_start, data_length, NULL, 0, PA_SEEK_RELATIVE);
@@ -159,7 +155,7 @@
 JNIEXPORT jint JNICALL Java_org_openjdk_sound_PulseAudioSourceDataLine_native_1get_1writable_1size
 (JNIEnv* env, jobject obj) {
 
-	pa_stream *stream = (pa_stream*) getJavaIntField(env, obj, "streamPointer");
+	pa_stream *stream = (pa_stream*) getJavaPointer(env, obj, "streamPointer");
 	int available = pa_stream_writable_size(stream);
 
 }
@@ -172,18 +168,15 @@
 JNIEXPORT jint JNICALL Java_org_openjdk_sound_PulseAudioSourceDataLine_native_1flush
 (JNIEnv* env, jobject obj) {
 
-  	pa_stream *stream = getJavaIntField(env, obj, "streamPointer");
+	pa_stream *stream = (pa_stream*) getJavaPointer(env, obj, "streamPointer");
 	pa_operation *o = pa_stream_flush(stream, NULL, NULL);
-    	return o;
-
+	return (int) o;
 
 }
 
 JNIEXPORT jint JNICALL Java_org_openjdk_sound_PulseAudioSourceDataLine_native_1getOperationState(JNIEnv *env, jobject obj, jint operation) {
 
-
-    	return pa_operation_get_state((pa_operation *) operation);
-
+	return pa_operation_get_state((pa_operation *) operation);
 
 }
 
@@ -196,7 +189,7 @@
 (JNIEnv *env, jobject obj) {
 	printf("start called\n");
 
-	pa_stream *stream = (pa_stream*)getJavaIntField(env, obj, "streamPointer");
+	pa_stream *stream = (pa_stream*)getJavaPointer(env, obj, "streamPointer");
 	pa_stream_connect_playback(stream, NULL, NULL, 0, NULL, NULL);
 
 }
@@ -228,9 +221,9 @@
  */
 JNIEXPORT jint JNICALL Java_org_openjdk_sound_PulseAudioSourceDataLine_native_1drain
 (JNIEnv* env, jobject obj) {
-	pa_stream *stream = getJavaIntField(env, obj, "streamPointer");
+	pa_stream *stream = (pa_stream*) getJavaPointer(env, obj, "streamPointer");
 	pa_operation *o = pa_stream_drain(stream, NULL, NULL);
-    	return o;
+	return (int) o;
 }
 
 /*
--- a/src/org_openjdk_sound_PulseAudioSourceDataLine.h	Fri Aug 01 13:02:00 2008 -0400
+++ b/src/org_openjdk_sound_PulseAudioSourceDataLine.h	Fri Aug 01 17:16:36 2008 -0400
@@ -12,10 +12,10 @@
 /*
  * Class:     org_openjdk_sound_PulseAudioSourceDataLine
  * Method:    native_open
- * Signature: (ILjava/lang/String;Ljava/lang/String;FIIZI)V
+ * Signature: (JLjava/lang/String;Ljava/lang/String;FIIZI)V
  */
 JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioSourceDataLine_native_1open
-  (JNIEnv *, jobject, jint, jstring, jstring, jfloat, jint, jint, jboolean, jint);
+  (JNIEnv *, jobject, jlong, jstring, jstring, jfloat, jint, jint, jboolean, jint);
 
 /*
  * Class:     org_openjdk_sound_PulseAudioSourceDataLine
--- a/src/org_openjdk_sound_PulseAudioTargetDataLine.h	Fri Aug 01 13:02:00 2008 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_openjdk_sound_PulseAudioTargetDataLine */
-
-#ifndef _Included_org_openjdk_sound_PulseAudioTargetDataLine
-#define _Included_org_openjdk_sound_PulseAudioTargetDataLine
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_openjdk_sound_PulseAudioTargetDataLine
- * Method:    openStream
- * Signature: (Ljava/lang/String;FIIZI)V
- */
-JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioTargetDataLine_openStream
-  (JNIEnv *, jobject, jstring, jfloat, jint, jint, jboolean, jint);
-
-/*
- * Class:     org_openjdk_sound_PulseAudioTargetDataLine
- * Method:    readFromStream
- * Signature: ([BII)V
- */
-JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioTargetDataLine_readFromStream
-  (JNIEnv *, jobject, jbyteArray, jint, jint);
-
-/*
- * Class:     org_openjdk_sound_PulseAudioTargetDataLine
- * Method:    startStream
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioTargetDataLine_startStream
-  (JNIEnv *, jobject);
-
-/*
- * Class:     org_openjdk_sound_PulseAudioTargetDataLine
- * Method:    pauseStream
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioTargetDataLine_pauseStream
-  (JNIEnv *, jobject);
-
-/*
- * Class:     org_openjdk_sound_PulseAudioTargetDataLine
- * Method:    resumeStream
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioTargetDataLine_resumeStream
-  (JNIEnv *, jobject);
-
-/*
- * Class:     org_openjdk_sound_PulseAudioTargetDataLine
- * Method:    available
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_org_openjdk_sound_PulseAudioTargetDataLine_available
-  (JNIEnv *, jobject);
-
-/*
- * Class:     org_openjdk_sound_PulseAudioTargetDataLine
- * Method:    closeStream
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioTargetDataLine_closeStream
-  (JNIEnv *, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif