RequestHolder.java revision 385f9e2146d2600ae9fd20053aab8ee5abcac9a6
1feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk/* 2feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Copyright (C) 2014 The Android Open Source Project 3feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * 4feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Licensed under the Apache License, Version 2.0 (the "License"); 5feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * you may not use this file except in compliance with the License. 6feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * You may obtain a copy of the License at 7feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * 8feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * http://www.apache.org/licenses/LICENSE-2.0 9feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * 10feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Unless required by applicable law or agreed to in writing, software 11feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * distributed under the License is distributed on an "AS IS" BASIS, 12feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * See the License for the specific language governing permissions and 14feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * limitations under the License. 15feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 16feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 17feb50af361e4305a25758966b6b5df2738c00259Ruben Brunkpackage android.hardware.camera2.legacy; 18feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 19feb50af361e4305a25758966b6b5df2738c00259Ruben Brunkimport android.hardware.camera2.CaptureRequest; 20ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunkimport android.util.Log; 21feb50af361e4305a25758966b6b5df2738c00259Ruben Brunkimport android.view.Surface; 22feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 23feb50af361e4305a25758966b6b5df2738c00259Ruben Brunkimport java.util.Collection; 24feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 25d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunkimport static com.android.internal.util.Preconditions.*; 26d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk 27feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk/** 28e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk * Semi-immutable container for a single capture request and associated information, 29e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk * the only mutable characteristic of this container is whether or not is has been 30e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk * marked as "failed" using {@code #failRequest}. 31feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 32feb50af361e4305a25758966b6b5df2738c00259Ruben Brunkpublic class RequestHolder { 33ef14da32804b06bac872c9e0e14ce0e52120a0bdRuben Brunk private static final String TAG = "RequestHolder"; 34feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 35feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk private final boolean mRepeating; 36feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk private final CaptureRequest mRequest; 37feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk private final int mRequestId; 38feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk private final int mSubsequeceId; 39feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk private final long mFrameNumber; 40e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk private final int mNumJpegTargets; 41e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk private final int mNumPreviewTargets; 42e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk private volatile boolean mFailed = false; 43d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk 44385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala private final Collection<Long> mJpegSurfaceIds; 45385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala 46d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk /** 47d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * A builder class for {@link RequestHolder} objects. 48d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * 49d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * <p> 50d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * This allows per-request queries to be cached for repeating {@link CaptureRequest} objects. 51d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * </p> 52d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk */ 53d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk public final static class Builder { 54d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk private final int mRequestId; 55d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk private final int mSubsequenceId; 56d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk private final CaptureRequest mRequest; 57d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk private final boolean mRepeating; 58e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk private final int mNumJpegTargets; 59e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk private final int mNumPreviewTargets; 600fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk private final Collection<Long> mJpegSurfaceIds; 61d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk 62d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk /** 63d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * Construct a new {@link Builder} to generate {@link RequestHolder} objects. 64d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * 65d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * @param requestId the ID to set in {@link RequestHolder} objects. 66d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * @param subsequenceId the sequence ID to set in {@link RequestHolder} objects. 67d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * @param request the original {@link CaptureRequest} to set in {@link RequestHolder} 68d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * objects. 69d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * @param repeating {@code true} if the request is repeating. 70d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk */ 71d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk public Builder(int requestId, int subsequenceId, CaptureRequest request, 720fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk boolean repeating, Collection<Long> jpegSurfaceIds) { 73d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk checkNotNull(request, "request must not be null"); 74d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk mRequestId = requestId; 75d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk mSubsequenceId = subsequenceId; 76d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk mRequest = request; 77d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk mRepeating = repeating; 780fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk mJpegSurfaceIds = jpegSurfaceIds; 79e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk mNumJpegTargets = numJpegTargets(mRequest); 80e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk mNumPreviewTargets = numPreviewTargets(mRequest); 81d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk } 82feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 83d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk /** 840fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * Returns true if the given surface requires jpeg buffers. 850fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * 860fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * @param s a {@link android.view.Surface} to check. 870fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * @return true if the surface requires a jpeg buffer. 880fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk */ 890fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk private boolean jpegType(Surface s) 900fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk throws LegacyExceptionUtils.BufferQueueAbandonedException { 910fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk return LegacyCameraDevice.containsSurfaceId(s, mJpegSurfaceIds); 920fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 930fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk 940fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk /** 950fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * Returns true if the given surface requires non-jpeg buffer types. 960fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * 970fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * <p> 980fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * "Jpeg buffer" refers to the buffers returned in the jpeg 990fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * {@link android.hardware.Camera.PictureCallback}. Non-jpeg buffers are created using a tee 1000fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * of the preview stream drawn to the surface 1010fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * set via {@link android.hardware.Camera#setPreviewDisplay(android.view.SurfaceHolder)} or 1020fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * equivalent methods. 1030fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * </p> 1040fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * @param s a {@link android.view.Surface} to check. 1050fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * @return true if the surface requires a non-jpeg buffer type. 1060fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk */ 1070fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk private boolean previewType(Surface s) 1080fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk throws LegacyExceptionUtils.BufferQueueAbandonedException { 1090fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk return !jpegType(s); 1100fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1110fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk 1120fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk /** 1130fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * Returns the number of surfaces targeted by the request that require jpeg buffers. 1140fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk */ 1150fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk private int numJpegTargets(CaptureRequest request) { 1160fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk int count = 0; 1170fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk for (Surface s : request.getTargets()) { 1180fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk try { 1190fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk if (jpegType(s)) { 1200fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk ++count; 1210fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1220fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { 1230fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk Log.d(TAG, "Surface abandoned, skipping...", e); 1240fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1250fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1260fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk return count; 1270fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1280fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk 1290fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk /** 1300fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk * Returns the number of surfaces targeted by the request that require non-jpeg buffers. 1310fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk */ 1320fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk private int numPreviewTargets(CaptureRequest request) { 1330fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk int count = 0; 1340fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk for (Surface s : request.getTargets()) { 1350fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk try { 1360fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk if (previewType(s)) { 1370fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk ++count; 1380fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1390fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { 1400fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk Log.d(TAG, "Surface abandoned, skipping...", e); 1410fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1420fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1430fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk return count; 1440fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk } 1450fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk 1460fd198ad89ec9c600bb1761b10d938146c28bb98Ruben Brunk /** 147d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * Build a new {@link RequestHolder} using with parameters generated from this 148d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * {@link Builder}. 149d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * 150d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * @param frameNumber the {@code framenumber} to generate in the {@link RequestHolder}. 151d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk * @return a {@link RequestHolder} constructed with the {@link Builder}'s parameters. 152d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk */ 153d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk public RequestHolder build(long frameNumber) { 154d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk return new RequestHolder(mRequestId, mSubsequenceId, mRequest, mRepeating, frameNumber, 155385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala mNumJpegTargets, mNumPreviewTargets, mJpegSurfaceIds); 156d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk } 157d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk } 158d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk 159d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk private RequestHolder(int requestId, int subsequenceId, CaptureRequest request, 160e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk boolean repeating, long frameNumber, int numJpegTargets, 161385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala int numPreviewTargets, Collection<Long> jpegSurfaceIds) { 162feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk mRepeating = repeating; 163feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk mRequest = request; 164feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk mRequestId = requestId; 165feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk mSubsequeceId = subsequenceId; 166feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk mFrameNumber = frameNumber; 167e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk mNumJpegTargets = numJpegTargets; 168e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk mNumPreviewTargets = numPreviewTargets; 169385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala mJpegSurfaceIds = jpegSurfaceIds; 170feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 171feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 172feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk /** 173feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Return the request id for the contained {@link CaptureRequest}. 174feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 175feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk public int getRequestId() { 176feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk return mRequestId; 177feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 178feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 179feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk /** 180feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Returns true if the contained request is repeating. 181feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 182feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk public boolean isRepeating() { 183feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk return mRepeating; 184feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 185feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 186feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk /** 187feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Return the subsequence id for this request. 188feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 189feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk public int getSubsequeceId() { 190feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk return mSubsequeceId; 191feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 192feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 193feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk /** 194feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Returns the frame number for this request. 195feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 196feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk public long getFrameNumber() { 197feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk return mFrameNumber; 198feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 199feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 200feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk /** 201feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Returns the contained request. 202feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 203feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk public CaptureRequest getRequest() { 204feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk return mRequest; 205feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 206feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 207feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk /** 208feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Returns a read-only collection of the surfaces targeted by the contained request. 209feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 210feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk public Collection<Surface> getHolderTargets() { 211feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk return getRequest().getTargets(); 212feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 213feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 214feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk /** 215feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Returns true if any of the surfaces targeted by the contained request require jpeg buffers. 216feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 217feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk public boolean hasJpegTargets() { 218e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk return mNumJpegTargets > 0; 219feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 220feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 221feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk /** 222feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * Returns true if any of the surfaces targeted by the contained request require a 223feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk * non-jpeg buffer type. 224feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk */ 225d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk public boolean hasPreviewTargets(){ 226e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk return mNumPreviewTargets > 0; 227e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk } 228e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk 229e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk /** 230e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk * Return the number of jpeg-type surfaces targeted by this request. 231e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk */ 232e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk public int numJpegTargets() { 233e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk return mNumJpegTargets; 234e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk } 235e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk 236e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk /** 237e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk * Return the number of non-jpeg-type surfaces targeted by this request. 238e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk */ 239e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk public int numPreviewTargets() { 240e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk return mNumPreviewTargets; 241e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk } 242e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk 243e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk /** 244385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala * Returns true if the given surface requires jpeg buffers. 245385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala * 246385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala * @param s a {@link android.view.Surface} to check. 247385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala * @return true if the surface requires a jpeg buffer. 248385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala */ 249385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala public boolean jpegType(Surface s) 250385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala throws LegacyExceptionUtils.BufferQueueAbandonedException { 251385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala return LegacyCameraDevice.containsSurfaceId(s, mJpegSurfaceIds); 252385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala } 253385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala 254385f9e2146d2600ae9fd20053aab8ee5abcac9a6Eino-Ville Talvala /** 255e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk * Mark this request as failed. 256e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk */ 257e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk public void failRequest() { 258e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk Log.w(TAG, "Capture failed for request: " + getRequestId()); 259e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk mFailed = true; 260e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk } 261e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk 262e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk /** 263e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk * Return {@code true} if this request failed. 264e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk */ 265e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk public boolean requestFailed() { 266e663cb77281c4c76241b820f6126543f1c2d859fRuben Brunk return mFailed; 267feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 268feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 269feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk} 270