Search in sources :

Example 31 with SubmitInfo

use of android.hardware.camera2.utils.SubmitInfo in project android_frameworks_base by crdroidandroid.

the class CameraDeviceBinderTest method testSubmitGoodRequest.

@SmallTest
public void testSubmitGoodRequest() throws Exception {
    CaptureRequest.Builder builder = createDefaultBuilder(/* needStream */
    true);
    CaptureRequest request = builder.build();
    // Submit valid request twice.
    SubmitInfo requestInfo1 = submitCameraRequest(request, /* streaming */
    false);
    SubmitInfo requestInfo2 = submitCameraRequest(request, /* streaming */
    false);
    assertNotSame("Request IDs should be unique for multiple requests", requestInfo1.getRequestId(), requestInfo2.getRequestId());
}
Also used : SubmitInfo(android.hardware.camera2.utils.SubmitInfo) CaptureRequest(android.hardware.camera2.CaptureRequest) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 32 with SubmitInfo

use of android.hardware.camera2.utils.SubmitInfo in project android_frameworks_base by crdroidandroid.

the class CameraDeviceBinderTest method testSubmitBadRequest.

@SmallTest
public void testSubmitBadRequest() throws Exception {
    CaptureRequest.Builder builder = createDefaultBuilder(/* needStream */
    false);
    CaptureRequest request1 = builder.build();
    try {
        SubmitInfo requestInfo = mCameraUser.submitRequest(request1, /* streaming */
        false);
        fail("Exception expected");
    } catch (ServiceSpecificException e) {
        assertEquals("Expected submitRequest to throw ServiceSpecificException with BAD_VALUE " + "since we had 0 surface targets set.", ICameraService.ERROR_ILLEGAL_ARGUMENT, e.errorCode);
    }
    builder.addTarget(mSurface);
    CaptureRequest request2 = builder.build();
    try {
        SubmitInfo requestInfo = mCameraUser.submitRequest(request2, /* streaming */
        false);
        fail("Exception expected");
    } catch (ServiceSpecificException e) {
        assertEquals("Expected submitRequest to throw ILLEGAL_ARGUMENT " + "ServiceSpecificException since the target wasn't registered with createStream.", ICameraService.ERROR_ILLEGAL_ARGUMENT, e.errorCode);
    }
}
Also used : ServiceSpecificException(android.os.ServiceSpecificException) SubmitInfo(android.hardware.camera2.utils.SubmitInfo) CaptureRequest(android.hardware.camera2.CaptureRequest) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 33 with SubmitInfo

use of android.hardware.camera2.utils.SubmitInfo in project android_frameworks_base by crdroidandroid.

the class CameraDeviceBinderTest method submitCameraRequest.

private SubmitInfo submitCameraRequest(CaptureRequest request, boolean streaming) throws Exception {
    SubmitInfo requestInfo = mCameraUser.submitRequest(request, streaming);
    assertTrue("Request IDs should be non-negative (expected: >= 0, actual: " + requestInfo.getRequestId() + ")", requestInfo.getRequestId() >= 0);
    return requestInfo;
}
Also used : SubmitInfo(android.hardware.camera2.utils.SubmitInfo)

Example 34 with SubmitInfo

use of android.hardware.camera2.utils.SubmitInfo in project android_frameworks_base by DirtyUnicorns.

the class CameraDeviceImpl method submitCaptureRequest.

