@ -259,15 +259,27 @@ camera_status_t CameraDevice::isSessionConfigurationSupported(
}
}
static void addMetadataToPhysicalCameraSettings ( const CameraMetadata * metadata ,
const std : : string & cameraId , PhysicalCameraSettings * physicalCameraSettings ) {
CameraMetadata metadataCopy = * metadata ;
camera_metadata_t * camera_metadata = metadataCopy . release ( ) ;
HCameraMetadata hCameraMetadata ;
utils : : convertToHidl ( camera_metadata , & hCameraMetadata , /*shouldOwn*/ true ) ;
physicalCameraSettings - > settings . metadata ( std : : move ( hCameraMetadata ) ) ;
physicalCameraSettings - > id = cameraId ;
}
void CameraDevice : : addRequestSettingsMetadata ( ACaptureRequest * aCaptureRequest ,
sp < CaptureRequest > & req ) {
CameraMetadata metadataCopy = aCaptureRequest - > settings - > getInternalData ( ) ;
const camera_metadata_t * camera_metadata = metadataCopy . getAndLock ( ) ;
HCameraMetadata hCameraMetadata ;
utils : : convertToHidl ( camera_metadata , & hCameraMetadata ) ;
metadataCopy . unlock ( camera_metadata ) ;
req - > mPhysicalCameraSettings . resize ( 1 ) ;
req - > mPhysicalCameraSettings [ 0 ] . settings . metadata ( std : : move ( hCameraMetadata ) ) ;
req - > mPhysicalCameraSettings . resize ( 1 + aCaptureRequest - > physicalSettings . size ( ) ) ;
addMetadataToPhysicalCameraSettings ( & ( aCaptureRequest - > settings - > getInternalData ( ) ) , getId ( ) ,
& ( req - > mPhysicalCameraSettings [ 0 ] ) ) ;
size_t i = 1 ;
for ( auto & physicalSetting : aCaptureRequest - > physicalSettings ) {
addMetadataToPhysicalCameraSettings ( & ( physicalSetting . second - > getInternalData ( ) ) ,
physicalSetting . first , & ( req - > mPhysicalCameraSettings [ i ] ) ) ;
i + + ;
}
}
camera_status_t CameraDevice : : updateOutputConfigurationLocked ( ACaptureSessionOutput * output ) {
@ -398,10 +410,9 @@ void CameraDevice::allocateOneCaptureRequestMetadata(
cameraSettings . id = id ;
// TODO: Do we really need to copy the metadata here ?
CameraMetadata metadataCopy = metadata - > getInternalData ( ) ;
const camera_metadata_t * cameraMetadata = metadataCopy . getAndLock ( ) ;
camera_metadata_t * cameraMetadata = metadataCopy . release ( ) ;
HCameraMetadata hCameraMetadata ;
utils : : convertToHidl ( cameraMetadata , & hCameraMetadata ) ;
metadataCopy . unlock ( cameraMetadata ) ;
utils : : convertToHidl ( cameraMetadata , & hCameraMetadata , true ) ;
if ( metadata ! = nullptr ) {
if ( hCameraMetadata . data ( ) ! = nullptr & &
mCaptureRequestMetadataQueue ! = nullptr & &
@ -426,11 +437,12 @@ CameraDevice::allocateACaptureRequest(sp<CaptureRequest>& req, const char* devic
const std : : string & id = req - > mPhysicalCameraSettings [ i ] . id ;
CameraMetadata clone ;
utils : : convertFromHidlCloned ( req - > mPhysicalCameraSettings [ i ] . settings . metadata ( ) , & clone ) ;
camera_metadata_t * clonep = clone . release ( ) ;
if ( id = = deviceId ) {
pRequest - > settings = new ACameraMetadata ( clone . release ( ) , ACameraMetadata : : ACM_REQUEST ) ;
pRequest - > settings = new ACameraMetadata ( clone p , ACameraMetadata : : ACM_REQUEST ) ;
} else {
pRequest - > physicalSettings [ req - > mPhysicalCameraSettings [ i ] . id ] =
new ACameraMetadata ( clone . release ( ) , ACameraMetadata : : ACM_REQUEST ) ;
new ACameraMetadata ( clone p , ACameraMetadata : : ACM_REQUEST ) ;
}
}
pRequest - > targets = new ACameraOutputTargets ( ) ;