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