19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2012 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.rs.image2; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.lang.Math; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.support.v8.renderscript.*; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.SeekBar; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class LevelsV4 extends TestBase { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ScriptC_levels_relaxed mScriptR; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ScriptC_levels_full mScriptF; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mInBlack = 0.0f; 31bc101806249eb883f89c4a770a8c27f9ac315837Raphael private float mOutBlack = 0.0f; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mInWhite = 255.0f; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mOutWhite = 255.0f; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mSaturation = 1.0f; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Matrix3f satMatrix = new Matrix3f(); 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mInWMinInB; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mOutWMinOutB; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mOverInWMinInB; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mUseFull; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mUseV4; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LevelsV4(boolean useFull, boolean useV4) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUseFull = useFull; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUseV4 = useV4; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setLevels() { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInWMinInB = mInWhite - mInBlack; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOutWMinOutB = mOutWhite - mOutBlack; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOverInWMinInB = 1.f / mInWMinInB; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptR.set_inBlack(mInBlack); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptR.set_outBlack(mOutBlack); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptR.set_inWMinInB(mInWMinInB); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptR.set_outWMinOutB(mOutWMinOutB); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptR.set_overInWMinInB(mOverInWMinInB); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptF.set_inBlack(mInBlack); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptF.set_outBlack(mOutBlack); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptF.set_inWMinInB(mInWMinInB); 63bc101806249eb883f89c4a770a8c27f9ac315837Raphael mScriptF.set_outWMinOutB(mOutWMinOutB); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptF.set_overInWMinInB(mOverInWMinInB); 65bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 66bc101806249eb883f89c4a770a8c27f9ac315837Raphael 67bc101806249eb883f89c4a770a8c27f9ac315837Raphael private void setSaturation() { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float rWeight = 0.299f; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float gWeight = 0.587f; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float bWeight = 0.114f; 71bc101806249eb883f89c4a770a8c27f9ac315837Raphael float oneMinusS = 1.0f - mSaturation; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project satMatrix.set(0, 0, oneMinusS * rWeight + mSaturation); 74bc101806249eb883f89c4a770a8c27f9ac315837Raphael satMatrix.set(0, 1, oneMinusS * rWeight); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project satMatrix.set(0, 2, oneMinusS * rWeight); 76bc101806249eb883f89c4a770a8c27f9ac315837Raphael satMatrix.set(1, 0, oneMinusS * gWeight); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project satMatrix.set(1, 1, oneMinusS * gWeight + mSaturation); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project satMatrix.set(1, 2, oneMinusS * gWeight); 79bc101806249eb883f89c4a770a8c27f9ac315837Raphael satMatrix.set(2, 0, oneMinusS * bWeight); 80bc101806249eb883f89c4a770a8c27f9ac315837Raphael satMatrix.set(2, 1, oneMinusS * bWeight); 81bc101806249eb883f89c4a770a8c27f9ac315837Raphael satMatrix.set(2, 2, oneMinusS * bWeight + mSaturation); 82bc101806249eb883f89c4a770a8c27f9ac315837Raphael mScriptR.set_colorMat(satMatrix); 83bc101806249eb883f89c4a770a8c27f9ac315837Raphael mScriptF.set_colorMat(satMatrix); 84bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 85bc101806249eb883f89c4a770a8c27f9ac315837Raphael 86bc101806249eb883f89c4a770a8c27f9ac315837Raphael public boolean onBar1Setup(SeekBar b, TextView t) { 87bc101806249eb883f89c4a770a8c27f9ac315837Raphael b.setProgress(50); 88bc101806249eb883f89c4a770a8c27f9ac315837Raphael t.setText("Saturation"); 89bc101806249eb883f89c4a770a8c27f9ac315837Raphael return true; 90bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 91bc101806249eb883f89c4a770a8c27f9ac315837Raphael public boolean onBar2Setup(SeekBar b, TextView t) { 92bc101806249eb883f89c4a770a8c27f9ac315837Raphael b.setMax(128); 93bc101806249eb883f89c4a770a8c27f9ac315837Raphael b.setProgress(0); 94bc101806249eb883f89c4a770a8c27f9ac315837Raphael t.setText("In Black"); 95bc101806249eb883f89c4a770a8c27f9ac315837Raphael return true; 96bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 97bc101806249eb883f89c4a770a8c27f9ac315837Raphael public boolean onBar3Setup(SeekBar b, TextView t) { 98bc101806249eb883f89c4a770a8c27f9ac315837Raphael b.setMax(128); 99280372e2c7db128254b5f65395ea843ef285729eRaphael b.setProgress(0); 100bc101806249eb883f89c4a770a8c27f9ac315837Raphael t.setText("Out Black"); 101bc101806249eb883f89c4a770a8c27f9ac315837Raphael return true; 102bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 103bc101806249eb883f89c4a770a8c27f9ac315837Raphael public boolean onBar4Setup(SeekBar b, TextView t) { 104bc101806249eb883f89c4a770a8c27f9ac315837Raphael b.setMax(128); 105bc101806249eb883f89c4a770a8c27f9ac315837Raphael b.setProgress(128); 106bc101806249eb883f89c4a770a8c27f9ac315837Raphael t.setText("Out White"); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onBar5Setup(SeekBar b, TextView t) { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.setMax(128); 111bc101806249eb883f89c4a770a8c27f9ac315837Raphael b.setProgress(128); 112bc101806249eb883f89c4a770a8c27f9ac315837Raphael t.setText("Out White"); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onBar1Changed(int progress) { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSaturation = (float)progress / 50.0f; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSaturation(); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onBar2Changed(int progress) { 121bc101806249eb883f89c4a770a8c27f9ac315837Raphael mInBlack = (float)progress; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLevels(); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 124bc101806249eb883f89c4a770a8c27f9ac315837Raphael public void onBar3Changed(int progress) { 125bc101806249eb883f89c4a770a8c27f9ac315837Raphael mOutBlack = (float)progress; 126bc101806249eb883f89c4a770a8c27f9ac315837Raphael setLevels(); 127bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 128bc101806249eb883f89c4a770a8c27f9ac315837Raphael public void onBar4Changed(int progress) { 129bc101806249eb883f89c4a770a8c27f9ac315837Raphael mInWhite = (float)progress + 127.0f; 130bc101806249eb883f89c4a770a8c27f9ac315837Raphael setLevels(); 131bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onBar5Changed(int progress) { 133bc101806249eb883f89c4a770a8c27f9ac315837Raphael mOutWhite = (float)progress + 127.0f; 134bc101806249eb883f89c4a770a8c27f9ac315837Raphael setLevels(); 135bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 137bc101806249eb883f89c4a770a8c27f9ac315837Raphael public void createTest(android.content.res.Resources res) { 138bc101806249eb883f89c4a770a8c27f9ac315837Raphael mScriptR = new ScriptC_levels_relaxed(mRS, res, R.raw.levels_relaxed); 139bc101806249eb883f89c4a770a8c27f9ac315837Raphael mScriptF = new ScriptC_levels_full(mRS, res, R.raw.levels_full); 140bc101806249eb883f89c4a770a8c27f9ac315837Raphael setSaturation(); 141bc101806249eb883f89c4a770a8c27f9ac315837Raphael setLevels(); 142bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 143bc101806249eb883f89c4a770a8c27f9ac315837Raphael 144bc101806249eb883f89c4a770a8c27f9ac315837Raphael public void runTest() { 145bc101806249eb883f89c4a770a8c27f9ac315837Raphael if (mUseFull) { 146bc101806249eb883f89c4a770a8c27f9ac315837Raphael if (mUseV4) { 147bc101806249eb883f89c4a770a8c27f9ac315837Raphael mScriptF.forEach_root4(mInPixelsAllocation, mOutPixelsAllocation); 148bc101806249eb883f89c4a770a8c27f9ac315837Raphael } else { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptF.forEach_root(mInPixelsAllocation, mOutPixelsAllocation); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 151bc101806249eb883f89c4a770a8c27f9ac315837Raphael } else { 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mUseV4) { 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptR.forEach_root4(mInPixelsAllocation, mOutPixelsAllocation); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScriptR.forEach_root(mInPixelsAllocation, mOutPixelsAllocation); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project