1 package com.android.rs.refocus.d1new; 2 3 import android.graphics.Bitmap; 4 import android.support.v8.renderscript.Allocation; 5 import android.support.v8.renderscript.Element; 6 import android.support.v8.renderscript.RenderScript; 7 import android.util.Log; 8 9 import com.android.rs.refocus.renderscript.ScriptC_layered_filter_fast_d1new; 10 11 import com.android.rs.refocus.LayerInfo; 12 import com.android.rs.refocus.ImageBuffersForRenderScript; 13 14 /** 15 * A class that manages the image buffers that interface between Java and Render 16 * Script. These buffers are specialized for float32 pixel representation. 17 * 18 * @author zhl (at) google.com (Li Zhang) 19 */ 20 public class ImageBuffersForRenderScriptd1new extends 21 ImageBuffersForRenderScript { 22 /** 23 * SharpImage, FuzzyImage, and integralImage that are bound with memory in 24 * Render Script for layered filtering. 25 * Global allocation for images and meta data that are bound with memory in Render Script 26 * 27 */ 28 private static final String myTAG = "RefocusFilterd1new"; 29 public Allocation sharpRGBAAllocation; 30 public Allocation fuzzyRGBAAllocation; 31 public Allocation integralRGBAAllocation; 32 33 public Allocation sharpActualDepthAllocation; 34 public Allocation sharpDilatedDepthAllocation; 35 public Allocation sharpActiveAllocation; 36 public Allocation sharpMatteAllocation; 37 38 /** 39 * A constructor that allocates memory buffers in Java and binds the buffers 40 * with the global pointers in the Render Script. 41 * 42 * @param image an input (padded) RGBD image 43 * @param renderScript a RenderScript object that manages the {@code Context} 44 * in Java 45 * @param scriptC a RenderScript object that manages the filtering kernel 46 * functions in .rs file 47 */ 48 public ImageBuffersForRenderScriptd1new(Bitmap image, int margin, 49 RenderScript renderScript, ScriptC_layered_filter_fast_d1new scriptC) { 50 super(image, margin, renderScript); 51 sharpRGBAAllocation = Allocation.createSized( 52 renderScript, Element.F32_4(renderScript), 53 imageWidthPadded * imageHeightPadded); 54 sharpActualDepthAllocation = Allocation.createSized( 55 renderScript, Element.U8(renderScript), 56 imageWidthPadded * imageHeightPadded); 57 sharpDilatedDepthAllocation = Allocation.createSized( 58 renderScript, Element.U8(renderScript), 59 imageWidthPadded * imageHeightPadded); 60 sharpActiveAllocation = Allocation.createSized( 61 renderScript, Element.U8(renderScript), 62 imageWidthPadded * imageHeightPadded); 63 sharpMatteAllocation = Allocation.createSized( 64 renderScript, Element.U8(renderScript), 65 imageWidthPadded * imageHeightPadded); 66 fuzzyRGBAAllocation = Allocation.createSized( 67 renderScript, Element.F32_4(renderScript), 68 imageWidthPadded * imageHeightPadded); 69 integralRGBAAllocation = Allocation.createSized( 70 renderScript, Element.F32_4(renderScript), 71 imageWidthPadded * imageHeightPadded); 72 73 scriptC.set_g_sharp_RGBA(sharpRGBAAllocation); 74 scriptC.set_g_fuzzy_RGBA(fuzzyRGBAAllocation); 75 scriptC.set_g_integral_RGBA(integralRGBAAllocation); 76 77 scriptC.set_g_sharp_actual_depth(sharpActualDepthAllocation); 78 scriptC.set_g_sharp_active(sharpActiveAllocation); 79 scriptC.set_g_sharp_matte(sharpMatteAllocation); 80 scriptC.set_g_sharp_dilated_depth(sharpDilatedDepthAllocation); 81 82 } 83 84 /** 85 * A function that passes global parameters from Java to Render Script and 86 * sets up the input image. 87 * 88 * @param focalLayer a layer for the depth value interval that has zero blur. 89 * @param scriptC a RenderScript object that manages filtering kernels and 90 * global variables in .rs file 91 */ 92 public void initializeRenderScript(LayerInfo focalLayer, 93 ScriptC_layered_filter_fast_d1new scriptC) { 94 long startnow; 95 long endnow; 96 startnow = System.nanoTime(); 97 scriptC.invoke_InitializeFast(imageWidthPadded, imageHeightPadded, 98 paddedMargin, focalLayer.frontDepth, focalLayer.backDepth); 99 endnow = System.nanoTime(); 100 Log.d(myTAG, "Initialize: " + (endnow - startnow) + " ns"); 101 // At this point, {@code inAllocation} contains input RGBD image in Java. 102 // {@code g_sharp_image} is a global pointer that points the focus image in 103 // Render Script. The following function copies {@code inAllocation} in 104 // Java to {@code g_sharp_image) in Render Script. 105 startnow = System.nanoTime(); 106 scriptC.forEach_UnpackInputImage(inAllocation); 107 endnow = System.nanoTime(); 108 Log.d(myTAG, "UnpackInputImage: " + (endnow - startnow) + " ns"); 109 } 110 } 111