• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2016 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package com.android.devcamera;
17  
18  import android.graphics.PointF;
19  import android.graphics.RectF;
20  import android.hardware.camera2.params.Face;
21  
22  /**
23   *
24   * Face coordinates.  Normalized 0 to 1, and in native sensor orientation, which so far seems to be
25   * landscape.
26   *
27   */
28  public class NormalizedFace {
29      public RectF bounds;
30      public PointF leftEye;
31      public PointF rightEye;
32      public PointF mouth;
33  
NormalizedFace(Face face, int dX, int dY, int offX, int offY)34      public NormalizedFace(Face face, int dX, int dY, int offX, int offY) {
35          if (face.getLeftEyePosition() != null) {
36              leftEye = new PointF();
37              leftEye.x = (float) (face.getLeftEyePosition().x - offX) / dX;
38              leftEye.y = (float) (face.getLeftEyePosition().y - offY) / dY;
39          }
40          if (face.getRightEyePosition() != null) {
41              rightEye = new PointF();
42              rightEye.x = (float) (face.getRightEyePosition().x - offX) / dX;
43              rightEye.y = (float) (face.getRightEyePosition().y - offY) / dY;
44          }
45          if (face.getMouthPosition() != null) {
46              mouth = new PointF();
47              mouth.x = (float) (face.getMouthPosition().x - offX) / dX;
48              mouth.y = (float) (face.getMouthPosition().y - offY) / dY;
49          }
50          if (face.getBounds() != null) {
51              bounds = new RectF();
52              bounds.left = (float) (face.getBounds().left - offX) / dX;
53              bounds.top = (float) (face.getBounds().top - offY) / dY;
54              bounds.right = (float) (face.getBounds().right - offX) / dX;
55              bounds.bottom = (float) (face.getBounds().bottom - offY) / dY;
56          }
57      }
58  
mirrorInX()59      public void mirrorInX() {
60          if (leftEye != null) {
61              leftEye.x = 1f - leftEye.x;
62          }
63          if (rightEye != null) {
64              rightEye.x = 1f - rightEye.x;
65          }
66          if (mouth != null) {
67              mouth.x = 1f - mouth.x;
68          }
69          float oldLeft = bounds.left;
70          bounds.left = 1f - bounds.right;
71          bounds.right = 1f - oldLeft;
72      }
73  
74      /**
75       * Typically required for front camera
76       */
mirrorInY()77      public void mirrorInY() {
78          if (leftEye != null) {
79              leftEye.y = 1f - leftEye.y;
80          }
81          if (rightEye != null) {
82              rightEye.y = 1f - rightEye.y;
83          }
84          if (mouth != null) {
85              mouth.y = 1f - mouth.y;
86          }
87          float oldTop = bounds.top;
88          bounds.top = 1f - bounds.bottom;
89          bounds.bottom = 1f - oldTop;
90      }
91  }
92