10ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams/* 20ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * Copyright (C) 2014 The Android Open Source Project 30ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * 40ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 50ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * you may not use this file except in compliance with the License. 60ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * You may obtain a copy of the License at 70ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * 80ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 90ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * 100ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * Unless required by applicable law or agreed to in writing, software 110ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 120ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * See the License for the specific language governing permissions and 140ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams * limitations under the License. 150ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams */ 160ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 170ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samspackage com.android.rs.imagejb; 180ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 190ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport java.lang.Math; 200ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 210ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.renderscript.Allocation; 220ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.renderscript.Element; 230ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.renderscript.Matrix4f; 240ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.renderscript.RenderScript; 250ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.renderscript.Script; 260ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.renderscript.ScriptC; 270ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.renderscript.ScriptIntrinsicResize; 280ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.renderscript.Type; 290ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samsimport android.util.Log; 300ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 310ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Samspublic class Resize extends TestBase { 320ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams private ScriptC_resize mScript; 330ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams private ScriptIntrinsicResize mIntrinsic; 340ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 350ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams private Allocation mScratchAllocation; 360ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams private int mWidth; 370ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams private int mHeight; 380ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams private boolean mUseIntrinsic; 390ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 400ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams public Resize(boolean useIntrinsic) { 410ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mUseIntrinsic = useIntrinsic; 420ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams } 430ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 440ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams public void createTest(android.content.res.Resources res) { 450ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mWidth = mInPixelsAllocation.getType().getX(); 460ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mHeight = mInPixelsAllocation.getType().getY(); 470ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams float scale = 1.f / 32.f; 480ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 490ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams Type t = Type.createXY(mRS, mInPixelsAllocation.getElement(), 500ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams (int)(mWidth * scale), (int)(mHeight * scale)); 510ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScratchAllocation = Allocation.createTyped(mRS, t); 520ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 530ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams // make small buffer 540ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript = new ScriptC_resize(mRS); 550ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.set_gIn(mInPixelsAllocation); 560ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.set_gWidthIn(mWidth); 570ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.set_gHeightIn(mHeight); 580ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.set_scale(1.f / scale); 590ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.forEach_nearest(mScratchAllocation); 600ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 610ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams // setup normal ops 620ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.set_gIn(mScratchAllocation); 630ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.set_gWidthIn(t.getX()); 640ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.set_gHeightIn(t.getY()); 650ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.set_scale(scale); 660ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams //mScript.forEach_nearest(mScratchAllocation); 670ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 680ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mIntrinsic = ScriptIntrinsicResize.create(mRS); 690ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mIntrinsic.setInput(mScratchAllocation); 700ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams } 710ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 720ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams public void runTest() { 730ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams if (mUseIntrinsic) { 740ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mIntrinsic.forEach_bicubic(mOutPixelsAllocation); 750ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams } else { 760ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams mScript.forEach_bicubic(mOutPixelsAllocation); 770ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams //mScript.forEach_nearest(mOutPixelsAllocation); 780ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams } 790ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams } 800ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams 810ef64c5373a119eb73cbf7b1f7cf7d1da12d97d3Jason Sams} 82