13a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams/*
23a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * Copyright (C) 2012 The Android Open Source Project
33a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams *
43a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
53a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * you may not use this file except in compliance with the License.
63a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * You may obtain a copy of the License at
73a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams *
83a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
93a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams *
103a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * Unless required by applicable law or agreed to in writing, software
113a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
123a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * See the License for the specific language governing permissions and
143a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * limitations under the License.
153a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams */
163a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
173a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samspackage com.android.rs.image;
183a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
193a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samsimport java.lang.Math;
203a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
213a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samsimport android.renderscript.Allocation;
223a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samsimport android.renderscript.Element;
233a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samsimport android.renderscript.RenderScript;
243a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samsimport android.renderscript.ScriptIntrinsicLUT;
253a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samsimport android.util.Log;
263a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
273a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samspublic class CrossProcess extends TestBase {
283a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams    private ScriptIntrinsicLUT mIntrinsic;
293a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
303a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams    public void createTest(android.content.res.Resources res) {
313a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams        mIntrinsic = ScriptIntrinsicLUT.create(mRS, Element.U8_4(mRS));
323a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams        for (int ct=0; ct < 256; ct++) {
333a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            float f = ((float)ct) / 255.f;
343a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
353a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            float r = f;
363a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            if (r < 0.5f) {
373a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams                r = 4.0f * r * r * r;
383a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            } else {
393a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams                r = 1.0f - r;
403a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams                r = 1.0f - (4.0f * r * r * r);
413a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            }
423a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            mIntrinsic.setRed(ct, (int)(r * 255.f + 0.5f));
433a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
443a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            float g = f;
453a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            if (g < 0.5f) {
463a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams                g = 2.0f * g * g;
473a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            } else {
483a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams                g = 1.0f - g;
493a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams                g = 1.0f - (2.0f * g * g);
503a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            }
513a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            mIntrinsic.setGreen(ct, (int)(g * 255.f + 0.5f));
523a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
533a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            float b = f * 0.5f + 0.25f;
543a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams            mIntrinsic.setBlue(ct, (int)(b * 255.f + 0.5f));
553a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams        }
563a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
573a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams    }
583a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
593a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams    public void runTest() {
603a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams        mIntrinsic.forEach(mInPixelsAllocation, mOutPixelsAllocation);
613a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams    }
623a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams
633a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams}
64