StateStartingPreview.java revision 80aed3c513dc6a6670e25ef6e11bc71ab6a2d9fd
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 1724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hupackage com.android.camera.captureintent.state; 1824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 1924be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.google.common.base.Optional; 2024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 2124be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.SoundPlayer; 2224be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.app.LocationManager; 2324be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.async.RefCountBase; 2424be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.captureintent.CaptureIntentModuleUI; 2524be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.debug.Log; 2624be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.hardware.HeadingSensor; 2724be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.one.OneCamera; 2824be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.one.OneCameraCharacteristics; 2924be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.session.CaptureSessionManager; 3024be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.android.camera.util.Size; 3124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 3224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hupublic final class StateStartingPreview extends State { 3324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private static final Log.Tag TAG = new Log.Tag("StateStartingPreview"); 3424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 3524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private final RefCountBase<ResourceConstructed> mResourceConstructed; 3624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private final RefCountBase<ResourceSurfaceTexture> mResourceSurfaceTexture; 3724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private final RefCountBase<ResourceOpenedCamera> mResourceOpenedCamera; 3824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 3924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public static StateStartingPreview from( 4024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu StateOpeningCamera openingCamera, 4124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu RefCountBase<ResourceConstructed> resourceConstructed, 4224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu RefCountBase<ResourceSurfaceTexture> resourceSurfaceTexture, 4324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera camera, 4424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera.Facing cameraFacing, 4524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCameraCharacteristics cameraCharacteristics, 4624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu Size pictureSize, 4724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera.CaptureReadyCallback captureReadyCallback) { 4880aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu return new StateStartingPreview( 4980aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu openingCamera, 5080aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu resourceConstructed, 5180aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu resourceSurfaceTexture, 5280aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu camera, 5380aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu cameraFacing, 5480aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu cameraCharacteristics, 5580aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu pictureSize, 5680aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu captureReadyCallback); 5724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 5824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 5924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu private StateStartingPreview( 6024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu State previousState, 6124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu RefCountBase<ResourceConstructed> resourceConstructed, 6224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu RefCountBase<ResourceSurfaceTexture> resourceSurfaceTexture, 6380aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu OneCamera camera, 6480aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu OneCamera.Facing cameraFacing, 6580aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu OneCameraCharacteristics cameraCharacteristics, 6680aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu Size pictureSize, 6780aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu OneCamera.CaptureReadyCallback captureReadyCallback) { 6824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu super(ID.StartingPreview, previousState); 6924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceConstructed = resourceConstructed; 7080aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu mResourceConstructed.addRef(); // Will be balanced in onLeave(). 7124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceSurfaceTexture = resourceSurfaceTexture; 7280aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu mResourceSurfaceTexture.addRef(); // Will be balanced in onLeave(). 7380aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu mResourceOpenedCamera = ResourceOpenedCamera.create( 7480aed3c513dc6a6670e25ef6e11bc71ab6a2d9fdSenpo Hu camera, cameraFacing, cameraCharacteristics, pictureSize, captureReadyCallback); 7524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 7624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 7724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu @Override 7824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public Optional<State> onEnter() { 7924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceSurfaceTexture.get().updateSurfaceTextureDefaultBufferSize(); 8024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceOpenedCamera.get().getCamera().startPreview( 8124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceSurfaceTexture.get().createPreviewSurface(), 8224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceOpenedCamera.get().getCaptureReadyCallback()); 8324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu return Optional.absent(); 8424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 8524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 8624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu @Override 8724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public void onLeave() { 8824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceConstructed.close(); 8924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceSurfaceTexture.close(); 9024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceOpenedCamera.close(); 9124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 9224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 9324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu @Override 9424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public Optional<State> processPause() { 9524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu return Optional.of((State) StateBackground.from(this, mResourceConstructed)); 9624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 9724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 9824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu @Override 9924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public Optional<State> processOnPreviewSetupSucceeded( 10024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu CaptureSessionManager captureSessionManager, 10124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu LocationManager locationManager, 10224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu HeadingSensor headingSensor, 10324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu SoundPlayer soundPlayer, 10424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera.ReadyStateChangedListener readyStateChangedListener, 10524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera.PictureCallback pictureCallback, 10624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera.PictureSaverCallback pictureSaverCallback, 10724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu OneCamera.FocusStateListener focusStateListener) { 10824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu final OneCamera camera = mResourceOpenedCamera.get().getCamera(); 10924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu camera.setFocusStateListener(focusStateListener); 11024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu camera.setReadyStateChangedListener(readyStateChangedListener); 11124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceConstructed.get().getMainThread().execute(new Runnable() { 11224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu @Override 11324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public void run() { 11424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu mResourceSurfaceTexture.get().updatePreviewTransform(); 11524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu final CaptureIntentModuleUI moduleUI = mResourceConstructed.get().getModuleUI(); 11624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu moduleUI.onPreviewStarted(); 11724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu moduleUI.initializeZoom(camera.getMaxZoom()); 11824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 11924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu }); 12024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu return Optional.of((State) StateReadyForCapture.from( 12124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu this, mResourceConstructed, mResourceSurfaceTexture, mResourceOpenedCamera, 12224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu captureSessionManager, locationManager, headingSensor, soundPlayer, pictureCallback, 12324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu pictureSaverCallback)); 12424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 12524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu 12624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu @Override 12724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu public Optional<State> processOnPreviewSetupFailed() { 12824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu Log.e(TAG, "processOnPreviewSetupFailed"); 12924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu return Optional.of((State) StateFatal.from(this, mResourceConstructed)); 13024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu } 13124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu} 132