CameraProvider.java revision 2a0e18e280dfe541d4740345511ad299099cda79
120fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong/*
220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * Copyright (C) 2013 The Android Open Source Project
320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong *
420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * Licensed under the Apache License, Version 2.0 (the "License");
520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * you may not use this file except in compliance with the License.
620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * You may obtain a copy of the License at
720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong *
820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong *      http://www.apache.org/licenses/LICENSE-2.0
920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong *
1020fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * Unless required by applicable law or agreed to in writing, software
1120fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * distributed under the License is distributed on an "AS IS" BASIS,
1220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * See the License for the specific language governing permissions and
1420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * limitations under the License.
1520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong */
1620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
1720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kongpackage com.android.camera.app;
1820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
1920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kongimport android.hardware.Camera;
20630d55ba8111357730119899565026be503264c0Erin Dahlgrenimport android.os.Handler;
21630d55ba8111357730119899565026be503264c0Erin Dahlgren
2243e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucherimport com.android.ex.camera2.portability.CameraDeviceInfo.Characteristics;
232a0e18e280dfe541d4740345511ad299099cda79Senpo Huimport com.android.ex.camera2.portability.CameraExceptionHandler;
2420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
2520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong/**
2620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * An interface which defines the camera provider.
2720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong */
2820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kongpublic interface CameraProvider {
2920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
3020fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
3120fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * Requests the camera device. If the camera device of the same ID is
3220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * already requested, then no-op here.
3320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     *
3420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * @param id The ID of the requested camera device.
3520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
3620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public void requestCamera(int id);
3720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
3844ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher    /**
3944ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     * Requests the camera device. If the camera device of the same ID is
4044ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     * already requested, then no-op here.
4144ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     *
4244ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     * @param id The ID of the requested camera device.
4344ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     * @param useNewApi Whether to use the new API if this platform provides it.
4444ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     */
4544ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher    public void requestCamera(int id, boolean useNewApi);
4644ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher
4797e282a3764215ac193726e0d259e55bf94369feAngus Kong    public boolean waitingForCamera();
4897e282a3764215ac193726e0d259e55bf94369feAngus Kong
4920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
5020fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * Releases the camera device.
5120fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     *
5220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * @param id The camera ID.
5320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
5420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public void releaseCamera(int id);
5520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
5620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
57630d55ba8111357730119899565026be503264c0Erin Dahlgren     * Sets a callback for handling camera api runtime exceptions on
58630d55ba8111357730119899565026be503264c0Erin Dahlgren     * a handler.
59630d55ba8111357730119899565026be503264c0Erin Dahlgren     */
602a0e18e280dfe541d4740345511ad299099cda79Senpo Hu    public void setCameraExceptionHandler(CameraExceptionHandler exceptionHandler);
61630d55ba8111357730119899565026be503264c0Erin Dahlgren
62630d55ba8111357730119899565026be503264c0Erin Dahlgren    /**
6343e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucher     * Get the {@link Characteristics} of the given camera.
6420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     *
6543e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucher     * @param cameraId Which camera.
6643e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucher     * @return The static characteristics of that camera.
6720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
6843e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucher    public Characteristics getCharacteristics(int cameraId);
6920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
7020fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
716190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren     * @returns The current camera id.
726190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren     */
736190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren    public int getCurrentCameraId();
746190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren
756190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren    /**
7620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * Returns the total number of cameras available on the device.
7720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
7820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public int getNumberOfCameras();
7920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
8020fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
8118500a493634b593dc8ba1e74b46d1f10bb6d031Angus Kong     * @returns The lowest ID of the back camera or -1 if not available.
8220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
8320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public int getFirstBackCameraId();
8420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
8520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
8618500a493634b593dc8ba1e74b46d1f10bb6d031Angus Kong     * @return The lowest ID of the front camera or -1 if not available.
8720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
8820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public int getFirstFrontCameraId();
8939b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong
9039b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong    /**
9139b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong     * @returns Whether the camera is facing front.
9239b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong     */
9339b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong    public boolean isFrontFacingCamera(int id);
9439b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong
9539b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong    /**
9639b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong     * @returns Whether the camera is facing back.
9739b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong     */
9839b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong    public boolean isBackFacingCamera(int id);
9920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong}
100