15bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni/* 25bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * Copyright (C) 2017 The Android Open Source Project 35bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * 45bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 55bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * in compliance with the License. You may obtain a copy of the License at 65bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * 75bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * http://www.apache.org/licenses/LICENSE-2.0 85bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * 95bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * Unless required by applicable law or agreed to in writing, software distributed under the License 105bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 115bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * or implied. See the License for the specific language governing permissions and limitations under 125bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni * the License. 135bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni */ 145bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 155bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Nipackage com.android.rs.test; 165bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 175bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Niimport android.content.Context; 185bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Niimport android.renderscript.Allocation; 195bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Niimport android.renderscript.Element; 205bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Niimport android.renderscript.RenderScript; 215bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Niimport android.renderscript.RSIllegalArgumentException; 225bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Niimport android.renderscript.ScriptIntrinsicBlur; 235bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Niimport android.renderscript.Type; 245bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Niimport android.util.Log; 255bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 265bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni// Tests that ScriptIntrinsicBlur properly throws exception if input or output 275bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni// are set to 1D Allocations. 285bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Nipublic class UT_blur_validation extends UnitTest { 295bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni private static final String TAG = "ScriptIntrinsicBlur validation"; 305bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni private RenderScript RS; 315bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni private Allocation input1D, output1D; 325bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni private Allocation input2D, output2D; 335bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni private ScriptIntrinsicBlur scriptBlur; 345bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 355bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni protected UT_blur_validation(RSTestCore rstc, Context ctx) { 365bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni super(rstc, TAG, ctx); 375bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni } 385bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 395bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni private void cleanup() { 405bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni RS.finish(); 415bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni input1D.destroy(); 425bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni input2D.destroy(); 435bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni output1D.destroy(); 445bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni output2D.destroy(); 455bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni scriptBlur.destroy(); 465bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni RS.destroy(); 475bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni } 485bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 495bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni public void run() { 505bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni RS = RenderScript.create(mCtx); 515bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 525bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni final int width = 100; 535bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni final int height = 100; 545bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 555bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni input1D = Allocation.createSized(RS, 565bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni Element.U8(RS), 575bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni width * height, 585bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni Allocation.USAGE_SCRIPT); 595bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 605bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni output1D = Allocation.createTyped(RS, input1D.getType()); 615bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 625bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni Type.Builder typeBuilder = new Type.Builder(RS, Element.U8(RS)); 635bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni typeBuilder.setX(width); 645bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni typeBuilder.setY(height); 655bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni Type ty = typeBuilder.create(); 665bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 675bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni input2D = Allocation.createTyped(RS, ty); 685bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni output2D = Allocation.createTyped(RS, ty); 695bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 705bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni scriptBlur = ScriptIntrinsicBlur.create(RS, Element.U8(RS)); 715bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 725bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni scriptBlur.setRadius(25f); 735bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni boolean failed = false; 745bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni try { 755bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni scriptBlur.setInput(input1D); 765bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni } catch (RSIllegalArgumentException e) { 775bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni scriptBlur.setInput(input2D); 785bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni try { 795bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni scriptBlur.forEach(output1D); 805bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni } catch (RSIllegalArgumentException e1) { 815bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni scriptBlur.forEach(output2D); 825bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni cleanup(); 835bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni passTest(); 845bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni return; 855bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni } 865bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni Log.e(TAG, "setting 1d output does not trigger exception"); 875bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni cleanup(); 885bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni failTest(); 895bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni return; 905bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni } 915bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni 925bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni Log.e(TAG, "setting 1d input does not trigger exception"); 935bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni cleanup(); 945bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni failTest(); 955bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni } 965bf533dbfe2dc1c92e2fe3e90776eaa1db03771cYang Ni} 97