changeset 32:e48962fa0e8e

compiles/all tests pass committer: Omair Majid <omajid@redhat.com>
author Omair Majid <omajid@redhat.com>
date Fri, 01 Aug 2008 11:54:30 -0400
parents 70d51e08abbb
children 7dbea4cf0170
files makefile src/jni-common.c src/jni-common.h src/org/openjdk/sound/PulseAudioSourceDataLine.java src/org_openjdk_sound_EventLoop.c src/org_openjdk_sound_PulseAudioSourceDataLine.c
diffstat 6 files changed, 28 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/makefile	Fri Aug 01 11:36:55 2008 -0400
+++ b/makefile	Fri Aug 01 11:54:30 2008 -0400
@@ -22,7 +22,8 @@
 
 lib/libpulse-java.so: \
                       bin/org_openjdk_sound_EventLoop.o \
-                      bin/org_openjdk_sound_PulseAudioSourceDataLine.o 
+                      bin/org_openjdk_sound_PulseAudioSourceDataLine.o \
+					  bin/jni-common.o
 #                      bin/org_openjdk_sound_PulseAudioTargetDataLine.o 
 	gcc -g -shared -o $@ $^ /usr/lib/libpulse.so
 
@@ -37,6 +38,9 @@
 #bin/org_openjdk_sound_PulseAudioTargetDataLine.o: src/org_openjdk_sound_PulseAudioTargetDataLine.c src/org_openjdk_sound_PulseAudioTargetDataLine.h bin
 #	gcc -g -c -o $@ $<
 
+bin/jni-common.o: src/jni-common.c src/jni-common.h
+	gcc -g -c -o $@ $<
+
 # Java headers
 
 src/org_openjdk_sound_EventLoop.h: src/org/openjdk/sound/EventLoop.class
--- a/src/jni-common.c	Fri Aug 01 11:36:55 2008 -0400
+++ b/src/jni-common.c	Fri Aug 01 11:54:30 2008 -0400
@@ -1,25 +1,24 @@
 #include "jni-common.h"
 
