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
191d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohdeimport com.android.camera.device.CameraId;
2043e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucherimport com.android.ex.camera2.portability.CameraDeviceInfo.Characteristics;
212a0e18e280dfe541d4740345511ad299099cda79Senpo Huimport com.android.ex.camera2.portability.CameraExceptionHandler;
2220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
2320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong/**
2420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong * An interface which defines the camera provider.
2520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong */
2620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kongpublic interface CameraProvider {
2720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
2820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
2920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * Requests the camera device. If the camera device of the same ID is
3020fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * already requested, then no-op here.
3120fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     *
3220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * @param id The ID of the requested camera device.
3320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
3420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public void requestCamera(int id);
3520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
3644ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher    /**
3744ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     * Requests the camera device. If the camera device of the same ID is
3844ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     * already requested, then no-op here.
3944ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     *
4044ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     * @param id The ID of the requested camera device.
4144ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     * @param useNewApi Whether to use the new API if this platform provides it.
4244ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher     */
4344ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher    public void requestCamera(int id, boolean useNewApi);
4444ce4b26614f85518d548a6750c7a08908ae3596Sol Boucher
4597e282a3764215ac193726e0d259e55bf94369feAngus Kong    public boolean waitingForCamera();
4697e282a3764215ac193726e0d259e55bf94369feAngus Kong
4720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
4820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * Releases the camera device.
4920fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     *
5020fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * @param id The camera ID.
5120fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
5220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public void releaseCamera(int id);
5320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
5420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
55630d55ba8111357730119899565026be503264c0Erin Dahlgren     * Sets a callback for handling camera api runtime exceptions on
56630d55ba8111357730119899565026be503264c0Erin Dahlgren     * a handler.
57630d55ba8111357730119899565026be503264c0Erin Dahlgren     */
582a0e18e280dfe541d4740345511ad299099cda79Senpo Hu    public void setCameraExceptionHandler(CameraExceptionHandler exceptionHandler);
59630d55ba8111357730119899565026be503264c0Erin Dahlgren
60630d55ba8111357730119899565026be503264c0Erin Dahlgren    /**
6143e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucher     * Get the {@link Characteristics} of the given camera.
6220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     *
6343e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucher     * @param cameraId Which camera.
6443e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucher     * @return The static characteristics of that camera.
6520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
6643e1813a5d4a59ef107768eb523d76ae2781cb02Sol Boucher    public Characteristics getCharacteristics(int cameraId);
6720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
6820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
696190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren     * @returns The current camera id.
706190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren     */
711d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde    public CameraId getCurrentCameraId();
726190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren
736190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren    /**
7420fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     * Returns the total number of cameras available on the device.
7520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
7620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public int getNumberOfCameras();
7720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
7820fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
7918500a493634b593dc8ba1e74b46d1f10bb6d031Angus Kong     * @returns The lowest ID of the back camera or -1 if not available.
8020fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
8120fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public int getFirstBackCameraId();
8220fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong
8320fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    /**
8418500a493634b593dc8ba1e74b46d1f10bb6d031Angus Kong     * @return The lowest ID of the front camera or -1 if not available.
8520fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong     */
8620fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong    public int getFirstFrontCameraId();
8739b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong
8839b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong    /**
8939b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong     * @returns Whether the camera is facing front.
9039b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong     */
9139b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong    public boolean isFrontFacingCamera(int id);
9239b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong
9339b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong    /**
9439b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong     * @returns Whether the camera is facing back.
9539b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong     */
9639b460b805adaa54f310d8637868b3a5c792b2f5Angus Kong    public boolean isBackFacingCamera(int id);
9720fad249cbb587b8cf03e8e53bc64ff8e0bec7fdAngus Kong}
98