14cead8034aab0e20e402baee87cbe9129db00192Stephen Hinespackage com.android.rs.refocus; 2de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang 3de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang/** 4de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * A struct containing all the data needed to apply a depth-of-field effect. 5de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * 6de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * @author chernand@google.com (Carlos Hernandez) 7de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang */ 8de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangpublic class DepthOfFieldOptions { 9de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang public final RGBZ rgbz; 10de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang public float focalDepth; 11de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang public float blurInfinity; 12de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang // The depth of field specifies the depth range in focus (i.e., zero blur) as 13de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang // a ratio of the focal depth. Its range is [0, 1). The depth of field range 14de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang // in depth units is computed as 15de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang // [(1 - depthOfField) * focalDepth,(1 + depthOfField) * focalDepth]. 16de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang public float depthOfField; 17de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang 18de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang /** 19de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * Creates a {@code DepthOfFieldOptions} from an {@code RGBZ}. 20de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * 21de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * @param rgbz the {@code RGBZ} to render 22de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang */ 23de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang public DepthOfFieldOptions(RGBZ rgbz) { 24de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang this.focalDepth = (float)rgbz.getFocusDepth(); 25de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang this.depthOfField = (float)rgbz.getDepthOfField(); 26de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang this.blurInfinity = (float)rgbz.getBlurInfinity() * Math.max(rgbz.getHeight(), rgbz.getWidth()); 27de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang this.rgbz = rgbz; 28de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang } 29de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang 30de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang public void setFocusPoint(float x, float y) { 31de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang this.focalDepth = rgbz.getDepth((int)(x * rgbz.getWidth()), (int)(y * rgbz.getHeight())); 32de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang //this.blurInfinity = lensController.blurInfinityFromAverageBlur(this.focalDepth, this.depthOfField, averageBlur); 33de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang //System.out.println("new focal depth: " + this.focalDepth); 34de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang } 35de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang 36de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang public void setBokeh(float bokeh) { 37de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang this.blurInfinity = bokeh * 200; 38de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang } 39de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang} 40