-void setJavaIntField(JNIEnv *env, jobject obj, void *ptr, char *fieldName) {
+void setJavaIntField(JNIEnv *env, jobject obj,char *fieldName, int value) {
 	jclass cls = (*env)->GetObjectClass(env, obj);
-	jlong value = (int) ptr;
 	jfieldID fid =(*env)->GetFieldID(env, cls, fieldName, "I");
 	(*env)->SetIntField(env, obj, fid, value);
-	(*env)->DeleteLocalReference(cls);
+	(*env)->DeleteLocalRef(env, cls);
 }
 
-void *getJavaIntField(JNIEnv *env, jobject obj, char *fieldName) {
+void* getJavaIntField(JNIEnv* env, jobject obj, char* fieldName) {
 	jclass cls = (*env)->GetObjectClass(env, obj);
 	jfieldID fid = (*env)->GetFieldID(env, cls, fieldName, "I");
 	jlong value = (*env)->GetIntField(env, obj, fid);
-	(*env)->DeleteLocalReference(cls);
+	(*env)->DeleteLocalRef(env, cls);
 	return (void *) value;
 }
 
 /*
  * Throw an exception by name
  */
-void ThrowByName(JNIEnv *env, const char *name, const char *msg) {
+void throwByName(JNIEnv* env, const char* name, const char* msg) {
 	jclass cls = (*env)->FindClass(env, name);
 	/* if cls is NULL, an exception has already been thrown */
 	if (cls != NULL) {
--- a/src/jni-common.h	Fri Aug 01 11:36:55 2008 -0400
+++ b/src/jni-common.h	Fri Aug 01 11:54:30 2008 -0400
@@ -1,14 +1,15 @@
 #ifndef _JNI_COMMON_H
 #define _JNI_COMMON_H
 
+#include <jni.h>
 /*
  * This file contains some commonly used functions 
  * 
  */
 
-void *getJavaIntField(JNIEnv *env, jobject obj, char *fieldName);
-void setJavaIntField(JNIEnv *env, jobject obj, void *ptr, char *fieldName);
+void* getJavaIntField(JNIEnv* env, jobject obj, char* fieldName);
+void setJavaIntField(JNIEnv* env, jobject obj, char* fieldName, int value);
 
-void ThrowByName(JNIEnv *env, const char *name, const char *msg);
+void throwByName(JNIEnv* const env, const char* const name, const char* const msg);
 
 #endif
--- a/src/org/openjdk/sound/PulseAudioSourceDataLine.java	Fri Aug 01 11:36:55 2008 -0400
+++ b/src/org/openjdk/sound/PulseAudioSourceDataLine.java	Fri Aug 01 11:54:30 2008 -0400
@@ -20,7 +20,7 @@
 
 	private static final int DEFAULT_BUFFER_SIZE = 1000;
 	private String streamName = "Java Stream";
-	private List<StreamListener> streamListeners = new ArrayList();
+	private List<StreamListener> streamListeners = new ArrayList<StreamListener>();
 
 	private EventLoop eventLoop = null;
 
@@ -29,7 +29,7 @@
 
 	private  AudioFormat format = null;
 	
-	private ArrayList<LineListener> listeners;
+	private List<LineListener> listeners;
 
 	/*
 	 * When moving from 32bit platform to 64 bit platform, these variables that
@@ -75,6 +75,7 @@
 
 	public PulseAudioSourceDataLine(EventLoop eventLoop) {
 		this.eventLoop = eventLoop;
+		this.listeners = new ArrayList<LineListener>();
 	}
 
 	public void open(AudioFormat format, int bufferSize)
--- a/src/org_openjdk_sound_EventLoop.c	Fri Aug 01 11:36:55 2008 -0400
+++ b/src/org_openjdk_sound_EventLoop.c	Fri Aug 01 11:54:30 2008 -0400
@@ -1,6 +1,7 @@
 #include <pulse/pulseaudio.h>
 
 #include "org_openjdk_sound_EventLoop.h"
+#include "jni-common.h"
 
 const int PA_ITERATE_BLOCK = 1;
 const int PA_ITERATE_NOBLOCK = 0;
@@ -98,12 +99,8 @@
 		pa_context_connect(context, NULL, 0, NULL);
 	}
 
-	fid = (*env)->GetFieldID(env, cls, "mainloopPointer", "I");
-	(*env)->SetIntField(env, obj, fid, (jint)mainloop);
-
-	fid = (*env)->GetFieldID(env, cls, "contextPointer", "I");
-	(*env)->SetIntField(env, obj, fid, (jint) context);
-
+	setJavaIntField(env, obj, "mainloopPointer", (int) mainloop);
+	setJavaIntField(env, obj, "contextPointer", (int) context);
 	printf("native_setup() returning\n");
 	return;
 
--- a/src/org_openjdk_sound_PulseAudioSourceDataLine.c	Fri Aug 01 11:36:55 2008 -0400
+++ b/src/org_openjdk_sound_PulseAudioSourceDataLine.c	Fri Aug 01 11:54:30 2008 -0400
@@ -3,7 +3,10 @@
 #include <fcntl.h>
 #include <jni.h>
 #include <pulse/pulseaudio.h>
+
 #include "org_openjdk_sound_PulseAudioSourceDataLine.h"
+#include "jni-common.h"
+
 
 typedef struct java_context_t {
 	JNIEnv* env;
@@ -87,7 +90,7 @@
 
 	pa_sample_spec sample_spec;
 
-	char *encoding = (*env)->GetStringUTFChars(env, encodingString, NULL);
+	const char *encoding = (*env)->GetStringUTFChars(env, encodingString, NULL);
 
 	if( (strcmp(encoding, "PCM_UNSIGNED") == 0) && (size == 8)) {
 		sample_spec.format = PA_SAMPLE_U8;
@@ -124,7 +127,7 @@
 
 	pa_stream_set_state_callback(stream, stream_state_change_callback, java_context);
 
-	setJavaIntField(env, obj, stream, "streamPointer");
+	setJavaIntField(env, obj, "streamPointer", (int) stream);
 	printf("returning from native_open\n");
 
 }
@@ -135,7 +138,7 @@
  * Signature: ([BII)V
  */
 JNIEXPORT void JNICALL Java_org_openjdk_sound_PulseAudioSourceDataLine_native_1write
-(JNIEnv* env, jobject obj, jbyteArray buffer, jint offset, jint length) {
+(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");
@@ -143,6 +146,7 @@
 
 	pa_stream* stream = (pa_stream*) (*env)->GetIntField(env, obj, fid);
 	jbyte* data_buffer = (*env)->GetByteArrayElements(env, data, NULL);
+	data_buffer +=offset;
 
 	pa_stream_write(stream, data_buffer, data_length, NULL, 0, PA_SEEK_RELATIVE);
 	(*env)->ReleaseByteArrayElements(env, data, data_buffer, 0);
@@ -183,7 +187,7 @@
 (JNIEnv *env, jobject obj) {
 	printf("start called\n");
 
-	pa_stream *stream = getJavaIntField(env, obj, "streamPointer");
+	pa_stream *stream = (pa_stream*)getJavaIntField(env, obj, "streamPointer");
 
 	pa_stream_connect_playback(stream, NULL, NULL, 0, NULL, NULL);