Loading camera/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ subdirs = [ "device/3.2", "device/3.2/default", "device/3.3", "device/3.3/default", "metadata/3.2", "provider/2.4", "provider/2.4/default", Loading camera/device/3.2/default/CameraDevice.cpp +21 −4 Original line number Diff line number Diff line Loading @@ -177,7 +177,7 @@ Return<void> CameraDevice::open(const sp<ICameraDeviceCallback>& callback, open_ if (callback == nullptr) { ALOGE("%s: cannot open camera %s. callback is null!", __FUNCTION__, mCameraId.c_str()); _hidl_cb(Status::ILLEGAL_ARGUMENT, session); _hidl_cb(Status::ILLEGAL_ARGUMENT, nullptr); return Void(); } Loading @@ -186,7 +186,7 @@ Return<void> CameraDevice::open(const sp<ICameraDeviceCallback>& callback, open_ // this must be a disconnected camera ALOGE("%s: cannot open camera %s. camera is disconnected!", __FUNCTION__, mCameraId.c_str()); _hidl_cb(Status::CAMERA_DISCONNECTED, session); _hidl_cb(Status::CAMERA_DISCONNECTED, nullptr); return Void(); } else { mLock.lock(); Loading Loading @@ -239,7 +239,7 @@ Return<void> CameraDevice::open(const sp<ICameraDeviceCallback>& callback, open_ return Void(); } session = new CameraDeviceSession( session = createSession( device, info.static_camera_characteristics, callback); if (session == nullptr) { ALOGE("%s: camera device session allocation failed", __FUNCTION__); Loading @@ -255,9 +255,19 @@ Return<void> CameraDevice::open(const sp<ICameraDeviceCallback>& callback, open_ return Void(); } mSession = session; IF_ALOGV() { session->getInterface()->interfaceChain([]( ::android::hardware::hidl_vec<::android::hardware::hidl_string> interfaceChain) { ALOGV("Session interface chain:"); for (auto iface : interfaceChain) { ALOGV(" %s", iface.c_str()); } }); } mLock.unlock(); } _hidl_cb(status, session); _hidl_cb(status, session->getInterface()); return Void(); } Loading Loading @@ -286,6 +296,13 @@ Return<void> CameraDevice::dumpState(const ::android::hardware::hidl_handle& han session->dumpState(handle); return Void(); } sp<CameraDeviceSession> CameraDevice::createSession(camera3_device_t* device, const camera_metadata_t* deviceInfo, const sp<ICameraDeviceCallback>& callback) { return new CameraDeviceSession(device, deviceInfo, callback); } // End of methods from ::android::hardware::camera::device::V3_2::ICameraDevice. } // namespace implementation Loading camera/device/3.2/default/CameraDeviceSession.cpp +12 −9 Original line number Diff line number Diff line Loading @@ -49,7 +49,6 @@ CameraDeviceSession::CameraDeviceSession( mDerivePostRawSensKey(false), mNumPartialResults(1), mResultBatcher(callback) { mDeviceInfo = deviceInfo; camera_metadata_entry partialResultsCount = mDeviceInfo.find(ANDROID_REQUEST_PARTIAL_RESULT_COUNT); Loading Loading @@ -328,7 +327,8 @@ void CameraDeviceSession::ResultBatcher::setBatchedStreams( mStreamsToBatch = streamsToBatch; } void CameraDeviceSession::ResultBatcher::setResultMetadataQueue(std::shared_ptr<ResultMetadataQueue> q) { void CameraDeviceSession::ResultBatcher::setResultMetadataQueue( std::shared_ptr<ResultMetadataQueue> q) { Mutex::Autolock _l(mLock); mResultMetadataQueue = q; } Loading Loading @@ -387,7 +387,8 @@ void CameraDeviceSession::ResultBatcher::checkAndRemoveFirstBatch() { } } void CameraDeviceSession::ResultBatcher::sendBatchShutterCbsLocked(std::shared_ptr<InflightBatch> batch) { void CameraDeviceSession::ResultBatcher::sendBatchShutterCbsLocked( std::shared_ptr<InflightBatch> batch) { if (batch->mShutterDelivered) { ALOGW("%s: batch shutter callback already sent!", __FUNCTION__); return; Loading Loading @@ -441,7 +442,8 @@ void CameraDeviceSession::ResultBatcher::pushStreamBuffer( } } void CameraDeviceSession::ResultBatcher::sendBatchBuffersLocked(std::shared_ptr<InflightBatch> batch) { void CameraDeviceSession::ResultBatcher::sendBatchBuffersLocked( std::shared_ptr<InflightBatch> batch) { sendBatchBuffersLocked(batch, mStreamsToBatch); } Loading Loading @@ -736,7 +738,7 @@ void CameraDeviceSession::ResultBatcher::processCaptureResult(CaptureResult& res // Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow. Return<void> CameraDeviceSession::constructDefaultRequestSettings( RequestTemplate type, constructDefaultRequestSettings_cb _hidl_cb) { RequestTemplate type, ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb) { Status status = initStatus(); CameraMetadata outMetadata; const camera_metadata_t *rawRequest; Loading Loading @@ -802,7 +804,8 @@ android_dataspace CameraDeviceSession::mapToLegacyDataspace( } Return<void> CameraDeviceSession::configureStreams( const StreamConfiguration& requestedConfiguration, configureStreams_cb _hidl_cb) { const StreamConfiguration& requestedConfiguration, ICameraDeviceSession::configureStreams_cb _hidl_cb) { Status status = initStatus(); HalStreamConfiguration outStreams; Loading Loading @@ -960,13 +963,13 @@ void CameraDeviceSession::updateBufferCaches(const hidl_vec<BufferCache>& caches } Return<void> CameraDeviceSession::getCaptureRequestMetadataQueue( getCaptureRequestMetadataQueue_cb _hidl_cb) { ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb) { _hidl_cb(*mRequestMetadataQueue->getDesc()); return Void(); } Return<void> CameraDeviceSession::getCaptureResultMetadataQueue( getCaptureResultMetadataQueue_cb _hidl_cb) { ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb) { _hidl_cb(*mResultMetadataQueue->getDesc()); return Void(); } Loading @@ -974,7 +977,7 @@ Return<void> CameraDeviceSession::getCaptureResultMetadataQueue( Return<void> CameraDeviceSession::processCaptureRequest( const hidl_vec<CaptureRequest>& requests, const hidl_vec<BufferCache>& cachesToRemove, processCaptureRequest_cb _hidl_cb) { ICameraDeviceSession::processCaptureRequest_cb _hidl_cb) { updateBufferCaches(cachesToRemove); uint32_t numRequestProcessed = 0; Loading camera/device/3.2/default/CameraDeviceSession.h +71 −11 Original line number Diff line number Diff line Loading @@ -55,6 +55,8 @@ using ::android::hardware::hidl_string; using ::android::sp; using ::android::Mutex; struct Camera3Stream; /** * Function pointer types with C calling convention to * use for HAL callback functions. Loading @@ -69,12 +71,12 @@ extern "C" { const camera3_notify_msg_t *); } struct CameraDeviceSession : public ICameraDeviceSession, private camera3_callback_ops { struct CameraDeviceSession : public virtual RefBase, protected camera3_callback_ops { CameraDeviceSession(camera3_device_t*, const camera_metadata_t* deviceInfo, const sp<ICameraDeviceCallback>&); ~CameraDeviceSession(); virtual ~CameraDeviceSession(); // Call by CameraDevice to dump active device states void dumpState(const native_handle_t* fd); // Caller must use this method to check if CameraDeviceSession ctor failed Loading @@ -83,23 +85,35 @@ struct CameraDeviceSession : public ICameraDeviceSession, private camera3_callba void disconnect(); bool isClosed(); // Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow. // Retrieve the HIDL interface, split into its own class to avoid inheritance issues when // dealing with minor version revs and simultaneous implementation and interface inheritance virtual sp<ICameraDeviceSession> getInterface() { return new TrampolineSessionInterface_3_2(this); } protected: // Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow Return<void> constructDefaultRequestSettings( RequestTemplate type, constructDefaultRequestSettings_cb _hidl_cb) override; RequestTemplate type, ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb); Return<void> configureStreams( const StreamConfiguration& requestedConfiguration, configureStreams_cb _hidl_cb) override; const StreamConfiguration& requestedConfiguration, ICameraDeviceSession::configureStreams_cb _hidl_cb); Return<void> getCaptureRequestMetadataQueue( getCaptureRequestMetadataQueue_cb _hidl_cb) override; ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb); Return<void> getCaptureResultMetadataQueue( getCaptureResultMetadataQueue_cb _hidl_cb) override; ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb); Return<void> processCaptureRequest( const hidl_vec<CaptureRequest>& requests, const hidl_vec<BufferCache>& cachesToRemove, processCaptureRequest_cb _hidl_cb) override; Return<Status> flush() override; Return<void> close() override; ICameraDeviceSession::processCaptureRequest_cb _hidl_cb); Return<Status> flush(); Return<void> close(); protected: private: // protecting mClosed/mDisconnected/mInitFail mutable Mutex mStateLock; // device is closed either Loading Loading @@ -302,6 +316,52 @@ private: */ static callbacks_process_capture_result_t sProcessCaptureResult; static callbacks_notify_t sNotify; private: struct TrampolineSessionInterface_3_2 : public ICameraDeviceSession { TrampolineSessionInterface_3_2(sp<CameraDeviceSession> parent) : mParent(parent) {} virtual Return<void> constructDefaultRequestSettings( V3_2::RequestTemplate type, V3_2::ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb) override { return mParent->constructDefaultRequestSettings(type, _hidl_cb); } virtual Return<void> configureStreams( const V3_2::StreamConfiguration& requestedConfiguration, V3_2::ICameraDeviceSession::configureStreams_cb _hidl_cb) override { return mParent->configureStreams(requestedConfiguration, _hidl_cb); } virtual Return<void> processCaptureRequest(const hidl_vec<V3_2::CaptureRequest>& requests, const hidl_vec<V3_2::BufferCache>& cachesToRemove, V3_2::ICameraDeviceSession::processCaptureRequest_cb _hidl_cb) override { return mParent->processCaptureRequest(requests, cachesToRemove, _hidl_cb); } virtual Return<void> getCaptureRequestMetadataQueue( V3_2::ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb) override { return mParent->getCaptureRequestMetadataQueue(_hidl_cb); } virtual Return<void> getCaptureResultMetadataQueue( V3_2::ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb) override { return mParent->getCaptureResultMetadataQueue(_hidl_cb); } virtual Return<Status> flush() override { return mParent->flush(); } virtual Return<void> close() override { return mParent->close(); } private: sp<CameraDeviceSession> mParent; }; }; } // namespace implementation Loading camera/device/3.2/default/CameraDevice_3_2.h +7 −1 Original line number Diff line number Diff line Loading @@ -80,7 +80,13 @@ struct CameraDevice : public ICameraDevice { Return<void> dumpState(const ::android::hardware::hidl_handle& fd) override; /* End of Methods from ::android::hardware::camera::device::V3_2::ICameraDevice */ private: protected: // Overridden by child implementations for returning different versions of CameraDeviceSession virtual sp<CameraDeviceSession> createSession(camera3_device_t*, const camera_metadata_t* deviceInfo, const sp<ICameraDeviceCallback>&); const sp<CameraModule> mModule; const std::string mCameraId; // const after ctor Loading Loading
camera/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ subdirs = [ "device/3.2", "device/3.2/default", "device/3.3", "device/3.3/default", "metadata/3.2", "provider/2.4", "provider/2.4/default", Loading
camera/device/3.2/default/CameraDevice.cpp +21 −4 Original line number Diff line number Diff line Loading @@ -177,7 +177,7 @@ Return<void> CameraDevice::open(const sp<ICameraDeviceCallback>& callback, open_ if (callback == nullptr) { ALOGE("%s: cannot open camera %s. callback is null!", __FUNCTION__, mCameraId.c_str()); _hidl_cb(Status::ILLEGAL_ARGUMENT, session); _hidl_cb(Status::ILLEGAL_ARGUMENT, nullptr); return Void(); } Loading @@ -186,7 +186,7 @@ Return<void> CameraDevice::open(const sp<ICameraDeviceCallback>& callback, open_ // this must be a disconnected camera ALOGE("%s: cannot open camera %s. camera is disconnected!", __FUNCTION__, mCameraId.c_str()); _hidl_cb(Status::CAMERA_DISCONNECTED, session); _hidl_cb(Status::CAMERA_DISCONNECTED, nullptr); return Void(); } else { mLock.lock(); Loading Loading @@ -239,7 +239,7 @@ Return<void> CameraDevice::open(const sp<ICameraDeviceCallback>& callback, open_ return Void(); } session = new CameraDeviceSession( session = createSession( device, info.static_camera_characteristics, callback); if (session == nullptr) { ALOGE("%s: camera device session allocation failed", __FUNCTION__); Loading @@ -255,9 +255,19 @@ Return<void> CameraDevice::open(const sp<ICameraDeviceCallback>& callback, open_ return Void(); } mSession = session; IF_ALOGV() { session->getInterface()->interfaceChain([]( ::android::hardware::hidl_vec<::android::hardware::hidl_string> interfaceChain) { ALOGV("Session interface chain:"); for (auto iface : interfaceChain) { ALOGV(" %s", iface.c_str()); } }); } mLock.unlock(); } _hidl_cb(status, session); _hidl_cb(status, session->getInterface()); return Void(); } Loading Loading @@ -286,6 +296,13 @@ Return<void> CameraDevice::dumpState(const ::android::hardware::hidl_handle& han session->dumpState(handle); return Void(); } sp<CameraDeviceSession> CameraDevice::createSession(camera3_device_t* device, const camera_metadata_t* deviceInfo, const sp<ICameraDeviceCallback>& callback) { return new CameraDeviceSession(device, deviceInfo, callback); } // End of methods from ::android::hardware::camera::device::V3_2::ICameraDevice. } // namespace implementation Loading
camera/device/3.2/default/CameraDeviceSession.cpp +12 −9 Original line number Diff line number Diff line Loading @@ -49,7 +49,6 @@ CameraDeviceSession::CameraDeviceSession( mDerivePostRawSensKey(false), mNumPartialResults(1), mResultBatcher(callback) { mDeviceInfo = deviceInfo; camera_metadata_entry partialResultsCount = mDeviceInfo.find(ANDROID_REQUEST_PARTIAL_RESULT_COUNT); Loading Loading @@ -328,7 +327,8 @@ void CameraDeviceSession::ResultBatcher::setBatchedStreams( mStreamsToBatch = streamsToBatch; } void CameraDeviceSession::ResultBatcher::setResultMetadataQueue(std::shared_ptr<ResultMetadataQueue> q) { void CameraDeviceSession::ResultBatcher::setResultMetadataQueue( std::shared_ptr<ResultMetadataQueue> q) { Mutex::Autolock _l(mLock); mResultMetadataQueue = q; } Loading Loading @@ -387,7 +387,8 @@ void CameraDeviceSession::ResultBatcher::checkAndRemoveFirstBatch() { } } void CameraDeviceSession::ResultBatcher::sendBatchShutterCbsLocked(std::shared_ptr<InflightBatch> batch) { void CameraDeviceSession::ResultBatcher::sendBatchShutterCbsLocked( std::shared_ptr<InflightBatch> batch) { if (batch->mShutterDelivered) { ALOGW("%s: batch shutter callback already sent!", __FUNCTION__); return; Loading Loading @@ -441,7 +442,8 @@ void CameraDeviceSession::ResultBatcher::pushStreamBuffer( } } void CameraDeviceSession::ResultBatcher::sendBatchBuffersLocked(std::shared_ptr<InflightBatch> batch) { void CameraDeviceSession::ResultBatcher::sendBatchBuffersLocked( std::shared_ptr<InflightBatch> batch) { sendBatchBuffersLocked(batch, mStreamsToBatch); } Loading Loading @@ -736,7 +738,7 @@ void CameraDeviceSession::ResultBatcher::processCaptureResult(CaptureResult& res // Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow. Return<void> CameraDeviceSession::constructDefaultRequestSettings( RequestTemplate type, constructDefaultRequestSettings_cb _hidl_cb) { RequestTemplate type, ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb) { Status status = initStatus(); CameraMetadata outMetadata; const camera_metadata_t *rawRequest; Loading Loading @@ -802,7 +804,8 @@ android_dataspace CameraDeviceSession::mapToLegacyDataspace( } Return<void> CameraDeviceSession::configureStreams( const StreamConfiguration& requestedConfiguration, configureStreams_cb _hidl_cb) { const StreamConfiguration& requestedConfiguration, ICameraDeviceSession::configureStreams_cb _hidl_cb) { Status status = initStatus(); HalStreamConfiguration outStreams; Loading Loading @@ -960,13 +963,13 @@ void CameraDeviceSession::updateBufferCaches(const hidl_vec<BufferCache>& caches } Return<void> CameraDeviceSession::getCaptureRequestMetadataQueue( getCaptureRequestMetadataQueue_cb _hidl_cb) { ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb) { _hidl_cb(*mRequestMetadataQueue->getDesc()); return Void(); } Return<void> CameraDeviceSession::getCaptureResultMetadataQueue( getCaptureResultMetadataQueue_cb _hidl_cb) { ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb) { _hidl_cb(*mResultMetadataQueue->getDesc()); return Void(); } Loading @@ -974,7 +977,7 @@ Return<void> CameraDeviceSession::getCaptureResultMetadataQueue( Return<void> CameraDeviceSession::processCaptureRequest( const hidl_vec<CaptureRequest>& requests, const hidl_vec<BufferCache>& cachesToRemove, processCaptureRequest_cb _hidl_cb) { ICameraDeviceSession::processCaptureRequest_cb _hidl_cb) { updateBufferCaches(cachesToRemove); uint32_t numRequestProcessed = 0; Loading
camera/device/3.2/default/CameraDeviceSession.h +71 −11 Original line number Diff line number Diff line Loading @@ -55,6 +55,8 @@ using ::android::hardware::hidl_string; using ::android::sp; using ::android::Mutex; struct Camera3Stream; /** * Function pointer types with C calling convention to * use for HAL callback functions. Loading @@ -69,12 +71,12 @@ extern "C" { const camera3_notify_msg_t *); } struct CameraDeviceSession : public ICameraDeviceSession, private camera3_callback_ops { struct CameraDeviceSession : public virtual RefBase, protected camera3_callback_ops { CameraDeviceSession(camera3_device_t*, const camera_metadata_t* deviceInfo, const sp<ICameraDeviceCallback>&); ~CameraDeviceSession(); virtual ~CameraDeviceSession(); // Call by CameraDevice to dump active device states void dumpState(const native_handle_t* fd); // Caller must use this method to check if CameraDeviceSession ctor failed Loading @@ -83,23 +85,35 @@ struct CameraDeviceSession : public ICameraDeviceSession, private camera3_callba void disconnect(); bool isClosed(); // Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow. // Retrieve the HIDL interface, split into its own class to avoid inheritance issues when // dealing with minor version revs and simultaneous implementation and interface inheritance virtual sp<ICameraDeviceSession> getInterface() { return new TrampolineSessionInterface_3_2(this); } protected: // Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow Return<void> constructDefaultRequestSettings( RequestTemplate type, constructDefaultRequestSettings_cb _hidl_cb) override; RequestTemplate type, ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb); Return<void> configureStreams( const StreamConfiguration& requestedConfiguration, configureStreams_cb _hidl_cb) override; const StreamConfiguration& requestedConfiguration, ICameraDeviceSession::configureStreams_cb _hidl_cb); Return<void> getCaptureRequestMetadataQueue( getCaptureRequestMetadataQueue_cb _hidl_cb) override; ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb); Return<void> getCaptureResultMetadataQueue( getCaptureResultMetadataQueue_cb _hidl_cb) override; ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb); Return<void> processCaptureRequest( const hidl_vec<CaptureRequest>& requests, const hidl_vec<BufferCache>& cachesToRemove, processCaptureRequest_cb _hidl_cb) override; Return<Status> flush() override; Return<void> close() override; ICameraDeviceSession::processCaptureRequest_cb _hidl_cb); Return<Status> flush(); Return<void> close(); protected: private: // protecting mClosed/mDisconnected/mInitFail mutable Mutex mStateLock; // device is closed either Loading Loading @@ -302,6 +316,52 @@ private: */ static callbacks_process_capture_result_t sProcessCaptureResult; static callbacks_notify_t sNotify; private: struct TrampolineSessionInterface_3_2 : public ICameraDeviceSession { TrampolineSessionInterface_3_2(sp<CameraDeviceSession> parent) : mParent(parent) {} virtual Return<void> constructDefaultRequestSettings( V3_2::RequestTemplate type, V3_2::ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb) override { return mParent->constructDefaultRequestSettings(type, _hidl_cb); } virtual Return<void> configureStreams( const V3_2::StreamConfiguration& requestedConfiguration, V3_2::ICameraDeviceSession::configureStreams_cb _hidl_cb) override { return mParent->configureStreams(requestedConfiguration, _hidl_cb); } virtual Return<void> processCaptureRequest(const hidl_vec<V3_2::CaptureRequest>& requests, const hidl_vec<V3_2::BufferCache>& cachesToRemove, V3_2::ICameraDeviceSession::processCaptureRequest_cb _hidl_cb) override { return mParent->processCaptureRequest(requests, cachesToRemove, _hidl_cb); } virtual Return<void> getCaptureRequestMetadataQueue( V3_2::ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb) override { return mParent->getCaptureRequestMetadataQueue(_hidl_cb); } virtual Return<void> getCaptureResultMetadataQueue( V3_2::ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb) override { return mParent->getCaptureResultMetadataQueue(_hidl_cb); } virtual Return<Status> flush() override { return mParent->flush(); } virtual Return<void> close() override { return mParent->close(); } private: sp<CameraDeviceSession> mParent; }; }; } // namespace implementation Loading
camera/device/3.2/default/CameraDevice_3_2.h +7 −1 Original line number Diff line number Diff line Loading @@ -80,7 +80,13 @@ struct CameraDevice : public ICameraDevice { Return<void> dumpState(const ::android::hardware::hidl_handle& fd) override; /* End of Methods from ::android::hardware::camera::device::V3_2::ICameraDevice */ private: protected: // Overridden by child implementations for returning different versions of CameraDeviceSession virtual sp<CameraDeviceSession> createSession(camera3_device_t*, const camera_metadata_t* deviceInfo, const sp<ICameraDeviceCallback>&); const sp<CameraModule> mModule; const std::string mCameraId; // const after ctor Loading