Mercurial > hg > pulseaudio
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);