1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.camera.captureintent.resource;
18
19import android.graphics.PointF;
20import android.view.Surface;
21
22import com.android.camera.async.RefCountBase;
23import com.android.camera.debug.Log;
24import com.android.camera.device.CameraId;
25import com.android.camera.one.OneCamera;
26import com.android.camera.one.OneCameraCaptureSetting;
27import com.android.camera.one.OneCameraCharacteristics;
28import com.android.camera.util.Size;
29
30public final class ResourceOpenedCameraImpl implements ResourceOpenedCamera {
31    private static final Log.Tag TAG = new Log.Tag("ResOpenedCam");
32
33    /** The camera object. */
34    private final OneCamera mCamera;
35
36    /** The camera device key. */
37    private final CameraId mCameraId;
38
39    /** The camera facing. */
40    private final OneCamera.Facing mCameraFacing;
41
42    /** The camera characteristics. */
43    private final OneCameraCharacteristics mCameraCharacteristics;
44
45    /** The desired picture size. */
46    private final Size mPictureSize;
47
48    /** The current zoom ratio. */
49    private float mZoomRatio;
50
51    private final OneCameraCaptureSetting mOneCameraCaptureSetting;
52
53    /**
54     * Creates a reference counted {@link ResourceOpenedCameraImpl} object.
55     */
56    public static RefCountBase<ResourceOpenedCamera> create(
57            OneCamera camera,
58            CameraId cameraId,
59            OneCamera.Facing cameraFacing,
60            OneCameraCharacteristics cameraCharacteristics,
61            Size pictureSize,
62            OneCameraCaptureSetting captureSetting) {
63        ResourceOpenedCamera resourceOpenedCamera = new ResourceOpenedCameraImpl(
64                camera, cameraId, cameraFacing, cameraCharacteristics, pictureSize, captureSetting);
65        return new RefCountBase<>(resourceOpenedCamera);
66    }
67
68    private ResourceOpenedCameraImpl(
69            OneCamera camera,
70            CameraId cameraId,
71            OneCamera.Facing cameraFacing,
72            OneCameraCharacteristics cameraCharacteristics,
73            Size pictureSize,
74            OneCameraCaptureSetting captureSetting) {
75        mCamera = camera;
76        mCameraId = cameraId;
77        mCameraFacing = cameraFacing;
78        mCameraCharacteristics = cameraCharacteristics;
79        mPictureSize = pictureSize;
80        mZoomRatio = mCamera.getMaxZoom();
81        mOneCameraCaptureSetting = captureSetting;
82    }
83
84    @Override
85    public void close() {
86        Log.d(TAG, "close");
87        mCamera.setFocusStateListener(null);
88        mCamera.close();
89    }
90
91    @Override
92    public OneCamera getCamera() {
93        return mCamera;
94    }
95
96    @Override
97    public CameraId getCameraId() {
98        return mCameraId;
99    }
100
101    @Override
102    public OneCamera.Facing getCameraFacing() {
103        return mCameraFacing;
104    }
105
106    @Override
107    public OneCameraCharacteristics getCameraCharacteristics() {
108        return mCameraCharacteristics;
109    }
110
111    @Override
112    public Size getPictureSize() {
113        return mPictureSize;
114    }
115
116    @Override
117    public OneCameraCaptureSetting getCaptureSetting() {
118        return mOneCameraCaptureSetting;
119    }
120
121    @Override
122    public float getZoomRatio() {
123        return mZoomRatio;
124    }
125
126    @Override
127    public void setZoomRatio(float zoomRatio) {
128        mZoomRatio = zoomRatio;
129        mCamera.setZoom(zoomRatio);
130    }
131
132    @Override
133    public void startPreview(
134            Surface previewSurface, OneCamera.CaptureReadyCallback captureReadyCallback) {
135        mCamera.startPreview(previewSurface, captureReadyCallback);
136    }
137
138    @Override
139    public void triggerFocusAndMeterAtPoint(PointF point) {
140        mCamera.triggerFocusAndMeterAtPoint(point.x, point.y);
141    }
142}
143