Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 31 additions & 29 deletions include/libfreenect.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,58 +41,60 @@ namespace Freenect {
const Noncopyable& operator=( const Noncopyable& );
};

class FreenectDeviceState {
friend class FreenectDevice;
FreenectDeviceState(freenect_raw_tilt_state *_state):
m_state(_state)
{}
public:
void getAccelerometers(double* x, double* y, double* z) {
freenect_get_mks_accel(m_state, x, y, z);
}
double getTiltDegs() {
return freenect_get_tilt_degs(m_state);
}
private:
freenect_raw_tilt_state *m_state;
class FreenectTiltState {
friend class FreenectDevice;
FreenectTiltState(freenect_raw_tilt_state *_state):
m_state(_state), m_code(_state->tilt_status)
{}
public:
void getAccelerometers(double* x, double* y, double* z) {
freenect_get_mks_accel(m_state, x, y, z);
}
double getTiltDegs() {
return freenect_get_tilt_degs(m_state);
}
public:
freenect_tilt_status_code m_code;
private:
freenect_raw_tilt_state *m_state;
};

class FreenectDevice : Noncopyable {
public:
FreenectDevice(freenect_context *_ctx, int _index) {
if(freenect_open_device(_ctx, &m_dev, _index) != 0) throw std::runtime_error("Cannot open Kinect");
if(freenect_open_device(_ctx, &m_dev, _index) < 0) throw std::runtime_error("Cannot open Kinect");
freenect_set_user(m_dev, this);
freenect_set_video_format(m_dev, FREENECT_VIDEO_RGB);
freenect_set_depth_format(m_dev, FREENECT_DEPTH_11BIT);
freenect_set_depth_callback(m_dev, freenect_depth_callback);
freenect_set_video_callback(m_dev, freenect_video_callback);
}
~FreenectDevice() {
if(freenect_close_device(m_dev) != 0) throw std::runtime_error("Cannot shutdown Kinect");
if(freenect_close_device(m_dev) < 0) throw std::runtime_error("Cannot shutdown Kinect");
}
void startVideo() {
if(freenect_start_video(m_dev) != 0) throw std::runtime_error("Cannot start RGB callback");
if(freenect_start_video(m_dev) < 0) throw std::runtime_error("Cannot start RGB callback");
}
void stopVideo() {
if(freenect_stop_video(m_dev) != 0) throw std::runtime_error("Cannot stop RGB callback");
if(freenect_stop_video(m_dev) < 0) throw std::runtime_error("Cannot stop RGB callback");
}
void startDepth() {
if(freenect_start_depth(m_dev) != 0) throw std::runtime_error("Cannot start depth callback");
if(freenect_start_depth(m_dev) < 0) throw std::runtime_error("Cannot start depth callback");
}
void stopDepth() {
if(freenect_stop_depth(m_dev) != 0) throw std::runtime_error("Cannot stop depth callback");
if(freenect_stop_depth(m_dev) < 0) throw std::runtime_error("Cannot stop depth callback");
}
void setTiltDegrees(double _angle) {
if(freenect_set_tilt_degs(m_dev, _angle) != 0) throw std::runtime_error("Cannot set angle in degrees");
if(freenect_set_tilt_degs(m_dev, _angle) < 0) throw std::runtime_error("Cannot set angle in degrees");
}
void setLed(freenect_led_options _option) {
if(freenect_set_led(m_dev, _option) != 0) throw std::runtime_error("Cannot set led");
if(freenect_set_led(m_dev, _option) < 0) throw std::runtime_error("Cannot set led");
}
void updateState() {
if (freenect_update_tilt_state(m_dev) != 0) throw std::runtime_error("Cannot update device state");
if (freenect_update_tilt_state(m_dev) < 0) throw std::runtime_error("Cannot update device state");
}
FreenectDeviceState getState() const {
return FreenectDeviceState(freenect_get_tilt_state(m_dev));
FreenectTiltState getState() const {
return FreenectTiltState(freenect_get_tilt_state(m_dev));
}
// Do not call directly even in child
virtual void VideoCallback(void *video, uint32_t timestamp) = 0;
Expand All @@ -113,7 +115,7 @@ namespace Freenect {
template <class T>class Freenect : Noncopyable {
public:
Freenect() : m_stop(false) {
if(freenect_init(&m_ctx, NULL) != 0) throw std::runtime_error("Cannot initialize freenect library");
if(freenect_init(&m_ctx, NULL) < 0) throw std::runtime_error("Cannot initialize freenect library");
if(pthread_create(&m_thread, NULL, pthread_callback, (void*)this) != 0) throw std::runtime_error("Cannot initialize freenect thread");
}
~Freenect() {
Expand All @@ -122,11 +124,11 @@ namespace Freenect {
}
m_stop = true;
pthread_join(m_thread, NULL);
if(freenect_shutdown(m_ctx) != 0) throw std::runtime_error("Cannot cleanup freenect library");
if(freenect_shutdown(m_ctx) < 0) throw std::runtime_error("Cannot cleanup freenect library");
}
T& createDevice(int _index) {
m_devices.insert(std::make_pair<int, T*>(_index, new T(m_ctx, _index)));
return *(m_devices.at(_index));
return *(m_devices[_index]);
}
void deleteDevice(int _index) {
m_devices.erase(_index);
Expand All @@ -137,7 +139,7 @@ namespace Freenect {
// Do not call directly, thread runs here
void operator()() {
while(!m_stop) {
if(freenect_process_events(m_ctx) != 0) throw std::runtime_error("Cannot process freenect events");
if(freenect_process_events(m_ctx) < 0) throw std::runtime_error("Cannot process freenect events");
}
}
static void *pthread_callback(void *user_data) {
Expand Down
4 changes: 4 additions & 0 deletions wrappers/java/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.classpath
.project
.settings/
target/
63 changes: 63 additions & 0 deletions wrappers/java/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.openkinect</groupId>
<artifactId>freenect</artifactId>
<version>0.0.1-SNAPSHOT</version>

<repositories>
<repository>
<id>nativelibs4java-repo</id>
<name>NativeLibs4Java Maven Repository</name>
<url>http://nativelibs4java.sourceforge.net/maven</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nativelibs4java-pluginRepo</id>
<url>http://nativelibs4java.sourceforge.net/maven</url>
</pluginRepository>
</pluginRepositories>

<dependencies>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.jnaerator</groupId>
<artifactId>jnaerator-runtime</artifactId>
<version>0.9.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<!-- http://maven.apache.org/plugins/maven-compiler-plugin/ -->
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
12 changes: 12 additions & 0 deletions wrappers/java/src/main/java/org/openkinect/freenect/Context.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.openkinect.freenect;

public interface Context {
int numDevices();
void setLogHandler(LogHandler handler);
void setLogLevel(LogLevel level);
Device openDevice(int index);
void processEvents();
void processEventsBackground();
void stopEventThread();
void shutdown();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.openkinect.freenect;


public enum DepthFormat {
D11BIT(0, Freenect.FREENECT_FRAME_W, Freenect.FREENECT_FRAME_H, Freenect.FREENECT_DEPTH_11BIT_SIZE),
D10BIT(1, Freenect.FREENECT_FRAME_W, Freenect.FREENECT_FRAME_H, Freenect.FREENECT_DEPTH_10BIT_SIZE),
D11BIT_PACKED(2, Freenect.FREENECT_FRAME_W, Freenect.FREENECT_FRAME_H, Freenect.FREENECT_DEPTH_11BIT_PACKED_SIZE),
D10BIT_PACKED(3, Freenect.FREENECT_FRAME_W, Freenect.FREENECT_FRAME_H, Freenect.FREENECT_DEPTH_10BIT_PACKED_SIZE);
private int value;
private int frameSize;
private int width;
private int height;

private DepthFormat(int value, int width, int height, int frameSize) {
this.value = value;
this.width = width;
this.height = height;
this.frameSize = frameSize;
}
public int intValue() {
return value;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public int getFrameSize() {
return frameSize;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.openkinect.freenect;

import java.nio.ByteBuffer;

public interface DepthHandler {
void onFrameReceived(DepthFormat format, ByteBuffer frame, int timestamp);
}
19 changes: 19 additions & 0 deletions wrappers/java/src/main/java/org/openkinect/freenect/Device.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.openkinect.freenect;



public interface Device {
double[] getAccel();
int setLed(LedStatus status);
void refreshTiltState();
double getTiltAngle();
int setTiltAngle(double angle);
TiltStatus getTiltStatus();
void setDepthFormat(DepthFormat fmt);
void setVideoFormat(VideoFormat fmt);
int startDepth(DepthHandler handler);
int startVideo(VideoHandler handler);
int stopDepth();
int stopVideo();
void close();
}
Loading