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 */
16package com.android.devcamera;
17
18import android.util.Size;
19import android.view.Surface;
20
21/**
22 * This is a simple camera interface not specific to API1 or API2.
23 */
24public interface CameraInterface {
25    /**
26     * Return preview size to use pass thru from camera API.
27     */
28    Size getPreviewSize();
29
30    /**
31     * Get camera field of view, in degrees. Entry 0 is horizontal, entry 1 is vertical FOV.
32     */
33    float[] getFieldOfView();
34
35    /**
36     * Get the camera sensor orientation relative to device native orientation
37     * Typically 90 or 270 for phones, 0 or 180 for tablets, though many tables are also
38     * portrait-native.
39     */
40    int getOrientation();
41
42    /**
43     * Open the camera. Call startPreview() to actually see something.
44     */
45    void openCamera();
46
47    /**
48     * Start preview to a surface. Also need to call openCamera().
49     * @param surface
50     */
51    void startPreview(Surface surface);
52
53    /**
54     * Close the camera.
55     */
56    void closeCamera();
57
58    /**
59     * Take a picture and return data with provided callback.
60     * Preview must be started.
61     */
62    void takePicture();
63
64    /**
65     * Set whether we are continuously taking pictures, or not.
66     */
67    void setBurst(boolean go);
68
69    /**
70     * Take a picture and return data with provided callback.
71     * Preview must be started.
72     */
73    void setCallback(MyCameraCallback callback);
74
75    /**
76     * Is a raw stream available.
77     */
78    boolean isRawAvailable();
79
80    /**
81     * Is a reprocessing available.
82     */
83    boolean isReprocessingAvailable();
84
85    /**
86     * Triggers an AF scan. Leaves camera in AUTO.
87     */
88    void triggerAFScan();
89
90    /**
91     * Runs CAF (continuous picture).
92     */
93    void setCAF();
94
95    /**
96     * Camera picture callbacks.
97     */
98    interface MyCameraCallback {
99        /**
100         * What text to display on the Edge and NR mode buttons.
101         */
102        void setNoiseEdgeText(String s1, String s2);
103
104        /**
105         * What text to display on the Edge and NR mode buttons (reprocessing flow).
106         */
107        void setNoiseEdgeTextForReprocessing(String s1, String s2);
108
109        /**
110         * Full size JPEG is available.
111         * @param jpegData
112         * @param x
113         * @param y
114         */
115        void jpegAvailable(byte[] jpegData, int x, int y);
116
117        /**
118         * Metadata from an image frame.
119         *
120         * @param info Info string we print just under viewfinder.
121         *
122         *             fps, mLastIso, af, ae, awb
123         * @param faces Face coordinates.
124         * @param normExposure Exposure value normalized from 0 to 1.
125         * @param normLensPos Lens position value normalized from 0 to 1.
126         * @param fps
127         * @param iso
128         * @param afState
129         * @param aeState
130         * @param awbState
131         *
132         */
133        void frameDataAvailable(NormalizedFace[] faces, float normExposure, float normLensPos, float fps, int iso, int afState, int aeState, int awbState);
134
135        /**
136         * Misc performance data.
137         */
138        void performanceDataAvailable(Integer timeToFirstFrame, Integer halWaitTime, Float droppedFrameCount);
139
140        /**
141         * Called when camera2 FULL not available.
142         */
143        void noCamera2Full();
144
145        /**
146         * Used to set the preview SurfaceView background color from black to transparent.
147         */
148        void receivedFirstFrame();
149    }
150
151    void setCaptureFlow(Boolean yuv1, Boolean yuv2, Boolean raw10, Boolean nr, Boolean edge, Boolean face);
152
153    void setReprocessingFlow(Boolean nr, Boolean edge);
154
155}
156