diff --git a/java/src/edu/wpi/cameraserver/CvSource.java b/java/src/edu/wpi/cameraserver/CvSource.java index e64840399a..b368e06e53 100644 --- a/java/src/edu/wpi/cameraserver/CvSource.java +++ b/java/src/edu/wpi/cameraserver/CvSource.java @@ -48,7 +48,10 @@ public class CvSource extends VideoSource { /// @param name Property name /// @param type Property type /// @return Property - //public VideoProperty createProperty(String name, VideoProperty.Type type); + public VideoProperty createProperty(String name, VideoProperty.Type type) { + return new VideoProperty( + CameraServerJNI.createSourceProperty(m_handle, name, type.getValue())); + } /// Create a property with a change callback. /// @param name Property name @@ -62,9 +65,9 @@ public class CvSource extends VideoSource { /// Remove a property. /// @param name Property name - //public void removeProperty(VdeoProperty property) { - // CameraServerJNI.removeSourceProperty(m_handle, property.m_handle); - //} + public void removeProperty(VideoProperty property) { + CameraServerJNI.removeSourceProperty(m_handle, property.m_handle); + } /// Remove a property. /// @param name Property name diff --git a/java/src/edu/wpi/cameraserver/VideoProperty.java b/java/src/edu/wpi/cameraserver/VideoProperty.java new file mode 100644 index 0000000000..9a4421a2eb --- /dev/null +++ b/java/src/edu/wpi/cameraserver/VideoProperty.java @@ -0,0 +1,102 @@ +package edu.wpi.cameraserver; + +public class VideoProperty { + public enum Type { + kNone(0), kBoolean(1), kDouble(2), kString(3), kEnum(4); + private int value; + + private Type(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + }; + private static final Type[] m_typeValues = Type.values(); + + public String getName() { + return CameraServerJNI.getPropertyName(m_handle); + } + + public Type type() { + return m_type; + } + + public boolean isValid() { + return m_type != Type.kNone; + } + + // Type checkers + public boolean isBoolean() { + return m_type == Type.kBoolean; + } + + public boolean isDouble() { + return m_type == Type.kDouble; + } + + public boolean isString() { + return m_type == Type.kString; + } + + public boolean isEnum() { + return m_type == Type.kEnum; + } + + // Boolean-specific functions + public boolean getBoolean() { + return CameraServerJNI.getBooleanProperty(m_handle); + } + + public void setBoolean(boolean value) { + CameraServerJNI.setBooleanProperty(m_handle, value); + } + + // Double-specific functions + public double getDouble() { + return CameraServerJNI.getDoubleProperty(m_handle); + } + + public void setDouble(double value) { + CameraServerJNI.setDoubleProperty(m_handle, value); + } + + public double getMin() { + return CameraServerJNI.getDoublePropertyMin(m_handle); + } + + public double getMax() { + return CameraServerJNI.getDoublePropertyMax(m_handle); + } + + // String-specific functions + public String getString() { + return CameraServerJNI.getStringProperty(m_handle); + } + + public void setString(String value) { + CameraServerJNI.setStringProperty(m_handle, value); + } + + // Enum-specific functions + public int getEnum() { + return CameraServerJNI.getEnumProperty(m_handle); + } + + public void setEnum(int value) { + CameraServerJNI.setEnumProperty(m_handle, value); + } + + public String[] getChoices() { + return CameraServerJNI.getEnumPropertyChoices(m_handle); + } + + VideoProperty(int handle) { + m_handle = handle; + m_type = m_typeValues[CameraServerJNI.getPropertyType(handle)]; + } + + int m_handle; + private Type m_type; +} diff --git a/java/src/edu/wpi/cameraserver/VideoSink.java b/java/src/edu/wpi/cameraserver/VideoSink.java index a645252f28..b4c7cf6ff1 100644 --- a/java/src/edu/wpi/cameraserver/VideoSink.java +++ b/java/src/edu/wpi/cameraserver/VideoSink.java @@ -50,8 +50,8 @@ public class VideoSink { /// @param name Property name /// @return Property (type Property::kNone if no property with /// the given name exists or no source connected) - //public VideoProperty getSourceProperty(String name) { - //} + public VideoProperty getSourceProperty(String name) { + return new VideoProperty(CameraServerJNI.getSourceProperty(m_handle, name)); } /// Enumerate all existing sinks. /// @return Vector of sinks. diff --git a/java/src/edu/wpi/cameraserver/VideoSource.java b/java/src/edu/wpi/cameraserver/VideoSource.java index 6403e5a7a4..96975d40cd 100644 --- a/java/src/edu/wpi/cameraserver/VideoSource.java +++ b/java/src/edu/wpi/cameraserver/VideoSource.java @@ -49,10 +49,19 @@ public class VideoSource { /// @param name Property name /// @return Property contents (of type Property::kNone if no property with /// the given name exists) - //public VideoProperty getProperty(String name); + public VideoProperty getProperty(String name) { + return new VideoProperty(CameraServerJNI.getSourceProperty(m_handle, name)); + } /// Enumerate all properties of this source. - //public VideoProperty[] enumerateProperties(); + public VideoProperty[] enumerateProperties() { + int[] handles = CameraServerJNI.enumerateSourceProperties(m_handle); + VideoProperty[] rv = new VideoProperty[handles.length]; + for (int i=0; i