1db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin/* 2db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * Copyright (C) 2014 The Android Open Source Project 3db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 4db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * you may not use this file except in compliance with the License. 6db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * You may obtain a copy of the License at 7db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 8db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 10db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * Unless required by applicable law or agreed to in writing, software 11db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * See the License for the specific language governing permissions and 14db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * limitations under the License. 15db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin */ 16db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin 17db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkinpackage android.hardware.camera2; 18db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin 19db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkinimport android.hardware.camera2.impl.CameraMetadataNative; 20bdf366cc70639b0e16b8f84eebe612a48a8b8b06Igor Murashkinimport android.hardware.camera2.impl.CaptureResultExtras; 21db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin 221e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkinimport java.util.ArrayList; 23db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkinimport java.util.Collections; 24db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkinimport java.util.List; 25db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin 26db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin/** 27db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * <p>The total assembled results of a single image capture from the image sensor.</p> 28db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 29db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * <p>Contains the final configuration for the capture hardware (sensor, lens, 30db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * flash), the processing pipeline, the control algorithms, and the output 31db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * buffers.</p> 32db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 33db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * <p>A {@code TotalCaptureResult} is produced by a {@link CameraDevice} after processing a 34db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * {@link CaptureRequest}. All properties listed for capture requests can also 35db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * be queried on the capture result, to determine the final values used for 36db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * capture. The result also includes additional metadata about the state of the 37db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * camera device during the capture.</p> 38db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 39db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * <p>All properties returned by {@link CameraCharacteristics#getAvailableCaptureResultKeys()} 40db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * are available (that is {@link CaptureResult#get} will return non-{@code null}, if and only if 41db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * that key that was enabled by the request. A few keys such as 42db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * {@link CaptureResult#STATISTICS_FACES} are disabled by default unless enabled with a switch (such 43db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * as {@link CaptureRequest#STATISTICS_FACE_DETECT_MODE}). Refer to each key documentation on 44db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * a case-by-case basis.</p> 45db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 46db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * <p>{@link TotalCaptureResult} objects are immutable.</p> 47db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 48fd887436bd111e4d2c7307578a51b5070025b7f2Eino-Ville Talvala * @see CameraDevice.CaptureCallback#onCaptureCompleted 49db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin */ 50db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkinpublic final class TotalCaptureResult extends CaptureResult { 51db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin 521e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin private final List<CaptureResult> mPartialResults; 531e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin 54db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin /** 551e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin * Takes ownership of the passed-in camera metadata and the partial results 561e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin * 571e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin * @param partials a list of partial results; {@code null} will be substituted for an empty list 58db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * @hide 59db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin */ 60bdf366cc70639b0e16b8f84eebe612a48a8b8b06Igor Murashkin public TotalCaptureResult(CameraMetadataNative results, CaptureRequest parent, 611e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin CaptureResultExtras extras, List<CaptureResult> partials) { 62bdf366cc70639b0e16b8f84eebe612a48a8b8b06Igor Murashkin super(results, parent, extras); 631e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin 641e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin if (partials == null) { 651e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin mPartialResults = new ArrayList<>(); 661e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin } else { 671e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin mPartialResults = partials; 681e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin } 69db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin } 70db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin 71db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin /** 72db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * Creates a request-less result. 73db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 74db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * <p><strong>For testing only.</strong></p> 75db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * @hide 76db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin */ 77db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin public TotalCaptureResult(CameraMetadataNative results, int sequenceId) { 78db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin super(results, sequenceId); 791e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin 801e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin mPartialResults = new ArrayList<>(); 81db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin } 82db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin 83db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin /** 84db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * Get the read-only list of partial results that compose this total result. 85db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 86db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * <p>The list is returned is unmodifiable; attempting to modify it will result in a 87db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * {@code UnsupportedOperationException} being thrown.</p> 88db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 891e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin * <p>The list size will be inclusive between {@code 0} and 901e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin * {@link CameraCharacteristics#REQUEST_PARTIAL_RESULT_COUNT}, with elements in ascending order 91fd887436bd111e4d2c7307578a51b5070025b7f2Eino-Ville Talvala * of when {@link CameraCaptureSession.CaptureCallback#onCaptureProgressed} was invoked.</p> 92db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * 93db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin * @return unmodifiable list of partial results 94db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin */ 95db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin public List<CaptureResult> getPartialResults() { 961e854c5fc817d31eef18e671b9b519bbb4b400d2Igor Murashkin return Collections.unmodifiableList(mPartialResults); 97db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin } 98db075afc85b6b50a5d3a988a17ed0d4e09ef0823Igor Murashkin} 99