summaryrefslogtreecommitdiffstats
path: root/src/java/jogamp/openal/ALCImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/jogamp/openal/ALCImpl.java')
-rw-r--r--src/java/jogamp/openal/ALCImpl.java93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/java/jogamp/openal/ALCImpl.java b/src/java/jogamp/openal/ALCImpl.java
new file mode 100644
index 0000000..75fc47d
--- /dev/null
+++ b/src/java/jogamp/openal/ALCImpl.java
@@ -0,0 +1,93 @@
+/*
+ * Created on Saturday, July 10 2010 17:08
+ */
+package com.jogamp.openal.impl;
+
+import com.jogamp.common.nio.Buffers;
+import com.jogamp.openal.ALException;
+import com.jogamp.openal.ALCdevice;
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+/**
+ * ALC implementation.
+ * @author Michael Bien
+ */
+public class ALCImpl extends ALCAbstractImpl {
+
+ public String alcGetString(ALCdevice device, int param) {
+ if (device == null && param == ALC_DEVICE_SPECIFIER) {
+ throw new ALException("Call alcGetDeviceSpecifiers to fetch all available device names");
+ }
+
+ ByteBuffer buf = alcGetStringImpl(device, param);
+ if (buf == null) {
+ return null;
+ }
+ byte[] res = new byte[buf.capacity()];
+ buf.get(res);
+ try {
+ return new String(res, "US-ASCII");
+ } catch (UnsupportedEncodingException e) {
+ throw new ALException(e);
+ }
+ }
+
+ /** Entry point (through function pointer) to C language function: <br> <code> const ALCchar * alcGetString(ALCdevice * device, ALCenum param); </code> */
+ public ByteBuffer alcGetStringImpl(ALCdevice device, int param) {
+
+ final long __addr_ = getALCProcAddressTable()._addressof_alcGetString;
+ if (__addr_ == 0) {
+ throw new UnsupportedOperationException("Method \"alcGetStringImpl\" not available");
+ }
+ ByteBuffer _res;
+ _res = dispatch_alcGetStringImpl1(((device == null) ? null : device.getBuffer()), param, __addr_);
+ if (_res == null) {
+ return null;
+ }
+ Buffers.nativeOrder(_res);
+ return _res;
+ }
+ private native java.nio.ByteBuffer dispatch_alcGetStringImpl1(ByteBuffer deviceBuffer, int param, long addr);
+
+ /**
+ * Fetches the names of the available ALC device specifiers.
+ * Equivalent to the C call alcGetString(NULL, ALC_DEVICE_SPECIFIER).
+ */
+ public String[] alcGetDeviceSpecifiers() {
+ return getDoubleNullTerminatedString(ALC_DEVICE_SPECIFIER);
+ }
+
+ /**
+ * Fetches the names of the available ALC capture device specifiers.
+ * Equivalent to the C call alcGetString(NULL, ALC_CAPTURE_DEVICE_SPECIFIER).
+ */
+ public String[] alcGetCaptureDeviceSpecifiers() {
+ return getDoubleNullTerminatedString(ALC_CAPTURE_DEVICE_SPECIFIER);
+ }
+
+ private String[] getDoubleNullTerminatedString(int which) {
+ ByteBuffer buf = alcGetStringImpl(null, which);
+ if (buf == null) {
+ return null;
+ }
+ byte[] bytes = new byte[buf.capacity()];
+ buf.get(bytes);
+ try {
+ ArrayList/*<String>*/ res = new ArrayList/*<String>*/();
+ int i = 0;
+ while (i < bytes.length) {
+ int startIndex = i;
+ while ((i < bytes.length) && (bytes[i] != 0)) {
+ i++;
+ }
+ res.add(new String(bytes, startIndex, i - startIndex, "US-ASCII"));
+ i++;
+ }
+ return (String[]) res.toArray(new String[res.size()]);
+ } catch (UnsupportedEncodingException e) {
+ throw new ALException(e);
+ }
+ }
+}