Merge "Camera: fix race in onRepeatingRequestError callback" into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f23334869d
@@ -1769,7 +1769,7 @@ public class CameraDeviceImpl extends CameraDevice
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRepeatingRequestError(long lastFrameNumber) {
|
public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "Repeating request error received. Last frame number is " +
|
Log.d(TAG, "Repeating request error received. Last frame number is " +
|
||||||
lastFrameNumber);
|
lastFrameNumber);
|
||||||
@@ -1782,9 +1782,12 @@ public class CameraDeviceImpl extends CameraDevice
|
|||||||
}
|
}
|
||||||
|
|
||||||
checkEarlyTriggerSequenceComplete(mRepeatingRequestId, lastFrameNumber);
|
checkEarlyTriggerSequenceComplete(mRepeatingRequestId, lastFrameNumber);
|
||||||
|
// Check if there is already a new repeating request
|
||||||
|
if (mRepeatingRequestId == repeatingRequestId) {
|
||||||
mRepeatingRequestId = REQUEST_ID_NONE;
|
mRepeatingRequestId = REQUEST_ID_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeviceIdle() {
|
public void onDeviceIdle() {
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class CameraDeviceState {
|
|||||||
void onCaptureStarted(RequestHolder holder, long timestamp);
|
void onCaptureStarted(RequestHolder holder, long timestamp);
|
||||||
void onCaptureResult(CameraMetadataNative result, RequestHolder holder);
|
void onCaptureResult(CameraMetadataNative result, RequestHolder holder);
|
||||||
void onRequestQueueEmpty();
|
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>
|
* <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 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() {
|
mCurrentHandler.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
mCurrentListener.onRepeatingRequestError(lastFrameNumber);
|
mCurrentListener.onRepeatingRequestError(lastFrameNumber, repeatingRequestId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -264,10 +264,10 @@ public class CameraDeviceUserShim implements ICameraDeviceUser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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,
|
Message msg = getHandler().obtainMessage(REPEATING_REQUEST_ERROR,
|
||||||
/*arg1*/ (int) (lastFrameNumber & 0xFFFFFFFFL),
|
/*obj*/ objArray);
|
||||||
/*arg2*/ (int) ( (lastFrameNumber >> 32) & 0xFFFFFFFFL));
|
|
||||||
getHandler().sendMessage(msg);
|
getHandler().sendMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,9 +329,10 @@ public class CameraDeviceUserShim implements ICameraDeviceUser {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case REPEATING_REQUEST_ERROR: {
|
case REPEATING_REQUEST_ERROR: {
|
||||||
long lastFrameNumber = msg.arg2 & 0xFFFFFFFFL;
|
Object[] objArray = (Object[]) msg.obj;
|
||||||
lastFrameNumber = (lastFrameNumber << 32) | (msg.arg1 & 0xFFFFFFFFL);
|
long lastFrameNumber = (Long) objArray[0];
|
||||||
mCallbacks.onRepeatingRequestError(lastFrameNumber);
|
int repeatingRequestId = (Integer) objArray[1];
|
||||||
|
mCallbacks.onRepeatingRequestError(lastFrameNumber, repeatingRequestId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case REQUEST_QUEUE_EMPTY: {
|
case REQUEST_QUEUE_EMPTY: {
|
||||||
|
|||||||
@@ -263,7 +263,8 @@ public class LegacyCameraDevice implements AutoCloseable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRepeatingRequestError(final long lastFrameNumber) {
|
public void onRepeatingRequestError(final long lastFrameNumber,
|
||||||
|
final int repeatingRequestId) {
|
||||||
mResultHandler.post(new Runnable() {
|
mResultHandler.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -271,7 +272,8 @@ public class LegacyCameraDevice implements AutoCloseable {
|
|||||||
Log.d(TAG, "doing onRepeatingRequestError callback.");
|
Log.d(TAG, "doing onRepeatingRequestError callback.");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
mDeviceCallbacks.onRepeatingRequestError(lastFrameNumber);
|
mDeviceCallbacks.onRepeatingRequestError(lastFrameNumber,
|
||||||
|
repeatingRequestId);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Received remote exception during onRepeatingRequestError " +
|
"Received remote exception during onRepeatingRequestError " +
|
||||||
|
|||||||
@@ -939,7 +939,8 @@ public class RequestThreadManager {
|
|||||||
Log.d(TAG, "Stopped repeating request. Last frame number is " +
|
Log.d(TAG, "Stopped repeating request. Last frame number is " +
|
||||||
lastFrameNumber);
|
lastFrameNumber);
|
||||||
}
|
}
|
||||||
mDeviceState.setRepeatingRequestError(lastFrameNumber);
|
mDeviceState.setRepeatingRequestError(lastFrameNumber,
|
||||||
|
burstHolder.getRequestId());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ public class CameraBinderTest extends AndroidTestCase {
|
|||||||
* @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError()
|
* @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onRepeatingRequestError(long lastFrameNumber) {
|
public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ public class CameraDeviceBinderTest extends AndroidTestCase {
|
|||||||
* @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError()
|
* @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onRepeatingRequestError(long lastFrameNumber) {
|
public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user