@ -29,6 +29,7 @@
# include <future>
# include <inttypes.h>
# include <hardware/camera_common.h>
# include <android/hidl/manager/1.2/IServiceManager.h>
# include <hidl/ServiceManagement.h>
# include <functional>
# include <camera_metadata_hidden.h>
@ -47,10 +48,6 @@ using namespace ::android::hardware::camera::common::V1_0;
using std : : literals : : chrono_literals : : operator " " s ;
namespace {
// Hardcoded name for the passthrough HAL implementation, since it can't be discovered via the
// service manager
const std : : string kLegacyProviderName ( " legacy/0 " ) ;
const std : : string kExternalProviderName ( " external/0 " ) ;
const bool kEnableLazyHal ( property_get_bool ( " ro.camera.enableLazyHal " , false ) ) ;
} // anonymous namespace
@ -62,6 +59,19 @@ CameraProviderManager::sHardwareServiceInteractionProxy{};
CameraProviderManager : : ~ CameraProviderManager ( ) {
}
hardware : : hidl_vec < hardware : : hidl_string >
CameraProviderManager : : HardwareServiceInteractionProxy : : listServices ( ) {
hardware : : hidl_vec < hardware : : hidl_string > ret ;
auto manager = hardware : : defaultServiceManager1_2 ( ) ;
if ( manager ! = nullptr ) {
manager - > listManifestByInterface ( provider : : V2_4 : : ICameraProvider : : descriptor ,
[ & ret ] ( const hardware : : hidl_vec < hardware : : hidl_string > & registered ) {
ret = registered ;
} ) ;
}
return ret ;
}
status_t CameraProviderManager : : initialize ( wp < CameraProviderManager : : StatusListener > listener ,
ServiceInteractionProxy * proxy ) {
std : : lock_guard < std : : mutex > lock ( mInterfaceMutex ) ;
@ -84,9 +94,10 @@ status_t CameraProviderManager::initialize(wp<CameraProviderManager::StatusListe
return INVALID_OPERATION ;
}
// See if there's a passthrough HAL, but let's not complain if there's not
addProviderLocked ( kLegacyProviderName , /*expected*/ false ) ;
addProviderLocked ( kExternalProviderName , /*expected*/ false ) ;
for ( const auto & instance : mServiceProxy - > listServices ( ) ) {
this - > addProviderLocked ( instance ) ;
}
IPCThreadState : : self ( ) - > flushCommands ( ) ;
@ -1087,7 +1098,7 @@ bool CameraProviderManager::isHiddenPhysicalCamera(const std::string& cameraId)
return false ;
}
status_t CameraProviderManager : : addProviderLocked ( const std : : string & newProvider , bool expected ) {
status_t CameraProviderManager : : addProviderLocked ( const std : : string & newProvider ) {
for ( const auto & providerInfo : mProviders ) {
if ( providerInfo - > mProviderName = = newProvider ) {
ALOGW ( " %s: Camera provider HAL with name '%s' already registered " , __FUNCTION__ ,
@ -1100,13 +1111,9 @@ status_t CameraProviderManager::addProviderLocked(const std::string& newProvider
interface = mServiceProxy - > getService ( newProvider ) ;
if ( interface = = nullptr ) {
if ( expected ) {
ALOGE ( " %s: Camera provider HAL '%s' is not actually available " , __FUNCTION__ ,
newProvider . c_str ( ) ) ;
return BAD_VALUE ;
} else {
return OK ;
}
ALOGE ( " %s: Camera provider HAL '%s' is not actually available " , __FUNCTION__ ,
newProvider . c_str ( ) ) ;
return BAD_VALUE ;
}
sp < ProviderInfo > providerInfo = new ProviderInfo ( newProvider , this ) ;