14cead8034aab0e20e402baee87cbe9129db00192Stephen Hinespackage com.android.rs.refocus;
2de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
3de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.graphics.Bitmap;
4de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.support.v8.renderscript.Allocation;
5de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.support.v8.renderscript.RenderScript;
6de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
7de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang/**
8de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * A class that manages the image buffers that interface between Java and Render
9de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * Script. This class will be specialized for float in f32 package and for byte
10de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * in u8 package.
11de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang *
12de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * @author zhl@google.com (Li Zhang)
13de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang */
14de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangpublic class ImageBuffersForRenderScript {
15de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  /**
16de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang   * Input and output images and their corresponding Allocation to interface
17de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang   * with Render Script. Both input and output images are unpadded images.
18de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang   */
19de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  public Bitmap inputImage;
20de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  public Bitmap outputImage;
21de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  public Allocation inAllocation;
22de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  public Allocation outAllocation;
23de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
24de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  /**
25de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang   * The following three member variables are used in the subclasses that extend
26de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang   * this class. Therefore, they are protected.
27de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang   */
28de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  public int imageWidthPadded;
29de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  public int imageHeightPadded;
30de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  public int paddedMargin;
31de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
32de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  public ImageBuffersForRenderScript(Bitmap inImage, int margin,
33de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang      RenderScript renderScript) {
34de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    inputImage = inImage;
35de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    inAllocation = Allocation.createFromBitmap(renderScript, inputImage);
36de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
37de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    outputImage = Bitmap.createBitmap(inputImage.getWidth(),
38de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        inputImage.getHeight(), Bitmap.Config.ARGB_8888);
39de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    outAllocation = Allocation.createFromBitmap(renderScript, outputImage);
40de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
41de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    paddedMargin = margin;
42de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    imageWidthPadded = inputImage.getWidth() + 2 * margin;
43de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    imageHeightPadded = inputImage.getHeight() + 2 * margin;
44de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang  }
45de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang}
46