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