diff --git a/src/android/jni/sensor.cpp b/src/android/jni/sensor.cpp index baeb668463..c332aa2f6e 100644 --- a/src/android/jni/sensor.cpp +++ b/src/android/jni/sensor.cpp @@ -41,6 +41,18 @@ Java_com_intel_realsense_librealsense_Sensor_nGetStreamProfiles(JNIEnv *env, jcl return rv; } +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_intel_realsense_librealsense_Sensor_nIsSensorExtendableTo(JNIEnv *env, jclass type, + jlong handle, jint extension) { + rs2_error *e = NULL; + int rv = rs2_is_sensor_extendable_to(reinterpret_cast(handle), + static_cast(extension), &e); + handle_error(env, e); + return rv > 0; +} + + extern "C" JNIEXPORT void JNICALL Java_com_intel_realsense_librealsense_RoiSensor_nSetRegionOfInterest(JNIEnv *env, jclass clazz, @@ -75,4 +87,14 @@ Java_com_intel_realsense_librealsense_RoiSensor_nGetRegionOfInterest(JNIEnv *env env->SetIntField(roi, min_y_field, min_y); env->SetIntField(roi, max_x_field, max_x); env->SetIntField(roi, max_y_field, max_y); +} + +extern "C" +JNIEXPORT jfloat JNICALL +Java_com_intel_realsense_librealsense_DepthSensor_nGetDepthScale(JNIEnv *env, jclass clazz, + jlong handle) { + rs2_error* e = nullptr; + float depthScale = rs2_get_depth_scale(reinterpret_cast(handle), &e); + handle_error(env, e); + return depthScale; } \ No newline at end of file diff --git a/src/uvc/uvc-device.cpp b/src/uvc/uvc-device.cpp index 603d3ab640..79268ed6f2 100644 --- a/src/uvc/uvc-device.cpp +++ b/src/uvc/uvc-device.cpp @@ -14,6 +14,25 @@ const int CONTROL_TRANSFER_TIMEOUT = 100; const int INTERRUPT_BUFFER_SIZE = 1024; const int FIRST_FRAME_MILLISECONDS_TIMEOUT = 2000; +class lock_singleton +{ +public: + static lock_singleton& instance() + { + static lock_singleton inst; + return inst; + } + static void lock(); + static void unlock(); + +private: + static std::recursive_mutex m; +}; +std::recursive_mutex lock_singleton::m; +void lock_singleton::lock() { m.lock(); } +void lock_singleton::unlock() { m.unlock(); } + + namespace librealsense { namespace platform @@ -301,14 +320,15 @@ namespace librealsense return results; } + void rs_uvc_device::lock() const { - + lock_singleton::instance().lock(); } void rs_uvc_device::unlock() const { - + lock_singleton::instance().unlock(); } std::string rs_uvc_device::get_device_location() const diff --git a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/ColorSensor.java b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/ColorSensor.java new file mode 100644 index 0000000000..18eed31299 --- /dev/null +++ b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/ColorSensor.java @@ -0,0 +1,9 @@ +package com.intel.realsense.librealsense; + +public class ColorSensor extends Sensor { + + ColorSensor(long handle) { + super(handle); + mOwner = false; + } +} diff --git a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/DepthSensor.java b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/DepthSensor.java new file mode 100644 index 0000000000..6fc1c8a89c --- /dev/null +++ b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/DepthSensor.java @@ -0,0 +1,15 @@ +package com.intel.realsense.librealsense; + +public class DepthSensor extends Sensor { + + DepthSensor(long handle) { + super(handle); + mOwner = false; + } + + public float getDepthScale() { return nGetDepthScale(mHandle); } + + + private static native float nGetDepthScale(long handle); +} + diff --git a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Extension.java b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Extension.java index 3494efdd1d..24bb008a73 100644 --- a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Extension.java +++ b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Extension.java @@ -39,7 +39,14 @@ public enum Extension { WHEEL_ODOMETER(35), GLOBAL_TIMER(36), UPDATABLE(37), - UPDATE_DEVICE(38); + UPDATE_DEVICE(38), + L500_DEPTH_SENSOR(39), + TM2_SENSOR(40), + AUTO_CALIBRATED_DEVICE(41), + COLOR_SENSOR(42), + MOTION_SENSOR(43), + FISHEYE_SENSOR(44), + DEPTH_HUFFMAN_DECODER(45); private final int mValue; diff --git a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Pipeline.java b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Pipeline.java index 6312382954..e21e4300e3 100644 --- a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Pipeline.java +++ b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Pipeline.java @@ -6,6 +6,10 @@ public Pipeline(){ mHandle = nCreate(ctx.getHandle()); } + public Pipeline(RsContext ctx){ + mHandle = nCreate(ctx.getHandle()); + } + public PipelineProfile start() throws Exception{ return new PipelineProfile(nStart(mHandle)); } diff --git a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Sensor.java b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Sensor.java index 66bba6157d..2d7b5a24f4 100644 --- a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Sensor.java +++ b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/Sensor.java @@ -18,11 +18,21 @@ public List getStreamProfiles(){ return rv; } - public T as(Extension extension) { - switch (extension){ - case ROI: return (T) new RoiSensor(mHandle); + public T as(Extension extension) throws RuntimeException { + if (this.is(extension)) { + switch (extension){ + case ROI: return (T) new RoiSensor(mHandle); + case DEPTH_SENSOR: return (T) new DepthSensor(mHandle); + case COLOR_SENSOR: return (T) new ColorSensor(mHandle); + default: throw new RuntimeException("this API version does not support " + extension.name()); + } + } else{ + throw new RuntimeException("this sensor is not extendable to " + extension.name()); } - throw new RuntimeException("this sensor is not extendable to " + extension.name()); + } + + public boolean is(Extension extension) { + return nIsSensorExtendableTo(mHandle, extension.value()); } @Override @@ -33,4 +43,5 @@ public void close() { private static native long[] nGetStreamProfiles(long handle); private static native void nRelease(long handle); + private static native boolean nIsSensorExtendableTo(long handle, int extension); } diff --git a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/StreamFormat.java b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/StreamFormat.java index 546f4172f9..71afaf10bf 100644 --- a/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/StreamFormat.java +++ b/wrappers/android/librealsense/src/main/java/com/intel/realsense/librealsense/StreamFormat.java @@ -23,7 +23,13 @@ public enum StreamFormat { DISPARITY32(19), Y10BPACK(20), DISTANCE(21), - MJPEG(22); + MJPEG(22), + Y8I(23), + Y12I(24), + INZI(25), + INVI(26), + W10(27), + Z16H(28); private final int mValue; private StreamFormat(int value) { mValue = value; }