cameraservice: Migrate all internal String8/String16s to std::string
String8 and String16 are deprecated classes. It is recommended to use
std::string or std::u16string wherever possible. String16 is the native
string class for aidl, but Strings marked @utf8InCpp can use std::string
directly.
This patch standardizes libcameraservice's use of strings to
std::string, which is capable of storing utf-8 strings. This makes the
code more readable and potentially reduces the number of string copies
to a minimum.
A new set of string utils is added to frameworks/av/camera to aid this
migration.
Change-Id: I59330ac03c8a52b6c21a2388bba0c143e68af4cf
Merged-In: I59330ac03c8a52b6c21a2388bba0c143e68af4cf
Bug: 265487852
Test: Presubmit, ran CtsCameraTestCases on Cuttlefish, adb shell dumpsys media camera and observed output
diff --git a/camera/ndk/impl/ACameraDevice.cpp b/camera/ndk/impl/ACameraDevice.cpp
index 1dae0f9..8bdb6d4 100644
--- a/camera/ndk/impl/ACameraDevice.cpp
+++ b/camera/ndk/impl/ACameraDevice.cpp
@@ -21,6 +21,7 @@
#include <inttypes.h>
#include <android/hardware/ICameraService.h>
#include <gui/Surface.h>
+#include <camera/StringUtils.h>
#include "ACameraDevice.h"
#include "ACameraMetadata.h"
#include "ACaptureRequest.h"
@@ -234,8 +235,7 @@
return ret;
}
- String16 physicalId16(output.mPhysicalCameraId.c_str());
- OutputConfiguration outConfig(iGBP, output.mRotation, physicalId16,
+ OutputConfiguration outConfig(iGBP, output.mRotation, output.mPhysicalCameraId,
OutputConfiguration::INVALID_SET_ID, true);
for (auto& anw : output.mSharedWindows) {
@@ -299,8 +299,7 @@
return ret;
}
- String16 physicalId16(output->mPhysicalCameraId.c_str());
- OutputConfiguration outConfig(iGBP, output->mRotation, physicalId16,
+ OutputConfiguration outConfig(iGBP, output->mRotation, output->mPhysicalCameraId,
OutputConfiguration::INVALID_SET_ID, true);
for (auto& anw : output->mSharedWindows) {
@@ -683,9 +682,8 @@
if (ret != ACAMERA_OK) {
return ret;
}
- String16 physicalId16(outConfig.mPhysicalCameraId.c_str());
outputSet.insert(std::make_pair(
- anw, OutputConfiguration(iGBP, outConfig.mRotation, physicalId16,
+ anw, OutputConfiguration(iGBP, outConfig.mRotation, outConfig.mPhysicalCameraId,
OutputConfiguration::INVALID_SET_ID, outConfig.mIsShared)));
}
auto addSet = outputSet;
@@ -919,7 +917,7 @@
msg->setObject(kSessionSpKey, session);
if (cbh.mIsLogicalCameraCallback) {
if (resultExtras.errorPhysicalCameraId.size() > 0) {
- String8 cameraId(resultExtras.errorPhysicalCameraId);
+ String8 cameraId = toString8(resultExtras.errorPhysicalCameraId);
msg->setString(kFailingPhysicalCameraId, cameraId.string(), cameraId.size());
}
msg->setPointer(kCallbackFpKey, (void*) cbh.mOnLogicalCameraCaptureFailed);
@@ -1215,7 +1213,7 @@
std::vector<std::string> physicalCameraIds;
std::vector<sp<ACameraMetadata>> physicalMetadataCopy;
for (size_t i = 0; i < physicalResultInfo.size(); i++) {
- String8 physicalId8(physicalResultInfo[i].mPhysicalCameraId);
+ String8 physicalId8 = toString8(physicalResultInfo[i].mPhysicalCameraId);
physicalCameraIds.push_back(physicalId8.c_str());
CameraMetadata clone = physicalResultInfo[i].mPhysicalCameraMetadata;
diff --git a/camera/ndk/impl/ACameraManager.cpp b/camera/ndk/impl/ACameraManager.cpp
index 837b5be..299ffc0 100644
--- a/camera/ndk/impl/ACameraManager.cpp
+++ b/camera/ndk/impl/ACameraManager.cpp
@@ -25,6 +25,7 @@
#include <cutils/properties.h>
#include <stdlib.h>
#include <camera/CameraUtils.h>
+#include <camera/StringUtils.h>
#include <camera/VendorTagDescriptor.h>
using namespace android::acam;
@@ -84,7 +85,7 @@
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder;
do {
- binder = sm->getService(String16(kCameraServiceName));
+ binder = sm->getService(toString16(kCameraServiceName));
if (binder != nullptr) {
break;
}
@@ -188,12 +189,12 @@
sp<CameraManagerGlobal> cm = mCameraManager.promote();
if (cm != nullptr) {
AutoMutex lock(cm->mLock);
- std::vector<String8> cameraIdList;
+ std::vector<std::string> cameraIdList;
for (auto& pair : cm->mDeviceStatusMap) {
cameraIdList.push_back(pair.first);
}
- for (String8 cameraId : cameraIdList) {
+ for (const std::string& cameraId : cameraIdList) {
cm->onStatusChangedLocked(
CameraServiceListener::STATUS_NOT_PRESENT, cameraId);
}
@@ -259,7 +260,7 @@
// Send initial callbacks if callback is newly registered
if (pair.second) {
for (auto& pair : mDeviceStatusMap) {
- const String8& cameraId = pair.first;
+ const std::string& cameraId = pair.first;
int32_t status = pair.second.getStatus();
// Don't send initial callbacks for camera ids which don't support
// camera2
@@ -273,12 +274,12 @@
cb.mAvailable : cb.mUnavailable;
msg->setPointer(kCallbackFpKey, (void *) cbFunc);
msg->setPointer(kContextKey, cb.mContext);
- msg->setString(kCameraIdKey, AString(cameraId));
+ msg->setString(kCameraIdKey, AString(cameraId.c_str()));
mPendingCallbackCnt++;
msg->post();
// Physical camera unavailable callback
- std::set<String8> unavailablePhysicalCameras =
+ std::set<std::string> unavailablePhysicalCameras =
pair.second.getUnavailablePhysicalIds();
for (const auto& physicalCameraId : unavailablePhysicalCameras) {
sp<AMessage> msg = new AMessage(kWhatSendSinglePhysicalCameraCallback, mHandler);
@@ -286,8 +287,8 @@
cb.mPhysicalCamUnavailable;
msg->setPointer(kCallbackFpKey, (void *) cbFunc);
msg->setPointer(kContextKey, cb.mContext);
- msg->setString(kCameraIdKey, AString(cameraId));
- msg->setString(kPhysicalCameraIdKey, AString(physicalCameraId));
+ msg->setString(kCameraIdKey, AString(cameraId.c_str()));
+ msg->setString(kPhysicalCameraIdKey, AString(physicalCameraId.c_str()));
mPendingCallbackCnt++;
msg->post();
}
@@ -295,11 +296,11 @@
}
}
-bool CameraManagerGlobal::supportsCamera2ApiLocked(const String8 &cameraId) {
+bool CameraManagerGlobal::supportsCamera2ApiLocked(const std::string &cameraId) {
bool camera2Support = false;
auto cs = getCameraServiceLocked();
binder::Status serviceRet =
- cs->supportsCameraApi(String16(cameraId),
+ cs->supportsCameraApi(cameraId,
hardware::ICameraService::API_VERSION_2, &camera2Support);
if (!serviceRet.isOk()) {
ALOGE("%s: supportsCameraApi2Locked() call failed for cameraId %s",
@@ -309,7 +310,7 @@
return camera2Support;
}
-void CameraManagerGlobal::getCameraIdList(std::vector<String8>* cameraIds) {
+void CameraManagerGlobal::getCameraIdList(std::vector<std::string>* cameraIds) {
// Ensure that we have initialized/refreshed the list of available devices
Mutex::Autolock _l(mLock);
// Needed to make sure we're connected to cameraservice
@@ -459,10 +460,10 @@
}
binder::Status CameraManagerGlobal::CameraServiceListener::onStatusChanged(
- int32_t status, const String16& cameraId) {
+ int32_t status, const std::string& cameraId) {
sp<CameraManagerGlobal> cm = mCameraManager.promote();
if (cm != nullptr) {
- cm->onStatusChanged(status, String8(cameraId));
+ cm->onStatusChanged(status, cameraId);
} else {
ALOGE("Cannot deliver status change. Global camera manager died");
}
@@ -470,10 +471,10 @@
}
binder::Status CameraManagerGlobal::CameraServiceListener::onPhysicalCameraStatusChanged(
- int32_t status, const String16& cameraId, const String16& physicalCameraId) {
+ int32_t status, const std::string& cameraId, const std::string& physicalCameraId) {
sp<CameraManagerGlobal> cm = mCameraManager.promote();
if (cm != nullptr) {
- cm->onStatusChanged(status, String8(cameraId), String8(physicalCameraId));
+ cm->onStatusChanged(status, cameraId, physicalCameraId);
} else {
ALOGE("Cannot deliver physical camera status change. Global camera manager died");
}
@@ -495,13 +496,13 @@
}
void CameraManagerGlobal::onStatusChanged(
- int32_t status, const String8& cameraId) {
+ int32_t status, const std::string& cameraId) {
Mutex::Autolock _l(mLock);
onStatusChangedLocked(status, cameraId);
}
void CameraManagerGlobal::onStatusChangedLocked(
- int32_t status, const String8& cameraId) {
+ int32_t status, const std::string& cameraId) {
if (!validStatus(status)) {
ALOGE("%s: Invalid status %d", __FUNCTION__, status);
return;
@@ -534,7 +535,7 @@
cb.mAvailable : cb.mUnavailable;
msg->setPointer(kCallbackFpKey, (void *) cbFp);
msg->setPointer(kContextKey, cb.mContext);
- msg->setString(kCameraIdKey, AString(cameraId));
+ msg->setString(kCameraIdKey, AString(cameraId.c_str()));
mPendingCallbackCnt++;
msg->post();
}
@@ -545,13 +546,13 @@
}
void CameraManagerGlobal::onStatusChanged(
- int32_t status, const String8& cameraId, const String8& physicalCameraId) {
+ int32_t status, const std::string& cameraId, const std::string& physicalCameraId) {
Mutex::Autolock _l(mLock);
onStatusChangedLocked(status, cameraId, physicalCameraId);
}
void CameraManagerGlobal::onStatusChangedLocked(
- int32_t status, const String8& cameraId, const String8& physicalCameraId) {
+ int32_t status, const std::string& cameraId, const std::string& physicalCameraId) {
if (!validStatus(status)) {
ALOGE("%s: Invalid status %d", __FUNCTION__, status);
return;
@@ -567,7 +568,7 @@
if (logicalCamStatus != hardware::ICameraServiceListener::STATUS_PRESENT &&
logicalCamStatus != hardware::ICameraServiceListener::STATUS_NOT_AVAILABLE) {
ALOGE("%s: Physical camera id %s status %d change for an invalid logical camera state %d",
- __FUNCTION__, physicalCameraId.string(), status, logicalCamStatus);
+ __FUNCTION__, physicalCameraId.c_str(), status, logicalCamStatus);
return;
}
@@ -588,8 +589,8 @@
cb.mPhysicalCamAvailable : cb.mPhysicalCamUnavailable;
msg->setPointer(kCallbackFpKey, (void *) cbFp);
msg->setPointer(kContextKey, cb.mContext);
- msg->setString(kCameraIdKey, AString(cameraId));
- msg->setString(kPhysicalCameraIdKey, AString(physicalCameraId));
+ msg->setString(kCameraIdKey, AString(cameraId.c_str()));
+ msg->setString(kPhysicalCameraIdKey, AString(physicalCameraId.c_str()));
mPendingCallbackCnt++;
msg->post();
}
@@ -607,20 +608,20 @@
}
bool CameraManagerGlobal::StatusAndHAL3Support::addUnavailablePhysicalId(
- const String8& physicalCameraId) {
+ const std::string& physicalCameraId) {
std::lock_guard<std::mutex> lock(mLock);
auto result = unavailablePhysicalIds.insert(physicalCameraId);
return result.second;
}
bool CameraManagerGlobal::StatusAndHAL3Support::removeUnavailablePhysicalId(
- const String8& physicalCameraId) {
+ const std::string& physicalCameraId) {
std::lock_guard<std::mutex> lock(mLock);
auto count = unavailablePhysicalIds.erase(physicalCameraId);
return count > 0;
}
-std::set<String8> CameraManagerGlobal::StatusAndHAL3Support::getUnavailablePhysicalIds() {
+std::set<std::string> CameraManagerGlobal::StatusAndHAL3Support::getUnavailablePhysicalIds() {
std::lock_guard<std::mutex> lock(mLock);
return unavailablePhysicalIds;
}
@@ -635,7 +636,7 @@
ACameraManager::getCameraIdList(ACameraIdList** cameraIdList) {
Mutex::Autolock _l(mLock);
- std::vector<String8> idList;
+ std::vector<std::string> idList;
CameraManagerGlobal::getInstance()->getCameraIdList(&idList);
int numCameras = idList.size();
@@ -652,7 +653,7 @@
return ACAMERA_ERROR_NOT_ENOUGH_MEMORY;
}
for (int i = 0; i < numCameras; i++) {
- const char* src = idList[i].string();
+ const char* src = idList[i].c_str();
size_t dstSize = strlen(src) + 1;
char* dst = new char[dstSize];
if (!dst) {
@@ -694,7 +695,7 @@
CameraMetadata rawMetadata;
int targetSdkVersion = android_get_application_target_sdk_version();
- binder::Status serviceRet = cs->getCameraCharacteristics(String16(cameraIdStr),
+ binder::Status serviceRet = cs->getCameraCharacteristics(cameraIdStr,
targetSdkVersion, /*overrideToPortrait*/false, &rawMetadata);
if (!serviceRet.isOk()) {
switch(serviceRet.serviceSpecificErrorCode()) {
@@ -745,7 +746,7 @@
// No way to get package name from native.
// Send a zero length package name and let camera service figure it out from UID
binder::Status serviceRet = cs->connectDevice(
- callbacks, String16(cameraId), String16(""), {},
+ callbacks, cameraId, "", {},
hardware::ICameraService::USE_CALLING_UID, /*oomScoreOffset*/0,
targetSdkVersion, /*overrideToPortrait*/false, /*out*/&deviceRemote);
diff --git a/camera/ndk/impl/ACameraManager.h b/camera/ndk/impl/ACameraManager.h
index 0dd79da..c135d0f 100644
--- a/camera/ndk/impl/ACameraManager.h
+++ b/camera/ndk/impl/ACameraManager.h
@@ -62,7 +62,7 @@
/**
* Return camera IDs that support camera2
*/
- void getCameraIdList(std::vector<String8> *cameraIds);
+ void getCameraIdList(std::vector<std::string> *cameraIds);
private:
sp<hardware::ICameraService> mCameraService;
@@ -87,23 +87,23 @@
class CameraServiceListener final : public hardware::BnCameraServiceListener {
public:
explicit CameraServiceListener(CameraManagerGlobal* cm) : mCameraManager(cm) {}
- virtual binder::Status onStatusChanged(int32_t status, const String16& cameraId);
+ virtual binder::Status onStatusChanged(int32_t status, const std::string& cameraId);
virtual binder::Status onPhysicalCameraStatusChanged(int32_t status,
- const String16& cameraId, const String16& physicalCameraId);
+ const std::string& cameraId, const std::string& physicalCameraId);
// Torch API not implemented yet
- virtual binder::Status onTorchStatusChanged(int32_t, const String16&) {
+ virtual binder::Status onTorchStatusChanged(int32_t, const std::string&) {
return binder::Status::ok();
}
- virtual binder::Status onTorchStrengthLevelChanged(const String16&, int32_t) {
+ virtual binder::Status onTorchStrengthLevelChanged(const std::string&, int32_t) {
return binder::Status::ok();
}
virtual binder::Status onCameraAccessPrioritiesChanged();
- virtual binder::Status onCameraOpened(const String16&, const String16&) {
+ virtual binder::Status onCameraOpened(const std::string&, const std::string&) {
return binder::Status::ok();
}
- virtual binder::Status onCameraClosed(const String16&) {
+ virtual binder::Status onCameraClosed(const std::string&) {
return binder::Status::ok();
}
@@ -203,20 +203,20 @@
sp<hardware::ICameraService> getCameraServiceLocked();
void onCameraAccessPrioritiesChanged();
- void onStatusChanged(int32_t status, const String8& cameraId);
- void onStatusChangedLocked(int32_t status, const String8& cameraId);
- void onStatusChanged(int32_t status, const String8& cameraId, const String8& physicalCameraId);
- void onStatusChangedLocked(int32_t status, const String8& cameraId,
- const String8& physicalCameraId);
+ void onStatusChanged(int32_t status, const std::string& cameraId);
+ void onStatusChangedLocked(int32_t status, const std::string& cameraId);
+ void onStatusChanged(int32_t status, const std::string& cameraId, const std::string& physicalCameraId);
+ void onStatusChangedLocked(int32_t status, const std::string& cameraId,
+ const std::string& physicalCameraId);
// Utils for status
static bool validStatus(int32_t status);
static bool isStatusAvailable(int32_t status);
- bool supportsCamera2ApiLocked(const String8 &cameraId);
+ bool supportsCamera2ApiLocked(const std::string &cameraId);
// The sort logic must match the logic in
// libcameraservice/common/CameraProviderManager.cpp::getAPI1CompatibleCameraDeviceIds
struct CameraIdComparator {
- bool operator()(const String8& a, const String8& b) const {
+ bool operator()(const std::string& a, const std::string& b) const {
uint32_t aUint = 0, bUint = 0;
bool aIsUint = base::ParseUint(a.c_str(), &aUint);
bool bIsUint = base::ParseUint(b.c_str(), &bUint);
@@ -238,22 +238,22 @@
private:
int32_t status = hardware::ICameraServiceListener::STATUS_NOT_PRESENT;
mutable std::mutex mLock;
- std::set<String8> unavailablePhysicalIds;
+ std::set<std::string> unavailablePhysicalIds;
public:
const bool supportsHAL3 = false;
StatusAndHAL3Support(int32_t st, bool HAL3support):
status(st), supportsHAL3(HAL3support) { };
StatusAndHAL3Support() = default;
- bool addUnavailablePhysicalId(const String8& physicalCameraId);
- bool removeUnavailablePhysicalId(const String8& physicalCameraId);
+ bool addUnavailablePhysicalId(const std::string& physicalCameraId);
+ bool removeUnavailablePhysicalId(const std::string& physicalCameraId);
int32_t getStatus();
void updateStatus(int32_t newStatus);
- std::set<String8> getUnavailablePhysicalIds();
+ std::set<std::string> getUnavailablePhysicalIds();
};
// Map camera_id -> status
- std::map<String8, StatusAndHAL3Support, CameraIdComparator> mDeviceStatusMap;
+ std::map<std::string, StatusAndHAL3Support, CameraIdComparator> mDeviceStatusMap;
// For the singleton instance
static Mutex sLock;