Loading camera/cameraserver/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,6 @@ cc_binary { init_rc: ["cameraserver.rc"], vintf_fragments: [ "manifest_android.frameworks.cameraservice.service@2.0.xml", "manifest_android.frameworks.cameraservice.service@2.1.xml", ], } camera/cameraserver/manifest_android.frameworks.cameraservice.service@2.0.xml→camera/cameraserver/manifest_android.frameworks.cameraservice.service@2.1.xml +1 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ <hal> <name>android.frameworks.cameraservice.service</name> <transport>hwbinder</transport> <version>2.0</version> <version>2.1</version> <interface> <name>ICameraService</name> <instance>default</instance> Loading camera/ndk/Android.bp +6 −2 Original line number Diff line number Diff line Loading @@ -123,6 +123,7 @@ cc_library_shared { "android.frameworks.cameraservice.device@2.0", "android.frameworks.cameraservice.common@2.0", "android.frameworks.cameraservice.service@2.0", "android.frameworks.cameraservice.service@2.1", ], static_libs: [ "android.hardware.camera.common@1.0-helper", Loading @@ -140,9 +141,12 @@ cc_library_shared { } cc_test { name: "AImageReaderVendorTest", name: "ACameraNdkVendorTest", vendor: true, srcs: ["ndk_vendor/tests/AImageReaderVendorTest.cpp"], srcs: [ "ndk_vendor/tests/AImageReaderVendorTest.cpp", "ndk_vendor/tests/ACameraManagerTest.cpp", ], shared_libs: [ "libcamera2ndk_vendor", "libcamera_metadata", Loading camera/ndk/impl/ACameraManager.cpp +43 −14 Original line number Diff line number Diff line Loading @@ -130,6 +130,11 @@ sp<hardware::ICameraService> CameraManagerGlobal::getCameraServiceLocked() { mCameraService->addListener(mCameraServiceListener, &cameraStatuses); for (auto& c : cameraStatuses) { onStatusChangedLocked(c.status, c.cameraId); for (auto& unavailablePhysicalId : c.unavailablePhysicalIds) { onStatusChangedLocked(hardware::ICameraServiceListener::STATUS_NOT_PRESENT, c.cameraId, unavailablePhysicalId); } } // setup vendor tags Loading Loading @@ -200,9 +205,7 @@ void CameraManagerGlobal::DeathNotifier::binderDied(const wp<IBinder>&) void CameraManagerGlobal::registerExtendedAvailabilityCallback( const ACameraManager_ExtendedAvailabilityCallbacks *callback) { Mutex::Autolock _l(mLock); Callback cb(callback); mCallbacks.insert(cb); return registerAvailCallback<ACameraManager_ExtendedAvailabilityCallbacks>(callback); } void CameraManagerGlobal::unregisterExtendedAvailabilityCallback( Loading @@ -214,6 +217,18 @@ void CameraManagerGlobal::unregisterExtendedAvailabilityCallback( void CameraManagerGlobal::registerAvailabilityCallback( const ACameraManager_AvailabilityCallbacks *callback) { return registerAvailCallback<ACameraManager_AvailabilityCallbacks>(callback); } void CameraManagerGlobal::unregisterAvailabilityCallback( const ACameraManager_AvailabilityCallbacks *callback) { Mutex::Autolock _l(mLock); Callback cb(callback); mCallbacks.erase(cb); } template<class T> void CameraManagerGlobal::registerAvailCallback(const T *callback) { Mutex::Autolock _l(mLock); Callback cb(callback); auto pair = mCallbacks.insert(cb); Loading @@ -227,22 +242,31 @@ void CameraManagerGlobal::registerAvailabilityCallback( if (!pair.second.supportsHAL3) { continue; } // Camera available/unavailable callback sp<AMessage> msg = new AMessage(kWhatSendSingleCallback, mHandler); ACameraManager_AvailabilityCallback cb = isStatusAvailable(status) ? callback->onCameraAvailable : callback->onCameraUnavailable; msg->setPointer(kCallbackFpKey, (void *) cb); msg->setPointer(kContextKey, callback->context); ACameraManager_AvailabilityCallback cbFunc = isStatusAvailable(status) ? cb.mAvailable : cb.mUnavailable; msg->setPointer(kCallbackFpKey, (void *) cbFunc); msg->setPointer(kContextKey, cb.mContext); msg->setString(kCameraIdKey, AString(cameraId)); msg->post(); // Physical camera unavailable callback std::set<String8> unavailablePhysicalCameras = pair.second.getUnavailablePhysicalIds(); for (const auto& physicalCameraId : unavailablePhysicalCameras) { sp<AMessage> msg = new AMessage(kWhatSendSinglePhysicalCameraCallback, mHandler); ACameraManager_PhysicalCameraAvailabilityCallback cbFunc = cb.mPhysicalCamUnavailable; msg->setPointer(kCallbackFpKey, (void *) cbFunc); msg->setPointer(kContextKey, cb.mContext); msg->setString(kCameraIdKey, AString(cameraId)); msg->setString(kPhysicalCameraIdKey, AString(physicalCameraId)); msg->post(); } } } void CameraManagerGlobal::unregisterAvailabilityCallback( const ACameraManager_AvailabilityCallbacks *callback) { Mutex::Autolock _l(mLock); Callback cb(callback); mCallbacks.erase(cb); } bool CameraManagerGlobal::supportsCamera2ApiLocked(const String8 &cameraId) { Loading Loading @@ -550,6 +574,11 @@ bool CameraManagerGlobal::StatusAndHAL3Support::removeUnavailablePhysicalId( return count > 0; } std::set<String8> CameraManagerGlobal::StatusAndHAL3Support::getUnavailablePhysicalIds() { std::lock_guard<std::mutex> lock(mLock); return unavailablePhysicalIds; } } // namespace acam } // namespace android Loading camera/ndk/impl/ACameraManager.h +4 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ class CameraManagerGlobal final : public RefBase { const char* kCameraServiceName = "media.camera"; Mutex mLock; template<class T> void registerAvailCallback(const T *callback); class DeathNotifier : public IBinder::DeathRecipient { public: explicit DeathNotifier(CameraManagerGlobal* cm) : mCameraManager(cm) {} Loading Loading @@ -222,6 +225,7 @@ class CameraManagerGlobal final : public RefBase { bool removeUnavailablePhysicalId(const String8& physicalCameraId); int32_t getStatus(); void updateStatus(int32_t newStatus); std::set<String8> getUnavailablePhysicalIds(); }; // Map camera_id -> status Loading Loading
camera/cameraserver/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,6 @@ cc_binary { init_rc: ["cameraserver.rc"], vintf_fragments: [ "manifest_android.frameworks.cameraservice.service@2.0.xml", "manifest_android.frameworks.cameraservice.service@2.1.xml", ], }
camera/cameraserver/manifest_android.frameworks.cameraservice.service@2.0.xml→camera/cameraserver/manifest_android.frameworks.cameraservice.service@2.1.xml +1 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ <hal> <name>android.frameworks.cameraservice.service</name> <transport>hwbinder</transport> <version>2.0</version> <version>2.1</version> <interface> <name>ICameraService</name> <instance>default</instance> Loading
camera/ndk/Android.bp +6 −2 Original line number Diff line number Diff line Loading @@ -123,6 +123,7 @@ cc_library_shared { "android.frameworks.cameraservice.device@2.0", "android.frameworks.cameraservice.common@2.0", "android.frameworks.cameraservice.service@2.0", "android.frameworks.cameraservice.service@2.1", ], static_libs: [ "android.hardware.camera.common@1.0-helper", Loading @@ -140,9 +141,12 @@ cc_library_shared { } cc_test { name: "AImageReaderVendorTest", name: "ACameraNdkVendorTest", vendor: true, srcs: ["ndk_vendor/tests/AImageReaderVendorTest.cpp"], srcs: [ "ndk_vendor/tests/AImageReaderVendorTest.cpp", "ndk_vendor/tests/ACameraManagerTest.cpp", ], shared_libs: [ "libcamera2ndk_vendor", "libcamera_metadata", Loading
camera/ndk/impl/ACameraManager.cpp +43 −14 Original line number Diff line number Diff line Loading @@ -130,6 +130,11 @@ sp<hardware::ICameraService> CameraManagerGlobal::getCameraServiceLocked() { mCameraService->addListener(mCameraServiceListener, &cameraStatuses); for (auto& c : cameraStatuses) { onStatusChangedLocked(c.status, c.cameraId); for (auto& unavailablePhysicalId : c.unavailablePhysicalIds) { onStatusChangedLocked(hardware::ICameraServiceListener::STATUS_NOT_PRESENT, c.cameraId, unavailablePhysicalId); } } // setup vendor tags Loading Loading @@ -200,9 +205,7 @@ void CameraManagerGlobal::DeathNotifier::binderDied(const wp<IBinder>&) void CameraManagerGlobal::registerExtendedAvailabilityCallback( const ACameraManager_ExtendedAvailabilityCallbacks *callback) { Mutex::Autolock _l(mLock); Callback cb(callback); mCallbacks.insert(cb); return registerAvailCallback<ACameraManager_ExtendedAvailabilityCallbacks>(callback); } void CameraManagerGlobal::unregisterExtendedAvailabilityCallback( Loading @@ -214,6 +217,18 @@ void CameraManagerGlobal::unregisterExtendedAvailabilityCallback( void CameraManagerGlobal::registerAvailabilityCallback( const ACameraManager_AvailabilityCallbacks *callback) { return registerAvailCallback<ACameraManager_AvailabilityCallbacks>(callback); } void CameraManagerGlobal::unregisterAvailabilityCallback( const ACameraManager_AvailabilityCallbacks *callback) { Mutex::Autolock _l(mLock); Callback cb(callback); mCallbacks.erase(cb); } template<class T> void CameraManagerGlobal::registerAvailCallback(const T *callback) { Mutex::Autolock _l(mLock); Callback cb(callback); auto pair = mCallbacks.insert(cb); Loading @@ -227,22 +242,31 @@ void CameraManagerGlobal::registerAvailabilityCallback( if (!pair.second.supportsHAL3) { continue; } // Camera available/unavailable callback sp<AMessage> msg = new AMessage(kWhatSendSingleCallback, mHandler); ACameraManager_AvailabilityCallback cb = isStatusAvailable(status) ? callback->onCameraAvailable : callback->onCameraUnavailable; msg->setPointer(kCallbackFpKey, (void *) cb); msg->setPointer(kContextKey, callback->context); ACameraManager_AvailabilityCallback cbFunc = isStatusAvailable(status) ? cb.mAvailable : cb.mUnavailable; msg->setPointer(kCallbackFpKey, (void *) cbFunc); msg->setPointer(kContextKey, cb.mContext); msg->setString(kCameraIdKey, AString(cameraId)); msg->post(); // Physical camera unavailable callback std::set<String8> unavailablePhysicalCameras = pair.second.getUnavailablePhysicalIds(); for (const auto& physicalCameraId : unavailablePhysicalCameras) { sp<AMessage> msg = new AMessage(kWhatSendSinglePhysicalCameraCallback, mHandler); ACameraManager_PhysicalCameraAvailabilityCallback cbFunc = cb.mPhysicalCamUnavailable; msg->setPointer(kCallbackFpKey, (void *) cbFunc); msg->setPointer(kContextKey, cb.mContext); msg->setString(kCameraIdKey, AString(cameraId)); msg->setString(kPhysicalCameraIdKey, AString(physicalCameraId)); msg->post(); } } } void CameraManagerGlobal::unregisterAvailabilityCallback( const ACameraManager_AvailabilityCallbacks *callback) { Mutex::Autolock _l(mLock); Callback cb(callback); mCallbacks.erase(cb); } bool CameraManagerGlobal::supportsCamera2ApiLocked(const String8 &cameraId) { Loading Loading @@ -550,6 +574,11 @@ bool CameraManagerGlobal::StatusAndHAL3Support::removeUnavailablePhysicalId( return count > 0; } std::set<String8> CameraManagerGlobal::StatusAndHAL3Support::getUnavailablePhysicalIds() { std::lock_guard<std::mutex> lock(mLock); return unavailablePhysicalIds; } } // namespace acam } // namespace android Loading
camera/ndk/impl/ACameraManager.h +4 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ class CameraManagerGlobal final : public RefBase { const char* kCameraServiceName = "media.camera"; Mutex mLock; template<class T> void registerAvailCallback(const T *callback); class DeathNotifier : public IBinder::DeathRecipient { public: explicit DeathNotifier(CameraManagerGlobal* cm) : mCameraManager(cm) {} Loading Loading @@ -222,6 +225,7 @@ class CameraManagerGlobal final : public RefBase { bool removeUnavailablePhysicalId(const String8& physicalCameraId); int32_t getStatus(); void updateStatus(int32_t newStatus); std::set<String8> getUnavailablePhysicalIds(); }; // Map camera_id -> status Loading