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 * 23932e78e9903342e3494983fd3463084caab4ba42Tim Murray * The input allocation should be supplied in a supported YUV format 24932e78e9903342e3494983fd3463084caab4ba42Tim Murray * as a YUV element Allocation. The output is RGBA; the alpha channel 25932e78e9903342e3494983fd3463084caab4ba42Tim Murray * will be set to 255. 26e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams */ 27e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Samspublic final class ScriptIntrinsicYuvToRGB extends ScriptIntrinsic { 28e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams private Allocation mInput; 29e69e9e6b6e77d6c7b1ba2719b7aa7001bbbabb32Jason Sams 307a629fac82f88126642081b4474879f6a883e313Tim Murray ScriptIntrinsicYuvToRGB(long 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 * 39c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * @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 467a629fac82f88126642081b4474879f6a883e313Tim Murray long 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) { 69949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes forEach(0, (Allocation) 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