16ab97682fd444586ee135912a4210417a1c8781bJason Sams/* 28fd5853c1c07c2fd3954b3c5e64702d70af31144Jason Sams * Copyright (C) 2012 The Android Open Source Project 36ab97682fd444586ee135912a4210417a1c8781bJason Sams * 46ab97682fd444586ee135912a4210417a1c8781bJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 56ab97682fd444586ee135912a4210417a1c8781bJason Sams * you may not use this file except in compliance with the License. 66ab97682fd444586ee135912a4210417a1c8781bJason Sams * You may obtain a copy of the License at 76ab97682fd444586ee135912a4210417a1c8781bJason Sams * 86ab97682fd444586ee135912a4210417a1c8781bJason Sams * http://www.apache.org/licenses/LICENSE-2.0 96ab97682fd444586ee135912a4210417a1c8781bJason Sams * 106ab97682fd444586ee135912a4210417a1c8781bJason Sams * Unless required by applicable law or agreed to in writing, software 116ab97682fd444586ee135912a4210417a1c8781bJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 126ab97682fd444586ee135912a4210417a1c8781bJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136ab97682fd444586ee135912a4210417a1c8781bJason Sams * See the License for the specific language governing permissions and 146ab97682fd444586ee135912a4210417a1c8781bJason Sams * limitations under the License. 156ab97682fd444586ee135912a4210417a1c8781bJason Sams */ 166ab97682fd444586ee135912a4210417a1c8781bJason Sams 176ab97682fd444586ee135912a4210417a1c8781bJason Samspackage android.renderscript; 186ab97682fd444586ee135912a4210417a1c8781bJason Sams 196ab97682fd444586ee135912a4210417a1c8781bJason Sams 206ab97682fd444586ee135912a4210417a1c8781bJason Sams/** 21e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * Intrinsic for converting an Android YUV buffer to RGB. 22e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * 23e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * The input allocation is supplied in NV21 format as a U8 24e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * element type. The output is RGBA, the alpha channel will be 25e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * set to 255. 26e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams */ 27e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Samspublic final class ScriptIntrinsicYuvToRGB extends ScriptIntrinsic { 28e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams private Allocation mInput; 29e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams 306ab97682fd444586ee135912a4210417a1c8781bJason Sams ScriptIntrinsicYuvToRGB(int id, RenderScript rs) { 316ab97682fd444586ee135912a4210417a1c8781bJason Sams super(id, rs); 326ab97682fd444586ee135912a4210417a1c8781bJason Sams } 336ab97682fd444586ee135912a4210417a1c8781bJason Sams 34e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams /** 35e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * Create an intrinsic for converting YUV to RGB. 36e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * 37e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * Supported elements types are {@link Element#U8_4} 38e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * 39e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * @param rs The Renderscript context 40e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * @param e Element type for output 41e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * 42e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * @return ScriptIntrinsicYuvToRGB 43e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams */ 44e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams public static ScriptIntrinsicYuvToRGB create(RenderScript rs, Element e) { 45e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams // 6 comes from RS_SCRIPT_INTRINSIC_YUV_TO_RGB in rsDefines.h 46e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams int id = rs.nScriptIntrinsicCreate(6, e.getID(rs)); 47e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams ScriptIntrinsicYuvToRGB si = new ScriptIntrinsicYuvToRGB(id, rs); 48e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams return si; 49e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams } 506ab97682fd444586ee135912a4210417a1c8781bJason Sams 516ab97682fd444586ee135912a4210417a1c8781bJason Sams 52e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams /** 53e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * Set the input yuv allocation, must be {@link Element#U8}. 54e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * 55e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * @param ain The input allocation. 56e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams */ 57e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams public void setInput(Allocation ain) { 58e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams mInput = ain; 59e6a7886674c167b4e17f6dc72d41d5b9c604cdd1Jason Sams setVar(0, ain); 60e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams } 616ab97682fd444586ee135912a4210417a1c8781bJason Sams 62e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams /** 63e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * Convert the image to RGB. 64e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * 65e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * @param aout Output allocation. Must match creation element 66e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * type. 67e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams */ 68e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams public void forEach(Allocation aout) { 69e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams forEach(0, null, aout, null); 70e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams } 716ab97682fd444586ee135912a4210417a1c8781bJason Sams 72e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams /** 73e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * Get a KernelID for this intrinsic kernel. 74e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * 75e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * @return Script.KernelID The KernelID object. 76e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams */ 77e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams public Script.KernelID getKernelID() { 78e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams return createKernelID(0, 2, null, null); 796ab97682fd444586ee135912a4210417a1c8781bJason Sams } 806ab97682fd444586ee135912a4210417a1c8781bJason Sams 81e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams /** 82e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * Get a FieldID for the input field of this intrinsic. 83e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * 84e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams * @return Script.FieldID The FieldID object. 85e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams */ 86e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams public Script.FieldID getFieldID_Input() { 87e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams return createFieldID(0, null); 88e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams } 896ab97682fd444586ee135912a4210417a1c8781bJason Sams} 90