diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..47a3b59 --- /dev/null +++ b/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5e56e04 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/.project b/.project new file mode 100644 index 0000000..9e75d8e --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + SERenderer + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.core.runtime.prefs b/.settings/org.eclipse.core.runtime.prefs new file mode 100644 index 0000000..5a0ad22 --- /dev/null +++ b/.settings/org.eclipse.core.runtime.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +line.separator=\n diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..7341ab1 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/docs/PlaySEM_SERenderer_Interface.png b/docs/PlaySEM_SERenderer_Interface.png new file mode 100644 index 0000000..bdffee8 Binary files /dev/null and b/docs/PlaySEM_SERenderer_Interface.png differ diff --git a/driver/arduino_mpegv_devices/arduino_mpegv_devices.ino b/driver/arduino_mpegv_devices/arduino_mpegv_devices.ino new file mode 100644 index 0000000..b5ca3e3 --- /dev/null +++ b/driver/arduino_mpegv_devices/arduino_mpegv_devices.ino @@ -0,0 +1,115 @@ +#include + +const int PIN_STRIP = 2; +const int N_LEDS = 60; + +const int PIN_FAN_1 = 5; +const int PIN_FAN_2 = 6; +const int PIN_VIB_1 = 9; +const int PIN_VIB_2 = 10; + +const int DEVICE_TYPE_FAN = 81; +const int DEVICE_TYPE_VIB = 82; + +boolean cmdComplete = false; +String command = ""; + +Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN_STRIP, NEO_GRB + NEO_KHZ800); + +void setup() { + Serial.begin(9600); + pinMode(PIN_FAN_1, OUTPUT); + pinMode(PIN_FAN_2, OUTPUT); + pinMode(PIN_VIB_1, OUTPUT); + pinMode(PIN_VIB_2, OUTPUT); + analogWrite(PIN_FAN_1, 0); + analogWrite(PIN_FAN_2, 0); + analogWrite(PIN_VIB_1, 0); + analogWrite(PIN_VIB_2, 0); + strip.begin(); + strip.show(); +} + +void loop() { + // L* controla leds + // LICRGB. liga o led no índice I, até C, onde R = red, G = green, B = blue + // F* controla ventiladores + // FIX. seta o ventilador I com intensidade X (0 até 255) + // V* controla motores vibradores + // VIX. seta o motor vibrador I com intensidade X (0 até 255) + + if (cmdComplete){ + //Serial.println(command); + switch(command[0]) { + case 'L': + processLed(); + break; + case 'F': + processPwm(DEVICE_TYPE_FAN); + break; + case 'V': + processPwm(DEVICE_TYPE_VIB); + break; + default : break; + } + cmdComplete = false; + command = ""; + } +} + +void serialEvent() { + while (Serial.available()) { + char inChar = (char)Serial.read(); + if (inChar == '.') { + cmdComplete = true; + } else { + command += inChar; + } + } +} + +void processPwm(int deviceType){ + int deviceIndex, intensity = 0; + deviceIndex = command[1]; + intensity = command[2]; + if (intensity < 0) + intensity = intensity + 256; + else if (intensity >0 && intensity < 80) + intensity = 80; + if (deviceType == DEVICE_TYPE_FAN){ + //Serial.println("F I=" + (String)deviceIndex + " X="+ (String)intensity); + if (deviceIndex == 1) + analogWrite(PIN_FAN_1, intensity); + else if (deviceIndex == 2) + analogWrite(PIN_FAN_2, intensity); + } + else if (deviceType == DEVICE_TYPE_VIB){ + //Serial.println("V I=" + (String)deviceIndex + " X="+ (String)intensity); + if (intensity > 153) + intensity = 153; + if (deviceIndex == 1) + analogWrite(PIN_VIB_1, intensity); + else if (deviceIndex == 2) + analogWrite(PIN_VIB_2, intensity); + } +} + +void processLed(){ + int ledIndex, count, red, green, blue = 0; + ledIndex = command[1]; + count = command[2]; + red = command[3]; + green = command[4]; + blue = command[5]; + if (red < 0) + red = red + 256; + if (green < 0) + green = green + 256; + if (blue < 0) + blue = blue + 256; + //Serial.println("L I=" + (String)ledIndex + " C=" + (String)count + " R=" + (String)red + " G=" + (String)green + " B=" + (String)blue); + for (int i=0; i seRendererService = new AnnotationLocalServiceBinder().read(SERendererService.class); + seRendererService.setManager(new DefaultServiceManager(seRendererService, SERendererService.class)); + + try { + return new LocalDevice(identity, type, details, icon, seRendererService); + } + catch (Exception e) { + System.out.print("Exception occured: " + e.getMessage()); + e.printStackTrace(); + return null; + } + } + +} diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/SERendererService.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/SERendererService.java new file mode 100644 index 0000000..afe0b3a --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/SERendererService.java @@ -0,0 +1,155 @@ +package br.ufes.inf.lprm.sensoryeffect.renderer; + +import java.beans.PropertyChangeSupport; + +import org.fourthline.cling.binding.annotations.UpnpAction; +import org.fourthline.cling.binding.annotations.UpnpInputArgument; +import org.fourthline.cling.binding.annotations.UpnpService; +import org.fourthline.cling.binding.annotations.UpnpServiceId; +import org.fourthline.cling.binding.annotations.UpnpServiceType; +import org.fourthline.cling.binding.annotations.UpnpStateVariable; + +import br.ufes.inf.lprm.sensoryeffect.renderer.parser.ClassificationScheme; +import br.ufes.inf.lprm.sensoryeffect.renderer.parser.HelperFunctions; +import br.ufes.inf.lprm.sensoryeffect.renderer.parser.SEMParser; +import br.ufes.inf.lprm.sensoryeffect.renderer.serial.SerialMessage; +import br.ufes.inf.lprm.sensoryeffect.renderer.timer.TimeLine; +import br.ufes.inf.lprm.sensoryeffect.renderer.timer.TimeLine.Status; + +@UpnpService( + serviceId = @UpnpServiceId("RendererControl"), + serviceType = @UpnpServiceType(value = "RendererControl", version = 1) +) +public class SERendererService { + + private static PropertyChangeSupport propertyChangeSupport = null; + + public SERendererService() { + propertyChangeSupport = new PropertyChangeSupport(this); + } + public static PropertyChangeSupport getPropertyChangeSupport() { + return propertyChangeSupport; + } + + @UpnpStateVariable(defaultValue = "", sendEvents = false) + private static String currentTime = ""; + + @UpnpStateVariable(defaultValue = "", sendEvents = false) + private String duration = ""; + + @UpnpStateVariable(defaultValue = "", sendEvents = false) + private String sensoryEffectMetadata = ""; + + @UpnpStateVariable(defaultValue = "", sendEvents = false) + private static String capabilitiesMetadata = ""; + + @UpnpStateVariable(defaultValue = "", sendEvents = false) + private static String hexLeft = ""; + + @UpnpStateVariable(defaultValue = "", sendEvents = false) + private static String hexCenter = ""; + + @UpnpStateVariable(defaultValue = "", sendEvents = false) + private static String hexRight = ""; + + @UpnpStateVariable(defaultValue = "false", sendEvents = false) + private static Boolean lightAutoExtraction = false; + + @UpnpStateVariable(defaultValue = "false", sendEvents = true) + public static Boolean semPrepared = false; + + @UpnpAction + public void setSem( + @UpnpInputArgument(name = "SensoryEffectMetadata") + String newSensoryEffectMetadata, + @UpnpInputArgument(name = "Duration") + String newDuration) { + semPrepared = false; + getPropertyChangeSupport().firePropertyChange("SemPrepared", "", semPrepared); + sensoryEffectMetadata = newSensoryEffectMetadata; + duration = newDuration; + currentTime = "0"; + lightAutoExtraction = false; + if (SERendererDevice.debugMode) + System.out.println("SetSem"); + Thread semParser = new Thread(new SEMParser(sensoryEffectMetadata, Long.parseLong(duration))); + semParser.start(); + } + + @UpnpAction + public void setPlay( + @UpnpInputArgument(name = "CurrentTime") + String newCurrentTime) { + SERendererDevice.timeLine.play(Long.parseLong(newCurrentTime)); + } + + @UpnpAction + public void setPause( + @UpnpInputArgument(name = "CurrentTime") + String newCurrentTime) { + SERendererDevice.timeLine.pause(Long.parseLong(newCurrentTime)); + } + + @UpnpAction + public void setStop() { + SERendererDevice.timeLine.stop(); + } + + @UpnpAction + public void setCurrentTime( + @UpnpInputArgument(name = "CurrentTime") + String newCurrentTime) { + currentTime = newCurrentTime; + SERendererDevice.timeLine.setCurrentTime(Long.parseLong(currentTime)); + } + + @UpnpAction + public void setLightColors( + @UpnpInputArgument(name = "HexLeft") + String newHexLeft, + @UpnpInputArgument(name = "HexCenter") + String newHexCenter, + @UpnpInputArgument(name = "HexRight") + String newHexRight) { + if (lightAutoExtraction && TimeLine.status.getId() == Status.PLAYING.getId()){ + hexLeft = newHexLeft; + hexCenter = newHexCenter; + hexRight = newHexRight; + int[] rgbLeft = HelperFunctions.hexToRGB(hexLeft); + int[] rgbCenter = HelperFunctions.hexToRGB(hexCenter); + int[] rgbRight = HelperFunctions.hexToRGB(hexRight); + byte[] messageLedLeft = SerialMessage.prepareMessageToLed(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_LEFT, (char)rgbLeft[0], (char)rgbLeft[1], (char)rgbLeft[2]); + byte[] messageLedCenter = SerialMessage.prepareMessageToLed(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_CENTER, (char)rgbCenter[0], (char)rgbCenter[1], (char)rgbCenter[2]); + byte[] messageLedRight = SerialMessage.prepareMessageToLed(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_RIGHT, (char)rgbRight[0], (char)rgbRight[1], (char)rgbRight[2]); + +// System.out.println(currentTime + " autoextraction: " + SerialMessage.byteArrayToString(messageLedLeft)); +// System.out.println(currentTime + " autoextraction: " + SerialMessage.byteArrayToString(messageLedCenter)); +// System.out.println(currentTime + " autoextraction: " + SerialMessage.byteArrayToString(messageLedRight)); + + SerialMessage.sendMessage(messageLedLeft); + SerialMessage.sendMessage(messageLedCenter); + SerialMessage.sendMessage(messageLedRight); + if (SERendererDevice.debugMode) + System.out.println("SetLightColors"); + } + else { + hexLeft = ""; + hexCenter = ""; + hexRight = ""; + } + } + + public static void setLocalCurrentTime(long newCurrentTime){ + currentTime = String.valueOf(newCurrentTime); + } + + public static void setCapabilitiesMetadata(String newCapabilitiesMetadata){ + capabilitiesMetadata = newCapabilitiesMetadata; + } + + public static void setLightAutoExraction(Boolean newLightAutoExtraction){ + lightAutoExtraction = newLightAutoExtraction; + } +} + + diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/capabilities.xml b/src/br/ufes/inf/lprm/sensoryeffect/renderer/capabilities.xml new file mode 100644 index 0000000..fb6a6cc --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/capabilities.xml @@ -0,0 +1,979 @@ + + + + + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:alice_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:alizarin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amaranth + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amaranth_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amethyst + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:apricot + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:aqua + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:aquamarine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:army_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:asparagus + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:atomic_tangerine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:auburn + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:azure_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:azure_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:baby_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:beige + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bistre + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:black + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue-green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bondi_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brass + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brilliant_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brink_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bronze + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:buff + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burgundy + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_sienna + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_umber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:camouflage_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:caput_mortuum + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cardinal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carmine_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carnation_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carolina_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carrot_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:celadon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerise_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerulean + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerulean_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:champagne + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:charcoal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chartreuse_traditional + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chartreuse_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cherry_blossom_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chocolate + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cinnabar + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cinnamon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cobalt + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:columbia_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:copper + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:copper_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:corn + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cornflower_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cosmic_latte + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cream + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:crimson + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cyan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cyan_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_cerulean + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_coral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_goldenrod + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_pastel_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_scarlet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_salmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_slate_gray + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_tan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_carmine_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_fuchsia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_lilac + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_peach + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:denim + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dodger_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ecru + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:egyptian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_green_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_indigo + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_lime + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:emerald + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:eggplant + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:falu_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fern_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:firebrick + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:flax + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:forest_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:french_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fuchsia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fuchsia_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gamboge + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gold_metallic + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gold_web_golden + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:golden_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:golden_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:goldenrod + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:grey-asparagus + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_color_wheel_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_html/css_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green-yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:han_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:harlequin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:heliotrope + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hollywood_cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hot_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hot_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:indigo_dye + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:indigo_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:international_klein_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:international_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:islamic_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ivory + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:jade + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:kelly_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:khaki_x11_light_khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_floral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_blush + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lawn_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lemon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lemon_chiffon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:light_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:light_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lilac + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_web_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:linen + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta_dye + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magic_mint + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magnolia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:malachite + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maroon_html/css + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maroon_x11 + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maya_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mauve + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mauve_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_lavender_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:midnight_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:midnight_green_eagle_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mint_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:misty_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:moss_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mountbatten_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mustard + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:myrtle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:navajo_white + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:navy_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ochre + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:office_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_gold + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_lace + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_lavender + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olive + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olive_drab + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olivine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_peel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange-red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orchid + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_cornflower_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_red-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:papaya_whip + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pastel_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pastel_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach-orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach-yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pear + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:periwinkle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_indigo + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persimmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pine_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pink-orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:platinum + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:plum_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:powder_blue_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:puce + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:prussian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:psychedelic_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pumpkin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_html/css + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_x11 + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:raw_umber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:razzmatazz + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rich_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:robin_egg_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose_madder + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:royal_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:royal_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ruby + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:russet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rust + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:safety_orange_blaze_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:saffron + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:salmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sandy_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sangria + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sapphire + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:scarlet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:school_bus_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sea_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:seashell + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:selective_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sepia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:shamrock_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:shocking_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:silver + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sky_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:slate_grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:smalt_dark_powder_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:spring_bud + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:steel_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tangerine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tangerine_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_rose_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_rose_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:teal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tenny_tawny + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:terra_cotta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:thistle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tomato + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tyrian_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ultramarine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ultra_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:united_nations_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:vegas_gold + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:vermilion + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:viridian + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:wheat + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:white + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:wisteria + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow-green + + + + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:alice_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:alizarin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amaranth + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amaranth_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amethyst + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:apricot + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:aqua + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:aquamarine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:army_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:asparagus + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:atomic_tangerine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:auburn + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:azure_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:azure_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:baby_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:beige + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bistre + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:black + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue-green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bondi_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brass + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brilliant_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brink_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bronze + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:buff + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burgundy + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_sienna + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_umber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:camouflage_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:caput_mortuum + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cardinal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carmine_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carnation_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carolina_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carrot_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:celadon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerise_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerulean + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerulean_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:champagne + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:charcoal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chartreuse_traditional + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chartreuse_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cherry_blossom_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chocolate + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cinnabar + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cinnamon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cobalt + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:columbia_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:copper + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:copper_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:corn + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cornflower_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cosmic_latte + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cream + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:crimson + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cyan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cyan_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_cerulean + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_coral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_goldenrod + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_pastel_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_scarlet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_salmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_slate_gray + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_tan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_carmine_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_fuchsia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_lilac + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_peach + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:denim + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dodger_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ecru + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:egyptian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_green_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_indigo + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_lime + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:emerald + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:eggplant + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:falu_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fern_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:firebrick + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:flax + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:forest_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:french_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fuchsia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fuchsia_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gamboge + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gold_metallic + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gold_web_golden + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:golden_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:golden_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:goldenrod + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:grey-asparagus + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_color_wheel_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_html/css_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green-yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:han_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:harlequin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:heliotrope + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hollywood_cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hot_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hot_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:indigo_dye + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:indigo_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:international_klein_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:international_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:islamic_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ivory + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:jade + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:kelly_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:khaki_x11_light_khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_floral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_blush + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lawn_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lemon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lemon_chiffon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:light_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:light_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lilac + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_web_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:linen + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta_dye + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magic_mint + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magnolia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:malachite + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maroon_html/css + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maroon_x11 + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maya_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mauve + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mauve_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_lavender_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:midnight_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:midnight_green_eagle_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mint_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:misty_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:moss_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mountbatten_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mustard + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:myrtle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:navajo_white + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:navy_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ochre + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:office_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_gold + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_lace + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_lavender + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olive + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olive_drab + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olivine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_peel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange-red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orchid + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_cornflower_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_red-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:papaya_whip + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pastel_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pastel_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach-orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach-yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pear + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:periwinkle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_indigo + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persimmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pine_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pink-orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:platinum + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:plum_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:powder_blue_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:puce + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:prussian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:psychedelic_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pumpkin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_html/css + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_x11 + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:raw_umber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:razzmatazz + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rich_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:robin_egg_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose_madder + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:royal_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:royal_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ruby + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:russet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rust + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:safety_orange_blaze_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:saffron + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:salmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sandy_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sangria + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sapphire + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:scarlet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:school_bus_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sea_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:seashell + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:selective_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sepia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:shamrock_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:shocking_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:silver + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sky_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:slate_grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:smalt_dark_powder_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:spring_bud + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:steel_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tangerine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tangerine_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_rose_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_rose_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:teal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tenny_tawny + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:terra_cotta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:thistle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tomato + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tyrian_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ultramarine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ultra_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:united_nations_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:vegas_gold + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:vermilion + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:viridian + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:wheat + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:white + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:wisteria + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow-green + + + + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:alice_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:alizarin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amaranth + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amaranth_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:amethyst + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:apricot + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:aqua + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:aquamarine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:army_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:asparagus + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:atomic_tangerine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:auburn + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:azure_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:azure_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:baby_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:beige + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bistre + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:black + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue-green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:blue-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bondi_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brass + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bright_turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brilliant_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brink_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:bronze + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:buff + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burgundy + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_sienna + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:burnt_umber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:camouflage_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:caput_mortuum + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cardinal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carmine_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carnation_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carolina_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:carrot_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:celadon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerise_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerulean + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cerulean_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:champagne + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:charcoal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chartreuse_traditional + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chartreuse_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cherry_blossom_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:chocolate + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cinnabar + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cinnamon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cobalt + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:columbia_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:copper + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:copper_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:coral_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:corn + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cornflower_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cosmic_latte + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cream + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:crimson + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cyan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:cyan_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_cerulean + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_coral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_goldenrod + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_pastel_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_scarlet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_salmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_slate_gray + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_tan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dark_violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_carmine_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_fuchsia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_lilac + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_peach + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:deep_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:denim + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:dodger_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ecru + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:egyptian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_green_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_indigo + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_lime + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:electric_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:emerald + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:eggplant + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:falu_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fern_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:firebrick + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:flax + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:forest_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:french_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fuchsia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:fuchsia_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gamboge + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gold_metallic + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:gold_web_golden + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:golden_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:golden_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:goldenrod + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:grey-asparagus + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_color_wheel_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_html/css_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:green-yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:han_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:harlequin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:heliotrope + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hollywood_cerise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hot_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:hot_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:indigo_dye + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:indigo_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:international_klein_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:international_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:islamic_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ivory + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:jade + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:kelly_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:khaki_x11_light_khaki + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_floral + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_blush + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lavender_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lawn_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lemon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lemon_chiffon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:light_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:light_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lilac + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_web_x11_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:lime_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:linen + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta_dye + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magenta_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magic_mint + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:magnolia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:malachite + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maroon_html/css + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maroon_x11 + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:maya_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mauve + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mauve_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_lavender_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:medium_spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:midnight_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:midnight_green_eagle_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mint_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:misty_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:moss_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mountbatten_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:mustard + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:myrtle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:navajo_white + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:navy_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ochre + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:office_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_gold + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_lace + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_lavender + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:old_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olive + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olive_drab + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:olivine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_color_wheel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange_peel + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orange-red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:orchid + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_chestnut + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_cornflower_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_magenta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pale_red-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:papaya_whip + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pastel_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pastel_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach-orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:peach-yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pear + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:periwinkle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_indigo + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persian_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:persimmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pine_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pink-orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:platinum + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:plum_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:powder_blue_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:puce + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:prussian_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:psychedelic_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:pumpkin + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_html/css + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_x11 + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:purple_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:raw_umber + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:razzmatazz + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red_pigment + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:red-violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rich_carmine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:robin_egg_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose_madder + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rose_taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:royal_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:royal_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ruby + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:russet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:rust + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:safety_orange_blaze_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:saffron + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:salmon + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sandy_brown + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sangria + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sapphire + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:scarlet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:school_bus_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sea_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:seashell + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:selective_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sepia + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:shamrock_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:shocking_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:silver + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:sky_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:slate_grey + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:smalt_dark_powder_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:spring_bud + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:spring_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:steel_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tan + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tangerine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tangerine_yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:taupe + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_green + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_rose_orange + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tea_rose_rose + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:teal + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tenny_tawny + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:terra_cotta + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:thistle + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tomato + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:turquoise + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:tyrian_purple + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ultramarine + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:ultra_pink + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:united_nations_blue + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:vegas_gold + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:vermilion + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet_web + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:violet_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:viridian + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:wheat + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:white + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:wisteria + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow_process + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow_ryb + urn:mpeg:mpeg-v:01-SI-ColorCS-NS:yellow-green + + + + + + + + + + + \ No newline at end of file diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/icon.png b/src/br/ufes/inf/lprm/sensoryeffect/renderer/icon.png new file mode 100644 index 0000000..9379df8 Binary files /dev/null and b/src/br/ufes/inf/lprm/sensoryeffect/renderer/icon.png differ diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/ClassificationScheme.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/ClassificationScheme.java new file mode 100644 index 0000000..bd89396 --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/ClassificationScheme.java @@ -0,0 +1,859 @@ +/* + * This file is part of SEVino. + * + * SEVino is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SEVino is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SEVino. If not, see . + * + * Copyright 2008, 2009, 2010, 2011, 2012 Alpen-Adria-Universitaet Klagenfurt, Markus Waltl. + */ +package br.ufes.inf.lprm.sensoryeffect.renderer.parser; + +import java.awt.Color; +import java.util.Vector; +import java.util.Hashtable; + +/** + * Class defining all classification schemes of MPEG-V + * @author Markus Waltl + * + */ +public class ClassificationScheme { + // A.2.1 ColorCS + private static Hashtable colorTable_ = new Hashtable(); + + public final static String COLORURIBASE = "urn:mpeg:mpeg-v:01-SI-ColorCS-NS"; + public final static String COLOR_ALICE_BLUE = COLORURIBASE + ":alice_blue"; + public final static String COLOR_ALIZARIN = COLORURIBASE + ":alizarin"; + public final static String COLOR_AMARANTH = COLORURIBASE + ":amaranth"; + public final static String COLOR_AMARANTH_PINK = COLORURIBASE + ":amaranth_pink"; + public final static String COLOR_AMBER = COLORURIBASE + ":amber"; + public final static String COLOR_AMETHYST = COLORURIBASE + ":amethyst"; + public final static String COLOR_APRICOT = COLORURIBASE + ":apricot"; + public final static String COLOR_AQUA = COLORURIBASE + ":aqua"; + public final static String COLOR_AQUAMARINE = COLORURIBASE + ":aquamarine"; + public final static String COLOR_ARMY_GREEN = COLORURIBASE + ":army_green"; + public final static String COLOR_ASPARAGUS = COLORURIBASE + ":asparagus"; + public final static String COLOR_ATOMIC_TANGERINE = COLORURIBASE + ":atomic_tangerine"; + public final static String COLOR_AUBURN = COLORURIBASE + ":auburn"; + public final static String COLOR_AZURE_COLOR_WHEEL = COLORURIBASE + ":azure_color_wheel"; + public final static String COLOR_AZURE_WEB = COLORURIBASE + ":azure_web"; + public final static String COLOR_BABY_BLUE = COLORURIBASE + ":baby_blue"; + public final static String COLOR_BEIGE = COLORURIBASE + ":beige"; + public final static String COLOR_BISTRE = COLORURIBASE + ":bistre"; + public final static String COLOR_BLACK = COLORURIBASE + ":black"; + public final static String COLOR_BLUE = COLORURIBASE + ":blue"; + public final static String COLOR_BLUE_PIGMENT = COLORURIBASE + ":blue_pigment"; + public final static String COLOR_BLUE_RYB = COLORURIBASE + ":blue_ryb"; + public final static String COLOR_BLUE_GREEN = COLORURIBASE + ":blue-green"; + public final static String COLOR_BLUE_VIOLET = COLORURIBASE + ":blue-violet"; + public final static String COLOR_BONDI_BLUE = COLORURIBASE + ":bondi_blue"; + public final static String COLOR_BRASS = COLORURIBASE + ":brass"; + public final static String COLOR_BRIGHT_GREEN = COLORURIBASE + ":bright_green"; + public final static String COLOR_BRIGHT_PINK = COLORURIBASE + ":bright_pink"; + public final static String COLOR_BRIGHT_TURQUOISE = COLORURIBASE + ":bright_turquoise"; + public final static String COLOR_BRILLIANT_ROSE = COLORURIBASE + ":brilliant_rose"; + public final static String COLOR_BRINK_PINK = COLORURIBASE + ":brink_pink"; + public final static String COLOR_BRONZE = COLORURIBASE + ":bronze"; + public final static String COLOR_BROWN = COLORURIBASE + ":brown"; + public final static String COLOR_BUFF = COLORURIBASE + ":buff"; + public final static String COLOR_BURGUNDY = COLORURIBASE + ":burgundy"; + public final static String COLOR_BURNT_ORANGE = COLORURIBASE + ":burnt_orange"; + public final static String COLOR_BURNT_SIENNA = COLORURIBASE + ":burnt_sienna"; + public final static String COLOR_BURNT_UMBER = COLORURIBASE + ":burnt_umber"; + public final static String COLOR_CAMOUFLAGE_GREEN = COLORURIBASE + ":camouflage_green"; + public final static String COLOR_CAPUT_MORTUUM = COLORURIBASE + ":caput_mortuum"; + public final static String COLOR_CARDINAL = COLORURIBASE + ":cardinal"; + public final static String COLOR_CARMINE = COLORURIBASE + ":carmine"; + public final static String COLOR_CARMINE_PINK = COLORURIBASE + ":carmine_pink"; + public final static String COLOR_CARNATION_PINK = COLORURIBASE + ":carnation_pink"; + public final static String COLOR_CAROLINA_BLUE = COLORURIBASE + ":carolina_blue"; + public final static String COLOR_CARROT_ORANGE = COLORURIBASE + ":carrot_orange"; + public final static String COLOR_CELADON = COLORURIBASE + ":celadon"; + public final static String COLOR_CERISE = COLORURIBASE + ":cerise"; + public final static String COLOR_CERISE_PINK = COLORURIBASE + ":cerise_pink"; + public final static String COLOR_CERULEAN = COLORURIBASE + ":cerulean"; + public final static String COLOR_CERULEAN_BLUE = COLORURIBASE + ":cerulean_blue"; + public final static String COLOR_CHAMPAGNE = COLORURIBASE + ":champagne"; + public final static String COLOR_CHARCOAL = COLORURIBASE + ":charcoal"; + public final static String COLOR_CHARTREUSE_TRADITIONAL = COLORURIBASE + ":chartreuse_traditional"; + public final static String COLOR_CHARTREUSE_WEB = COLORURIBASE + ":chartreuse_web"; + public final static String COLOR_CHERRY_BLOSSOM_PINK = COLORURIBASE + ":cherry_blossom_pink"; + public final static String COLOR_CHESTNUT = COLORURIBASE + ":chestnut"; + public final static String COLOR_CHOCOLATE = COLORURIBASE + ":chocolate"; + public final static String COLOR_CINNABAR = COLORURIBASE + ":cinnabar"; + public final static String COLOR_CINNAMON = COLORURIBASE + ":cinnamon"; + public final static String COLOR_COBALT = COLORURIBASE + ":cobalt"; + public final static String COLOR_COLUMBIA_BLUE = COLORURIBASE + ":columbia_blue"; + public final static String COLOR_COPPER = COLORURIBASE + ":copper"; + public final static String COLOR_COPPER_ROSE = COLORURIBASE + ":copper_rose"; + public final static String COLOR_CORAL = COLORURIBASE + ":coral"; + public final static String COLOR_CORAL_PINK = COLORURIBASE + ":coral_pink"; + public final static String COLOR_CORAL_RED = COLORURIBASE + ":coral_red"; + public final static String COLOR_CORN = COLORURIBASE + ":corn"; + public final static String COLOR_CORNFLOWER_BLUE = COLORURIBASE + ":cornflower_blue"; + public final static String COLOR_COSMIC_LATTE = COLORURIBASE + ":cosmic_latte"; + public final static String COLOR_CREAM = COLORURIBASE + ":cream"; + public final static String COLOR_CRIMSON = COLORURIBASE + ":crimson"; + public final static String COLOR_CYAN = COLORURIBASE + ":cyan"; + public final static String COLOR_CYAN_PROCESS = COLORURIBASE + ":cyan_process"; + public final static String COLOR_DARK_BLUE = COLORURIBASE + ":dark_blue"; + public final static String COLOR_DARK_BROWN = COLORURIBASE + ":dark_brown"; + public final static String COLOR_DARK_CERULEAN = COLORURIBASE + ":dark_cerulean"; + public final static String COLOR_DARK_CHESTNUT = COLORURIBASE + ":dark_chestnut"; + public final static String COLOR_DARK_CORAL = COLORURIBASE + ":dark_coral"; + public final static String COLOR_DARK_GOLDENROD = COLORURIBASE + ":dark_goldenrod"; + public final static String COLOR_DARK_GREEN = COLORURIBASE + ":dark_green"; + public final static String COLOR_DARK_KHAKI = COLORURIBASE + ":dark_khaki"; + public final static String COLOR_DARK_MAGENTA = COLORURIBASE + ":dark_magenta"; + public final static String COLOR_DARK_PASTEL_GREEN = COLORURIBASE + ":dark_pastel_green"; + public final static String COLOR_DARK_PINK = COLORURIBASE + ":dark_pink"; + public final static String COLOR_DARK_SCARLET = COLORURIBASE + ":dark_scarlet"; + public final static String COLOR_DARK_SALMON = COLORURIBASE + ":dark_salmon"; + public final static String COLOR_DARK_SLATE_GRAY = COLORURIBASE + ":dark_slate_gray"; + public final static String COLOR_DARK_SPRING_GREEN = COLORURIBASE + ":dark_spring_green"; + public final static String COLOR_DARK_TAN = COLORURIBASE + ":dark_tan"; + public final static String COLOR_DARK_TURQUOISE = COLORURIBASE + ":dark_turquoise"; + public final static String COLOR_DARK_VIOLET = COLORURIBASE + ":dark_violet"; + public final static String COLOR_DEEP_CARMINE_PINK = COLORURIBASE + ":deep_carmine_pink"; + public final static String COLOR_DEEP_CERISE = COLORURIBASE + ":deep_cerise"; + public final static String COLOR_DEEP_CHESTNUT = COLORURIBASE + ":deep_chestnut"; + public final static String COLOR_DEEP_FUCHSIA = COLORURIBASE + ":deep_fuchsia"; + public final static String COLOR_DEEP_LILAC = COLORURIBASE + ":deep_lilac"; + public final static String COLOR_DEEP_MAGENTA = COLORURIBASE + ":deep_magenta"; + public final static String COLOR_DEEP_PEACH = COLORURIBASE + ":deep_peach"; + public final static String COLOR_DEEP_PINK = COLORURIBASE + ":deep_pink"; + public final static String COLOR_DENIM = COLORURIBASE + ":denim"; + public final static String COLOR_DODGER_BLUE = COLORURIBASE + ":dodger_blue"; + public final static String COLOR_ECRU = COLORURIBASE + ":ecru"; + public final static String COLOR_EGYPTIAN_BLUE = COLORURIBASE + ":egyptian_blue"; + public final static String COLOR_ELECTRIC_BLUE = COLORURIBASE + ":electric_blue"; + public final static String COLOR_ELECTRIC_GREEN_X11_GREEN = COLORURIBASE + ":electric_green_x11_green"; + public final static String COLOR_ELECTRIC_INDIGO = COLORURIBASE + ":electric_indigo"; + public final static String COLOR_ELECTRIC_LIME = COLORURIBASE + ":electric_lime"; + public final static String COLOR_ELECTRIC_PURPLE = COLORURIBASE + ":electric_purple"; + public final static String COLOR_EMERALD = COLORURIBASE + ":emerald"; + public final static String COLOR_EGGPLANT = COLORURIBASE + ":eggplant"; + public final static String COLOR_FALU_RED = COLORURIBASE + ":falu_red"; + public final static String COLOR_FERN_GREEN = COLORURIBASE + ":fern_green"; + public final static String COLOR_FIREBRICK = COLORURIBASE + ":firebrick"; + public final static String COLOR_FLAX = COLORURIBASE + ":flax"; + public final static String COLOR_FOREST_GREEN = COLORURIBASE + ":forest_green"; + public final static String COLOR_FRENCH_ROSE = COLORURIBASE + ":french_rose"; + public final static String COLOR_FUCHSIA = COLORURIBASE + ":fuchsia"; + public final static String COLOR_FUCHSIA_PINK = COLORURIBASE + ":fuchsia_pink"; + public final static String COLOR_GAMBOGE = COLORURIBASE + ":gamboge"; + public final static String COLOR_GOLD_METALLIC = COLORURIBASE + ":gold_metallic"; + public final static String COLOR_GOLD_WEB_GOLDEN = COLORURIBASE + ":gold_web_golden"; + public final static String COLOR_GOLDEN_BROWN = COLORURIBASE + ":golden_brown"; + public final static String COLOR_GOLDEN_YELLOW = COLORURIBASE + ":golden_yellow"; + public final static String COLOR_GOLDENROD = COLORURIBASE + ":goldenrod"; + public final static String COLOR_GREY_ASPARAGUS = COLORURIBASE + ":grey-asparagus"; + public final static String COLOR_GREEN_COLOR_WHEEL_X11_GREEN = COLORURIBASE + ":green_color_wheel_x11_green"; + public final static String COLOR_GREEN_HTMLCSS_GREEN = COLORURIBASE + ":green_html/css_green"; + public final static String COLOR_GREEN_PIGMENT = COLORURIBASE + ":green_pigment"; + public final static String COLOR_GREEN_RYB = COLORURIBASE + ":green_ryb"; + public final static String COLOR_GREEN_YELLOW = COLORURIBASE + ":green-yellow"; + public final static String COLOR_GREY = COLORURIBASE + ":grey"; + public final static String COLOR_HAN_PURPLE = COLORURIBASE + ":han_purple"; + public final static String COLOR_HARLEQUIN = COLORURIBASE + ":harlequin"; + public final static String COLOR_HELIOTROPE = COLORURIBASE + ":heliotrope"; + public final static String COLOR_HOLLYWOOD_CERISE = COLORURIBASE + ":hollywood_cerise"; + public final static String COLOR_HOT_MAGENTA = COLORURIBASE + ":hot_magenta"; + public final static String COLOR_HOT_PINK = COLORURIBASE + ":hot_pink"; + public final static String COLOR_INDIGO_DYE = COLORURIBASE + ":indigo_dye"; + public final static String COLOR_INDIGO_WEB = COLORURIBASE + ":indigo_web"; + public final static String COLOR_INTERNATIONAL_KLEIN_BLUE = COLORURIBASE + ":international_klein_blue"; + public final static String COLOR_INTERNATIONAL_ORANGE = COLORURIBASE + ":international_orange"; + public final static String COLOR_ISLAMIC_GREEN = COLORURIBASE + ":islamic_green"; + public final static String COLOR_IVORY = COLORURIBASE + ":ivory"; + public final static String COLOR_JADE = COLORURIBASE + ":jade"; + public final static String COLOR_KELLY_GREEN = COLORURIBASE + ":kelly_green"; + public final static String COLOR_KHAKI = COLORURIBASE + ":khaki"; + public final static String COLOR_KHAKI_X11_LIGHT_KHAKI = COLORURIBASE + ":khaki_x11_light_khaki"; + public final static String COLOR_LAVENDER_FLORAL = COLORURIBASE + ":lavender_floral"; + public final static String COLOR_LAVENDER_WEB = COLORURIBASE + ":lavender_web"; + public final static String COLOR_LAVENDER_BLUE = COLORURIBASE + ":lavender_blue"; + public final static String COLOR_LAVENDER_BLUSH = COLORURIBASE + ":lavender_blush"; + public final static String COLOR_LAVENDER_GREY = COLORURIBASE + ":lavender_grey"; + public final static String COLOR_LAVENDER_MAGENTA = COLORURIBASE + ":lavender_magenta"; + public final static String COLOR_LAVENDER_PINK = COLORURIBASE + ":lavender_pink"; + public final static String COLOR_LAVENDER_PURPLE = COLORURIBASE + ":lavender_purple"; + public final static String COLOR_LAVENDER_ROSE = COLORURIBASE + ":lavender_rose"; + public final static String COLOR_LAWN_GREEN = COLORURIBASE + ":lawn_green"; + public final static String COLOR_LEMON = COLORURIBASE + ":lemon"; + public final static String COLOR_LEMON_CHIFFON = COLORURIBASE + ":lemon_chiffon"; + public final static String COLOR_LIGHT_BLUE = COLORURIBASE + ":light_blue"; + public final static String COLOR_LIGHT_PINK = COLORURIBASE + ":light_pink"; + public final static String COLOR_LILAC = COLORURIBASE + ":lilac"; + public final static String COLOR_LIME_COLOR_WHEEL = COLORURIBASE + ":lime_color_wheel"; + public final static String COLOR_LIME_WEB_X11_GREEN = COLORURIBASE + ":lime_web_x11_green"; + public final static String COLOR_LIME_GREEN = COLORURIBASE + ":lime_green"; + public final static String COLOR_LINEN = COLORURIBASE + ":linen"; + public final static String COLOR_MAGENTA = COLORURIBASE + ":magenta"; + public final static String COLOR_MAGENTA_DYE = COLORURIBASE + ":magenta_dye"; + public final static String COLOR_MAGENTA_PROCESS = COLORURIBASE + ":magenta_process"; + public final static String COLOR_MAGIC_MINT = COLORURIBASE + ":magic_mint"; + public final static String COLOR_MAGNOLIA = COLORURIBASE + ":magnolia"; + public final static String COLOR_MALACHITE = COLORURIBASE + ":malachite"; + public final static String COLOR_MAROON_HTMLCSS = COLORURIBASE + ":maroon_html/css"; + public final static String COLOR_MAROON_X11 = COLORURIBASE + ":maroon_x11"; + public final static String COLOR_MAYA_BLUE = COLORURIBASE + ":maya_blue"; + public final static String COLOR_MAUVE = COLORURIBASE + ":mauve"; + public final static String COLOR_MAUVE_TAUPE = COLORURIBASE + ":mauve_taupe"; + public final static String COLOR_MEDIUM_BLUE = COLORURIBASE + ":medium_blue"; + public final static String COLOR_MEDIUM_CARMINE = COLORURIBASE + ":medium_carmine"; + public final static String COLOR_MEDIUM_LAVENDER_MAGENTA = COLORURIBASE + ":medium_lavender_magenta"; + public final static String COLOR_MEDIUM_PURPLE = COLORURIBASE + ":medium_purple"; + public final static String COLOR_MEDIUM_SPRING_GREEN = COLORURIBASE + ":medium_spring_green"; + public final static String COLOR_MIDNIGHT_BLUE = COLORURIBASE + ":midnight_blue"; + public final static String COLOR_MIDNIGHT_GREEN_EAGLE_GREEN = COLORURIBASE + ":midnight_green_eagle_green"; + public final static String COLOR_MINT_GREEN = COLORURIBASE + ":mint_green"; + public final static String COLOR_MISTY_ROSE = COLORURIBASE + ":misty_rose"; + public final static String COLOR_MOSS_GREEN = COLORURIBASE + ":moss_green"; + public final static String COLOR_MOUNTBATTEN_PINK = COLORURIBASE + ":mountbatten_pink"; + public final static String COLOR_MUSTARD = COLORURIBASE + ":mustard"; + public final static String COLOR_MYRTLE = COLORURIBASE + ":myrtle"; + public final static String COLOR_NAVAJO_WHITE = COLORURIBASE + ":navajo_white"; + public final static String COLOR_NAVY_BLUE = COLORURIBASE + ":navy_blue"; + public final static String COLOR_OCHRE = COLORURIBASE + ":ochre"; + public final static String COLOR_OFFICE_GREEN = COLORURIBASE + ":office_green"; + public final static String COLOR_OLD_GOLD = COLORURIBASE + ":old_gold"; + public final static String COLOR_OLD_LACE = COLORURIBASE + ":old_lace"; + public final static String COLOR_OLD_LAVENDER = COLORURIBASE + ":old_lavender"; + public final static String COLOR_OLD_ROSE = COLORURIBASE + ":old_rose"; + public final static String COLOR_OLIVE = COLORURIBASE + ":olive"; + public final static String COLOR_OLIVE_DRAB = COLORURIBASE + ":olive_drab"; + public final static String COLOR_OLIVINE = COLORURIBASE + ":olivine"; + public final static String COLOR_ORANGE_COLOR_WHEEL = COLORURIBASE + ":orange_color_wheel"; + public final static String COLOR_ORANGE_RYB = COLORURIBASE + ":orange_ryb"; + public final static String COLOR_ORANGE_WEB = COLORURIBASE + ":orange_web"; + public final static String COLOR_ORANGE_PEEL = COLORURIBASE + ":orange_peel"; + public final static String COLOR_ORANGE_RED = COLORURIBASE + ":orange-red"; + public final static String COLOR_ORCHID = COLORURIBASE + ":orchid"; + public final static String COLOR_PALE_BLUE = COLORURIBASE + ":pale_blue"; + public final static String COLOR_PALE_BROWN = COLORURIBASE + ":pale_brown"; + public final static String COLOR_PALE_CARMINE = COLORURIBASE + ":pale_carmine"; + public final static String COLOR_PALE_CHESTNUT = COLORURIBASE + ":pale_chestnut"; + public final static String COLOR_PALE_CORNFLOWER_BLUE = COLORURIBASE + ":pale_cornflower_blue"; + public final static String COLOR_PALE_MAGENTA = COLORURIBASE + ":pale_magenta"; + public final static String COLOR_PALE_PINK = COLORURIBASE + ":pale_pink"; + public final static String COLOR_PALE_RED_VIOLET = COLORURIBASE + ":pale_red-violet"; + public final static String COLOR_PAPAYA_WHIP = COLORURIBASE + ":papaya_whip"; + public final static String COLOR_PASTEL_GREEN = COLORURIBASE + ":pastel_green"; + public final static String COLOR_PASTEL_PINK = COLORURIBASE + ":pastel_pink"; + public final static String COLOR_PEACH = COLORURIBASE + ":peach"; + public final static String COLOR_PEACH_ORANGE = COLORURIBASE + ":peach-orange"; + public final static String COLOR_PEACH_YELLOW = COLORURIBASE + ":peach-yellow"; + public final static String COLOR_PEAR = COLORURIBASE + ":pear"; + public final static String COLOR_PERIWINKLE = COLORURIBASE + ":periwinkle"; + public final static String COLOR_PERSIAN_BLUE = COLORURIBASE + ":persian_blue"; + public final static String COLOR_PERSIAN_GREEN = COLORURIBASE + ":persian_green"; + public final static String COLOR_PERSIAN_INDIGO = COLORURIBASE + ":persian_indigo"; + public final static String COLOR_PERSIAN_ORANGE = COLORURIBASE + ":persian_orange"; + public final static String COLOR_PERSIAN_RED = COLORURIBASE + ":persian_red"; + public final static String COLOR_PERSIAN_PINK = COLORURIBASE + ":persian_pink"; + public final static String COLOR_PERSIAN_ROSE = COLORURIBASE + ":persian_rose"; + public final static String COLOR_PERSIMMON = COLORURIBASE + ":persimmon"; + public final static String COLOR_PINE_GREEN = COLORURIBASE + ":pine_green"; + public final static String COLOR_PINK = COLORURIBASE + ":pink"; + public final static String COLOR_PINK_ORANGE = COLORURIBASE + ":pink-orange"; + public final static String COLOR_PLATINUM = COLORURIBASE + ":platinum"; + public final static String COLOR_PLUM_WEB = COLORURIBASE + ":plum_web"; + public final static String COLOR_POWDER_BLUE_WEB = COLORURIBASE + ":powder_blue_web"; + public final static String COLOR_PUCE = COLORURIBASE + ":puce"; + public final static String COLOR_PRUSSIAN_BLUE = COLORURIBASE + ":prussian_blue"; + public final static String COLOR_PSYCHEDELIC_PURPLE = COLORURIBASE + ":psychedelic_purple"; + public final static String COLOR_PUMPKIN = COLORURIBASE + ":pumpkin"; + public final static String COLOR_PURPLE_HTMLCSS = COLORURIBASE + ":purple_html/css"; + public final static String COLOR_PURPLE_X11 = COLORURIBASE + ":purple_x11"; + public final static String COLOR_PURPLE_TAUPE = COLORURIBASE + ":purple_taupe"; + public final static String COLOR_RAW_UMBER = COLORURIBASE + ":raw_umber"; + public final static String COLOR_RAZZMATAZZ = COLORURIBASE + ":razzmatazz"; + public final static String COLOR_RED = COLORURIBASE + ":red"; + public final static String COLOR_RED_PIGMENT = COLORURIBASE + ":red_pigment"; + public final static String COLOR_RED_RYB = COLORURIBASE + ":red_ryb"; + public final static String COLOR_RED_VIOLET = COLORURIBASE + ":red-violet"; + public final static String COLOR_RICH_CARMINE = COLORURIBASE + ":rich_carmine"; + public final static String COLOR_ROBIN_EGG_BLUE = COLORURIBASE + ":robin_egg_blue"; + public final static String COLOR_ROSE = COLORURIBASE + ":rose"; + public final static String COLOR_ROSE_MADDER = COLORURIBASE + ":rose_madder"; + public final static String COLOR_ROSE_TAUPE = COLORURIBASE + ":rose_taupe"; + public final static String COLOR_ROYAL_BLUE = COLORURIBASE + ":royal_blue"; + public final static String COLOR_ROYAL_PURPLE = COLORURIBASE + ":royal_purple"; + public final static String COLOR_RUBY = COLORURIBASE + ":ruby"; + public final static String COLOR_RUSSET = COLORURIBASE + ":russet"; + public final static String COLOR_RUST = COLORURIBASE + ":rust"; + public final static String COLOR_SAFETY_ORANGE_BLAZE_ORANGE = COLORURIBASE + ":safety_orange_blaze_orange"; + public final static String COLOR_SAFFRON = COLORURIBASE + ":saffron"; + public final static String COLOR_SALMON = COLORURIBASE + ":salmon"; + public final static String COLOR_SANDY_BROWN = COLORURIBASE + ":sandy_brown"; + public final static String COLOR_SANGRIA = COLORURIBASE + ":sangria"; + public final static String COLOR_SAPPHIRE = COLORURIBASE + ":sapphire"; + public final static String COLOR_SCARLET = COLORURIBASE + ":scarlet"; + public final static String COLOR_SCHOOL_BUS_YELLOW = COLORURIBASE + ":school_bus_yellow"; + public final static String COLOR_SEA_GREEN = COLORURIBASE + ":sea_green"; + public final static String COLOR_SEASHELL = COLORURIBASE + ":seashell"; + public final static String COLOR_SELECTIVE_YELLOW = COLORURIBASE + ":selective_yellow"; + public final static String COLOR_SEPIA = COLORURIBASE + ":sepia"; + public final static String COLOR_SHAMROCK_GREEN = COLORURIBASE + ":shamrock_green"; + public final static String COLOR_SHOCKING_PINK = COLORURIBASE + ":shocking_pink"; + public final static String COLOR_SILVER = COLORURIBASE + ":silver"; + public final static String COLOR_SKY_BLUE = COLORURIBASE + ":sky_blue"; + public final static String COLOR_SLATE_GREY = COLORURIBASE + ":slate_grey"; + public final static String COLOR_SMALT_DARK_POWDER_BLUE = COLORURIBASE + ":smalt_dark_powder_blue"; + public final static String COLOR_SPRING_BUD = COLORURIBASE + ":spring_bud"; + public final static String COLOR_SPRING_GREEN = COLORURIBASE + ":spring_green"; + public final static String COLOR_STEEL_BLUE = COLORURIBASE + ":steel_blue"; + public final static String COLOR_TAN = COLORURIBASE + ":tan"; + public final static String COLOR_TANGERINE = COLORURIBASE + ":tangerine"; + public final static String COLOR_TANGERINE_YELLOW = COLORURIBASE + ":tangerine_yellow"; + public final static String COLOR_TAUPE = COLORURIBASE + ":taupe"; + public final static String COLOR_TEA_GREEN = COLORURIBASE + ":tea_green"; + public final static String COLOR_TEA_ROSE_ORANGE = COLORURIBASE + ":tea_rose_orange"; + public final static String COLOR_TEA_ROSE_ROSE = COLORURIBASE + ":tea_rose_rose"; + public final static String COLOR_TEAL = COLORURIBASE + ":teal"; + public final static String COLOR_TENNY_TAWNY = COLORURIBASE + ":tenny_tawny"; + public final static String COLOR_TERRA_COTTA = COLORURIBASE + ":terra_cotta"; + public final static String COLOR_THISTLE = COLORURIBASE + ":thistle"; + public final static String COLOR_TOMATO = COLORURIBASE + ":tomato"; + public final static String COLOR_TURQUOISE = COLORURIBASE + ":turquoise"; + public final static String COLOR_TYRIAN_PURPLE = COLORURIBASE + ":tyrian_purple"; + public final static String COLOR_ULTRAMARINE = COLORURIBASE + ":ultramarine"; + public final static String COLOR_ULTRA_PINK = COLORURIBASE + ":ultra_pink"; + public final static String COLOR_UNITED_NATIONS_BLUE = COLORURIBASE + ":united_nations_blue"; + public final static String COLOR_VEGAS_GOLD = COLORURIBASE + ":vegas_gold"; + public final static String COLOR_VERMILION = COLORURIBASE + ":vermilion"; + public final static String COLOR_VIOLET = COLORURIBASE + ":violet"; + public final static String COLOR_VIOLET_WEB = COLORURIBASE + ":violet_web"; + public final static String COLOR_VIOLET_RYB = COLORURIBASE + ":violet_ryb"; + public final static String COLOR_VIRIDIAN = COLORURIBASE + ":viridian"; + public final static String COLOR_WHEAT = COLORURIBASE + ":wheat"; + public final static String COLOR_WHITE = COLORURIBASE + ":white"; + public final static String COLOR_WISTERIA = COLORURIBASE + ":wisteria"; + public final static String COLOR_YELLOW = COLORURIBASE + ":yellow"; + public final static String COLOR_YELLOW_PROCESS = COLORURIBASE + ":yellow_process"; + public final static String COLOR_YELLOW_RYB = COLORURIBASE + ":yellow_ryb"; + public final static String COLOR_YELLOW_GREEN = COLORURIBASE + ":yellow-green"; + + static { + colorTable_.put(COLOR_ALICE_BLUE, new Color( 240, 248, 255 )); + colorTable_.put(COLOR_ALIZARIN, new Color( 227, 38, 54 )); + colorTable_.put(COLOR_AMARANTH, new Color( 229, 43, 80 )); + colorTable_.put(COLOR_AMARANTH_PINK, new Color( 241, 156, 187 )); + colorTable_.put(COLOR_AMBER, new Color( 255, 191, 0 )); + colorTable_.put(COLOR_AMETHYST, new Color( 153, 102, 204 )); + colorTable_.put(COLOR_APRICOT, new Color( 251, 206, 177 )); + colorTable_.put(COLOR_AQUA, new Color( 0, 255, 255 )); + colorTable_.put(COLOR_AQUAMARINE, new Color( 127, 255, 212 )); + colorTable_.put(COLOR_ARMY_GREEN, new Color( 75, 83, 32 )); + colorTable_.put(COLOR_ASPARAGUS, new Color( 123, 160, 91 )); + colorTable_.put(COLOR_ATOMIC_TANGERINE, new Color( 255, 153, 102 )); + colorTable_.put(COLOR_AUBURN, new Color( 111, 53, 26 )); + colorTable_.put(COLOR_AZURE_COLOR_WHEEL, new Color( 0, 127, 255 )); + colorTable_.put(COLOR_AZURE_WEB, new Color( 0, 255, 255 )); + colorTable_.put(COLOR_BABY_BLUE, new Color( 224, 255, 255 )); + colorTable_.put(COLOR_BEIGE, new Color( 245, 245, 220 )); + colorTable_.put(COLOR_BISTRE, new Color( 61, 43, 31 )); + colorTable_.put(COLOR_BLACK, new Color( 0, 0, 0 )); + colorTable_.put(COLOR_BLUE, new Color( 0, 0, 255 )); + colorTable_.put(COLOR_BLUE_PIGMENT, new Color( 51, 51, 153 )); + colorTable_.put(COLOR_BLUE_RYB, new Color( 2, 71, 254 )); + colorTable_.put(COLOR_BLUE_GREEN, new Color( 0, 223, 223 )); + colorTable_.put(COLOR_BLUE_VIOLET, new Color( 138, 43, 226 )); + colorTable_.put(COLOR_BONDI_BLUE, new Color( 0, 149, 182 )); + colorTable_.put(COLOR_BRASS, new Color( 181, 166, 66 )); + colorTable_.put(COLOR_BRIGHT_GREEN, new Color( 102, 255, 0 )); + colorTable_.put(COLOR_BRIGHT_PINK, new Color( 255, 0, 127 )); + colorTable_.put(COLOR_BRIGHT_TURQUOISE, new Color( 8, 232, 222 )); + colorTable_.put(COLOR_BRILLIANT_ROSE, new Color( 255, 85, 163 )); + colorTable_.put(COLOR_BRINK_PINK, new Color( 251, 96, 127 )); + colorTable_.put(COLOR_BRONZE, new Color( 205, 127, 50 )); + colorTable_.put(COLOR_BROWN, new Color( 150, 75, 0 )); + colorTable_.put(COLOR_BUFF, new Color( 240, 220, 130 )); + colorTable_.put(COLOR_BURGUNDY, new Color( 128, 0, 32 )); + colorTable_.put(COLOR_BURNT_ORANGE, new Color( 204, 85, 0 )); + colorTable_.put(COLOR_BURNT_SIENNA, new Color( 233, 116, 81 )); + colorTable_.put(COLOR_BURNT_UMBER, new Color( 138, 51, 36 )); + colorTable_.put(COLOR_CAMOUFLAGE_GREEN, new Color( 120, 134, 107 )); + colorTable_.put(COLOR_CAPUT_MORTUUM, new Color( 89, 39, 32 )); + colorTable_.put(COLOR_CARDINAL, new Color( 196, 30, 58 )); + colorTable_.put(COLOR_CARMINE, new Color( 150, 0, 24 )); + colorTable_.put(COLOR_CARMINE_PINK, new Color( 235, 76, 66 )); + colorTable_.put(COLOR_CARNATION_PINK, new Color( 255, 166, 201 )); + colorTable_.put(COLOR_CAROLINA_BLUE, new Color( 156, 186, 227 )); + colorTable_.put(COLOR_CARROT_ORANGE, new Color( 237, 145, 33 )); + colorTable_.put(COLOR_CELADON, new Color( 172, 225, 175 )); + colorTable_.put(COLOR_CERISE, new Color( 222, 49, 99 )); + colorTable_.put(COLOR_CERISE_PINK, new Color( 236, 59, 131 )); + colorTable_.put(COLOR_CERULEAN, new Color( 0, 123, 167 )); + colorTable_.put(COLOR_CERULEAN_BLUE, new Color( 42, 82, 190 )); + colorTable_.put(COLOR_CHAMPAGNE, new Color( 247, 231, 206 )); + colorTable_.put(COLOR_CHARCOAL, new Color( 70, 70, 70 )); + colorTable_.put(COLOR_CHARTREUSE_TRADITIONAL, new Color( 223, 255, 0 )); + colorTable_.put(COLOR_CHARTREUSE_WEB, new Color( 127, 255, 0 )); + colorTable_.put(COLOR_CHERRY_BLOSSOM_PINK, new Color( 255, 183, 197 )); + colorTable_.put(COLOR_CHESTNUT, new Color( 205, 92, 92 )); + colorTable_.put(COLOR_CHOCOLATE, new Color( 123, 63, 0 )); + colorTable_.put(COLOR_CINNABAR, new Color( 227, 66, 52 )); + colorTable_.put(COLOR_CINNAMON, new Color( 210, 105, 30 )); + colorTable_.put(COLOR_COBALT, new Color( 0, 71, 171 )); + colorTable_.put(COLOR_COLUMBIA_BLUE, new Color( 155, 221, 255 )); + colorTable_.put(COLOR_COPPER, new Color( 184, 115, 51 )); + colorTable_.put(COLOR_COPPER_ROSE, new Color( 153, 102, 102 )); + colorTable_.put(COLOR_CORAL, new Color( 255, 127, 80 )); + colorTable_.put(COLOR_CORAL_PINK, new Color( 248, 131, 121 )); + colorTable_.put(COLOR_CORAL_RED, new Color( 255, 64, 64 )); + colorTable_.put(COLOR_CORN, new Color( 251, 236, 93 )); + colorTable_.put(COLOR_CORNFLOWER_BLUE, new Color( 100, 149, 237 )); + colorTable_.put(COLOR_COSMIC_LATTE, new Color( 255, 248, 231 )); + colorTable_.put(COLOR_CREAM, new Color( 255, 253, 208 )); + colorTable_.put(COLOR_CRIMSON, new Color( 220, 20, 60 )); + colorTable_.put(COLOR_CYAN, new Color( 0, 255, 255 )); + colorTable_.put(COLOR_CYAN_PROCESS, new Color( 0, 180, 247 )); + colorTable_.put(COLOR_DARK_BLUE, new Color( 0, 0, 139 )); + colorTable_.put(COLOR_DARK_BROWN, new Color( 101, 67, 33 )); + colorTable_.put(COLOR_DARK_CERULEAN, new Color( 8, 69, 126 )); + colorTable_.put(COLOR_DARK_CHESTNUT, new Color( 152, 105, 96 )); + colorTable_.put(COLOR_DARK_CORAL, new Color( 205, 91, 69 )); + colorTable_.put(COLOR_DARK_GOLDENROD, new Color( 184, 134, 11 )); + colorTable_.put(COLOR_DARK_GREEN, new Color( 1, 50, 32 )); + colorTable_.put(COLOR_DARK_KHAKI, new Color( 189, 183, 107 )); + colorTable_.put(COLOR_DARK_MAGENTA, new Color( 139, 0, 139 )); + colorTable_.put(COLOR_DARK_PASTEL_GREEN, new Color( 3, 192, 60 )); + colorTable_.put(COLOR_DARK_PINK, new Color( 231, 84, 128 )); + colorTable_.put(COLOR_DARK_SCARLET, new Color( 86, 3, 25 )); + colorTable_.put(COLOR_DARK_SALMON, new Color( 233, 150, 122 )); + colorTable_.put(COLOR_DARK_SLATE_GRAY, new Color( 47, 79, 79 )); + colorTable_.put(COLOR_DARK_SPRING_GREEN, new Color( 23, 114, 69 )); + colorTable_.put(COLOR_DARK_TAN, new Color( 145, 129, 81 )); + colorTable_.put(COLOR_DARK_TURQUOISE, new Color( 0, 206, 209 )); + colorTable_.put(COLOR_DARK_VIOLET, new Color( 148, 0, 211 )); + colorTable_.put(COLOR_DEEP_CARMINE_PINK, new Color( 239, 48, 56 )); + colorTable_.put(COLOR_DEEP_CERISE, new Color( 218, 50, 135 )); + colorTable_.put(COLOR_DEEP_CHESTNUT, new Color( 185, 78, 72 )); + colorTable_.put(COLOR_DEEP_FUCHSIA, new Color( 193, 84, 193 )); + colorTable_.put(COLOR_DEEP_LILAC, new Color( 153, 85, 187 )); + colorTable_.put(COLOR_DEEP_MAGENTA, new Color( 204, 0, 204 )); + colorTable_.put(COLOR_DEEP_PEACH, new Color( 255, 203, 164 )); + colorTable_.put(COLOR_DEEP_PINK, new Color( 255, 20, 147 )); + colorTable_.put(COLOR_DENIM, new Color( 21, 96, 189 )); + colorTable_.put(COLOR_DODGER_BLUE, new Color( 30, 144, 255 )); + colorTable_.put(COLOR_ECRU, new Color( 194, 178, 128 )); + colorTable_.put(COLOR_EGYPTIAN_BLUE, new Color( 16, 52, 166 )); + colorTable_.put(COLOR_ELECTRIC_BLUE, new Color( 125, 249, 255 )); + colorTable_.put(COLOR_ELECTRIC_GREEN_X11_GREEN, new Color( 0, 255, 0 )); + colorTable_.put(COLOR_ELECTRIC_INDIGO, new Color( 102, 0, 255 )); + colorTable_.put(COLOR_ELECTRIC_LIME, new Color( 204, 255, 0 )); + colorTable_.put(COLOR_ELECTRIC_PURPLE, new Color( 191, 0, 255 )); + colorTable_.put(COLOR_EMERALD, new Color( 80, 200, 120 )); + colorTable_.put(COLOR_EGGPLANT, new Color( 97, 64, 81 )); + colorTable_.put(COLOR_FALU_RED, new Color( 128, 24, 24 )); + colorTable_.put(COLOR_FERN_GREEN, new Color( 79, 121, 66 )); + colorTable_.put(COLOR_FIREBRICK, new Color( 178, 34, 34 )); + colorTable_.put(COLOR_FLAX, new Color( 238, 220, 130 )); + colorTable_.put(COLOR_FOREST_GREEN, new Color( 34, 139, 34 )); + colorTable_.put(COLOR_FRENCH_ROSE, new Color( 246, 74, 138 )); + colorTable_.put(COLOR_FUCHSIA, new Color( 255, 0, 255 )); + colorTable_.put(COLOR_FUCHSIA_PINK, new Color( 255, 119, 255 )); + colorTable_.put(COLOR_GAMBOGE, new Color( 228, 155, 15 )); + colorTable_.put(COLOR_GOLD_METALLIC, new Color( 212, 175, 55 )); + colorTable_.put(COLOR_GOLD_WEB_GOLDEN, new Color( 255, 215, 0 )); + colorTable_.put(COLOR_GOLDEN_BROWN, new Color( 153, 101, 21 )); + colorTable_.put(COLOR_GOLDEN_YELLOW, new Color( 255, 223, 0 )); + colorTable_.put(COLOR_GOLDENROD, new Color( 218, 165, 32 )); + colorTable_.put(COLOR_GREY_ASPARAGUS, new Color( 70, 89, 69 )); + colorTable_.put(COLOR_GREEN_COLOR_WHEEL_X11_GREEN, new Color( 0, 255, 0 )); + colorTable_.put(COLOR_GREEN_HTMLCSS_GREEN, new Color( 0, 128, 0 )); + colorTable_.put(COLOR_GREEN_PIGMENT, new Color( 0, 165, 80 )); + colorTable_.put(COLOR_GREEN_RYB, new Color( 102, 176, 50 )); + colorTable_.put(COLOR_GREEN_YELLOW, new Color( 173, 255, 47 )); + colorTable_.put(COLOR_GREY, new Color( 128, 128, 128 )); + colorTable_.put(COLOR_HAN_PURPLE, new Color( 82, 24, 250 )); + colorTable_.put(COLOR_HARLEQUIN, new Color( 63, 255, 0 )); + colorTable_.put(COLOR_HELIOTROPE, new Color( 223, 115, 255 )); + colorTable_.put(COLOR_HOLLYWOOD_CERISE, new Color( 244, 0, 161 )); + colorTable_.put(COLOR_HOT_MAGENTA, new Color( 255, 0, 204 )); + colorTable_.put(COLOR_HOT_PINK, new Color( 255, 105, 180 )); + colorTable_.put(COLOR_INDIGO_DYE, new Color( 0, 65, 106 )); + colorTable_.put(COLOR_INDIGO_WEB, new Color( 75, 0, 130 )); + colorTable_.put(COLOR_INTERNATIONAL_KLEIN_BLUE, new Color( 0, 47, 167 )); + colorTable_.put(COLOR_INTERNATIONAL_ORANGE, new Color( 255, 79, 0 )); + colorTable_.put(COLOR_ISLAMIC_GREEN, new Color( 0, 153, 0 )); + colorTable_.put(COLOR_IVORY, new Color( 255, 255, 240 )); + colorTable_.put(COLOR_JADE, new Color( 0, 168, 107 )); + colorTable_.put(COLOR_KELLY_GREEN, new Color( 76, 187, 23 )); + colorTable_.put(COLOR_KHAKI, new Color( 195, 176, 145 )); + colorTable_.put(COLOR_KHAKI_X11_LIGHT_KHAKI, new Color( 240, 230, 140 )); + colorTable_.put(COLOR_LAVENDER_FLORAL, new Color( 181, 126, 220 )); + colorTable_.put(COLOR_LAVENDER_WEB, new Color( 230, 230, 250 )); + colorTable_.put(COLOR_LAVENDER_BLUE, new Color( 204, 204, 255 )); + colorTable_.put(COLOR_LAVENDER_BLUSH, new Color( 255, 240, 245 )); + colorTable_.put(COLOR_LAVENDER_GREY, new Color( 196, 195, 221 )); + colorTable_.put(COLOR_LAVENDER_MAGENTA, new Color( 238, 130, 238 )); + colorTable_.put(COLOR_LAVENDER_PINK, new Color( 251, 174, 210 )); + colorTable_.put(COLOR_LAVENDER_PURPLE, new Color( 150, 120, 182 )); + colorTable_.put(COLOR_LAVENDER_ROSE, new Color( 251, 160, 227 )); + colorTable_.put(COLOR_LAWN_GREEN, new Color( 124, 252, 0 )); + colorTable_.put(COLOR_LEMON, new Color( 253, 233, 16 )); + colorTable_.put(COLOR_LEMON_CHIFFON, new Color( 255, 250, 205 )); + colorTable_.put(COLOR_LIGHT_BLUE, new Color( 173, 216, 230 )); + colorTable_.put(COLOR_LIGHT_PINK, new Color( 255, 182, 193 )); + colorTable_.put(COLOR_LILAC, new Color( 200, 162, 200 )); + colorTable_.put(COLOR_LIME_COLOR_WHEEL, new Color( 191, 255, 0 )); + colorTable_.put(COLOR_LIME_WEB_X11_GREEN, new Color( 0, 255, 0 )); + colorTable_.put(COLOR_LIME_GREEN, new Color( 50, 205, 50 )); + colorTable_.put(COLOR_LINEN, new Color( 250, 240, 230 )); + colorTable_.put(COLOR_MAGENTA, new Color( 255, 0, 255 )); + colorTable_.put(COLOR_MAGENTA_DYE, new Color( 202, 31, 23 )); + colorTable_.put(COLOR_MAGENTA_PROCESS, new Color( 255, 0, 144 )); + colorTable_.put(COLOR_MAGIC_MINT, new Color( 170, 240, 209 )); + colorTable_.put(COLOR_MAGNOLIA, new Color( 248, 244, 255 )); + colorTable_.put(COLOR_MALACHITE, new Color( 11, 218, 81 )); + colorTable_.put(COLOR_MAROON_HTMLCSS, new Color( 128, 0, 0 )); + colorTable_.put(COLOR_MAROON_X11, new Color( 176, 48, 96 )); + colorTable_.put(COLOR_MAYA_BLUE, new Color( 115, 194, 251 )); + colorTable_.put(COLOR_MAUVE, new Color( 224, 176, 255 )); + colorTable_.put(COLOR_MAUVE_TAUPE, new Color( 145, 95, 109 )); + colorTable_.put(COLOR_MEDIUM_BLUE, new Color( 0, 0, 205 )); + colorTable_.put(COLOR_MEDIUM_CARMINE, new Color( 175, 64, 53 )); + colorTable_.put(COLOR_MEDIUM_LAVENDER_MAGENTA, new Color( 204, 153, 204 )); + colorTable_.put(COLOR_MEDIUM_PURPLE, new Color( 147, 112, 219 )); + colorTable_.put(COLOR_MEDIUM_SPRING_GREEN, new Color( 0, 250, 154 )); + colorTable_.put(COLOR_MIDNIGHT_BLUE, new Color( 25, 25, 112 )); + colorTable_.put(COLOR_MIDNIGHT_GREEN_EAGLE_GREEN, new Color( 0, 73, 83 )); + colorTable_.put(COLOR_MINT_GREEN, new Color( 152, 255, 152 )); + colorTable_.put(COLOR_MISTY_ROSE, new Color( 255, 228, 225 )); + colorTable_.put(COLOR_MOSS_GREEN, new Color( 173, 223, 173 )); + colorTable_.put(COLOR_MOUNTBATTEN_PINK, new Color( 153, 122, 141 )); + colorTable_.put(COLOR_MUSTARD, new Color( 255, 219, 88 )); + colorTable_.put(COLOR_MYRTLE, new Color( 33, 66, 30 )); + colorTable_.put(COLOR_NAVAJO_WHITE, new Color( 255, 222, 173 )); + colorTable_.put(COLOR_NAVY_BLUE, new Color( 0, 0, 128 )); + colorTable_.put(COLOR_OCHRE, new Color( 204, 119, 34 )); + colorTable_.put(COLOR_OFFICE_GREEN, new Color( 0, 128, 0 )); + colorTable_.put(COLOR_OLD_GOLD, new Color( 207, 181, 59 )); + colorTable_.put(COLOR_OLD_LACE, new Color( 253, 245, 230 )); + colorTable_.put(COLOR_OLD_LAVENDER, new Color( 121, 104, 120 )); + colorTable_.put(COLOR_OLD_ROSE, new Color( 192, 128, 129 )); + colorTable_.put(COLOR_OLIVE, new Color( 128, 128, 0 )); + colorTable_.put(COLOR_OLIVE_DRAB, new Color( 107, 142, 35 )); + colorTable_.put(COLOR_OLIVINE, new Color( 154, 185, 115 )); + colorTable_.put(COLOR_ORANGE_COLOR_WHEEL, new Color( 255, 127, 0 )); + colorTable_.put(COLOR_ORANGE_RYB, new Color( 251, 153, 2 )); + colorTable_.put(COLOR_ORANGE_WEB, new Color( 255, 165, 0 )); + colorTable_.put(COLOR_ORANGE_PEEL, new Color( 255, 160, 0 )); + colorTable_.put(COLOR_ORANGE_RED, new Color( 255, 69, 0 )); + colorTable_.put(COLOR_ORCHID, new Color( 218, 112, 214 )); + colorTable_.put(COLOR_PALE_BLUE, new Color( 175, 238, 238 )); + colorTable_.put(COLOR_PALE_BROWN, new Color( 152, 118, 84 )); + colorTable_.put(COLOR_PALE_CARMINE, new Color( 175, 64, 53 )); + colorTable_.put(COLOR_PALE_CHESTNUT, new Color( 221, 173, 175 )); + colorTable_.put(COLOR_PALE_CORNFLOWER_BLUE, new Color( 171, 205, 239 )); + colorTable_.put(COLOR_PALE_MAGENTA, new Color( 249, 132, 229 )); + colorTable_.put(COLOR_PALE_PINK, new Color( 250, 218, 221 )); + colorTable_.put(COLOR_PALE_RED_VIOLET, new Color( 219, 112, 147 )); + colorTable_.put(COLOR_PAPAYA_WHIP, new Color( 255, 239, 213 )); + colorTable_.put(COLOR_PASTEL_GREEN, new Color( 119, 221, 119 )); + colorTable_.put(COLOR_PASTEL_PINK, new Color( 255, 209, 220 )); + colorTable_.put(COLOR_PEACH, new Color( 255, 229, 180 )); + colorTable_.put(COLOR_PEACH_ORANGE, new Color( 255, 204, 153 )); + colorTable_.put(COLOR_PEACH_YELLOW, new Color( 250, 223, 173 )); + colorTable_.put(COLOR_PEAR, new Color( 209, 226, 49 )); + colorTable_.put(COLOR_PERIWINKLE, new Color( 204, 204, 255 )); + colorTable_.put(COLOR_PERSIAN_BLUE, new Color( 28, 57, 187 )); + colorTable_.put(COLOR_PERSIAN_GREEN, new Color( 0, 166, 147 )); + colorTable_.put(COLOR_PERSIAN_INDIGO, new Color( 50, 18, 122 )); + colorTable_.put(COLOR_PERSIAN_ORANGE, new Color( 217, 144, 88 )); + colorTable_.put(COLOR_PERSIAN_RED, new Color( 204, 51, 51 )); + colorTable_.put(COLOR_PERSIAN_PINK, new Color( 247, 127, 190 )); + colorTable_.put(COLOR_PERSIAN_ROSE, new Color( 254, 40, 162 )); + colorTable_.put(COLOR_PERSIMMON, new Color( 236, 88, 0 )); + colorTable_.put(COLOR_PINE_GREEN, new Color( 1, 121, 111 )); + colorTable_.put(COLOR_PINK, new Color( 255, 192, 203 )); + colorTable_.put(COLOR_PINK_ORANGE, new Color( 255, 153, 102 )); + colorTable_.put(COLOR_PLATINUM, new Color( 229, 228, 226 )); + colorTable_.put(COLOR_PLUM_WEB, new Color( 204, 153, 204 )); + colorTable_.put(COLOR_POWDER_BLUE_WEB, new Color( 176, 224, 230 )); + colorTable_.put(COLOR_PUCE, new Color( 204, 136, 153 )); + colorTable_.put(COLOR_PRUSSIAN_BLUE, new Color( 0, 49, 83 )); + colorTable_.put(COLOR_PSYCHEDELIC_PURPLE, new Color( 221, 0, 255 )); + colorTable_.put(COLOR_PUMPKIN, new Color( 255, 117, 24 )); + colorTable_.put(COLOR_PURPLE_HTMLCSS, new Color( 128, 0, 128 )); + colorTable_.put(COLOR_PURPLE_X11, new Color( 160, 92, 240 )); + colorTable_.put(COLOR_PURPLE_TAUPE, new Color( 80, 64, 77 )); + colorTable_.put(COLOR_RAW_UMBER, new Color( 115, 74, 18 )); + colorTable_.put(COLOR_RAZZMATAZZ, new Color( 227, 11, 92 )); + colorTable_.put(COLOR_RED, new Color( 255, 0, 0 )); + colorTable_.put(COLOR_RED_PIGMENT, new Color( 237, 28, 36 )); + colorTable_.put(COLOR_RED_RYB, new Color( 254, 39, 18 )); + colorTable_.put(COLOR_RED_VIOLET, new Color( 199, 21, 133 )); + colorTable_.put(COLOR_RICH_CARMINE, new Color( 215, 0, 64 )); + colorTable_.put(COLOR_ROBIN_EGG_BLUE, new Color( 0, 204, 204 )); + colorTable_.put(COLOR_ROSE, new Color( 255, 0, 127 )); + colorTable_.put(COLOR_ROSE_MADDER, new Color( 227, 38, 54 )); + colorTable_.put(COLOR_ROSE_TAUPE, new Color( 144, 93, 93 )); + colorTable_.put(COLOR_ROYAL_BLUE, new Color( 65, 105, 225 )); + colorTable_.put(COLOR_ROYAL_PURPLE, new Color( 107, 63, 160 )); + colorTable_.put(COLOR_RUBY, new Color( 224, 17, 95 )); + colorTable_.put(COLOR_RUSSET, new Color( 128, 70, 27 )); + colorTable_.put(COLOR_RUST, new Color( 183, 65, 14 )); + colorTable_.put(COLOR_SAFETY_ORANGE_BLAZE_ORANGE, new Color( 255, 102, 0 )); + colorTable_.put(COLOR_SAFFRON, new Color( 244, 196, 48 )); + colorTable_.put(COLOR_SALMON, new Color( 255, 140, 105 )); + colorTable_.put(COLOR_SANDY_BROWN, new Color( 244, 164, 96 )); + colorTable_.put(COLOR_SANGRIA, new Color( 146, 0, 10 )); + colorTable_.put(COLOR_SAPPHIRE, new Color( 8, 37, 103 )); + colorTable_.put(COLOR_SCARLET, new Color( 255, 36, 0 )); + colorTable_.put(COLOR_SCHOOL_BUS_YELLOW, new Color( 255, 216, 0 )); + colorTable_.put(COLOR_SEA_GREEN, new Color( 46, 139, 87 )); + colorTable_.put(COLOR_SEASHELL, new Color( 255, 245, 238 )); + colorTable_.put(COLOR_SELECTIVE_YELLOW, new Color( 255, 186, 0 )); + colorTable_.put(COLOR_SEPIA, new Color( 112, 66, 20 )); + colorTable_.put(COLOR_SHAMROCK_GREEN, new Color( 0, 158, 96 )); + colorTable_.put(COLOR_SHOCKING_PINK, new Color( 252, 15, 192 )); + colorTable_.put(COLOR_SILVER, new Color( 192, 192, 192 )); + colorTable_.put(COLOR_SKY_BLUE, new Color( 135, 206, 235 )); + colorTable_.put(COLOR_SLATE_GREY, new Color( 112, 128, 144 )); + colorTable_.put(COLOR_SMALT_DARK_POWDER_BLUE, new Color( 0, 51, 153 )); + colorTable_.put(COLOR_SPRING_BUD, new Color( 167, 252, 0 )); + colorTable_.put(COLOR_SPRING_GREEN, new Color( 0, 255, 127 )); + colorTable_.put(COLOR_STEEL_BLUE, new Color( 70, 130, 180 )); + colorTable_.put(COLOR_TAN, new Color( 210, 180, 140 )); + colorTable_.put(COLOR_TANGERINE, new Color( 242, 133, 0 )); + colorTable_.put(COLOR_TANGERINE_YELLOW, new Color( 255, 204, 0 )); + colorTable_.put(COLOR_TAUPE, new Color( 72, 60, 50 )); + colorTable_.put(COLOR_TEA_GREEN, new Color( 208, 240, 192 )); + colorTable_.put(COLOR_TEA_ROSE_ORANGE, new Color( 248, 131, 194 )); + colorTable_.put(COLOR_TEA_ROSE_ROSE, new Color( 244, 194, 194 )); + colorTable_.put(COLOR_TEAL, new Color( 0, 128, 128 )); + colorTable_.put(COLOR_TENNY_TAWNY, new Color( 205, 87, 0 )); + colorTable_.put(COLOR_TERRA_COTTA, new Color( 226, 114, 91 )); + colorTable_.put(COLOR_THISTLE, new Color( 216, 191, 216 )); + colorTable_.put(COLOR_TOMATO, new Color( 255, 99, 71 )); + colorTable_.put(COLOR_TURQUOISE, new Color( 48, 213, 200 )); + colorTable_.put(COLOR_TYRIAN_PURPLE, new Color( 102, 2, 60 )); + colorTable_.put(COLOR_ULTRAMARINE, new Color( 18 , 10 , 143 )); + colorTable_.put(COLOR_ULTRA_PINK, new Color( 255, 111, 255 )); + colorTable_.put(COLOR_UNITED_NATIONS_BLUE, new Color( 91, 146, 229 )); + colorTable_.put(COLOR_VEGAS_GOLD, new Color( 197, 179, 88 )); + colorTable_.put(COLOR_VERMILION, new Color( 227, 66, 51 )); + colorTable_.put(COLOR_VIOLET, new Color( 139, 0, 255 )); + colorTable_.put(COLOR_VIOLET_WEB, new Color( 238, 130, 238 )); + colorTable_.put(COLOR_VIOLET_RYB, new Color( 2, 71, 54 )); + colorTable_.put(COLOR_VIRIDIAN, new Color( 64, 130, 109 )); + colorTable_.put(COLOR_WHEAT, new Color( 245, 222, 179 )); + colorTable_.put(COLOR_WHITE, new Color( 255, 255, 255 )); + colorTable_.put(COLOR_WISTERIA, new Color( 201, 160, 220 )); + colorTable_.put(COLOR_YELLOW, new Color( 255, 255, 0 )); + colorTable_.put(COLOR_YELLOW_PROCESS, new Color( 255, 239, 0 )); + colorTable_.put(COLOR_YELLOW_RYB, new Color( 254, 254, 51 )); + colorTable_.put(COLOR_YELLOW_GREEN, new Color( 154, 205, 50 )); + } + + public static Hashtable getColorTable() { + return colorTable_; + } + + public static boolean containsColor(String colorURI) { + return colorTable_.containsKey(colorURI); + } + + public static Color getRGBforColor(String colorURI) { + return colorTable_.get(colorURI); + } + + // A.2.2 LocationCS + private static Vector locationTable_ = new Vector(); + + public final static String LOCATIONURIBASE = "urn:mpeg:mpeg-v:01-SI-LocationCS-NS"; + public final static String LOC_X_LEFT = ":left"; + public final static String LOC_X_CENTERLEFT = ":centerleft"; + public final static String LOC_X_CENTER = ":center"; + public final static String LOC_X_CENTERRIGHT = ":centerright"; + public final static String LOC_X_RIGHT = ":right"; + public final static String LOC_Y_BOTTOM = ":bottom"; + public final static String LOC_Y_MIDDLE = ":middle"; + public final static String LOC_Y_TOP = ":top"; + public final static String LOC_Z_BACK = ":back"; + public final static String LOC_Z_MIDWAY = ":midway"; + public final static String LOC_Z_FRONT = ":front"; + public final static String LOC_EVERYWHERE = ":*"; + + static { + // x left + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_BOTTOM + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_BOTTOM + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_BOTTOM + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_MIDDLE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_MIDDLE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_MIDDLE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_TOP + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_TOP + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_TOP + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_EVERYWHERE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_EVERYWHERE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_EVERYWHERE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_BOTTOM + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_MIDDLE + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_Y_TOP + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_LEFT + LOC_EVERYWHERE + LOC_EVERYWHERE); + + // x centerleft + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_BOTTOM + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_BOTTOM + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_BOTTOM + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_MIDDLE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_MIDDLE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_MIDDLE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_TOP + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_TOP + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_TOP + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_EVERYWHERE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_EVERYWHERE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_EVERYWHERE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_BOTTOM + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_MIDDLE + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_Y_TOP + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERLEFT + LOC_EVERYWHERE + LOC_EVERYWHERE); + + // x center + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_BOTTOM + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_BOTTOM + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_BOTTOM + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_MIDDLE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_MIDDLE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_MIDDLE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_TOP + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_TOP + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_TOP + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_EVERYWHERE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_EVERYWHERE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_EVERYWHERE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_BOTTOM + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_MIDDLE + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_Y_TOP + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTER + LOC_EVERYWHERE + LOC_EVERYWHERE); + + // x centerright + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_BOTTOM + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_BOTTOM + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_BOTTOM + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_MIDDLE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_MIDDLE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_MIDDLE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_TOP + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_TOP + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_TOP + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_EVERYWHERE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_EVERYWHERE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_EVERYWHERE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_BOTTOM + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_MIDDLE + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_Y_TOP + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_CENTERRIGHT + LOC_EVERYWHERE + LOC_EVERYWHERE); + + // x right + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_BOTTOM + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_BOTTOM + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_BOTTOM + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_MIDDLE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_MIDDLE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_MIDDLE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_TOP + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_TOP + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_TOP + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_EVERYWHERE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_EVERYWHERE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_EVERYWHERE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_BOTTOM + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_MIDDLE + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_Y_TOP + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_X_RIGHT + LOC_EVERYWHERE + LOC_EVERYWHERE); + + // x everywhere + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_BOTTOM + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_BOTTOM + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_BOTTOM + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_MIDDLE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_MIDDLE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_MIDDLE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_TOP + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_TOP + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_TOP + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_EVERYWHERE + LOC_Z_BACK); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_EVERYWHERE + LOC_Z_MIDWAY); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_EVERYWHERE + LOC_Z_FRONT); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_BOTTOM + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_MIDDLE + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_Y_TOP + LOC_EVERYWHERE); + locationTable_.add(LOCATIONURIBASE + LOC_EVERYWHERE + LOC_EVERYWHERE + LOC_EVERYWHERE); + } + + public static Vector getLocationTable() { + return locationTable_; + } + + public static boolean containsLocation(String locationURI) { + return locationTable_.contains(locationURI); + } + + // A.2.3 ScentCS + private static Vector scentTable_ = new Vector(); + public final static String SCENTURIBASE = "urn:mpeg:mpeg-v:01-SI-ScentCS-NS"; + public final static String SCENT_ROSE = SCENTURIBASE + ":rose"; + public final static String SCENT_ACACIA = SCENTURIBASE + ":acacia"; + public final static String SCENT_CHRYSANTHEMUM = SCENTURIBASE + ":chrysanthemum"; + public final static String SCENT_LILAC = SCENTURIBASE + ":lilac"; + public final static String SCENT_MINT = SCENTURIBASE + ":mint"; + public final static String SCENT_JASMINE = SCENTURIBASE + ":jasmine"; + public final static String SCENT_PINETREE = SCENTURIBASE + ":pine_tree"; + public final static String SCENT_ORANGE = SCENTURIBASE + ":orange"; + public final static String SCENT_GRAPE = SCENTURIBASE + ":grape"; + + static { + scentTable_.add(SCENT_ROSE); + scentTable_.add(SCENT_ACACIA); + scentTable_.add(SCENT_CHRYSANTHEMUM); + scentTable_.add(SCENT_LILAC); + scentTable_.add(SCENT_MINT); + scentTable_.add(SCENT_JASMINE); + scentTable_.add(SCENT_PINETREE); + scentTable_.add(SCENT_ORANGE); + scentTable_.add(SCENT_GRAPE); + } + + public static Vector getScentTable() { + return scentTable_; + } + + public static boolean containsScent(String scentURI) { + return scentTable_.contains(scentURI); + } + + // A.2.6 SprayingTypeCS + private static Vector sprayingTypeTable_ = new Vector(); + public final static String SPRAYINGTYPEURIBASE = "urn:mpeg:mpeg-v:01-SI-SprayingTypeCS-NS"; + public final static String SPRAYINGTYPE_WATER = SPRAYINGTYPEURIBASE + ":water"; + + static { + sprayingTypeTable_.add(SPRAYINGTYPE_WATER); + } + + public static Vector getSprayingTypeTable() { + return sprayingTypeTable_; + } + + public static boolean containsSprayingType(String sprayingTypeURI) { + return sprayingTypeTable_.contains(sprayingTypeURI); + } +} diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/EffectElement.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/EffectElement.java new file mode 100644 index 0000000..c1da328 --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/EffectElement.java @@ -0,0 +1,244 @@ +/* + * This file is part of SEVino. + * + * SEVino is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SEVino is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SEVino. If not, see . + * + * Copyright 2008, 2009, 2010, 2011 Alpen-Adria-Universitaet Klagenfurt, Markus Waltl. + */ +package br.ufes.inf.lprm.sensoryeffect.renderer.parser; + +import java.util.Vector; + +/** + * Class which represents a container for an effect element + * + * @author Markus Waltl + * @version 1.0 + */ +public class EffectElement { + private String effectName_ = ""; + private double startTime_ = -1.0; + private double endTime_ = -1.0; + private Vector attributes_ = null; + + private float intensity = -1, minIntensity = -1, maxIntensity = -1; + private boolean autoExtraction = false; + private int priority = -1; + private long duration = -1; + private double fade = -1; + private String alt, location = ""; + private int r = 0; + private int g = 0; + private int b = 0; + private boolean activate = false; + + public float getIntensity() { + return intensity; + } + + public void setIntensity(float intensity) { + this.intensity = intensity; + } + + public float getMinIntensity() { + return minIntensity; + } + + public void setMinIntensity(float minIntensity) { + this.minIntensity = minIntensity; + } + + public float getMaxIntensity() { + return maxIntensity; + } + + public void setMaxIntensity(float maxIntensity) { + this.maxIntensity = maxIntensity; + } + + public boolean isAutoExtraction() { + return autoExtraction; + } + + public void setAutoExtraction(boolean autoExtraction) { + this.autoExtraction = autoExtraction; + } + + public int getPriority() { + return priority; + } + + public void setPriority(int priority) { + this.priority = priority; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public double getFade() { + return fade; + } + + public void setFade(double fade) { + this.fade = fade; + } + + public String getAlt() { + return alt; + } + + public void setAlt(String alt) { + this.alt = alt; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public int getR() { + return r; + } + + public void setR(int r) { + this.r = r; + } + + public int getG() { + return g; + } + + public void setG(int g) { + this.g = g; + } + + public int getB() { + return b; + } + + public void setB(int b) { + this.b = b; + } + + /** + * Constructor + */ + public EffectElement() { + attributes_ = new Vector(); + } + + /** + * Method for retrieving the effect name + * @return String with the name + */ + public String getEffectName() { + return effectName_; + } + + /** + * Method for setting the effect name + * @param name String with the name + */ + public void setEffectName(String name) { + effectName_ = name; + } + + /** + * Method for setting the start time + * @param seconds double with the time + */ + public void setStartTime(double seconds) { + startTime_ = seconds; + } + + /** + * Method for getting the start time + * @return double with time + */ + public double getStartTime() { + return startTime_; + } + + /** + * Method for setting the end time + * @param seconds double with time + */ + public void setEndTime(double seconds) { + endTime_ = seconds; + } + + /** + * Method for getting the end time + * @return double with time + */ + public double getEndTime() { + return endTime_; + } + + /** + * Method for retrieving the attributes of the effect + * @return Vector with the attributes + */ + public Vector getAttributes() { + return attributes_; + } + + /** + * Method for adding an attribute + * @param attribute String[] with attribute (0 = attribute name, 1 = attribute value) + * @return true if added successfully else false + */ + public boolean addAttribute(String[] attribute) { + if (attribute == null || attribute[0] == null || attribute[0].equals("")) + return false; + + attributes_.add(attribute); + return true; + } + + /** + * Method for getting a string representation of the effect element + * @param String with representation + */ + public String toString() { + String s = "Name: " + effectName_ + "\n"; + s += "Start time: " + startTime_ + "\n"; + s += "End time: " + endTime_ + "\n"; + s += "Attributes:\n"; + + for (int i = 0; i < attributes_.size(); i++) { + String[] att = attributes_.elementAt(i); + + s += att[0] + ": " + att[1] + " \n"; + } + s += "\n"; + return s; + } + + public boolean isActivate() { + return activate; + } + + public void setActivate(boolean activate) { + this.activate = activate; + } +} diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/HelperFunctions.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/HelperFunctions.java new file mode 100644 index 0000000..c7cb6c0 --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/HelperFunctions.java @@ -0,0 +1,110 @@ +package br.ufes.inf.lprm.sensoryeffect.renderer.parser; + +import java.awt.Color; +import java.util.HashMap; + +/** + * Class providing helper functions + * + * @author Estevao Bissoli Saleme + * @version 1.0 + */ +public class HelperFunctions { + + public static HashMap obtainFadeFanOrVibration(boolean on, long curTime, double intensityScale255, double fade){ + HashMap ret = new HashMap(); + if (on){ + long fadeTimeFinal = (long)(curTime + (fade*1000)); + long diffTime = fadeTimeFinal - curTime; + int steps = Math.round(diffTime/100); + double stepIntensity = intensityScale255 / steps; + long timeFadeIn = curTime; + for (int i =0; i< steps;i++){ + int intensityFadeIn = (int)(stepIntensity * i); + ret.put(timeFadeIn, intensityFadeIn); + timeFadeIn += 100; + } + ret.put(timeFadeIn, (int)intensityScale255); + } else { + long fadeTimeInitial = (long)(curTime - (fade*1000)); + long diffTime = curTime - fadeTimeInitial; + int steps = Math.round(diffTime/100); + double stepIntensity = intensityScale255 / steps; + double intensityFadeOut = intensityScale255; + long timeFadeOut = fadeTimeInitial; + for (int i =0; i< steps;i++){ + ret.put(timeFadeOut, (int)intensityFadeOut); + timeFadeOut += 100; + intensityFadeOut -= stepIntensity; + } + ret.put(timeFadeOut, 0); + } + return ret; + } + + public static HashMap obtainFadeLight(boolean on, long curTime, double intensityScale255, double fade, int r, int g, int b){ + HashMap ret = new HashMap(); + if (on){ + long fadeTimeFinal = (long)(curTime + (fade*1000)); + long diffTime = fadeTimeFinal - curTime; + int steps = Math.round(diffTime/100); + int stepIntensity = (int)(intensityScale255 / steps); + long timeFadeIn = curTime; + for (int i =0; i< steps;i++){ + double intensityFadeIn = stepIntensity * i; + double percentIntensity = 100; + if (intensityFadeIn > -1 && intensityFadeIn <= 255) + percentIntensity = (intensityFadeIn / 255) * 100; + Color color = HelperFunctions.adjustColor((int)percentIntensity, r, g, b); + ret.put(timeFadeIn, color); + timeFadeIn += 100; + } + double percentIntensity = 100; + if (intensityScale255 > -1 && intensityScale255 <= 255) + percentIntensity = (intensityScale255 / 255) * 100; + Color color = HelperFunctions.adjustColor((int)percentIntensity, r, g, b); + ret.put(timeFadeIn, color); + } else { + long fadeTimeInitial = (long)(curTime - (fade*1000)); + long diffTime = curTime - fadeTimeInitial; + int steps = Math.round(diffTime/100); + double stepIntensity = intensityScale255 / steps; + double intensityFadeOut = intensityScale255; + long timeFadeOut = fadeTimeInitial; + for (int i =0; i< steps;i++){ + double percentIntensity = 100; + if (intensityFadeOut > -1 && intensityFadeOut <= 255) + percentIntensity = (intensityFadeOut / 255) * 100; + Color color = HelperFunctions.adjustColor((int)percentIntensity, r, g, b); + ret.put(timeFadeOut, color); + timeFadeOut += 100; + intensityFadeOut -= stepIntensity; + } + Color color = new Color(0,0,0); + ret.put(timeFadeOut, color); + } + return ret; + } + + public static int[] hexToRGB(String hex) { + if (hex == null || hex.length() != 7) + return new int[]{255, 255, 255}; + hex = hex.substring(1); + int r = Integer.parseInt(hex.substring(0, 2), 16); + int g = Integer.parseInt(hex.substring(2, 4), 16); + int b = Integer.parseInt(hex.substring(4, 6), 16); + return new int[]{r, g, b}; + } + + public static Color adjustColor(float percentIntensity, int r, int g, int b) { + float percentRed = r/255.0f * percentIntensity; + int redFinal = (int)((percentRed/100) * 255); + float percentGreen = g/255.0f * percentIntensity; + int greenFinal = (int)((percentGreen/100) * 255); + float percentBlue = b/255.0f * percentIntensity; + int blueFinal = (int)((percentBlue/100) * 255); + return new Color(redFinal, greenFinal, blueFinal); + } + + +} diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/SEMDefinitions.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/SEMDefinitions.java new file mode 100644 index 0000000..1a6ebc4 --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/SEMDefinitions.java @@ -0,0 +1,46 @@ +/* + * This file is part of SEVino. + * + * SEVino is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SEVino is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SEVino. If not, see . + * + * Copyright 2008, 2009, 2010, 2011, 2012 Alpen-Adria-Universitaet Klagenfurt, Markus Waltl. + */ +package br.ufes.inf.lprm.sensoryeffect.renderer.parser; + +/** + * Interface which defines variables for the SEM parsing and creation + * @author Markus Waltl + * + */ +public interface SEMDefinitions { + public final static String TIMESCALE = "timeScale"; + public final static String PTS = "pts"; + public final static String ANCHORELEMENT = "anchorElement"; + + public final static String TRUE = "true"; + public final static String FALSE = "false"; + + // needed for storing + public final static String ACTIVATE = "activate"; + public final static String DURATION = "duration"; + public final static String FADE = "fade"; + public final static String ALT = "alt"; + public final static String PRIORITY = "priority"; + public final static String INTENSITYVALUE = "intensity-value"; + public final static String INTENSITYRANGE = "intensity-range"; + public final static String LOCATION = "location"; + public final static String AUTOEXTRACTION = "autoExtraction"; + + public final static String COLOR = "color"; +} diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/SEMParser.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/SEMParser.java new file mode 100644 index 0000000..373084b --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/parser/SEMParser.java @@ -0,0 +1,485 @@ +/* + * This file is part of SEVino. + * + * SEVino is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SEVino is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SEVino. If not, see . + * + * Copyright 2008, 2009, 2010, 2011 Alpen-Adria-Universitaet Klagenfurt, Markus Waltl. + */ +package br.ufes.inf.lprm.sensoryeffect.renderer.parser; + +import java.awt.Color; +import java.io.IOException; +import java.io.StringReader; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import javax.xml.namespace.QName; +import javax.xml.transform.stream.StreamSource; + +import org.iso.mpeg.mpegv._2010.sedl.EffectBaseType; +import org.iso.mpeg.mpegv._2010.sedl.GroupOfEffectsType; +import org.iso.mpeg.mpegv._2010.sedl.SEM; +import org.iso.mpeg.mpegv._2010.sedl.SEMBaseType; +import org.iso.mpeg.mpegv._2010.sev.LightType; +import org.iso.mpeg.mpegv._2010.sev.VibrationType; +import org.iso.mpeg.mpegv._2010.sev.WindType; + +import br.ufes.inf.lprm.sensoryeffect.renderer.SERendererDevice; +import br.ufes.inf.lprm.sensoryeffect.renderer.SERendererService; +import br.ufes.inf.lprm.sensoryeffect.renderer.serial.SerialMessage; +import br.ufes.inf.lprm.sensoryeffect.renderer.timer.TimeLineAction; + +/** + * SEMParser + * + * Class for parsing a sensory effects metadata descriptiony + * + * @author Markus Waltl (Alpen-Adria-Universitaet Klagenfurt) + * @version 1.0 + */ + +/** + * Modified by + * + * @author Estevao Bissoli Saleme + * @version 1.1 + */ + +public class SEMParser implements Runnable { + private double curTime = -1; + private long timeScale = 1; + private Vector effectElements = null; + private EffectElement tmpElement = null; + + private Vector timeLineActions = null; + private String sensoryEffectMetadata = ""; + private long duration = -1; + + public SEMParser(String newSensoryEffectMetadata, long newDuration) { + timeLineActions = new Vector(); + effectElements = new Vector(); + sensoryEffectMetadata = newSensoryEffectMetadata; + duration = newDuration; + } + + public static JAXBContext jaxbContext; + + @Override + public void run() { + try { + parse(sensoryEffectMetadata); + } catch (JAXBException | IOException e) { + e.printStackTrace(); + } + Comparator comp = new Comparator() { + public int compare(TimeLineAction ta1, TimeLineAction ta2) { + return ta1.getOccursTime().compareTo(ta2.getOccursTime()); + } + }; + Collections.sort(timeLineActions, comp); + if (SERendererDevice.debugMode){ + for (int i = 0; i < timeLineActions.size(); i++) + System.out.println(timeLineActions.get(i).getOccursTime() + ": " + SerialMessage.messageToString(timeLineActions.get(i).getSerialMessage())); + System.out.println("Ready for start..."); + System.out.println("---"); + } + SERendererDevice.timeLine.setActions(timeLineActions, duration); + SERendererService.semPrepared = true; + try { + Thread.sleep(100); + SERendererService.getPropertyChangeSupport().firePropertyChange("SemPrepared", "", SERendererService.semPrepared); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + /** + * Method for parsing a SEM description + * @param textOfSem + * @throws JAXBException - if an error occurred. + * @throws IOException - if an IO error occurred. + */ + private void parse(String textOfSem) throws JAXBException, IOException { + + try { + Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); + StringReader reader = new StringReader(textOfSem); + JAXBElement jSem = unmarshaller.unmarshal(new StreamSource(reader), SEM.class); + + SEM sem = jSem.getValue(); + + // extract time information + Map semAttributes = sem.getOtherAttributes(); + if (semAttributes != null) { + for (QName key : semAttributes.keySet()) { + if (key.getLocalPart().equals(SEMDefinitions.TIMESCALE)) { + timeScale = Long.valueOf(semAttributes.get(key)); + } + } + } + + // extract effects and groupofeffects + List semContent = sem.getDeclarationsOrGroupOfEffectsOrEffect(); + + if (semContent != null) { + for (int i = 0; i < semContent.size(); i++) { + SEMBaseType sbt = semContent.get(i); + + if (sbt instanceof EffectBaseType) { + handleEffect((EffectBaseType)sbt); + curTime = -1; + } + else if (sbt instanceof GroupOfEffectsType) { + GroupOfEffectsType goe = (GroupOfEffectsType)sbt; + + Map goeAttributes = goe.getOtherAttributes(); + if (goeAttributes != null) { + for (QName key : goeAttributes.keySet()) { + if (key.getLocalPart().equals(SEMDefinitions.PTS)) { + double lVal = Double.valueOf(goeAttributes.get(key)); + curTime = lVal/timeScale; + } + else if (key.getLocalPart().equals(SEMDefinitions.ANCHORELEMENT)) { + // currently not needed + } + } + } + + List groupEffects = goe.getEffectOrReferenceEffect(); + if (groupEffects != null) { + for (SEMBaseType goeSBT : groupEffects) { + if (goeSBT instanceof EffectBaseType) { + handleEffect((EffectBaseType)goeSBT); + } + // reference effect not supported (for now!) + } + } + + curTime = -1; + } + } + } + } catch (JAXBException e) { + throw new JAXBException("Parsing error: " + e.getMessage()); + } catch (Exception e) { + throw new JAXBException("Unexpected error: " + e.getMessage()); + } + } + + /** + * Method for handling effects, e.g., extracting effect attributes + * @param ebt EffectBaseType with the effect to be handled + */ + private void handleEffect(EffectBaseType ebt) { + tmpElement = new EffectElement(); + tmpElement.setEffectName(ebt.getClass().getSimpleName()); + + Map effectAttributes = ebt.getOtherAttributes(); + + if (effectAttributes != null) { + for (QName key : effectAttributes.keySet()) { + if (key.getLocalPart().equals(SEMDefinitions.PTS)) { + double lVal = Double.valueOf(effectAttributes.get(key)); + curTime = lVal/timeScale; + } + else if (key.getLocalPart().equals(SEMDefinitions.ALT)) + tmpElement.setAlt(String.valueOf(effectAttributes.get(key))); + else if (key.getLocalPart().equals(SEMDefinitions.DURATION)){ + duration = Long.parseLong(effectAttributes.get(key)); + tmpElement.setDuration(duration); + } + else if (key.getLocalPart().equals(SEMDefinitions.FADE)) { + double time = Double.valueOf(effectAttributes.get(key))/timeScale; + tmpElement.setFade(time); + } + else if (key.getLocalPart().equals(SEMDefinitions.LOCATION)) + tmpElement.setLocation(String.valueOf(effectAttributes.get(key))); + else if (key.getLocalPart().equals(SEMDefinitions.PRIORITY)) + tmpElement.setPriority(Integer.parseInt(effectAttributes.get(key))); + else if (key.getLocalPart().equals(SEMDefinitions.COLOR)) { + Color rgbColor = ClassificationScheme.getRGBforColor(String.valueOf(effectAttributes.get(key))); + tmpElement.setR(rgbColor.getRed()); + tmpElement.setG(rgbColor.getGreen()); + tmpElement.setB(rgbColor.getBlue()); + } + else { + String[] att = new String[2]; + att[0] = key.getNamespaceURI() + ":" + key.getLocalPart(); + att[1] = effectAttributes.get(key); + tmpElement.addAttribute(att); + } + } + } + + if (ebt.getAlt() != null && !ebt.getAlt().equals("")) + tmpElement.setAlt(ebt.getAlt()); + + if (ebt.getDuration() != null){ + duration = ebt.getDuration().longValue(); + tmpElement.setDuration(duration); + } + + if (ebt.getFade() != null) { + double time = ebt.getFade().doubleValue()/timeScale; + tmpElement.setFade(time); + } + + if (ebt.getLocation() != null && !ebt.getLocation().equals("")) + tmpElement.setLocation(ebt.getLocation()); + + if (ebt.getPriority() != null) + tmpElement.setPriority(ebt.getPriority().intValue()); + + // handle intensities + if (ebt instanceof LightType) { + LightType effect = (LightType)ebt; + if (ebt.getAutoExtraction() != null && ebt.getAutoExtraction().value() != null && (ebt.getAutoExtraction().value().equalsIgnoreCase("visual") || ebt.getAutoExtraction().value().equalsIgnoreCase("both"))){ + tmpElement.setAutoExtraction(true); + SERendererService.setLightAutoExraction(true); + } + else { + if (effect.getIntensityRange() != null && effect.getIntensityRange().size() > 1){ + tmpElement.setMinIntensity(effect.getIntensityRange().get(0)); + tmpElement.setMaxIntensity(effect.getIntensityRange().get(1)); + } + if (effect.getIntensityValue() != null && (tmpElement.getMinIntensity() <= effect.getIntensityValue() && tmpElement.getMaxIntensity() >= effect.getIntensityValue())) + tmpElement.setIntensity(effect.getIntensityValue()); + if (effect.getColor() != null && !effect.getColor().isEmpty()) { + Color rgbColor = ClassificationScheme.getRGBforColor(String.valueOf(effect.getColor().get(0))); + tmpElement.setR(rgbColor.getRed()); + tmpElement.setG(rgbColor.getGreen()); + tmpElement.setB(rgbColor.getBlue()); + } + } + } + else if (ebt instanceof WindType) { + WindType effect = (WindType)ebt; + if (effect.getIntensityRange() != null && effect.getIntensityRange().size() > 1){ + tmpElement.setMinIntensity(effect.getIntensityRange().get(0)); + tmpElement.setMaxIntensity(effect.getIntensityRange().get(1)); + } + if (effect.getIntensityValue() != null && (tmpElement.getMinIntensity() <= effect.getIntensityValue() && tmpElement.getMaxIntensity() >= effect.getIntensityValue())) + tmpElement.setIntensity(effect.getIntensityValue()); + } + else if (ebt instanceof VibrationType) { + VibrationType effect = (VibrationType)ebt; + if (effect.getIntensityRange() != null && effect.getIntensityRange().size() > 1){ + tmpElement.setMinIntensity(effect.getIntensityRange().get(0)); + tmpElement.setMaxIntensity(effect.getIntensityRange().get(1)); + } + if (effect.getIntensityValue() != null && (tmpElement.getMinIntensity() <= effect.getIntensityValue() && tmpElement.getMaxIntensity() >= effect.getIntensityValue())) + tmpElement.setIntensity(effect.getIntensityValue()); + } + + if (ebt.isActivate() != null && ebt.isActivate()) { + boolean found = false; + for (int j = 0; j < effectElements.size() && !found; j++) { + EffectElement ee = effectElements.elementAt(j); + if (ee.getEffectName() != null && ee.getEffectName().equals(tmpElement.getEffectName())) { + if (ee.getEndTime() == -1.0) { + ee.setEndTime(curTime); + found = true; + tmpElement.setActivate(false); + + EffectElement searchPriorElementActivated = null; + boolean priorElementActivated = false; + for (int i = effectElements.size()-1; i >-1; i--){ + searchPriorElementActivated = effectElements.get(i); + if (searchPriorElementActivated.getEffectName().equalsIgnoreCase(tmpElement.getEffectName()) && searchPriorElementActivated.isActivate()){ + priorElementActivated = true; + break; + } + } + if (priorElementActivated && tmpElement.getFade() > 0){ + float percentualIntensity = searchPriorElementActivated.getIntensity()/searchPriorElementActivated.getMaxIntensity(); + int intensityScale255 = Math.round((percentualIntensity * 255)); + if (!ebt.isActivate()) + prepareTimeLineActions(false, ebt, (long)(curTime * 1000), intensityScale255, searchPriorElementActivated.getDuration(), + tmpElement.getFade(), searchPriorElementActivated.getLocation(), searchPriorElementActivated.getR(), searchPriorElementActivated.getG(), searchPriorElementActivated.getB()); + } + else + prepareTimeLineActions(false, ebt, (long)(curTime * 1000), 0, 0, 0f, "", 0, 0, 0); + } + } + } + tmpElement.setActivate(true); + tmpElement.setStartTime(curTime); + effectElements.add(tmpElement); + if (!tmpElement.isAutoExtraction()){ + if (tmpElement.getIntensity() > 0 && (tmpElement.getMinIntensity() <= tmpElement.getIntensity() && tmpElement.getMaxIntensity() >= tmpElement.getIntensity())){ + float percentualIntensity = tmpElement.getIntensity()/tmpElement.getMaxIntensity(); + int intensityScale255 = Math.round((percentualIntensity * 255)); + prepareTimeLineActions(true, ebt, (long)(curTime * 1000), intensityScale255, tmpElement.getDuration(), tmpElement.getFade(), tmpElement.getLocation(), tmpElement.getR(), tmpElement.getG(), tmpElement.getB()); + } + } + } + else { + boolean found = false; + for (int j = 0; j < effectElements.size() && !found; j++) { + EffectElement ee = effectElements.elementAt(j); + if (ee.getEffectName() != null && ee.getEffectName().equals(tmpElement.getEffectName())) { + if (ee.getEndTime() == -1.0) { + ee.setEndTime(curTime); + found = true; + tmpElement.setActivate(false); + + EffectElement searchPriorElementActivated = null; + boolean priorElementActivated = false; + for (int i = effectElements.size()-1; i >-1; i--){ + searchPriorElementActivated = effectElements.get(i); + if (searchPriorElementActivated.getEffectName().equalsIgnoreCase(tmpElement.getEffectName()) && searchPriorElementActivated.isActivate()){ + priorElementActivated = true; + break; + } + } + if (priorElementActivated && tmpElement.getFade() > 0){ + float percentualIntensity = searchPriorElementActivated.getIntensity()/searchPriorElementActivated.getMaxIntensity(); + int intensityScale255 = Math.round((percentualIntensity * 255)); + prepareTimeLineActions(false, ebt, (long)(curTime * 1000), intensityScale255, searchPriorElementActivated.getDuration(), + tmpElement.getFade(), searchPriorElementActivated.getLocation(), searchPriorElementActivated.getR(), searchPriorElementActivated.getG(), searchPriorElementActivated.getB()); + } + else + prepareTimeLineActions(false, ebt, (long)(curTime * 1000), 0, 0, 0f, "", 0, 0, 0); + } + } + } + } + tmpElement = null; + } + + private void prepareTimeLineActions(boolean on, EffectBaseType ebt, long curTime, int intensityScale255, long duration, double fade, + String location, int r, int g, int b){ + if (on == false) + curTime = curTime -1; + if (ebt instanceof LightType) { + if (fade > 0){ + HashMap fadePairs = HelperFunctions.obtainFadeLight(on, curTime, intensityScale255, fade, r, g, b); + for (Long key : fadePairs.keySet()) { + Color color = fadePairs.get(key); + byte[] message = SerialMessage.prepareMessageToLed(location, (char)color.getRed(), (char)color.getGreen(), (char)color.getBlue()); + timeLineActions.add(new TimeLineAction(key, message)); + } + } + else { + int percentIntensity = 100; // not adjust luminance + if (intensityScale255 > -1 && intensityScale255 <= 255) + percentIntensity = (int)(Double.valueOf(String.valueOf(intensityScale255)) / 255 * 100); + Color color = HelperFunctions.adjustColor(percentIntensity, r, g, b); + byte[] message = SerialMessage.prepareMessageToLed(location, (char)((int)color.getRed()), (char)color.getGreen(), (char)color.getBlue()); + timeLineActions.add(new TimeLineAction(curTime, message)); + } + if (on && duration > 0){ + long timeDeactivate = curTime + (duration * 1000); + byte[] message = SerialMessage.prepareMessageToLed(location, (char)0, (char)0, (char)0); + timeLineActions.add(new TimeLineAction(timeDeactivate, message)); + } + } + else if (ebt instanceof WindType) { + if (location.equals("") || location.startsWith(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_EVERYWHERE)){ + if (fade > 0){ + HashMap fadePairs = HelperFunctions.obtainFadeFanOrVibration(on, curTime, intensityScale255, fade); + for (Long key : fadePairs.keySet()) { + byte[] message1 = SerialMessage.prepareMessageToFan(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_LEFT, (char)fadePairs.get(key).intValue()); + timeLineActions.add(new TimeLineAction(key, message1)); + byte[] message2 = SerialMessage.prepareMessageToFan(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_RIGHT, (char)fadePairs.get(key).intValue()); + timeLineActions.add(new TimeLineAction(key, message2)); + } + } + else { + byte[] message1 = SerialMessage.prepareMessageToFan(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_LEFT, (char)intensityScale255); + timeLineActions.add(new TimeLineAction(curTime, message1)); + byte[] message2 = SerialMessage.prepareMessageToFan(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_RIGHT, (char)intensityScale255); + timeLineActions.add(new TimeLineAction(curTime, message2)); + } + if (on && duration > 0){ + long timeDeactivate = curTime + (duration * 1000); + byte[] message1 = SerialMessage.prepareMessageToFan(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_LEFT, (char)0); + timeLineActions.add(new TimeLineAction(timeDeactivate, message1)); + byte[] message2 = SerialMessage.prepareMessageToFan(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_RIGHT, (char)0); + timeLineActions.add(new TimeLineAction(timeDeactivate, message2)); + } + } + else { + if (fade > 0){ + HashMap fadePairs = HelperFunctions.obtainFadeFanOrVibration(on, curTime, intensityScale255, fade); + for (Long key : fadePairs.keySet()) { + byte[] message = SerialMessage.prepareMessageToFan(location, (char)fadePairs.get(key).intValue()); + timeLineActions.add(new TimeLineAction(key, message)); + } + } + else { + byte[] message = SerialMessage.prepareMessageToFan(location, (char)intensityScale255); + timeLineActions.add(new TimeLineAction(curTime, message)); + } + if (on && duration > 0){ + long timeDeactivate = curTime + (duration * 1000); + byte[] message = SerialMessage.prepareMessageToFan(location, (char)0); + timeLineActions.add(new TimeLineAction(timeDeactivate, message)); + } + } + } + else if (ebt instanceof VibrationType) { + if (location.equals("") || location.startsWith(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_EVERYWHERE)){ + if (fade > 0){ + HashMap fadePairs = HelperFunctions.obtainFadeFanOrVibration(on, curTime, intensityScale255, fade); + for (Long key : fadePairs.keySet()) { + byte[] message1 = SerialMessage.prepareMessageToVibration(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_LEFT, (char)fadePairs.get(key).intValue()); + timeLineActions.add(new TimeLineAction(key, message1)); + byte[] message2 = SerialMessage.prepareMessageToVibration(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_RIGHT, (char)fadePairs.get(key).intValue()); + timeLineActions.add(new TimeLineAction(key, message2)); + } + } + else { + byte[] message1 = SerialMessage.prepareMessageToVibration(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_LEFT, (char)intensityScale255); + timeLineActions.add(new TimeLineAction(curTime, message1)); + byte[] message2 = SerialMessage.prepareMessageToVibration(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_RIGHT, (char)intensityScale255); + timeLineActions.add(new TimeLineAction(curTime, message2)); + } + if (on && duration > 0){ + long timeDeactivate = curTime + (duration * 1000); + byte[] message1 = SerialMessage.prepareMessageToVibration(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_LEFT, (char)0); + timeLineActions.add(new TimeLineAction(timeDeactivate, message1)); + byte[] message2 = SerialMessage.prepareMessageToVibration(ClassificationScheme.LOCATIONURIBASE +ClassificationScheme.LOC_X_RIGHT, (char)0); + timeLineActions.add(new TimeLineAction(timeDeactivate, message2)); + } + } + else { + if (fade > 0){ + HashMap fadePairs = HelperFunctions.obtainFadeFanOrVibration(on, curTime, intensityScale255, fade); + for (Long key : fadePairs.keySet()) { + byte[] message = SerialMessage.prepareMessageToVibration(location, (char)fadePairs.get(key).intValue()); + timeLineActions.add(new TimeLineAction(key, message)); + } + } + else { + byte[] message = SerialMessage.prepareMessageToVibration(location, (char)intensityScale255); + timeLineActions.add(new TimeLineAction(curTime, message)); + } + if (on && duration > 0){ + long timeDeactivate = curTime + (duration * 1000); + byte[] message = SerialMessage.prepareMessageToVibration(location, (char)0); + timeLineActions.add(new TimeLineAction(timeDeactivate, message)); + } + } + } + } +} \ No newline at end of file diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/serial/SerialCom.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/serial/SerialCom.java new file mode 100644 index 0000000..833be6d --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/serial/SerialCom.java @@ -0,0 +1,80 @@ +package br.ufes.inf.lprm.sensoryeffect.renderer.serial; + +import gnu.io.CommPort; +import gnu.io.CommPortIdentifier; +import gnu.io.NoSuchPortException; +import gnu.io.PortInUseException; +import gnu.io.SerialPort; +import gnu.io.UnsupportedCommOperationException; + +import java.io.OutputStream; + +import br.ufes.inf.lprm.sensoryeffect.renderer.SERendererDevice; +import br.ufes.inf.lprm.sensoryeffect.renderer.timer.TimeLine; + +public class SerialCom { + + private SerialPort serialPort; + private boolean connected = false; + public static String port = "COM3"; + public static boolean emulateDevices = true; + + public SerialCom(){ + if (!emulateDevices){ + connect(port); + } + } + + private void connect(String portName) { + try { + CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); + if(portIdentifier.isCurrentlyOwned()) { + connected = false; + } + else { + int timeout = 2000; + CommPort commPort = portIdentifier.open(this.getClass().getName(), timeout); + + if(commPort instanceof SerialPort) { + serialPort = ( SerialPort )commPort; + serialPort.setSerialPortParams( 9600, + SerialPort.DATABITS_8, + SerialPort.STOPBITS_1, + SerialPort.PARITY_NONE ); + connected = true; + } + else { + connected = false; + } + } + } + catch (UnsatisfiedLinkError e) { + System.err.println("ERROR: RXTX not configured properly"); + } catch (UnsupportedCommOperationException e) { + System.err.println("ERROR: Unsupported operation."); + e.printStackTrace(); + } catch (PortInUseException e) { + System.err.println("ERROR: Port in use."); + } catch (NoSuchPortException e) { + System.err.println("ERROR: Port unavailable."); + } catch (Exception e){ + e.printStackTrace(); + } + } + + protected void sendMessage(byte[] message) throws Exception{ + if (!emulateDevices){ + if (connected){ + OutputStream out = serialPort.getOutputStream(); + out.write(message); + } + else { + connect(port); + OutputStream out = serialPort.getOutputStream(); + out.write(message); + } + } + if (SERendererDevice.debugMode) + System.out.println(TimeLine.getCurrentTime() + ": " + SerialMessage.messageToString(message)); + } +} \ No newline at end of file diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/serial/SerialMessage.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/serial/SerialMessage.java new file mode 100644 index 0000000..f1f38d3 --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/serial/SerialMessage.java @@ -0,0 +1,171 @@ +package br.ufes.inf.lprm.sensoryeffect.renderer.serial; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.text.SimpleDateFormat; + +import br.ufes.inf.lprm.sensoryeffect.renderer.SERendererDevice; +import br.ufes.inf.lprm.sensoryeffect.renderer.parser.ClassificationScheme; + +public class SerialMessage { + + public static SerialCom serialCom = new SerialCom(); + + @SuppressWarnings("unused") + private void log(String text){ + try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("SER_log.txt", true)))) { + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); + out.println(sdf.toString() + ": "+ text); + }catch (IOException e) { + } + } + + public static String byteArrayToString(byte[] bytes) { + StringBuilder ret = new StringBuilder(); + for(int i=0; i timeLineActions = null; + private Vector tempTimeLineActions = null; + private Comparator comp = new Comparator() { + public int compare(TimeLineAction ta1, TimeLineAction ta2) { + return ta1.getOccursTime().compareTo(ta2.getOccursTime()); + } + }; + + @Override + public void run() { + if (status.getId() == Status.PLAYING.getId() && currentTime <= duration){ + currentTime += 1; + SERendererService.setLocalCurrentTime(currentTime); + if (tempTimeLineActions != null){ + int indexOfAction = Collections.binarySearch(tempTimeLineActions, new TimeLineAction(currentTime,null), comp); + while (indexOfAction > -1){ + SerialMessage.sendMessage(tempTimeLineActions.get(indexOfAction).getSerialMessage()); + tempTimeLineActions.remove(indexOfAction); + indexOfAction = Collections.binarySearch(tempTimeLineActions, new TimeLineAction(currentTime,null), comp); + } + } + if (SERendererDevice.debugMode) + System.out.println(currentTime); + } + } + + public void stop(){ + status = Status.STOPPED; + currentTime = 0; + tempTimeLineActions.clear(); + tempTimeLineActions.addAll(timeLineActions); + SerialMessage.resetDevices(); + } + + public void pause(long newCurrentTime){ + status = Status.PAUSED; + if (SERendererDevice.debugMode) + System.out.println(">>> SetPause on " + currentTime); + currentTime = newCurrentTime; + if (SERendererDevice.debugMode) + System.out.println(">>> PAUSE on " + newCurrentTime); + } + + public void play(long newCurrentTime){ + status = Status.PLAYING; + if (SERendererDevice.debugMode) + System.out.println(">>> SetPlay on " + currentTime); + currentTime = newCurrentTime; + if (SERendererDevice.debugMode) + System.out.println(">>> PLAY on " + newCurrentTime); + } + + public void setCurrentTime(long newCurrentTime){ + tempTimeLineActions.clear(); + tempTimeLineActions.addAll(timeLineActions); + if (SERendererDevice.debugMode) + System.out.println(">>> SetCurrentTime on " + currentTime); + currentTime = newCurrentTime; + if (SERendererDevice.debugMode) + System.out.println(">>> CURRENT TIME " + newCurrentTime); + } + + public static long getCurrentTime(){ + return currentTime; + } + + public void setActions(Vector timeLineActions, long duration){ + SerialMessage.resetDevices(); + this.timeLineActions = timeLineActions; + tempTimeLineActions = new Vector(); + tempTimeLineActions.clear(); + tempTimeLineActions.addAll(timeLineActions); + TimeLine.duration = duration + DELAY_TO_FADE; + if (SERendererDevice.debugMode){ + System.out.println("Duration (+DELAY): " + duration + " ("+DELAY_TO_FADE+")"); + System.out.println("---"); + } + } + + public static long getDuration(){ + return duration; + } + + public enum Status{ + PAUSED(2), + STOPPED(0), + PLAYING(1); + Status(int id) { + this.id = id; + } + private int id; + public int getId() { + return id; + } + } +} diff --git a/src/br/ufes/inf/lprm/sensoryeffect/renderer/timer/TimeLineAction.java b/src/br/ufes/inf/lprm/sensoryeffect/renderer/timer/TimeLineAction.java new file mode 100644 index 0000000..5f98885 --- /dev/null +++ b/src/br/ufes/inf/lprm/sensoryeffect/renderer/timer/TimeLineAction.java @@ -0,0 +1,25 @@ +package br.ufes.inf.lprm.sensoryeffect.renderer.timer; + +public class TimeLineAction { + + public TimeLineAction(long occursTime, byte[] serialMessage){ + this.occursTime = occursTime; + this.serialMessage = serialMessage; + } + + private long occursTime; + private byte[] serialMessage; + + public Long getOccursTime() { + return occursTime; + } + public void setOccursTime(long occursTime) { + this.occursTime = occursTime; + } + public byte[] getSerialMessage() { + return serialMessage; + } + public void setSerialMessage(byte[] serialMessage) { + this.serialMessage = serialMessage; + } +}