|
|
|
@ -55,6 +55,7 @@ const char* CameraDevice::kCaptureFailureKey = "CaptureFailure";
|
|
|
|
|
const char* CameraDevice::kSequenceIdKey = "SequenceId";
|
|
|
|
|
const char* CameraDevice::kFrameNumberKey = "FrameNumber";
|
|
|
|
|
const char* CameraDevice::kAnwKey = "Anw";
|
|
|
|
|
const char* CameraDevice::kFailingPhysicalCameraId= "FailingPhysicalCameraId";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* CameraDevice Implementation
|
|
|
|
@ -894,10 +895,19 @@ CameraDevice::onCaptureErrorLocked(
|
|
|
|
|
failure->sequenceId = sequenceId;
|
|
|
|
|
failure->wasImageCaptured = (errorCode == ErrorCode::CAMERA_RESULT);
|
|
|
|
|
|
|
|
|
|
sp<AMessage> msg = new AMessage(kWhatCaptureFail, mHandler);
|
|
|
|
|
sp<AMessage> msg = new AMessage(cbh.mIsLogicalCameraCallback ? kWhatLogicalCaptureFail :
|
|
|
|
|
kWhatCaptureFail, mHandler);
|
|
|
|
|
msg->setPointer(kContextKey, cbh.mContext);
|
|
|
|
|
msg->setObject(kSessionSpKey, session);
|
|
|
|
|
msg->setPointer(kCallbackFpKey, (void*) onError);
|
|
|
|
|
if (cbh.mIsLogicalCameraCallback) {
|
|
|
|
|
if (resultExtras.errorPhysicalCameraId.size() > 0) {
|
|
|
|
|
msg->setString(kFailingPhysicalCameraId, resultExtras.errorPhysicalCameraId.c_str(),
|
|
|
|
|
resultExtras.errorPhysicalCameraId.size());
|
|
|
|
|
}
|
|
|
|
|
msg->setPointer(kCallbackFpKey, (void*) cbh.mOnLogicalCameraCaptureFailed);
|
|
|
|
|
} else {
|
|
|
|
|
msg->setPointer(kCallbackFpKey, (void*) onError);
|
|
|
|
|
}
|
|
|
|
|
msg->setObject(kCaptureRequestKey, request);
|
|
|
|
|
msg->setObject(kCaptureFailureKey, failure);
|
|
|
|
|
postSessionMsgAndCleanup(msg);
|
|
|
|
@ -919,6 +929,7 @@ void CameraDevice::CallbackHandler::onMessageReceived(
|
|
|
|
|
case kWhatCaptureResult:
|
|
|
|
|
case kWhatLogicalCaptureResult:
|
|
|
|
|
case kWhatCaptureFail:
|
|
|
|
|
case kWhatLogicalCaptureFail:
|
|
|
|
|
case kWhatCaptureSeqEnd:
|
|
|
|
|
case kWhatCaptureSeqAbort:
|
|
|
|
|
case kWhatCaptureBufferLost:
|
|
|
|
@ -990,6 +1001,7 @@ void CameraDevice::CallbackHandler::onMessageReceived(
|
|
|
|
|
case kWhatCaptureResult:
|
|
|
|
|
case kWhatLogicalCaptureResult:
|
|
|
|
|
case kWhatCaptureFail:
|
|
|
|
|
case kWhatLogicalCaptureFail:
|
|
|
|
|
case kWhatCaptureSeqEnd:
|
|
|
|
|
case kWhatCaptureSeqAbort:
|
|
|
|
|
case kWhatCaptureBufferLost:
|
|
|
|
@ -1009,6 +1021,7 @@ void CameraDevice::CallbackHandler::onMessageReceived(
|
|
|
|
|
case kWhatCaptureResult:
|
|
|
|
|
case kWhatLogicalCaptureResult:
|
|
|
|
|
case kWhatCaptureFail:
|
|
|
|
|
case kWhatLogicalCaptureFail:
|
|
|
|
|
case kWhatCaptureBufferLost:
|
|
|
|
|
found = msg->findObject(kCaptureRequestKey, &obj);
|
|
|
|
|
if (!found) {
|
|
|
|
@ -1161,6 +1174,39 @@ void CameraDevice::CallbackHandler::onMessageReceived(
|
|
|
|
|
freeACaptureRequest(request);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case kWhatLogicalCaptureFail:
|
|
|
|
|
{
|
|
|
|
|
ACameraCaptureSession_logicalCamera_captureCallback_failed onFail;
|
|
|
|
|
found = msg->findPointer(kCallbackFpKey, (void**) &onFail);
|
|
|
|
|
if (!found) {
|
|
|
|
|
ALOGE("%s: Cannot find capture fail callback!", __FUNCTION__);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (onFail == nullptr) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
found = msg->findObject(kCaptureFailureKey, &obj);
|
|
|
|
|
if (!found) {
|
|
|
|
|
ALOGE("%s: Cannot find capture failure!", __FUNCTION__);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
sp<CameraCaptureFailure> failureSp(
|
|
|
|
|
static_cast<CameraCaptureFailure*>(obj.get()));
|
|
|
|
|
ALogicalCameraCaptureFailure failure;
|
|
|
|
|
AString physicalCameraId;
|
|
|
|
|
found = msg->findString(kFailingPhysicalCameraId, &physicalCameraId);
|
|
|
|
|
if (found && !physicalCameraId.empty()) {
|
|
|
|
|
failure.physicalCameraId = physicalCameraId.c_str();
|
|
|
|
|
} else {
|
|
|
|
|
failure.physicalCameraId = nullptr;
|
|
|
|
|
}
|
|
|
|
|
failure.captureFailure = *failureSp;
|
|
|
|
|
ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId());
|
|
|
|
|
(*onFail)(context, session.get(), request, &failure);
|
|
|
|
|
freeACaptureRequest(request);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case kWhatCaptureSeqEnd:
|
|
|
|
|
{
|
|
|
|
|
ACameraCaptureSession_captureCallback_sequenceEnd onSeqEnd;
|
|
|
|
@ -1256,6 +1302,7 @@ CameraDevice::CallbackHolder::CallbackHolder(
|
|
|
|
|
|
|
|
|
|
if (cbs != nullptr) {
|
|
|
|
|
mOnCaptureCompleted = cbs->onCaptureCompleted;
|
|
|
|
|
mOnCaptureFailed = cbs->onCaptureFailed;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1271,6 +1318,7 @@ CameraDevice::CallbackHolder::CallbackHolder(
|
|
|
|
|
|
|
|
|
|
if (lcbs != nullptr) {
|
|
|
|
|
mOnLogicalCameraCaptureCompleted = lcbs->onLogicalCameraCaptureCompleted;
|
|
|
|
|
mOnLogicalCameraCaptureFailed = lcbs->onLogicalCameraCaptureFailed;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1368,8 +1416,9 @@ android::hardware::Return<void>
|
|
|
|
|
CameraDevice::ServiceCallback::onDeviceError(
|
|
|
|
|
ErrorCode errorCode,
|
|
|
|
|
const CaptureResultExtras& resultExtras) {
|
|
|
|
|
ALOGD("Device error received, code %d, frame number %" PRId64 ", request ID %d, subseq ID %d",
|
|
|
|
|
errorCode, resultExtras.frameNumber, resultExtras.requestId, resultExtras.burstId);
|
|
|
|
|
ALOGD("Device error received, code %d, frame number %" PRId64 ", request ID %d, subseq ID %d"
|
|
|
|
|
" physical camera ID %s", errorCode, resultExtras.frameNumber, resultExtras.requestId,
|
|
|
|
|
resultExtras.burstId, resultExtras.errorPhysicalCameraId.c_str());
|
|
|
|
|
auto ret = Void();
|
|
|
|
|
sp<CameraDevice> dev = mDevice.promote();
|
|
|
|
|
if (dev == nullptr) {
|
|
|
|
|