CameraAgent.java revision bdaaaf5f0257168590fa8965e4d59b054636e6df
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.hardware.Camera.Parameters;
24bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.os.Build;
25bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.os.Handler;
26bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.view.SurfaceHolder;
27bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
28bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong/**
29bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * An interface which provides possible camera device operations.
30bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong *
31bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * The client should call {@code CameraManager.cameraOpen} 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 {
44bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
45bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
46bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * A handler for all camera api runtime exceptions.
47bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * The default behavior is to throw the runtime exception.
48bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
49bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraExceptionCallback {
50bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onCameraException(RuntimeException e);
51bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
52bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
53bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
54bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
55bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.ErrorCallback}
56bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
57bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraErrorCallback {
58bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onError(int error, CameraProxy camera);
59bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
60bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
61bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
62bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
63bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.AutoFocusCallback}.
64bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
65bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraAFCallback {
66bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onAutoFocus(boolean focused, CameraProxy camera);
67bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
68bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
69bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
70bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
71bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.AutoFocusMoveCallback}.
72bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
73bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraAFMoveCallback {
74bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onAutoFocusMoving(boolean moving, CameraProxy camera);
75bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
76bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
77bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
78bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
79bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.ShutterCallback}.
80bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
81bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraShutterCallback {
82bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onShutter(CameraProxy camera);
83bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
84bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
85bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
86bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
87bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.PictureCallback}.
88bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
89bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraPictureCallback {
90bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onPictureTaken(byte[] data, CameraProxy camera);
91bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
92bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
93bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
94bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
95bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.PreviewCallback}.
96bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
97bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraPreviewDataCallback {
98bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onPreviewFrame(byte[] data, CameraProxy camera);
99bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
100bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
101bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
102bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface which wraps
103bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * {@link android.hardware.Camera.FaceDetectionListener}.
104bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
105bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraFaceDetectionCallback {
106bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
107bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback for face detection.
108bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
109bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param faces   Recognized face in the preview.
110bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param camera  The camera which the preview image comes from.
111bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
112bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onFaceDetection(Camera.Face[] faces, CameraProxy camera);
113bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
114bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
115bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
116bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface to be called for any exception caught when opening the
117bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * camera device. This error callback is different from the one defined
118bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * in the framework, {@link android.hardware.Camera.ErrorCallback}, which
119bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * is used after the camera is opened.
120bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
121bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraOpenCallback {
122bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
123bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when camera open succeeds.
124bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
125bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onCameraOpened(CameraProxy camera);
126bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
127bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
128bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when {@link com.android.camera.CameraDisabledException} is
129bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * caught.
130bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
131bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cameraId The disabled camera.
132bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
133bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onCameraDisabled(int cameraId);
134bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
135bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
136bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when {@link com.android.camera.CameraHardwareException} is
137bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * caught.
138bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
139bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cameraId The camera with the hardware failure.
140bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
141bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onDeviceOpenFailure(int cameraId);
142bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
143bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
144bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when trying to open the camera which is already opened.
145bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
146bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cameraId The camera which is causing the open error.
147bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
148bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onDeviceOpenedAlready(int cameraId);
149bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
150bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
151bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when {@link java.io.IOException} is caught during
152bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * {@link android.hardware.Camera#reconnect()}.
153bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
154bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param mgr The {@link CameraManager}
155bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *            with the reconnect failure.
156bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
157bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onReconnectionFailure(CameraManager mgr);
158bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
159bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
160bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
161bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * Opens the camera of the specified ID asynchronously. The camera device
162bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * will be opened in the camera handler thread and will be returned through
163bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * the {@link CameraManager.CameraOpenCallback#
164bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * onCameraOpened(com.android.camera.cameradevice.CameraManager.CameraProxy)}.
165bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     *
166bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * @param handler The {@link android.os.Handler} in which the callback
167bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     *                was handled.
168bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * @param callback The callback when any error happens.
169bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * @param cameraId The camera ID to open.
170bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
171bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public void cameraOpen(Handler handler, int cameraId, CameraOpenCallback callback);
172bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
173bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
174bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface that takes camera operation requests and post messages to the
175bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * camera handler thread. All camera operations made through this interface is
176bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * asynchronous by default except those mentioned specifically.
177bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
178bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraProxy {
179bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
180bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
181bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Returns the underlying {@link android.hardware.Camera} object used
182bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * by this proxy. This method should only be used when handing the
183bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * camera device over to {@link android.media.MediaRecorder} for
184bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * recording.
185bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
186bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        @Deprecated
187bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public android.hardware.Camera getCamera();
188bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
189bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
190bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Returns the camera ID associated to by this
191bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * {@link CameraManager.CameraProxy}.
192bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @return
193bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
194bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public int getCameraId();
195bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
196bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
197bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Releases the camera device synchronously.
198bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * This function must be synchronous so the caller knows exactly when the camera
199bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * is released and can continue on.
200bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * TODO: make this package-private after this interface is refactored under app.
201bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
202bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param synchronous Whether this call should be synchronous.
203bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
204bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void release(boolean synchronous);
205bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
206bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
207bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Reconnects to the camera device. On success, the camera device will
208bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * be returned through {@link CameraManager
209bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * .CameraOpenCallback#onCameraOpened(com.android.camera.cameradevice.CameraManager
210bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * .CameraProxy)}.
211bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#reconnect()
212bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
213bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler The {@link android.os.Handler} in which the callback
214bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *                was handled.
215bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb The callback when any error happens.
216bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
217bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void reconnect(Handler handler, CameraOpenCallback cb);
218bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
219bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
220bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Unlocks the camera device.
221bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
222bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#unlock()
223bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
224bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void unlock();
225bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
226bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
227bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Locks the camera device.
228bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#lock()
229bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
230bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void lock();
231bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
232bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
233bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the {@link android.graphics.SurfaceTexture} for preview.
234bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
235bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param surfaceTexture The {@link SurfaceTexture} for preview.
236bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
237bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewTexture(final SurfaceTexture surfaceTexture);
238bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
239bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
240bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Blocks until a {@link android.graphics.SurfaceTexture} has been set
241bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * for preview.
242bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
243bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param surfaceTexture The {@link SurfaceTexture} for preview.
244bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
245bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewTextureSync(final SurfaceTexture surfaceTexture);
246bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
247bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
248bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the {@link android.view.SurfaceHolder} for preview.
249bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
250bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param surfaceHolder The {@link SurfaceHolder} for preview.
251bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
252bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewDisplay(final SurfaceHolder surfaceHolder);
253bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
254bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
255bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Starts the camera preview.
256bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
257bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void startPreview();
258bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
259bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
260bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Starts the camera preview and executes a callback on a handler once
261bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * the preview starts.
262bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
263bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void startPreviewWithCallback(Handler h, CameraStartPreviewCallback cb);
264bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
265bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
266bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Stops the camera preview synchronously.
267bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * {@code stopPreview()} must be synchronous to ensure that the caller can
268bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * continues to release resources related to camera preview.
269bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
270bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void stopPreview();
271bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
272bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
273bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the callback for preview data.
274bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
275bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler    The {@link android.os.Handler} in which the callback was handled.
276bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb         The callback to be invoked when the preview data is available.
277bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see  android.hardware.Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)
278bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
279bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewDataCallback(Handler handler, CameraPreviewDataCallback cb);
280bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
281bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
282bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the one-time callback for preview data.
283bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
284bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler    The {@link android.os.Handler} in which the callback was handled.
285bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb         The callback to be invoked when the preview data for
286bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *                   next frame is available.
287bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see  android.hardware.Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)
288bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
289bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setOneShotPreviewCallback(Handler handler, CameraPreviewDataCallback cb);
290bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
291bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
292bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the callback for preview data.
293bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
294bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler The handler in which the callback will be invoked.
295bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb      The callback to be invoked when the preview data is available.
296bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback)
297bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
298bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setPreviewDataCallbackWithBuffer(Handler handler, CameraPreviewDataCallback cb);
299bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
300bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
301bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Adds buffer for the preview callback.
302bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
303bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param callbackBuffer The buffer allocated for the preview data.
304bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
305bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void addCallbackBuffer(byte[] callbackBuffer);
306bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
307bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
308bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Starts the auto-focus process. The result will be returned through the callback.
309bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
310bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler The handler in which the callback will be invoked.
311bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb      The auto-focus callback.
312bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
313bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void autoFocus(Handler handler, CameraAFCallback cb);
314bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
315bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
316bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Cancels the auto-focus process.
317bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
318bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void cancelAutoFocus();
319bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
320bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
321bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the auto-focus callback
322bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
323bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler The handler in which the callback will be invoked.
324bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb      The callback to be invoked when the preview data is available.
325bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
326bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
327bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setAutoFocusMoveCallback(Handler handler, CameraAFMoveCallback cb);
328bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
329bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
330bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Instrument the camera to take a picture.
331bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
332bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler   The handler in which the callback will be invoked.
333bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param shutter   The callback for shutter action, may be null.
334bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param raw       The callback for uncompressed data, may be null.
335bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param postview  The callback for postview image data, may be null.
336bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param jpeg      The callback for jpeg image data, may be null.
337bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#takePicture(
338bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *         android.hardware.Camera.ShutterCallback,
339bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *         android.hardware.Camera.PictureCallback,
340bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *         android.hardware.Camera.PictureCallback)
341bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
342bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void takePicture(
343bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                Handler handler,
344bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                CameraShutterCallback shutter,
345bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                CameraPictureCallback raw,
346bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                CameraPictureCallback postview,
347bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong                CameraPictureCallback jpeg);
348bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
349bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
350bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the display orientation for camera to adjust the preview orientation.
351bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
352bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param degrees The rotation in degrees. Should be 0, 90, 180 or 270.
353bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
354bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setDisplayOrientation(int degrees);
355bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
356bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
357bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the listener for zoom change.
358bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
359bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param listener The listener.
360bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
361bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setZoomChangeListener(OnZoomChangeListener listener);
362bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
363bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
364bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the face detection listener.
365bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
366bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler  The handler in which the callback will be invoked.
367bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param callback The callback for face detection results.
368bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
369bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setFaceDetectionCallback(Handler handler, CameraFaceDetectionCallback callback);
370bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
371bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
372bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Starts the face detection.
373bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
374bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void startFaceDetection();
375bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
376bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
377bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Stops the face detection.
378bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
379bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void stopFaceDetection();
380bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
381bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
382bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Registers an error callback.
383bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
384bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param handler  The handler on which the callback will be invoked.
385bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param cb The error callback.
386bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @see android.hardware.Camera#setErrorCallback(android.hardware.Camera.ErrorCallback)
387bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
388bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setErrorCallback(Handler handler, CameraErrorCallback cb);
389bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
390bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
391bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Sets the camera parameters.
392bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
393bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param params The camera parameters to use.
394bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
395bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void setParameters(Parameters params);
396bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
397bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
398bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Gets the current camera parameters synchronously. This method is
399bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * synchronous since the caller has to wait for the camera to return
400bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * the parameters. If the parameters are already cached, it returns
401bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * immediately.
402bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
403bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public Parameters getParameters();
404bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
405bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
406bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Forces {@code CameraProxy} to update the cached version of the camera
407bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * parameters regardless of the dirty bit.
408bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
409bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void refreshParameters();
410bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
411bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
412bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Enables/Disables the camera shutter sound.
413bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *
414bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * @param enable   {@code true} to enable the shutter sound,
415bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         *                 {@code false} to disable it.
416bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
417bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void enableShutterSound(boolean enable);
418bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
419bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
420bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
421bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * An interface to be called when the camera preview has started.
422bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
423bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public interface CameraStartPreviewCallback {
424bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        /**
425bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         * Callback when the preview starts.
426bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong         */
427bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong        public void onPreviewStarted();
428bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    }
429bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong
430bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    /**
431bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * Sets a callback for handling camera api runtime exceptions on
432bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     * a handler.
433bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong     */
434bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong    public void setCameraDefaultExceptionCallback(CameraExceptionCallback callback,
435bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong            Handler handler);
436bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong}
437