private int submitCaptureRequest(List<CaptureRequest> requestList, CaptureCallback callback, Handler handler, boolean repeating) throws CameraAccessException {
    // Need a valid handler, or current thread needs to have a looper, if
    // callback is valid
    handler = checkHandler(handler, callback);
    // Make sure that there all requests have at least 1 surface; all surfaces are non-null
    for (CaptureRequest request : requestList) {
        if (request.getTargets().isEmpty()) {
            throw new IllegalArgumentException("Each request must have at least one Surface target");
        }
        for (Surface surface : request.getTargets()) {
            if (surface == null) {
                throw new IllegalArgumentException("Null Surface targets are not allowed");
            }
        }
    }
    synchronized (mInterfaceLock) {
        checkIfCameraClosedOrInError();
        if (repeating) {
            stopRepeating();
        }
        SubmitInfo requestInfo;
        CaptureRequest[] requestArray = requestList.toArray(new CaptureRequest[requestList.size()]);
        requestInfo = mRemoteDevice.submitRequestList(requestArray, repeating);
        if (DEBUG) {
            Log.v(TAG, "last frame number " + requestInfo.getLastFrameNumber());
        }
        if (callback != null) {
            mCaptureCallbackMap.put(requestInfo.getRequestId(), new CaptureCallbackHolder(callback, requestList, handler, repeating, mNextSessionId - 1));
        } else {
            if (DEBUG) {
                Log.d(TAG, "Listen for request " + requestInfo.getRequestId() + " is null");
            }
        }
        if (repeating) {
            if (mRepeatingRequestId != REQUEST_ID_NONE) {
                checkEarlyTriggerSequenceComplete(mRepeatingRequestId, requestInfo.getLastFrameNumber());
            }
            mRepeatingRequestId = requestInfo.getRequestId();
        } else {
            mRequestLastFrameNumbersList.add(new RequestLastFrameNumbersHolder(requestList, requestInfo));
        }
        if (mIdle) {
            mDeviceHandler.post(mCallOnActive);
        }
        mIdle = false;
        return requestInfo.getRequestId();
    }
}
Also used : SubmitInfo(android.hardware.camera2.utils.SubmitInfo) CaptureRequest(android.hardware.camera2.CaptureRequest) Surface(android.view.Surface)

Example 35 with SubmitInfo

use of android.hardware.camera2.utils.SubmitInfo in project android_frameworks_base by AOSPA.

the class RequestQueue method submit.

/**
     * Add a the given burst to the queue.
     *
     * <p>If the burst is repeating, replace the current repeating burst.</p>
     *
     * @param requests the burst of requests to add to the queue.
     * @param repeating true if the burst is repeating.
     * @return the submission info, including the new request id, and the last frame number, which
     *   contains either the frame number of the last frame that will be returned for this request,
     *   or the frame number of the last frame that will be returned for the current repeating
     *   request if this burst is set to be repeating.
     */
public synchronized SubmitInfo submit(CaptureRequest[] requests, boolean repeating) {
    int requestId = mCurrentRequestId++;
    BurstHolder burst = new BurstHolder(requestId, repeating, requests, mJpegSurfaceIds);
    long lastFrame = INVALID_FRAME;
    if (burst.isRepeating()) {
        Log.i(TAG, "Repeating capture request set.");
        if (mRepeatingRequest != null) {
            lastFrame = (mCurrentRepeatingFrameNumber == INVALID_FRAME) ? INVALID_FRAME : mCurrentRepeatingFrameNumber - 1;
        }
        mCurrentRepeatingFrameNumber = INVALID_FRAME;
        mRepeatingRequest = burst;
    } else {
        mRequestQueue.offer(burst);
        lastFrame = calculateLastFrame(burst.getRequestId());
    }
    SubmitInfo info = new SubmitInfo(requestId, lastFrame);
    return info;
}
Also used : SubmitInfo(android.hardware.camera2.utils.SubmitInfo)

Aggregations

SubmitInfo (android.hardware.camera2.utils.SubmitInfo)55 CaptureRequest (android.hardware.camera2.CaptureRequest)45 SmallTest (android.test.suitebuilder.annotation.SmallTest)35 ServiceSpecificException (android.os.ServiceSpecificException)20 Surface (android.view.Surface)10 CaptureResultExtras (android.hardware.camera2.impl.CaptureResultExtras)5 Handler (android.os.Handler)5 ArrayList (java.util.ArrayList)5