Loading camera/ndk/ndk_vendor/impl/ACameraDevice.cpp +10 −8 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ CameraDevice::CameraDevice( __FUNCTION__, strerror(-err), err); setCameraDeviceErrorLocked(ACAMERA_ERROR_CAMERA_DEVICE); } mHandler = new CallbackHandler(); mHandler = new CallbackHandler(id); mCbLooper->registerHandler(mHandler); const CameraMetadata& metadata = mChars->getInternalData(); Loading Loading @@ -918,6 +918,8 @@ CameraDevice::onCaptureErrorLocked( return; } CameraDevice::CallbackHandler::CallbackHandler(const char *id) : mId(id) { } void CameraDevice::CallbackHandler::onMessageReceived( const sp<AMessage> &msg) { switch (msg->what()) { Loading Loading @@ -1012,9 +1014,9 @@ void CameraDevice::CallbackHandler::onMessageReceived( return; } sp<ACameraCaptureSession> session(static_cast<ACameraCaptureSession*>(obj.get())); ACameraDevice* device = session->getDevice(); mCachedSessions.push(session); sp<CaptureRequest> requestSp = nullptr; const char *id_cstr = mId.c_str(); switch (msg->what()) { case kWhatCaptureStart: case kWhatCaptureResult: Loading Loading @@ -1063,7 +1065,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( ALOGE("%s: Cannot find timestamp!", __FUNCTION__); return; } ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onStart)(context, session.get(), request, timestamp); freeACaptureRequest(request); break; Loading @@ -1086,7 +1088,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( return; } sp<ACameraMetadata> result(static_cast<ACameraMetadata*>(obj.get())); ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onResult)(context, session.get(), request, result.get()); freeACaptureRequest(request); break; Loading Loading @@ -1139,7 +1141,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( physicalMetadataCopyPtrs.push_back(physicalMetadataCopy[i].get()); } ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onResult)(context, session.get(), request, result.get(), physicalResultInfo.size(), physicalCameraIdPtrs.data(), physicalMetadataCopyPtrs.data()); Loading Loading @@ -1168,7 +1170,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( static_cast<CameraCaptureFailure*>(obj.get())); ACameraCaptureFailure* failure = static_cast<ACameraCaptureFailure*>(failureSp.get()); ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onFail)(context, session.get(), request, failure); freeACaptureRequest(request); break; Loading Loading @@ -1201,7 +1203,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( failure.physicalCameraId = nullptr; } failure.captureFailure = *failureSp; ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onFail)(context, session.get(), request, &failure); freeACaptureRequest(request); break; Loading Loading @@ -1278,7 +1280,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( return; } ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onBufferLost)(context, session.get(), request, anw, frameNumber); freeACaptureRequest(request); break; Loading camera/ndk/ndk_vendor/impl/ACameraDevice.h +2 −0 Original line number Diff line number Diff line Loading @@ -266,9 +266,11 @@ class CameraDevice final : public RefBase { class CallbackHandler : public AHandler { public: explicit CallbackHandler(const char *id); void onMessageReceived(const sp<AMessage> &msg) override; private: std::string mId; // This handler will cache all capture session sp until kWhatCleanUpSessions // is processed. This is used to guarantee the last session reference is always // being removed in callback thread without holding camera device lock Loading Loading
camera/ndk/ndk_vendor/impl/ACameraDevice.cpp +10 −8 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ CameraDevice::CameraDevice( __FUNCTION__, strerror(-err), err); setCameraDeviceErrorLocked(ACAMERA_ERROR_CAMERA_DEVICE); } mHandler = new CallbackHandler(); mHandler = new CallbackHandler(id); mCbLooper->registerHandler(mHandler); const CameraMetadata& metadata = mChars->getInternalData(); Loading Loading @@ -918,6 +918,8 @@ CameraDevice::onCaptureErrorLocked( return; } CameraDevice::CallbackHandler::CallbackHandler(const char *id) : mId(id) { } void CameraDevice::CallbackHandler::onMessageReceived( const sp<AMessage> &msg) { switch (msg->what()) { Loading Loading @@ -1012,9 +1014,9 @@ void CameraDevice::CallbackHandler::onMessageReceived( return; } sp<ACameraCaptureSession> session(static_cast<ACameraCaptureSession*>(obj.get())); ACameraDevice* device = session->getDevice(); mCachedSessions.push(session); sp<CaptureRequest> requestSp = nullptr; const char *id_cstr = mId.c_str(); switch (msg->what()) { case kWhatCaptureStart: case kWhatCaptureResult: Loading Loading @@ -1063,7 +1065,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( ALOGE("%s: Cannot find timestamp!", __FUNCTION__); return; } ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onStart)(context, session.get(), request, timestamp); freeACaptureRequest(request); break; Loading @@ -1086,7 +1088,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( return; } sp<ACameraMetadata> result(static_cast<ACameraMetadata*>(obj.get())); ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onResult)(context, session.get(), request, result.get()); freeACaptureRequest(request); break; Loading Loading @@ -1139,7 +1141,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( physicalMetadataCopyPtrs.push_back(physicalMetadataCopy[i].get()); } ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onResult)(context, session.get(), request, result.get(), physicalResultInfo.size(), physicalCameraIdPtrs.data(), physicalMetadataCopyPtrs.data()); Loading Loading @@ -1168,7 +1170,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( static_cast<CameraCaptureFailure*>(obj.get())); ACameraCaptureFailure* failure = static_cast<ACameraCaptureFailure*>(failureSp.get()); ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onFail)(context, session.get(), request, failure); freeACaptureRequest(request); break; Loading Loading @@ -1201,7 +1203,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( failure.physicalCameraId = nullptr; } failure.captureFailure = *failureSp; ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onFail)(context, session.get(), request, &failure); freeACaptureRequest(request); break; Loading Loading @@ -1278,7 +1280,7 @@ void CameraDevice::CallbackHandler::onMessageReceived( return; } ACaptureRequest* request = allocateACaptureRequest(requestSp, device->getId()); ACaptureRequest* request = allocateACaptureRequest(requestSp, id_cstr); (*onBufferLost)(context, session.get(), request, anw, frameNumber); freeACaptureRequest(request); break; Loading
camera/ndk/ndk_vendor/impl/ACameraDevice.h +2 −0 Original line number Diff line number Diff line Loading @@ -266,9 +266,11 @@ class CameraDevice final : public RefBase { class CallbackHandler : public AHandler { public: explicit CallbackHandler(const char *id); void onMessageReceived(const sp<AMessage> &msg) override; private: std::string mId; // This handler will cache all capture session sp until kWhatCleanUpSessions // is processed. This is used to guarantee the last session reference is always // being removed in callback thread without holding camera device lock Loading