diff options
7 files changed, 25 insertions, 16 deletions
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index 0d5c5e3538c1..bfeb14dedb5c 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -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,7 +1782,10 @@ public class CameraDeviceImpl extends CameraDevice } checkEarlyTriggerSequenceComplete(mRepeatingRequestId, lastFrameNumber); - mRepeatingRequestId = REQUEST_ID_NONE; + // Check if there is already a new repeating request + if (mRepeatingRequestId == repeatingRequestId) { + mRepeatingRequestId = REQUEST_ID_NONE; + } } } diff --git a/core/java/android/hardware/camera2/legacy/CameraDeviceState.java b/core/java/android/hardware/camera2/legacy/CameraDeviceState.java index 135d92ba6ea7..89ecd5f1ce63 100644 --- a/core/java/android/hardware/camera2/legacy/CameraDeviceState.java +++ b/core/java/android/hardware/camera2/legacy/CameraDeviceState.java @@ -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); } }); } diff --git a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java index d8df9a067c63..49d4096e3f3e 100644 --- a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java +++ b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java @@ -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: { diff --git a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java index 621ea8455d1e..cb59fd14f5c5 100644 --- a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java +++ b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java @@ -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 " + diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java index 565a43e933ce..aaf07e60bef5 100644 --- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java +++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java @@ -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) { diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java index fcb861ce07da..cf5882f92b00 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java @@ -271,7 +271,7 @@ public class CameraBinderTest extends AndroidTestCase { * @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError() */ @Override - public void onRepeatingRequestError(long lastFrameNumber) { + public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) { // TODO Auto-generated method stub } } diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java index 476f0166ca0d..e628b6825208 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java @@ -161,7 +161,7 @@ public class CameraDeviceBinderTest extends AndroidTestCase { * @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError() */ @Override - public void onRepeatingRequestError(long lastFrameNumber) { + public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) { // TODO Auto-generated method stub } } |