From e1f4e3d2d70df6c5d6469b02ae80ede69459197d Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Fri, 18 Nov 2016 10:44:31 -0800 Subject: [PATCH] Fix mapping into Java enums. The values are bitmask not contiguous, so we need to use a switch instead of an array. --- java/src/edu/wpi/cscore/VideoEvent.java | 26 +++++++++++++++++++--- java/src/edu/wpi/cscore/VideoMode.java | 6 ++++- java/src/edu/wpi/cscore/VideoProperty.java | 13 +++++++++-- java/src/edu/wpi/cscore/VideoSink.java | 11 +++++++-- java/src/edu/wpi/cscore/VideoSource.java | 12 ++++++++-- 5 files changed, 58 insertions(+), 10 deletions(-) diff --git a/java/src/edu/wpi/cscore/VideoEvent.java b/java/src/edu/wpi/cscore/VideoEvent.java index 185714b921..16617b4c5d 100644 --- a/java/src/edu/wpi/cscore/VideoEvent.java +++ b/java/src/edu/wpi/cscore/VideoEvent.java @@ -10,6 +10,7 @@ package edu.wpi.cscore; /// Video event public class VideoEvent { public enum Kind { + kUnknown(0x0000), kSourceCreated(0x0001), kSourceDestroyed(0x0002), kSourceConnected(0x0004), @@ -35,18 +36,37 @@ public class VideoEvent { return value; } } - private static final Kind[] m_kindValues = Kind.values(); + + public static Kind getKindFromInt(int kind) { + switch (kind) { + case 0x0001: return Kind.kSourceCreated; + case 0x0002: return Kind.kSourceDestroyed; + case 0x0004: return Kind.kSourceConnected; + case 0x0008: return Kind.kSourceDisconnected; + case 0x0010: return Kind.kSourceVideoModesUpdated; + case 0x0020: return Kind.kSourceVideoModeChanged; + case 0x0040: return Kind.kSourcePropertyCreated; + case 0x0080: return Kind.kSourcePropertyValueUpdated; + case 0x0100: return Kind.kSourcePropertyChoicesUpdated; + case 0x0200: return Kind.kSinkSourceChanged; + case 0x0400: return Kind.kSinkCreated; + case 0x0800: return Kind.kSinkDestroyed; + case 0x1000: return Kind.kSinkEnabled; + case 0x2000: return Kind.kSinkDisabled; + default: return Kind.kUnknown; + } + } VideoEvent(int kind, int source, int sink, String name, int pixelFormat, int width, int height, int fps, int property, int propertyKind, int value, String valueStr) { - this.kind = m_kindValues[kind]; + this.kind = getKindFromInt(kind); this.sourceHandle = source; this.sinkHandle = sink; this.name = name; this.mode = new VideoMode(pixelFormat, width, height, fps); this.propertyHandle = property; - this.propertyKind = VideoProperty.m_kindValues[propertyKind]; + this.propertyKind = VideoProperty.getKindFromInt(propertyKind); this.value = value; this.valueStr = valueStr; } diff --git a/java/src/edu/wpi/cscore/VideoMode.java b/java/src/edu/wpi/cscore/VideoMode.java index ef3b57131e..34c29176b7 100644 --- a/java/src/edu/wpi/cscore/VideoMode.java +++ b/java/src/edu/wpi/cscore/VideoMode.java @@ -23,8 +23,12 @@ public class VideoMode { } private static final PixelFormat[] m_pixelFormatValues = PixelFormat.values(); + public static PixelFormat getPixelFormatFromInt(int pixelFormat) { + return m_pixelFormatValues[pixelFormat]; + } + public VideoMode(int pixelFormat, int width, int height, int fps) { - this.pixelFormat = m_pixelFormatValues[pixelFormat]; + this.pixelFormat = getPixelFormatFromInt(pixelFormat); this.width = width; this.height = height; this.fps = fps; diff --git a/java/src/edu/wpi/cscore/VideoProperty.java b/java/src/edu/wpi/cscore/VideoProperty.java index 096f7abdc3..e05b889074 100644 --- a/java/src/edu/wpi/cscore/VideoProperty.java +++ b/java/src/edu/wpi/cscore/VideoProperty.java @@ -20,7 +20,16 @@ public class VideoProperty { return value; } } - static final Kind[] m_kindValues = Kind.values(); + + public static Kind getKindFromInt(int kind) { + switch (kind) { + case 1: return Kind.kBoolean; + case 2: return Kind.kInteger; + case 4: return Kind.kString; + case 8: return Kind.kEnum; + default: return Kind.kNone; + } + } public String getName() { return CameraServerJNI.getPropertyName(m_handle); @@ -91,7 +100,7 @@ public class VideoProperty { VideoProperty(int handle) { m_handle = handle; - m_kind = m_kindValues[CameraServerJNI.getPropertyKind(handle)]; + m_kind = getKindFromInt(CameraServerJNI.getPropertyKind(handle)); } VideoProperty(int handle, Kind kind) { diff --git a/java/src/edu/wpi/cscore/VideoSink.java b/java/src/edu/wpi/cscore/VideoSink.java index 6fa353c868..0a2bc12ca4 100644 --- a/java/src/edu/wpi/cscore/VideoSink.java +++ b/java/src/edu/wpi/cscore/VideoSink.java @@ -23,7 +23,14 @@ public class VideoSink { return value; } } - static final Kind[] m_kindValues = Kind.values(); + + public static Kind getKindFromInt(int kind) { + switch (kind) { + case 2: return Kind.kMJPEG; + case 4: return Kind.kCv; + default: return Kind.kUnknown; + } + } protected VideoSink(int handle) { m_handle = handle; @@ -58,7 +65,7 @@ public class VideoSink { /// Get the kind of the sink. public Kind getKind() { - return m_kindValues[CameraServerJNI.getSinkKind(m_handle)]; + return getKindFromInt(CameraServerJNI.getSinkKind(m_handle)); } /// Get the name of the sink. The name is an arbitrary identifier diff --git a/java/src/edu/wpi/cscore/VideoSource.java b/java/src/edu/wpi/cscore/VideoSource.java index f8682222d9..eec11bd2a2 100644 --- a/java/src/edu/wpi/cscore/VideoSource.java +++ b/java/src/edu/wpi/cscore/VideoSource.java @@ -23,7 +23,15 @@ public class VideoSource { return value; } } - static final Kind[] m_kindValues = Kind.values(); + + public static Kind getKindFromInt(int kind) { + switch (kind) { + case 1: return Kind.kUSB; + case 2: return Kind.kHTTP; + case 4: return Kind.kCv; + default: return Kind.kUnknown; + } + } protected VideoSource(int handle) { m_handle = handle; @@ -58,7 +66,7 @@ public class VideoSource { /// Get the kind of the source. public Kind getKind() { - return m_kindValues[CameraServerJNI.getSourceKind(m_handle)]; + return getKindFromInt(CameraServerJNI.getSourceKind(m_handle)); } /// Get the name of the source. The name is an arbitrary identifier