10cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams/* 20cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * Copyright (C) 2012 The Android Open Source Project 30cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * 40cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 50cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * you may not use this file except in compliance with the License. 60cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * You may obtain a copy of the License at 70cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * 80cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 90cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * 100cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * Unless required by applicable law or agreed to in writing, software 110cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 120cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * See the License for the specific language governing permissions and 140cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams * limitations under the License. 150cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams */ 160cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 170cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samspackage com.android.rs.livepreview; 180cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 190cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.app.Activity; 200cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.graphics.Bitmap; 210cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.graphics.BitmapFactory; 220cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.graphics.Canvas; 230cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.os.Bundle; 240cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.graphics.SurfaceTexture; 250cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.renderscript.Allocation; 260cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.renderscript.Matrix3f; 270cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.renderscript.RenderScript; 280cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.util.Log; 290cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.view.TextureView; 300cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.view.View; 310cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 320cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.content.res.Resources; 330cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.renderscript.*; 340cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 350cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samsimport android.graphics.Bitmap; 360cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 370cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Samspublic class RsYuv 380cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams{ 390cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams private int mHeight; 400cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams private int mWidth; 410cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams private RenderScript mRS; 420cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams private Allocation mAllocationOut; 430cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams private Allocation mAllocationIn; 440cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams private ScriptC_yuv mScript; 451ebb7202b68d18025de8755d4f1df0c6544397e3Jason Sams private ScriptIntrinsicYuvToRGB mYuv; 460cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 470cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams RsYuv(RenderScript rs, Resources res, int width, int height) { 480cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mHeight = height; 490cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mWidth = width; 500cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mRS = rs; 510cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mScript = new ScriptC_yuv(mRS, res, R.raw.yuv); 520cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mScript.invoke_setSize(mWidth, mHeight); 530cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 541ebb7202b68d18025de8755d4f1df0c6544397e3Jason Sams mYuv = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(mRS)); 551ebb7202b68d18025de8755d4f1df0c6544397e3Jason Sams 560cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams Type.Builder tb = new Type.Builder(mRS, Element.RGBA_8888(mRS)); 570cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams tb.setX(mWidth); 580cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams tb.setY(mHeight); 590cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 600cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mAllocationOut = Allocation.createTyped(rs, tb.create()); 610cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mAllocationIn = Allocation.createSized(rs, Element.U8(mRS), (mHeight * mWidth) + 620cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams ((mHeight / 2) * (mWidth / 2) * 2)); 630cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 641ebb7202b68d18025de8755d4f1df0c6544397e3Jason Sams mYuv.setInput(mAllocationIn); 650cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams } 660cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 670cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams private long mTiming[] = new long[50]; 680cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams private int mTimingSlot = 0; 690cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 701ebb7202b68d18025de8755d4f1df0c6544397e3Jason Sams void execute(byte[] yuv, Bitmap b) { 710cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mAllocationIn.copyFrom(yuv); 721ebb7202b68d18025de8755d4f1df0c6544397e3Jason Sams mYuv.forEach(mAllocationOut); 731ebb7202b68d18025de8755d4f1df0c6544397e3Jason Sams mScript.forEach_root(mAllocationOut, mAllocationOut); 740cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams mAllocationOut.copyTo(b); 750cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams } 760cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 770cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams} 780cb555ffcc30b79ae04a4dc6089863da4bb54852Jason Sams 79