1package com.android.rs.refocus.image;
2
3import com.android.rs.refocus.DepthTransform;
4
5/**
6 * An implementation of {@code DepthTransform} that uses an inverse
7 * 8-bit representation of depth similar to the OpenGL z-buffer storage.
8 *
9 * @author chernand@google.com (Carlos Hernandez)
10 */
11public class RangeInverseDepthTransform implements DepthTransform {
12  public static final String FORMAT = "RangeInverse";
13
14  private final float near;
15  private final float far;
16
17  public RangeInverseDepthTransform(float near, float far) {
18    this.near = near;
19    this.far = far;
20  }
21
22  @Override
23  public float getNear() {
24    return near;
25  }
26
27  @Override
28  public float getFar() {
29    return far;
30  }
31
32  @Override
33  public String getFormat() {
34    return FORMAT;
35  }
36
37  @Override
38  public int quantize(float value) {
39    return Math.max(0, Math.min(255,
40        (int) ((far - near * far / value) / (far - near) * 255f)));
41  }
42
43  @Override
44  public float reconstruct(int value) {
45    return (far * near) / (far - (far - near) *
46        Math.max(0, Math.min(255, value)) / 255f);
47  }
48}
49