124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu/* 224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * Copyright (C) 2015 The Android Open Source Project 324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * 424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * Licensed under the Apache License, Version 2.0 (the "License"); 524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * you may not use this file except in compliance with the License. 624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * You may obtain a copy of the License at 724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * 824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * http://www.apache.org/licenses/LICENSE-2.0 924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * 1024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * Unless required by applicable law or agreed to in writing, software 1124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * distributed under the License is distributed on an "AS IS" BASIS, 1224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * See the License for the specific language governing permissions and 1424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * limitations under the License. 1524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu */ 1624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 17d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hupackage com.android.camera.captureintent.resource; 1824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 191d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohdeimport android.graphics.PointF; 201d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohdeimport android.view.Surface; 211d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde 2280aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Huimport com.android.camera.async.RefCountBase; 2380aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Huimport com.android.camera.debug.Log; 241d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohdeimport com.android.camera.device.CameraId; 2524be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.one.OneCamera; 268aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Huimport com.android.camera.one.OneCameraCaptureSetting; 2724be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.one.OneCameraCharacteristics; 2824be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.util.Size; 2924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 30d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hupublic final class ResourceOpenedCameraImpl implements ResourceOpenedCamera { 3180aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu private static final Log.Tag TAG = new Log.Tag("ResOpenedCam"); 3280aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu 3324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu /** The camera object. */ 3424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private final OneCamera mCamera; 3524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 361d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde /** The camera device key. */ 371d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde private final CameraId mCameraId; 381d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde 3924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu /** The camera facing. */ 4024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private final OneCamera.Facing mCameraFacing; 4124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 4224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu /** The camera characteristics. */ 4324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private final OneCameraCharacteristics mCameraCharacteristics; 4424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 4524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu /** The desired picture size. */ 4624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private final Size mPictureSize; 4724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 4824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu /** The current zoom ratio. */ 4924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private float mZoomRatio; 5024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 518aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu private final OneCameraCaptureSetting mOneCameraCaptureSetting; 528aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu 5380aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu /** 54d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu * Creates a reference counted {@link ResourceOpenedCameraImpl} object. 5580aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu */ 5680aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu public static RefCountBase<ResourceOpenedCamera> create( 5780aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu OneCamera camera, 581d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde CameraId cameraId, 5980aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu OneCamera.Facing cameraFacing, 6080aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu OneCameraCharacteristics cameraCharacteristics, 618aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu Size pictureSize, 628aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu OneCameraCaptureSetting captureSetting) { 63d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu ResourceOpenedCamera resourceOpenedCamera = new ResourceOpenedCameraImpl( 648aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu camera, cameraId, cameraFacing, cameraCharacteristics, pictureSize, captureSetting); 6580aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu return new RefCountBase<>(resourceOpenedCamera); 6680aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu } 6780aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu 68d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu private ResourceOpenedCameraImpl( 6924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera camera, 701d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde CameraId cameraId, 7124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera.Facing cameraFacing, 7224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCameraCharacteristics cameraCharacteristics, 738aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu Size pictureSize, 748aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu OneCameraCaptureSetting captureSetting) { 7524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mCamera = camera; 761d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde mCameraId = cameraId; 7724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mCameraFacing = cameraFacing; 7824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mCameraCharacteristics = cameraCharacteristics; 7924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mPictureSize = pictureSize; 801b98e83085e2b0a3066a4bf3cbde2d664b8422eeSenpo Hu mZoomRatio = mCamera.getMaxZoom(); 818aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu mOneCameraCaptureSetting = captureSetting; 8224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 8324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 8424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu @Override 8524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public void close() { 8680aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu Log.d(TAG, "close"); 8724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mCamera.setFocusStateListener(null); 8824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mCamera.close(); 8924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 9024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 91d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu @Override 9224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public OneCamera getCamera() { 9324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu return mCamera; 9424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 9524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 96d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu @Override 971d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde public CameraId getCameraId() { 981d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde return mCameraId; 991d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde } 1001d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde 1011d84d7107686aa428ee2eeb1a8caf0ea3e43b1dfPaul Rohde @Override 1021d518e63212290741d66aaf34356bd3897bb609eSenpo Hu public OneCamera.Facing getCameraFacing() { 1031d518e63212290741d66aaf34356bd3897bb609eSenpo Hu return mCameraFacing; 1041d518e63212290741d66aaf34356bd3897bb609eSenpo Hu } 1051d518e63212290741d66aaf34356bd3897bb609eSenpo Hu 106d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu @Override 1071d518e63212290741d66aaf34356bd3897bb609eSenpo Hu public OneCameraCharacteristics getCameraCharacteristics() { 1081d518e63212290741d66aaf34356bd3897bb609eSenpo Hu return mCameraCharacteristics; 1091d518e63212290741d66aaf34356bd3897bb609eSenpo Hu } 1101d518e63212290741d66aaf34356bd3897bb609eSenpo Hu 111d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu @Override 11224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public Size getPictureSize() { 11324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu return mPictureSize; 11424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 11524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 116d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu @Override 1178aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu public OneCameraCaptureSetting getCaptureSetting() { 1188aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu return mOneCameraCaptureSetting; 1198aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu } 1208aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu 1218aefbc59ce6176f27efd47f4a568117bd4d9ea77Senpo Hu @Override 12224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public float getZoomRatio() { 12324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu return mZoomRatio; 12424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 12524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 126d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu @Override 12724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public void setZoomRatio(float zoomRatio) { 1281b98e83085e2b0a3066a4bf3cbde2d664b8422eeSenpo Hu mZoomRatio = zoomRatio; 12924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mCamera.setZoom(zoomRatio); 13024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 13124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 132d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu @Override 1331b98e83085e2b0a3066a4bf3cbde2d664b8422eeSenpo Hu public void startPreview( 1341b98e83085e2b0a3066a4bf3cbde2d664b8422eeSenpo Hu Surface previewSurface, OneCamera.CaptureReadyCallback captureReadyCallback) { 1351b98e83085e2b0a3066a4bf3cbde2d664b8422eeSenpo Hu mCamera.startPreview(previewSurface, captureReadyCallback); 13624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 137c7ef4da1e06ad9a4b88daed9ffc49bdb415fd011Senpo Hu 138d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu @Override 139c7ef4da1e06ad9a4b88daed9ffc49bdb415fd011Senpo Hu public void triggerFocusAndMeterAtPoint(PointF point) { 140c7ef4da1e06ad9a4b88daed9ffc49bdb415fd011Senpo Hu mCamera.triggerFocusAndMeterAtPoint(point.x, point.y); 141c7ef4da1e06ad9a4b88daed9ffc49bdb415fd011Senpo Hu } 14224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu} 143