Advertisement
JetSerge

Hue Algorithm

Mar 6th, 2014
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.87 KB | None | 0 0
  1. package com.tpvision.ambilightplushue.helpers;
  2.  
  3. import java.util.concurrent.atomic.AtomicInteger;
  4.  
  5. public class Algorithm
  6. {
  7.   private static final float MAX_BRI_0 = 0.3F;
  8.   private static final float MAX_BRI_SLIDER_DYN = 0.7F;
  9.   private static final float MAX_SAT = 1.25F;
  10.   private static final float MAX_SAT_SLIDER = 0.8F;
  11.   private static final float MAX_TT = 10.0F;
  12.   private static final float MAX_TT_DELTA = 8.0F;
  13.   private static final float MAX_TT_SLIDER = 1.0F;
  14.   private static final float MIN_BRI_IN = 0.2F;
  15.   private static final float MIN_SAT = 0.85F;
  16.   private static final float MIN_SAT_SLIDER = 0.2F;
  17.   private static final float MIN_TT = 3.0F;
  18.   private static final float MIN_TT_DELTA = 2.0F;
  19.   private static final float MIN_TT_SLIDER = 0.2F;
  20.   public static final int MODEL_DEFAULT = -1;
  21.   public static final int MODEL_TYPE_HUE = 0;
  22.   public static final int MODEL_TYPE_LIVING_COLOR = 1;
  23.   private static final float XB_AL = 0.270844F;
  24.   private static final float XG_AL = 0.301434F;
  25.   private static final float XR_AL = 0.399454F;
  26.   private static final float YB_AL = 0.130816F;
  27.   private static final float YG_AL = 0.666385F;
  28.   private static final float YR_AL = 0.202799F;
  29.   private static final float ZB_AL = 1.440815F;
  30.   private static final float ZG_AL = 0.108732F;
  31.   private static final float ZR_AL = 0.012291F;
  32.  
  33.   private static float clip(float paramFloat1, float paramFloat2, float paramFloat3)
  34.   {
  35.     if (paramFloat1 > paramFloat3) {
  36.       return paramFloat3;
  37.     }
  38.     if (paramFloat1 < paramFloat2) {
  39.       return paramFloat2;
  40.     }
  41.     return paramFloat1;
  42.   }
  43.  
  44.   public static float[] convertRGBtoXY_final(float paramFloat1, float paramFloat2, float paramFloat3, int paramInt1, int paramInt2, int paramInt3, AtomicInteger paramAtomicInteger1, AtomicInteger paramAtomicInteger2, int paramInt4, int paramInt5, String paramString)
  45.   {
  46.     float f1 = paramInt5 / 10.0F;
  47.     float f2 = Math.max(0.0F, Math.min(1.0F, paramInt4 / 10.0F));
  48.     float f3 = Math.max(0.0F, Math.min(1.0F, f1));
  49.     float f4 = clip(fun_y(f2, 0.2F, 0.8F, 0.85F, 1.25F), 0.85F, 1.25F);
  50.     float f5 = Math.max(f4 - 1.0F, 0.0F);
  51.     float f6 = Math.max(Math.max(paramFloat1, paramFloat2), paramFloat3);
  52.     if (f4 < 1.0F)
  53.     {
  54.       float f33 = 0.2126F * paramFloat1 + 0.7152F * paramFloat2 + 0.0722F * paramFloat3;
  55.       paramFloat1 = f4 * paramFloat1 + f33 * (1.0F - f4);
  56.       paramFloat2 = f4 * paramFloat2 + f33 * (1.0F - f4);
  57.       paramFloat3 = f4 * paramFloat3 + f33 * (1.0F - f4);
  58.     }
  59.     float f7 = 0.399454F * paramFloat1 + 0.301434F * paramFloat2 + 0.270844F * paramFloat3;
  60.     float f8 = 0.202799F * paramFloat1 + 0.666385F * paramFloat2 + 0.130816F * paramFloat3;
  61.     float f9 = 0.012291F * paramFloat1 + 0.108732F * paramFloat2 + 1.440815F * paramFloat3 + (f7 + f8);
  62.     float f10;
  63.     float f11;
  64.     float f12;
  65.     float f26;
  66.     float f27;
  67.     float f28;
  68.     float f29;
  69.     label386:
  70.     float f31;
  71.     float f32;
  72.     if (f9 > 1.0E-006F)
  73.     {
  74.       f10 = f7 / f9;
  75.       f11 = f8 / f9;
  76.       f12 = f10 + f5 * (f10 - 0.3127F);
  77.       f13 = f11 + f5 * (f11 - 0.329F);
  78.       float f14 = 1.0F - f12 - f13;
  79.       if (getModelType(paramString) == 0)
  80.       {
  81.         float f23 = 3.5784F * f12 + -2.7387F * f13 + -0.6154F * f14;
  82.         float f24 = -1.0029F * f12 + 2.1013F * f13 + 0.1052F * f14;
  83.         float f25 = 0.1451F * f12 + -0.3176F * f13 + 1.4407F * f14;
  84.         f26 = Math.max(0.0F, f23);
  85.         f27 = Math.max(0.0F, f24);
  86.         f28 = Math.max(0.0F, f25);
  87.         f29 = f27;
  88.         if ((f28 >= f27) || (f27 >= f26)) {
  89.           break label719;
  90.         }
  91.         f29 = f27 - 0.5F * (f26 - f27) * (f27 - f28) / (f26 - f28);
  92.         float f30 = 0.4407F * f26 + 0.5962F * f29 + 0.1447F * f28;
  93.         f31 = 0.2102F * f26 + 0.7551F * f29 + 0.0347F * f28;
  94.         f32 = 0.002F * f26 + 0.1064F * f29 + 0.6872F * f28 + (f30 + f31);
  95.         if (f32 <= 1.0E-006F) {
  96.           break label763;
  97.         }
  98.         f12 = f30 / f32;
  99.       }
  100.     }
  101.     for (float f13 = f31 / f32;; f13 = 0.31F)
  102.     {
  103.       getModelType(paramString);
  104.       float[] arrayOfFloat1 = desaturate(f12, f13, 0.33F, 0.31F, f6, 0.1F);
  105.       float[] arrayOfFloat2 = ColorGamut.fixXYColor(arrayOfFloat1[0], arrayOfFloat1[1], paramString);
  106.       float f15 = arrayOfFloat2[0];
  107.       float f16 = arrayOfFloat2[1];
  108.       float f17 = (float)Math.sqrt(f6);
  109.       float f18 = f3 * Math.min(f2 / 0.7F, 1.0F);
  110.       float f19 = Math.max(0.0F, f3 - f18);
  111.       float f20 = f19 + Math.min(1.0F, f17 * f18);
  112.       if (f17 < 0.2F)
  113.       {
  114.         float f22 = fun_y(f17, 0.0F, 0.2F, 0.3F, f19 + Math.min(1.0F, 0.2F * f18));
  115.         f20 = Math.min(f20, f22);
  116.       }
  117.       float f21 = f20;
  118.       paramAtomicInteger2.set((int)clip(fun_y(f2, 0.2F, 1.0F, 10.0F + 8.0F * (paramInt2 / 2), 3.0F + 2.0F * (paramInt2 / 2)), 3.0F + 2.0F * (paramInt2 / 2), 10.0F + 8.0F * (paramInt2 / 2)));
  119.       paramAtomicInteger1.set((int)(255.0F * Math.min(Math.max(f21 + 0.0F, 0.0F), 1.0F)));
  120.       return new float[] { f15, f16 };
  121.       f10 = 0.33F;
  122.       f11 = 0.31F;
  123.       break;
  124.       label719:
  125.       if ((f26 >= f27) || (f27 >= f28)) {
  126.         break label386;
  127.       }
  128.       f29 = f27 - 0.5F * (f28 - f27) * (f27 - f26) / (f28 - f26);
  129.       break label386;
  130.       label763:
  131.       f12 = 0.33F;
  132.     }
  133.   }
  134.  
  135.   private static float[] desaturate(float paramFloat1, float paramFloat2, float paramFloat3, float paramFloat4, float paramFloat5, float paramFloat6)
  136.   {
  137.     float f1 = paramFloat1;
  138.     float f2 = paramFloat2;
  139.     if (paramFloat5 < paramFloat6)
  140.     {
  141.       float f3 = paramFloat5 / paramFloat6;
  142.       f1 = paramFloat1 * f3 + paramFloat3 * (1.0F - f3);
  143.       f2 = paramFloat2 * f3 + paramFloat4 * (1.0F - f3);
  144.     }
  145.     return new float[] { f1, f2 };
  146.   }
  147.  
  148.   private static float fun_y(float paramFloat1, float paramFloat2, float paramFloat3, float paramFloat4, float paramFloat5)
  149.   {
  150.     boolean bool = paramFloat3 - paramFloat2 < 0.0F;
  151.     float f1 = 0.0F;
  152.     if (bool)
  153.     {
  154.       float f2 = (paramFloat5 - paramFloat4) / (paramFloat3 - paramFloat2);
  155.       f1 = paramFloat4 - f2 * paramFloat2 + f2 * paramFloat1;
  156.     }
  157.     return f1;
  158.   }
  159.  
  160.   public static int getModelType(String paramString)
  161.   {
  162.     if ((paramString.equals("LCT001")) || (paramString.equals("LCT002")) || (paramString.equals("LCT003"))) {
  163.       return 0;
  164.     }
  165.     if ((paramString.equals("LLC001")) || (paramString.equals("LLC005")) || (paramString.equals("LLC006")) || (paramString.equals("LLC007")) || (paramString.equals("LLC011")) || (paramString.equals("LLC012")) || (paramString.equals("LLC013")) || (paramString.equals("LLC014")) || (paramString.equals("LLS001")) || (paramString.equals("LST001"))) {
  166.       return 1;
  167.     }
  168.     return -1;
  169.   }
  170. }
  171.  
  172.  
  173.  
  174. /* Location:           D:\projects\ambihue\tpvision.jar
  175.  
  176.  * Qualified Name:     com.tpvision.ambilightplushue.helpers.Algorithm
  177.  
  178.  * JD-Core Version:    0.7.0.1
  179.  
  180.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement