Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2333486 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: fix race in onRepeatingRequestError callback" into oc-mr1-dev

parents ea842b4e 8cd12e9b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1769,7 +1769,7 @@ public class CameraDeviceImpl extends CameraDevice
        }

        @Override
        public void onRepeatingRequestError(long lastFrameNumber) {
        public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
            if (DEBUG) {
                Log.d(TAG, "Repeating request error received. Last frame number is " +
                        lastFrameNumber);
@@ -1782,9 +1782,12 @@ public class CameraDeviceImpl extends CameraDevice
                }

                checkEarlyTriggerSequenceComplete(mRepeatingRequestId, lastFrameNumber);
                // Check if there is already a new repeating request
                if (mRepeatingRequestId == repeatingRequestId) {
                    mRepeatingRequestId = REQUEST_ID_NONE;
                }
            }
        }

        @Override
        public void onDeviceIdle() {
+5 −3
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ public class CameraDeviceState {
        void onCaptureStarted(RequestHolder holder, long timestamp);
        void onCaptureResult(CameraMetadataNative result, RequestHolder holder);
        void onRequestQueueEmpty();
        void onRepeatingRequestError(long lastFrameNumber);
        void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId);
    }

    /**
@@ -208,12 +208,14 @@ public class CameraDeviceState {
     * <p>Repeating request has been stopped due to an error such as abandoned output surfaces.</p>
     *
     * @param lastFrameNumber Frame number of the last repeating request before it is stopped.
     * @param repeatingRequestId The ID of the repeating request being stopped
     */
    public synchronized void setRepeatingRequestError(final long lastFrameNumber) {
    public synchronized void setRepeatingRequestError(final long lastFrameNumber,
            final int repeatingRequestId) {
        mCurrentHandler.post(new Runnable() {
            @Override
            public void run() {
                mCurrentListener.onRepeatingRequestError(lastFrameNumber);
                mCurrentListener.onRepeatingRequestError(lastFrameNumber, repeatingRequestId);
            }
        });
    }
+7 −6
Original line number Diff line number Diff line
@@ -264,10 +264,10 @@ public class CameraDeviceUserShim implements ICameraDeviceUser {
        }

        @Override
        public void onRepeatingRequestError(long lastFrameNumber) {
        public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
            Object[] objArray = new Object[] { lastFrameNumber, repeatingRequestId };
            Message msg = getHandler().obtainMessage(REPEATING_REQUEST_ERROR,
                    /*arg1*/ (int) (lastFrameNumber & 0xFFFFFFFFL),
                    /*arg2*/ (int) ( (lastFrameNumber >> 32) & 0xFFFFFFFFL));
                    /*obj*/ objArray);
            getHandler().sendMessage(msg);
        }

@@ -329,9 +329,10 @@ public class CameraDeviceUserShim implements ICameraDeviceUser {
                            break;
                        }
                        case REPEATING_REQUEST_ERROR: {
                            long lastFrameNumber = msg.arg2 & 0xFFFFFFFFL;
                            lastFrameNumber = (lastFrameNumber << 32) | (msg.arg1 & 0xFFFFFFFFL);
                            mCallbacks.onRepeatingRequestError(lastFrameNumber);
                            Object[] objArray = (Object[]) msg.obj;
                            long lastFrameNumber = (Long) objArray[0];
                            int repeatingRequestId = (Integer) objArray[1];
                            mCallbacks.onRepeatingRequestError(lastFrameNumber, repeatingRequestId);
                            break;
                        }
                        case REQUEST_QUEUE_EMPTY: {
+4 −2
Original line number Diff line number Diff line
@@ -263,7 +263,8 @@ public class LegacyCameraDevice implements AutoCloseable {
        }

        @Override
        public void onRepeatingRequestError(final long lastFrameNumber) {
        public void onRepeatingRequestError(final long lastFrameNumber,
                final int repeatingRequestId) {
            mResultHandler.post(new Runnable() {
                @Override
                public void run() {
@@ -271,7 +272,8 @@ public class LegacyCameraDevice implements AutoCloseable {
                        Log.d(TAG, "doing onRepeatingRequestError callback.");
                    }
                    try {
                        mDeviceCallbacks.onRepeatingRequestError(lastFrameNumber);
                        mDeviceCallbacks.onRepeatingRequestError(lastFrameNumber,
                                repeatingRequestId);
                    } catch (RemoteException e) {
                        throw new IllegalStateException(
                                "Received remote exception during onRepeatingRequestError " +
+2 −1
Original line number Diff line number Diff line
@@ -939,7 +939,8 @@ public class RequestThreadManager {
                            Log.d(TAG, "Stopped repeating request. Last frame number is " +
                                    lastFrameNumber);
                        }
                        mDeviceState.setRepeatingRequestError(lastFrameNumber);
                        mDeviceState.setRepeatingRequestError(lastFrameNumber,
                                burstHolder.getRequestId());
                    }

                    if (DEBUG) {
Loading