CameraAgent.java revision cef46862d6937bc98bf1a6b087c5daa22b5239f3
1bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong/*
2bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * Copyright (C) 2012 The Android Open Source Project
3bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong *
4bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * Licensed under the Apache License, Version 2.0 (the "License");
5bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * you may not use this file except in compliance with the License.
6bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * You may obtain a copy of the License at
7bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong *
8bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong *      http://www.apache.org/licenses/LICENSE-2.0
9bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong *
10bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * Unless required by applicable law or agreed to in writing, software
11bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * distributed under the License is distributed on an "AS IS" BASIS,
12bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * See the License for the specific language governing permissions and
14bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * limitations under the License.
15bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong */
16bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
17bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongpackage com.android.ex.camera2.portability;
18bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
19bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.annotation.TargetApi;
20bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.graphics.SurfaceTexture;
21bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.hardware.Camera;
22bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.hardware.Camera.OnZoomChangeListener;
23bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.os.Build;
24bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.os.Handler;
25cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport android.os.Looper;
26bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.view.SurfaceHolder;
27bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
28bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong/**
29bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * An interface which provides possible camera device operations.
30bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong *
3160520c4df78e595964605cf8acfa21bbafaeba84Angus Kong * The client should call {@code CameraManager.openCamera} to get an instance
32bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * of {@link CameraManager.CameraProxy} to control the camera. Classes
33bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * implementing this interface should have its own one unique {@code Thread}
34bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * other than the main thread for camera operations. Camera device callbacks
35bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * are wrapped since the client should not deal with
36bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * {@code android.hardware.Camera} directly.
37bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong *
38bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * TODO: provide callback interfaces for:
39bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * {@code android.hardware.Camera.ErrorCallback},
40bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * {@code android.hardware.Camera.OnZoomChangeListener}, and
41bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * {@code android.hardware.Camera.Parameters}.
42bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong */
43bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongpublic interface CameraManager {
44cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher    public static final long CAMERA_OPERATION_TIMEOUT_MS = 2500;
45cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
46cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher    public static class CameraStartPreviewCallbackForward
47cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            implements CameraStartPreviewCallback {
48cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        private final Handler mHandler;
49cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        private final CameraStartPreviewCallback mCallback;
50cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
51cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        public static CameraStartPreviewCallbackForward getNewInstance(
52cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                Handler handler, CameraStartPreviewCallback cb) {
53cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            if (handler == null || cb == null) {
54cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                return null;
55cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            }
56cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            return new CameraStartPreviewCallbackForward(handler, cb);
57cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
58cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
59cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        private CameraStartPreviewCallbackForward(Handler h,
60cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                CameraStartPreviewCallback cb) {
61cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mHandler = h;
62cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mCallback = cb;
63cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
64cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
65cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        @Override
66cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        public void onPreviewStarted() {
67cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mHandler.post(new Runnable() {
68cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                @Override
69cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                public void run() {
70cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                    mCallback.onPreviewStarted();
71cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                }
72cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            });
73cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
74cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher    }
75cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
76cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher    /**
77cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher     * A callback helps to invoke the original callback on another
78cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher     * {@link android.os.Handler}.
79cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher     */
80cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher    public static class CameraOpenCallbackForward implements CameraOpenCallback {
81cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        private final Handler mHandler;
82cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        private final CameraOpenCallback mCallback;
83cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
84cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        /**
85cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher         * Returns a new instance of {@link FaceDetectionCallbackForward}.
86cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher         *
87cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher         * @param handler The handler in which the callback will be invoked in.
88cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher         * @param cb The callback to be invoked.
89cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher         * @return The instance of the {@link FaceDetectionCallbackForward}, or
90cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher         *         null if any parameter is null.
91cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher         */
92cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        public static CameraOpenCallbackForward getNewInstance(
93cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                Handler handler, CameraOpenCallback cb) {
94cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            if (handler == null || cb == null) {
95cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                return null;
96cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            }
97cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            return new CameraOpenCallbackForward(handler, cb);
98cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
99cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
100cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        private CameraOpenCallbackForward(Handler h, CameraOpenCallback cb) {
101cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            // Given that we are using the main thread handler, we can create it
102cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            // here instead of holding onto the PhotoModule objects. In this
103cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            // way, we can avoid memory leak.
104cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mHandler = new Handler(Looper.getMainLooper());
105cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mCallback = cb;
106cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
107cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
108cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        @Override
109cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        public void onCameraOpened(final CameraProxy camera) {
110cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mHandler.post(new Runnable() {
111cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                @Override
112cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                public void run() {
113cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                    mCallback.onCameraOpened(camera);
114cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                }
115cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            });
116cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
117cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
118cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        @Override
119cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        public void onCameraDisabled(final int cameraId) {
120cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mHandler.post(new Runnable() {
121cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                @Override
122cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                public void run() {
123cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                    mCallback.onCameraDisabled(cameraId);
124cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                }
125cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            });
126cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
127cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
128cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        @Override
129cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        public void onDeviceOpenFailure(final int cameraId, final String info) {
130cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mHandler.post(new Runnable() {
131cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                @Override
132cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                public void run() {
133cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                    mCallback.onDeviceOpenFailure(cameraId, info);
134cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                }
135cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            });
136cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
137cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
138cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        @Override
139cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        public void onDeviceOpenedAlready(final int cameraId, final String info) {
140cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mHandler.post(new Runnable() {
141cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                @Override
142cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                public void run() {
143cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                    mCallback.onDeviceOpenedAlready(cameraId, info);
144cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                }
145cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            });
146cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
147cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher
148cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        @Override
149cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        public void onReconnectionFailure(final CameraManager mgr, final String info) {
150cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            mHandler.post(new Runnable() {
151cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                @Override
152cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                public void run() {
153cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                    mCallback.onReconnectionFailure(mgr, info);
154cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher                }
155cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher            });
156cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher        }
157cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher    }
158bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
159bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
160bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * A handler for all camera api runtime exceptions.
161bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * The default behavior is to throw the runtime exception.
162bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
163bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraExceptionCallback {
164bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onCameraException(RuntimeException e);
165bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
166bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
167bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
168bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
169bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.ErrorCallback}
170bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
171bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraErrorCallback {
172bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onError(int error, CameraProxy camera);
173bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
174bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
175bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
176bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
177bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.AutoFocusCallback}.
178bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
179bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraAFCallback {
180bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onAutoFocus(boolean focused, CameraProxy camera);
181bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
182bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
183bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
184bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
185bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.AutoFocusMoveCallback}.
186bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
187bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraAFMoveCallback {
188bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onAutoFocusMoving(boolean moving, CameraProxy camera);
189bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
190bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
191bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
192bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
193bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.ShutterCallback}.
194bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
195bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraShutterCallback {
196bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onShutter(CameraProxy camera);
197bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
198bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
199bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
200bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
201bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.PictureCallback}.
202bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
203bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraPictureCallback {
204bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onPictureTaken(byte[] data, CameraProxy camera);
205bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
206bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
207bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
208bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
209bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.PreviewCallback}.
210bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
211bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraPreviewDataCallback {
212bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onPreviewFrame(byte[] data, CameraProxy camera);
213bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
214bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
215bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
216bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
217bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.FaceDetectionListener}.
218bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
219bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraFaceDetectionCallback {
220bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
221bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback for face detection.
222bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
223bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param faces   Recognized face in the preview.
224bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param camera  The camera which the preview image comes from.
225bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
226bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onFaceDetection(Camera.Face[] faces, CameraProxy camera);
227bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
228bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
229bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
2307e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     * An interface to be called when the camera preview has started.
2317e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     */
2327e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    public interface CameraStartPreviewCallback {
2337e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong        /**
2347e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong         * Callback when the preview starts.
2357e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong         */
2367e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong        public void onPreviewStarted();
2377e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    }
2387e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong
2397e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    /**
24060520c4df78e595964605cf8acfa21bbafaeba84Angus Kong     * An interface to be called for any events when opening or closing the
241bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * camera device. This error callback is different from the one defined
242bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * in the framework, {@link android.hardware.Camera.ErrorCallback}, which
243bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * is used after the camera is opened.
244bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
245bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraOpenCallback {
246bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
247bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when camera open succeeds.
248bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
249bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onCameraOpened(CameraProxy camera);
250bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
251bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
252bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when {@link com.android.camera.CameraDisabledException} is
253bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * caught.
254bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
255bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cameraId The disabled camera.
256bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
257bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onCameraDisabled(int cameraId);
258bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
259bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
260bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when {@link com.android.camera.CameraHardwareException} is
261bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * caught.
262bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
263bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cameraId The camera with the hardware failure.
264b00b7a67213ee6868eb792b2a63ba0dca888a01fAngus Kong         * @param info The extra info regarding this failure.
265bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
266b00b7a67213ee6868eb792b2a63ba0dca888a01fAngus Kong        public void onDeviceOpenFailure(int cameraId, String info);
267bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
268bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
269bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when trying to open the camera which is already opened.
270bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
271bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cameraId The camera which is causing the open error.
272bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
27360520c4df78e595964605cf8acfa21bbafaeba84Angus Kong        public void onDeviceOpenedAlready(int cameraId, String info);
274bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
275bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
276bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when {@link java.io.IOException} is caught during
277bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * {@link android.hardware.Camera#reconnect()}.
278bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
279bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param mgr The {@link CameraManager}
280bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *            with the reconnect failure.
281bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
28260520c4df78e595964605cf8acfa21bbafaeba84Angus Kong        public void onReconnectionFailure(CameraManager mgr, String info);
283bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
284bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
285bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
286bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * Opens the camera of the specified ID asynchronously. The camera device
287bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * will be opened in the camera handler thread and will be returned through
288bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * the {@link CameraManager.CameraOpenCallback#
289bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * onCameraOpened(com.android.camera.cameradevice.CameraManager.CameraProxy)}.
290bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     *
291bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * @param handler The {@link android.os.Handler} in which the callback
292bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     *                was handled.
29360520c4df78e595964605cf8acfa21bbafaeba84Angus Kong     * @param callback The callback for the result.
294bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * @param cameraId The camera ID to open.
295bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
29660520c4df78e595964605cf8acfa21bbafaeba84Angus Kong    public void openCamera(Handler handler, int cameraId, CameraOpenCallback callback);
29760520c4df78e595964605cf8acfa21bbafaeba84Angus Kong
29860520c4df78e595964605cf8acfa21bbafaeba84Angus Kong    /**
29960520c4df78e595964605cf8acfa21bbafaeba84Angus Kong     * Closes the camera device.
30060520c4df78e595964605cf8acfa21bbafaeba84Angus Kong     *
30160520c4df78e595964605cf8acfa21bbafaeba84Angus Kong     * @param camera The camera to close. {@code null} means all.
30260520c4df78e595964605cf8acfa21bbafaeba84Angus Kong     * @param synced Whether this call should be synchronous.
30360520c4df78e595964605cf8acfa21bbafaeba84Angus Kong     */
30460520c4df78e595964605cf8acfa21bbafaeba84Angus Kong    public void closeCamera(CameraProxy camera, boolean synced);
305bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
306bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
3077e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     * Sets a callback for handling camera api runtime exceptions on
3087e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     * a handler.
3097e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     */
3107e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    public void setCameraDefaultExceptionCallback(CameraExceptionCallback callback,
3117e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong            Handler handler);
3127e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong
3137e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    /**
3147e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     * Recycles the resources used by this instance. CameraManager will be in
3157e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     * an unusable state after calling this.
3167e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     */
3177e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    public void recycle();
3187e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong
3197e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    /**
3207e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     * @return The camera devices info.
3217e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong     */
3227e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    public CameraDeviceInfo getCameraDeviceInfo();
3237e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong
3247e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong    /**
325bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface that takes camera operation requests and post messages to the
326bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * camera handler thread. All camera operations made through this interface is
327bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * asynchronous by default except those mentioned specifically.
328bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
329bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraProxy {
330bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
331bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
332bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Returns the underlying {@link android.hardware.Camera} object used
333bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * by this proxy. This method should only be used when handing the
334bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * camera device over to {@link android.media.MediaRecorder} for
335bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * recording.
336bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
337bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        @Deprecated
338bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public android.hardware.Camera getCamera();
339bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
340bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
341c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The camera ID associated to by this
342bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * {@link CameraManager.CameraProxy}.
343bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
344bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public int getCameraId();
345bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
346bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
347c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The camera capabilities.
348c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
349c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        public CameraCapabilities getCapabilities();
350c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
351c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
352bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Reconnects to the camera device. On success, the camera device will
353bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * be returned through {@link CameraManager
354bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * .CameraOpenCallback#onCameraOpened(com.android.camera.cameradevice.CameraManager
355bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * .CameraProxy)}.
356bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#reconnect()
357bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
358bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler The {@link android.os.Handler} in which the callback
359bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *                was handled.
360bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb The callback when any error happens.
361bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
362bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void reconnect(Handler handler, CameraOpenCallback cb);
363bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
364bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
365bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Unlocks the camera device.
366bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
367bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#unlock()
368bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
369bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void unlock();
370bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
371bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
372bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Locks the camera device.
373bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#lock()
374bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
375bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void lock();
376bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
377bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
378bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the {@link android.graphics.SurfaceTexture} for preview.
379bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
380bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param surfaceTexture The {@link SurfaceTexture} for preview.
381bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
382bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewTexture(final SurfaceTexture surfaceTexture);
383bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
384bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
385bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Blocks until a {@link android.graphics.SurfaceTexture} has been set
386bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * for preview.
387bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
388bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param surfaceTexture The {@link SurfaceTexture} for preview.
389bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
390bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewTextureSync(final SurfaceTexture surfaceTexture);
391bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
392bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
393bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the {@link android.view.SurfaceHolder} for preview.
394bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
395bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param surfaceHolder The {@link SurfaceHolder} for preview.
396bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
397bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewDisplay(final SurfaceHolder surfaceHolder);
398bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
399bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
400bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Starts the camera preview.
401bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
402bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void startPreview();
403bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
404bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
405bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Starts the camera preview and executes a callback on a handler once
406bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * the preview starts.
407bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
408bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void startPreviewWithCallback(Handler h, CameraStartPreviewCallback cb);
409bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
410bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
411bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Stops the camera preview synchronously.
412bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * {@code stopPreview()} must be synchronous to ensure that the caller can
413bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * continues to release resources related to camera preview.
414bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
415bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void stopPreview();
416bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
417bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
418bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the callback for preview data.
419bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
420bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler    The {@link android.os.Handler} in which the callback was handled.
421bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb         The callback to be invoked when the preview data is available.
422bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see  android.hardware.Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)
423bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
424bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewDataCallback(Handler handler, CameraPreviewDataCallback cb);
425bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
426bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
427bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the one-time callback for preview data.
428bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
429bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler    The {@link android.os.Handler} in which the callback was handled.
430bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb         The callback to be invoked when the preview data for
431bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *                   next frame is available.
432bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see  android.hardware.Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)
433bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
434bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setOneShotPreviewCallback(Handler handler, CameraPreviewDataCallback cb);
435bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
436bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
437bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the callback for preview data.
438bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
439bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler The handler in which the callback will be invoked.
440bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb      The callback to be invoked when the preview data is available.
441bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback)
442bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
443bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewDataCallbackWithBuffer(Handler handler, CameraPreviewDataCallback cb);
444bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
445bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
446bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Adds buffer for the preview callback.
447bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
448bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param callbackBuffer The buffer allocated for the preview data.
449bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
450bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void addCallbackBuffer(byte[] callbackBuffer);
451bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
452bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
453bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Starts the auto-focus process. The result will be returned through the callback.
454bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
455bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler The handler in which the callback will be invoked.
456bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb      The auto-focus callback.
457bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
458bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void autoFocus(Handler handler, CameraAFCallback cb);
459bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
460bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
461bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Cancels the auto-focus process.
462bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
463bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void cancelAutoFocus();
464bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
465bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
466bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the auto-focus callback
467bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
468bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler The handler in which the callback will be invoked.
469bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb      The callback to be invoked when the preview data is available.
470bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
471bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
472bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setAutoFocusMoveCallback(Handler handler, CameraAFMoveCallback cb);
473bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
474bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
475bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Instrument the camera to take a picture.
476bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
477bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler   The handler in which the callback will be invoked.
478bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param shutter   The callback for shutter action, may be null.
479bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param raw       The callback for uncompressed data, may be null.
480bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param postview  The callback for postview image data, may be null.
481bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param jpeg      The callback for jpeg image data, may be null.
482bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#takePicture(
483bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *         android.hardware.Camera.ShutterCallback,
484bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *         android.hardware.Camera.PictureCallback,
485bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *         android.hardware.Camera.PictureCallback)
486bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
487bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void takePicture(
488bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                Handler handler,
489bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                CameraShutterCallback shutter,
490bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                CameraPictureCallback raw,
491bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                CameraPictureCallback postview,
492bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                CameraPictureCallback jpeg);
493bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
494bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
495bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the display orientation for camera to adjust the preview orientation.
496bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
497bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param degrees The rotation in degrees. Should be 0, 90, 180 or 270.
498bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
499bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setDisplayOrientation(int degrees);
500bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
501bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
502bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the listener for zoom change.
503bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
504bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param listener The listener.
505bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
506bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setZoomChangeListener(OnZoomChangeListener listener);
507bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
508bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
509bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the face detection listener.
510bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
511bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler  The handler in which the callback will be invoked.
512bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param callback The callback for face detection results.
513bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
514bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setFaceDetectionCallback(Handler handler, CameraFaceDetectionCallback callback);
515bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
516bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
517bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Starts the face detection.
518bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
519bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void startFaceDetection();
520bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
521bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
522bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Stops the face detection.
523bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
524bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void stopFaceDetection();
525bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
526bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
527bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Registers an error callback.
528bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
529bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler  The handler on which the callback will be invoked.
530bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb The error callback.
531bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#setErrorCallback(android.hardware.Camera.ErrorCallback)
532bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
533bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setErrorCallback(Handler handler, CameraErrorCallback cb);
534bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
535bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
536bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the camera parameters.
537bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
538bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param params The camera parameters to use.
539bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
540c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        public void setParameters(Camera.Parameters params);
541bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
542bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
543bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Gets the current camera parameters synchronously. This method is
544bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * synchronous since the caller has to wait for the camera to return
545bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * the parameters. If the parameters are already cached, it returns
546bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * immediately.
547bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
548c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        public Camera.Parameters getParameters();
549bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
550bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
551bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Forces {@code CameraProxy} to update the cached version of the camera
552bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * parameters regardless of the dirty bit.
553bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
554bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void refreshParameters();
555bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
556bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
557bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Enables/Disables the camera shutter sound.
558bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
559bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param enable   {@code true} to enable the shutter sound,
560bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *                 {@code false} to disable it.
561bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
562bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void enableShutterSound(boolean enable);
563bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
564bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong}
565