1ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 2ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Copyright (C) 2012 The Android Open Source Project 3ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 4ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * you may not use this file except in compliance with the License. 6ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * You may obtain a copy of the License at 7ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 8ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 10ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Unless required by applicable law or agreed to in writing, software 11ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * See the License for the specific language governing permissions and 14ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * limitations under the License. 15ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 16ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 17ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspackage android.support.v8.renderscript; 18ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/** 21ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Intrinsic for converting an Android YUV buffer to RGB. 22ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 23ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * The input allocation is supplied in NV21 format as a U8 24ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * element type. The output is RGBA, the alpha channel will be 25ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * set to 255. 26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 27ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murraypublic class ScriptIntrinsicYuvToRGB extends ScriptIntrinsic { 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams private Allocation mInput; 29059fede7f200350b6131fc131f76248085485722Miao Wang // API level for the intrinsic 30059fede7f200350b6131fc131f76248085485722Miao Wang private static final int INTRINSIC_API_LEVEL = 19; 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 323d9b60c9ae71c4c09df0b4e59c825a5d631e1254Miao Wang ScriptIntrinsicYuvToRGB(long id, RenderScript rs) { 33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams super(id, rs); 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Create an intrinsic for converting YUV to RGB. 38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Supported elements types are {@link Element#U8_4} 40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 417d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param rs The RenderScript context 42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param e Element type for output 43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return ScriptIntrinsicYuvToRGB 45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public static ScriptIntrinsicYuvToRGB create(RenderScript rs, Element e) { 47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams // 6 comes from RS_SCRIPT_INTRINSIC_YUV_TO_RGB in rsDefines.h 48059fede7f200350b6131fc131f76248085485722Miao Wang long id; 49059fede7f200350b6131fc131f76248085485722Miao Wang boolean mUseIncSupp = rs.isUseNative() && 50059fede7f200350b6131fc131f76248085485722Miao Wang android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL; 51059fede7f200350b6131fc131f76248085485722Miao Wang 52059fede7f200350b6131fc131f76248085485722Miao Wang id = rs.nScriptIntrinsicCreate(6, e.getID(rs), mUseIncSupp); 53059fede7f200350b6131fc131f76248085485722Miao Wang 54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptIntrinsicYuvToRGB si = new ScriptIntrinsicYuvToRGB(id, rs); 55059fede7f200350b6131fc131f76248085485722Miao Wang si.setIncSupp(mUseIncSupp); 56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return si; 57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Set the input yuv allocation, must be {@link Element#U8}. 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The input allocation. 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void setInput(Allocation ain) { 66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mInput = ain; 671b370e358d16cc3b50b169511d6b387db09f972dJason Sams setVar(0, ain); 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 70ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Convert the image to RGB. 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout Output allocation. Must match creation element 74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * type. 75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEach(Allocation aout) { 773cf9bc14128f46345ba95294c30873ae52e89aecMiao Wang forEach(0, (Allocation) null, aout, null); 78ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 79ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 80ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 81ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for this intrinsic kernel. 82ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 83ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 84ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 85ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelID() { 86ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(0, 2, null, null); 87ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 88ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a FieldID for the input field of this intrinsic. 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.FieldID The FieldID object. 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.FieldID getFieldID_Input() { 95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createFieldID(0, null); 96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 98