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