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