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/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.cpp b/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.cpp
index b58975f..d07bf6d 100644
--- a/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.cpp
+++ b/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.cpp
@@ -20,6 +20,8 @@
#include <inttypes.h>
#include <utils/Log.h>
+#include <utils/String16.h>
+#include <camera/StringUtils.h>
#include <binder/IServiceManager.h>
#include "CameraServiceProxyWrapper.h"
@@ -32,7 +34,7 @@
namespace {
// Sentinel value to be returned when extension session with a stale or invalid key is reported.
-const String16 POISON_EXT_STATS_KEY("poisoned_stats");
+const std::string POISON_EXT_STATS_KEY("poisoned_stats");
} // anonymous namespace
/**
@@ -100,7 +102,7 @@
mSessionStats.mRequestCount = requestCount;
mSessionStats.mResultErrorCount = resultErrorCount;
mSessionStats.mDeviceError = deviceError;
- mSessionStats.mUserTag = String16(userTag.c_str());
+ mSessionStats.mUserTag = userTag;
mSessionStats.mVideoStabilizationMode = videoStabilizationMode;
mSessionStats.mStreamStats = streamStats;
@@ -116,14 +118,14 @@
return mSessionStats.mLogId;
}
-String16 CameraServiceProxyWrapper::CameraSessionStatsWrapper::updateExtensionSessionStats(
+std::string CameraServiceProxyWrapper::CameraSessionStatsWrapper::updateExtensionSessionStats(
const hardware::CameraExtensionSessionStats& extStats) {
Mutex::Autolock l(mLock);
CameraExtensionSessionStats& currStats = mSessionStats.mCameraExtensionSessionStats;
if (currStats.key != extStats.key) {
// Mismatched keys. Extensions stats likely reported for a closed session
ALOGW("%s: mismatched extensions stats key: current='%s' reported='%s'. Dropping stats.",
- __FUNCTION__, String8(currStats.key).c_str(), String8(extStats.key).c_str());
+ __FUNCTION__, toStdString(currStats.key).c_str(), toStdString(extStats.key).c_str());
return POISON_EXT_STATS_KEY; // return poisoned key to so future calls are
// definitely dropped.
}
@@ -134,15 +136,15 @@
ALOGV("%s: Overwriting extension session stats: %s", __FUNCTION__,
extStats.toString().c_str());
currStats = extStats;
- return currStats.key;
+ return toStdString(currStats.key);
}
// Matching empty keys...
- if (mSessionStats.mClientName != extStats.clientName) {
+ if (mSessionStats.mClientName != toStdString(extStats.clientName)) {
ALOGW("%s: extension stats reported for unexpected package: current='%s' reported='%s'. "
"Dropping stats.", __FUNCTION__,
- String8(mSessionStats.mClientName).c_str(),
- String8(extStats.clientName).c_str());
+ mSessionStats.mClientName.c_str(),
+ toStdString(extStats.clientName).c_str());
return POISON_EXT_STATS_KEY;
}
@@ -166,12 +168,12 @@
key << mSessionStats.mSessionIndex << '/' << mSessionStats.mLogId;
currStats.key = String16(key.str().c_str());
ALOGV("%s: New extension session stats: %s", __FUNCTION__, currStats.toString().c_str());
- return currStats.key;
+ return toStdString(currStats.key);
}
// Camera is closed. Probably a stale call.
ALOGW("%s: extension stats reported for closed camera id '%s'. Dropping stats.",
- __FUNCTION__, String8(mSessionStats.mCameraId).c_str());
+ __FUNCTION__, mSessionStats.mCameraId.c_str());
return {};
}
@@ -209,12 +211,13 @@
proxyBinder->pingForUserUpdate();
}
-int CameraServiceProxyWrapper::getRotateAndCropOverride(String16 packageName, int lensFacing,
- int userId) {
+int CameraServiceProxyWrapper::getRotateAndCropOverride(const std::string &packageName,
+ int lensFacing, int userId) {
sp<ICameraServiceProxy> proxyBinder = getCameraServiceProxy();
if (proxyBinder == nullptr) return true;
int ret = 0;
- auto status = proxyBinder->getRotateAndCropOverride(packageName, lensFacing, userId, &ret);
+ auto status = proxyBinder->getRotateAndCropOverride(packageName, lensFacing,
+ userId, &ret);
if (!status.isOk()) {
ALOGE("%s: Failed during top activity orientation query: %s", __FUNCTION__,
status.exceptionMessage().c_str());
@@ -223,7 +226,7 @@
return ret;
}
-int CameraServiceProxyWrapper::getAutoframingOverride(const String16& packageName) {
+int CameraServiceProxyWrapper::getAutoframingOverride(const std::string& packageName) {
sp<ICameraServiceProxy> proxyBinder = getCameraServiceProxy();
if (proxyBinder == nullptr) {
return ANDROID_CONTROL_AUTOFRAMING_OFF;
@@ -238,7 +241,7 @@
return ret;
}
-void CameraServiceProxyWrapper::logStreamConfigured(const String8& id,
+void CameraServiceProxyWrapper::logStreamConfigured(const std::string& id,
int operatingMode, bool internalConfig, int32_t latencyMs) {
std::shared_ptr<CameraSessionStatsWrapper> sessionStats;
{
@@ -256,7 +259,7 @@
sessionStats->onStreamConfigured(operatingMode, internalConfig, latencyMs);
}
-void CameraServiceProxyWrapper::logActive(const String8& id, float maxPreviewFps) {
+void CameraServiceProxyWrapper::logActive(const std::string& id, float maxPreviewFps) {
std::shared_ptr<CameraSessionStatsWrapper> sessionStats;
{
Mutex::Autolock l(mLock);
@@ -273,7 +276,7 @@
sessionStats->onActive(proxyBinder, maxPreviewFps);
}
-void CameraServiceProxyWrapper::logIdle(const String8& id,
+void CameraServiceProxyWrapper::logIdle(const std::string& id,
int64_t requestCount, int64_t resultErrorCount, bool deviceError,
const std::string& userTag, int32_t videoStabilizationMode,
const std::vector<hardware::CameraStreamStats>& streamStats) {
@@ -304,8 +307,8 @@
videoStabilizationMode, streamStats);
}
-void CameraServiceProxyWrapper::logOpen(const String8& id, int facing,
- const String16& clientPackageName, int effectiveApiLevel, bool isNdk,
+void CameraServiceProxyWrapper::logOpen(const std::string& id, int facing,
+ const std::string& clientPackageName, int effectiveApiLevel, bool isNdk,
int32_t latencyMs) {
std::shared_ptr<CameraSessionStatsWrapper> sessionStats;
{
@@ -325,7 +328,7 @@
int64_t logId = generateLogId(mRandomDevice);
sessionStats = std::make_shared<CameraSessionStatsWrapper>(
- String16(id), facing, CameraSessionStats::CAMERA_STATE_OPEN, clientPackageName,
+ id, facing, CameraSessionStats::CAMERA_STATE_OPEN, clientPackageName,
apiLevel, isNdk, latencyMs, logId);
mSessionStatsMap.emplace(id, sessionStats);
ALOGV("%s: Adding id %s", __FUNCTION__, id.c_str());
@@ -337,7 +340,8 @@
sessionStats->onOpen(proxyBinder);
}
-void CameraServiceProxyWrapper::logClose(const String8& id, int32_t latencyMs, bool deviceError) {
+void CameraServiceProxyWrapper::logClose(const std::string& id, int32_t latencyMs,
+ bool deviceError) {
std::shared_ptr<CameraSessionStatsWrapper> sessionStats;
{
Mutex::Autolock l(mLock);
@@ -376,7 +380,7 @@
return ret;
}
-int64_t CameraServiceProxyWrapper::getCurrentLogIdForCamera(const String8& cameraId) {
+int64_t CameraServiceProxyWrapper::getCurrentLogIdForCamera(const std::string& cameraId) {
std::shared_ptr<CameraSessionStatsWrapper> stats;
{
Mutex::Autolock _l(mLock);
@@ -403,10 +407,10 @@
return ret;
}
-String16 CameraServiceProxyWrapper::updateExtensionStats(
+std::string CameraServiceProxyWrapper::updateExtensionStats(
const hardware::CameraExtensionSessionStats& extStats) {
std::shared_ptr<CameraSessionStatsWrapper> stats;
- String8 cameraId = String8(extStats.cameraId);
+ std::string cameraId = toStdString(extStats.cameraId);
{
Mutex::Autolock _l(mLock);
if (mSessionStatsMap.count(cameraId) == 0) {
diff --git a/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.h b/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.h
index e32580c..1afe5b3 100644
--- a/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.h
+++ b/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.h
@@ -20,11 +20,10 @@
#include <android/hardware/ICameraServiceProxy.h>
#include <utils/Mutex.h>
-#include <utils/String8.h>
-#include <utils/String16.h>
#include <utils/StrongPointer.h>
#include <utils/Timers.h>
#include <random>
+#include <string>
#include <camera/CameraSessionStats.h>
@@ -49,8 +48,8 @@
void updateProxyDeviceState(sp<hardware::ICameraServiceProxy>& proxyBinder);
public:
- CameraSessionStatsWrapper(const String16& cameraId, int facing, int newCameraState,
- const String16& clientName, int apiLevel, bool isNdk,
+ CameraSessionStatsWrapper(const std::string& cameraId, int facing, int newCameraState,
+ const std::string& clientName, int apiLevel, bool isNdk,
int32_t latencyMs, int64_t logId)
: mSessionStats(cameraId, facing, newCameraState, clientName, apiLevel, isNdk,
latencyMs, logId) {}
@@ -65,7 +64,8 @@
const std::string& userTag, int32_t videoStabilizationMode,
const std::vector<hardware::CameraStreamStats>& streamStats);
- String16 updateExtensionSessionStats(const hardware::CameraExtensionSessionStats& extStats);
+ std::string updateExtensionSessionStats(
+ const hardware::CameraExtensionSessionStats& extStats);
// Returns the logId associated with this event.
int64_t getLogId();
@@ -74,7 +74,7 @@
// Lock for camera session stats map
Mutex mLock;
// Map from camera id to the camera's session statistics
- std::map<String8, std::shared_ptr<CameraSessionStatsWrapper>> mSessionStatsMap;
+ std::map<std::string, std::shared_ptr<CameraSessionStatsWrapper>> mSessionStatsMap;
std::random_device mRandomDevice; // pulls 32-bit random numbers from /dev/urandom
@@ -93,22 +93,22 @@
static sp<hardware::ICameraServiceProxy> getDefaultCameraServiceProxy();
// Open
- void logOpen(const String8& id, int facing,
- const String16& clientPackageName, int apiLevel, bool isNdk,
+ void logOpen(const std::string& id, int facing,
+ const std::string& clientPackageName, int apiLevel, bool isNdk,
int32_t latencyMs);
// Close
- void logClose(const String8& id, int32_t latencyMs, bool deviceError);
+ void logClose(const std::string& id, int32_t latencyMs, bool deviceError);
// Stream configuration
- void logStreamConfigured(const String8& id, int operatingMode, bool internalReconfig,
+ void logStreamConfigured(const std::string& id, int operatingMode, bool internalReconfig,
int32_t latencyMs);
// Session state becomes active
- void logActive(const String8& id, float maxPreviewFps);
+ void logActive(const std::string& id, float maxPreviewFps);
// Session state becomes idle
- void logIdle(const String8& id,
+ void logIdle(const std::string& id,
int64_t requestCount, int64_t resultErrorCount, bool deviceError,
const std::string& userTag, int32_t videoStabilizationMode,
const std::vector<hardware::CameraStreamStats>& streamStats);
@@ -117,10 +117,10 @@
void pingCameraServiceProxy();
// Return the current top activity rotate and crop override.
- int getRotateAndCropOverride(String16 packageName, int lensFacing, int userId);
+ int getRotateAndCropOverride(const std::string &packageName, int lensFacing, int userId);
// Return the current top activity autoframing.
- int getAutoframingOverride(const String16& packageName);
+ int getAutoframingOverride(const std::string& packageName);
// Detect if the camera is disabled by device policy.
bool isCameraDisabled(int userId);
@@ -128,10 +128,10 @@
// Returns the logId currently associated with the given cameraId. See 'mLogId' in
// frameworks/av/camera/include/camera/CameraSessionStats.h for more details about this
// identifier. Returns a non-0 value on success.
- int64_t getCurrentLogIdForCamera(const String8& cameraId);
+ int64_t getCurrentLogIdForCamera(const std::string& cameraId);
// Update the stored extension stats to the latest values
- String16 updateExtensionStats(const hardware::CameraExtensionSessionStats& extStats);
+ std::string updateExtensionStats(const hardware::CameraExtensionSessionStats& extStats);
};
} // android
diff --git a/services/camera/libcameraservice/utils/CameraTraces.h b/services/camera/libcameraservice/utils/CameraTraces.h
index 71fa334..be8d393 100644
--- a/services/camera/libcameraservice/utils/CameraTraces.h
+++ b/services/camera/libcameraservice/utils/CameraTraces.h
@@ -18,7 +18,6 @@
#define ANDROID_SERVERS_CAMERA_TRACES_H_
#include <utils/Errors.h>
-#include <utils/String16.h>
#include <utils/Vector.h>
namespace android {
diff --git a/services/camera/libcameraservice/utils/LatencyHistogram.cpp b/services/camera/libcameraservice/utils/LatencyHistogram.cpp
index e2bdc43..a167068 100644
--- a/services/camera/libcameraservice/utils/LatencyHistogram.cpp
+++ b/services/camera/libcameraservice/utils/LatencyHistogram.cpp
@@ -16,8 +16,9 @@
#define LOG_TAG "CameraLatencyHistogram"
#include <inttypes.h>
+#include <android-base/stringprintf.h>
#include <utils/Log.h>
-#include <utils/String8.h>
+#include <camera/StringUtils.h>
#include "LatencyHistogram.h"
@@ -55,18 +56,18 @@
return;
}
- String8 lines;
- lines.appendFormat("%s (%" PRId64 ") samples\n", name, mTotalCount);
+ std::string lines;
+ lines += fmt::sprintf("%s (%" PRId64 ") samples\n", name, mTotalCount);
- String8 lineBins, lineBinCounts;
+ std::string lineBins, lineBinCounts;
formatHistogramText(lineBins, lineBinCounts);
- lineBins.append("\n");
- lineBinCounts.append("\n");
- lines.append(lineBins);
- lines.append(lineBinCounts);
+ lineBins += ("\n");
+ lineBinCounts += ("\n");
+ lines += lineBins;
+ lines += lineBinCounts;
- write(fd, lines.string(), lines.size());
+ write(fd, lines.c_str(), lines.size());
}
void CameraLatencyHistogram::log(const char* fmt, ...) {
@@ -76,11 +77,12 @@
va_list args;
va_start(args, fmt);
- String8 histogramName = String8::formatV(fmt, args);
- ALOGI("%s (%" PRId64 ") samples:", histogramName.string(), mTotalCount);
+ std::string histogramName;
+ base::StringAppendV(&histogramName, fmt, args);
+ ALOGI("%s (%" PRId64 ") samples:", histogramName.c_str(), mTotalCount);
va_end(args);
- String8 lineBins, lineBinCounts;
+ std::string lineBins, lineBinCounts;
formatHistogramText(lineBins, lineBinCounts);
ALOGI("%s", lineBins.c_str());
@@ -88,19 +90,19 @@
}
void CameraLatencyHistogram::formatHistogramText(
- String8& lineBins, String8& lineBinCounts) const {
+ std::string& lineBins, std::string& lineBinCounts) const {
lineBins = " ";
lineBinCounts = " ";
for (int32_t i = 0; i < mBinCount; i++) {
if (i == mBinCount - 1) {
- lineBins.append(" inf (max ms)");
+ lineBins += " inf (max ms)";
} else {
- lineBins.appendFormat("%7d", mBinSizeMs*(i+1));
+ lineBins += fmt::sprintf("%7d", mBinSizeMs*(i+1));
}
- lineBinCounts.appendFormat(" %02.2f", 100.0*mBins[i]/mTotalCount);
+ lineBinCounts += fmt::sprintf(" %02.2f", 100.0*mBins[i]/mTotalCount);
}
- lineBinCounts.append(" (%)");
+ lineBinCounts += " (%)";
}
}; //namespace android
diff --git a/services/camera/libcameraservice/utils/LatencyHistogram.h b/services/camera/libcameraservice/utils/LatencyHistogram.h
index bfd9b1b..89a9cc1 100644
--- a/services/camera/libcameraservice/utils/LatencyHistogram.h
+++ b/services/camera/libcameraservice/utils/LatencyHistogram.h
@@ -40,7 +40,7 @@
std::vector<int64_t> mBins;
uint64_t mTotalCount;
- void formatHistogramText(String8& lineBins, String8& lineBinCounts) const;
+ void formatHistogramText(std::string& lineBins, std::string& lineBinCounts) const;
}; // class CameraLatencyHistogram
}; // namespace android
diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
index 89e75b3..f7257e3 100644
--- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
@@ -28,6 +28,7 @@
#include "device3/hidl/HidlCamera3Device.h"
#include "device3/Camera3OutputStream.h"
#include "system/graphics-base-v1.1.h"
+#include <camera/StringUtils.h>
#include <ui/PublicFormat.h>
using android::camera3::OutputStreamInfo;
@@ -427,15 +428,15 @@
binder::Status createSurfaceFromGbp(
OutputStreamInfo& streamInfo, bool isStreamInfoValid,
sp<Surface>& surface, const sp<IGraphicBufferProducer>& gbp,
- const String8 &logicalCameraId, const CameraMetadata &physicalCameraMetadata,
+ const std::string &logicalCameraId, const CameraMetadata &physicalCameraMetadata,
const std::vector<int32_t> &sensorPixelModesUsed, int64_t dynamicRangeProfile,
int64_t streamUseCase, int timestampBase, int mirrorMode,
int32_t colorSpace) {
// bufferProducer must be non-null
if (gbp == nullptr) {
- String8 msg = String8::format("Camera %s: Surface is NULL", logicalCameraId.string());
- ALOGW("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: Surface is NULL", logicalCameraId.c_str());
+ ALOGW("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
// HACK b/10949105
// Query consumer usage bits to set async operation mode for
@@ -444,14 +445,14 @@
uint64_t consumerUsage = 0;
status_t err;
if ((err = gbp->getConsumerUsage(&consumerUsage)) != OK) {
- String8 msg = String8::format("Camera %s: Failed to query Surface consumer usage: %s (%d)",
- logicalCameraId.string(), strerror(-err), err);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: Failed to query Surface consumer usage: %s (%d)",
+ logicalCameraId.c_str(), strerror(-err), err);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.c_str());
}
if (consumerUsage & GraphicBuffer::USAGE_HW_TEXTURE) {
ALOGW("%s: Camera %s with consumer usage flag: %" PRIu64 ": Forcing asynchronous mode for"
- "stream", __FUNCTION__, logicalCameraId.string(), consumerUsage);
+ "stream", __FUNCTION__, logicalCameraId.c_str(), consumerUsage);
useAsync = true;
}
@@ -469,38 +470,38 @@
int width, height, format;
android_dataspace dataSpace;
if ((err = anw->query(anw, NATIVE_WINDOW_WIDTH, &width)) != OK) {
- String8 msg = String8::format("Camera %s: Failed to query Surface width: %s (%d)",
- logicalCameraId.string(), strerror(-err), err);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: Failed to query Surface width: %s (%d)",
+ logicalCameraId.c_str(), strerror(-err), err);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.c_str());
}
if ((err = anw->query(anw, NATIVE_WINDOW_HEIGHT, &height)) != OK) {
- String8 msg = String8::format("Camera %s: Failed to query Surface height: %s (%d)",
- logicalCameraId.string(), strerror(-err), err);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: Failed to query Surface height: %s (%d)",
+ logicalCameraId.c_str(), strerror(-err), err);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.c_str());
}
if ((err = anw->query(anw, NATIVE_WINDOW_FORMAT, &format)) != OK) {
- String8 msg = String8::format("Camera %s: Failed to query Surface format: %s (%d)",
- logicalCameraId.string(), strerror(-err), err);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: Failed to query Surface format: %s (%d)",
+ logicalCameraId.c_str(), strerror(-err), err);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.c_str());
}
if ((err = anw->query(anw, NATIVE_WINDOW_DEFAULT_DATASPACE,
reinterpret_cast<int*>(&dataSpace))) != OK) {
- String8 msg = String8::format("Camera %s: Failed to query Surface dataspace: %s (%d)",
- logicalCameraId.string(), strerror(-err), err);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: Failed to query Surface dataspace: %s (%d)",
+ logicalCameraId.c_str(), strerror(-err), err);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.c_str());
}
if (colorSpace != ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED &&
format != HAL_PIXEL_FORMAT_BLOB) {
if (!dataSpaceFromColorSpace(&dataSpace, colorSpace)) {
- String8 msg = String8::format("Camera %s: color space %d not supported, failed to "
- "convert to data space", logicalCameraId.string(), colorSpace);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: color space %d not supported, failed to "
+ "convert to data space", logicalCameraId.c_str(), colorSpace);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
}
@@ -510,16 +511,16 @@
((consumerUsage & GRALLOC_USAGE_HW_MASK) &&
((consumerUsage & GRALLOC_USAGE_SW_READ_MASK) == 0))) {
ALOGW("%s: Camera %s: Overriding format %#x to IMPLEMENTATION_DEFINED",
- __FUNCTION__, logicalCameraId.string(), format);
+ __FUNCTION__, logicalCameraId.c_str(), format);
format = HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED;
}
std::unordered_set<int32_t> overriddenSensorPixelModes;
if (checkAndOverrideSensorPixelModesUsed(sensorPixelModesUsed, format, width, height,
physicalCameraMetadata, &overriddenSensorPixelModes) != OK) {
- String8 msg = String8::format("Camera %s: sensor pixel modes for stream with "
- "format %#x are not valid",logicalCameraId.string(), format);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: sensor pixel modes for stream with "
+ "format %#x are not valid",logicalCameraId.c_str(), format);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
bool foundInMaxRes = false;
if (overriddenSensorPixelModes.find(ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION) !=
@@ -532,58 +533,58 @@
!SessionConfigurationUtils::roundBufferDimensionNearest(width, height,
format, dataSpace, physicalCameraMetadata, foundInMaxRes, /*out*/&width,
/*out*/&height)) {
- String8 msg = String8::format("Camera %s: No supported stream configurations with "
+ std::string msg = fmt::sprintf("Camera %s: No supported stream configurations with "
"format %#x defined, failed to create output stream",
- logicalCameraId.string(), format);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ logicalCameraId.c_str(), format);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (!SessionConfigurationUtils::isDynamicRangeProfileSupported(dynamicRangeProfile,
physicalCameraMetadata)) {
- String8 msg = String8::format("Camera %s: Dynamic range profile 0x%" PRIx64
- " not supported,failed to create output stream", logicalCameraId.string(),
+ std::string msg = fmt::sprintf("Camera %s: Dynamic range profile 0x%" PRIx64
+ " not supported,failed to create output stream", logicalCameraId.c_str(),
dynamicRangeProfile);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (SessionConfigurationUtils::is10bitDynamicRangeProfile(dynamicRangeProfile) &&
!SessionConfigurationUtils::is10bitCompatibleFormat(format, dataSpace)) {
- String8 msg = String8::format("Camera %s: No 10-bit supported stream configurations with "
+ std::string msg = fmt::sprintf("Camera %s: No 10-bit supported stream configurations with "
"format %#x defined and profile %" PRIx64 ", failed to create output stream",
- logicalCameraId.string(), format, dynamicRangeProfile);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ logicalCameraId.c_str(), format, dynamicRangeProfile);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (colorSpace != ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED &&
SessionConfigurationUtils::deviceReportsColorSpaces(physicalCameraMetadata) &&
!SessionConfigurationUtils::isColorSpaceSupported(colorSpace, format, dataSpace,
dynamicRangeProfile, physicalCameraMetadata)) {
- String8 msg = String8::format("Camera %s: Color space %d not supported, failed to "
+ std::string msg = fmt::sprintf("Camera %s: Color space %d not supported, failed to "
"create output stream (pixel format %d dynamic range profile %" PRId64 ")",
- logicalCameraId.string(), colorSpace, format, dynamicRangeProfile);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ logicalCameraId.c_str(), colorSpace, format, dynamicRangeProfile);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (!SessionConfigurationUtils::isStreamUseCaseSupported(streamUseCase,
physicalCameraMetadata)) {
- String8 msg = String8::format("Camera %s: stream use case %" PRId64 " not supported,"
- " failed to create output stream", logicalCameraId.string(), streamUseCase);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: stream use case %" PRId64 " not supported,"
+ " failed to create output stream", logicalCameraId.c_str(), streamUseCase);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (timestampBase < OutputConfiguration::TIMESTAMP_BASE_DEFAULT ||
timestampBase > OutputConfiguration::TIMESTAMP_BASE_MAX) {
- String8 msg = String8::format("Camera %s: invalid timestamp base %d",
- logicalCameraId.string(), timestampBase);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: invalid timestamp base %d",
+ logicalCameraId.c_str(), timestampBase);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (mirrorMode < OutputConfiguration::MIRROR_MODE_AUTO ||
mirrorMode > OutputConfiguration::MIRROR_MODE_V) {
- String8 msg = String8::format("Camera %s: invalid mirroring mode %d",
- logicalCameraId.string(), mirrorMode);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s: invalid mirroring mode %d",
+ logicalCameraId.c_str(), mirrorMode);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (!isStreamInfoValid) {
@@ -601,45 +602,45 @@
return binder::Status::ok();
}
if (width != streamInfo.width) {
- String8 msg = String8::format("Camera %s:Surface width doesn't match: %d vs %d",
- logicalCameraId.string(), width, streamInfo.width);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s:Surface width doesn't match: %d vs %d",
+ logicalCameraId.c_str(), width, streamInfo.width);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (height != streamInfo.height) {
- String8 msg = String8::format("Camera %s:Surface height doesn't match: %d vs %d",
- logicalCameraId.string(), height, streamInfo.height);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s:Surface height doesn't match: %d vs %d",
+ logicalCameraId.c_str(), height, streamInfo.height);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (format != streamInfo.format) {
- String8 msg = String8::format("Camera %s:Surface format doesn't match: %d vs %d",
- logicalCameraId.string(), format, streamInfo.format);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s:Surface format doesn't match: %d vs %d",
+ logicalCameraId.c_str(), format, streamInfo.format);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (format != HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
if (dataSpace != streamInfo.dataSpace) {
- String8 msg = String8::format("Camera %s:Surface dataSpace doesn't match: %d vs %d",
- logicalCameraId.string(), dataSpace, streamInfo.dataSpace);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg = fmt::sprintf("Camera %s:Surface dataSpace doesn't match: %d vs %d",
+ logicalCameraId.c_str(), dataSpace, streamInfo.dataSpace);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
//At the native side, there isn't a way to check whether 2 surfaces come from the same
//surface class type. Use usage flag to approximate the comparison.
if (consumerUsage != streamInfo.consumerUsage) {
- String8 msg = String8::format(
+ std::string msg = fmt::sprintf(
"Camera %s:Surface usage flag doesn't match %" PRIu64 " vs %" PRIu64 "",
- logicalCameraId.string(), consumerUsage, streamInfo.consumerUsage);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ logicalCameraId.c_str(), consumerUsage, streamInfo.consumerUsage);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
}
return binder::Status::ok();
}
void mapStreamInfo(const OutputStreamInfo &streamInfo,
- camera3::camera_stream_rotation_t rotation, String8 physicalId,
+ camera3::camera_stream_rotation_t rotation, const std::string &physicalId,
int32_t groupId, aidl::android::hardware::camera::device::Stream *stream /*out*/) {
if (stream == nullptr) {
return;
@@ -656,7 +657,7 @@
stream->colorSpace = streamInfo.colorSpace;
stream->rotation = AidlCamera3Device::mapToAidlStreamRotation(rotation);
stream->id = -1; // Invalid stream id
- stream->physicalCameraId = std::string(physicalId.string());
+ stream->physicalCameraId = physicalId;
stream->bufferSize = 0;
stream->groupId = groupId;
stream->sensorPixelModesUsed.resize(streamInfo.sensorPixelModesUsed.size());
@@ -677,34 +678,35 @@
binder::Status
convertToHALStreamCombination(
const SessionConfiguration& sessionConfiguration,
- const String8 &logicalCameraId, const CameraMetadata &deviceInfo,
+ const std::string &logicalCameraId, const CameraMetadata &deviceInfo,
bool isCompositeJpegRDisabled,
metadataGetter getMetadata, const std::vector<std::string> &physicalCameraIds,
aidl::android::hardware::camera::device::StreamConfiguration &streamConfiguration,
bool overrideForPerfClass, bool *earlyExit) {
using SensorPixelMode = aidl::android::hardware::camera::metadata::SensorPixelMode;
auto operatingMode = sessionConfiguration.getOperatingMode();
- binder::Status res = checkOperatingMode(operatingMode, deviceInfo, logicalCameraId);
+ binder::Status res = checkOperatingMode(operatingMode, deviceInfo,
+ logicalCameraId);
if (!res.isOk()) {
return res;
}
if (earlyExit == nullptr) {
- String8 msg("earlyExit nullptr");
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ std::string msg("earlyExit nullptr");
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
*earlyExit = false;
auto ret = AidlCamera3Device::mapToAidlStreamConfigurationMode(
static_cast<camera_stream_configuration_mode_t> (operatingMode),
/*out*/ &streamConfiguration.operationMode);
if (ret != OK) {
- String8 msg = String8::format(
+ std::string msg = fmt::sprintf(
"Camera %s: Failed mapping operating mode %d requested: %s (%d)",
- logicalCameraId.string(), operatingMode, strerror(-ret), ret);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
+ logicalCameraId.c_str(), operatingMode, strerror(-ret), ret);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT,
- msg.string());
+ msg.c_str());
}
bool isInputValid = (sessionConfiguration.getInputWidth() > 0) &&
@@ -749,7 +751,7 @@
const std::vector<sp<IGraphicBufferProducer>>& bufferProducers =
it.getGraphicBufferProducers();
bool deferredConsumer = it.isDeferred();
- String8 physicalCameraId = String8(it.getPhysicalCameraId());
+ const std::string &physicalCameraId = it.getPhysicalCameraId();
int64_t dynamicRangeProfile = it.getDynamicRangeProfile();
int32_t colorSpace = it.getColorSpace();
@@ -841,11 +843,11 @@
}
if (ret != OK) {
- String8 msg = String8::format(
+ std::string msg = fmt::sprintf(
"Camera %s: Failed adding composite streams: %s (%d)",
- logicalCameraId.string(), strerror(-ret), ret);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ logicalCameraId.c_str(), strerror(-ret), ret);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
if (compositeStreams.size() == 0) {
@@ -877,17 +879,17 @@
}
binder::Status checkPhysicalCameraId(
- const std::vector<std::string> &physicalCameraIds, const String8 &physicalCameraId,
- const String8 &logicalCameraId) {
+ const std::vector<std::string> &physicalCameraIds, const std::string &physicalCameraId,
+ const std::string &logicalCameraId) {
if (physicalCameraId.size() == 0) {
return binder::Status::ok();
}
if (std::find(physicalCameraIds.begin(), physicalCameraIds.end(),
- physicalCameraId.string()) == physicalCameraIds.end()) {
- String8 msg = String8::format("Camera %s: Camera doesn't support physicalCameraId %s.",
- logicalCameraId.string(), physicalCameraId.string());
- ALOGE("%s: %s", __FUNCTION__, msg.string());
- return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.string());
+ physicalCameraId) == physicalCameraIds.end()) {
+ std::string msg = fmt::sprintf("Camera %s: Camera doesn't support physicalCameraId %s.",
+ logicalCameraId.c_str(), physicalCameraId.c_str());
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
+ return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str());
}
return binder::Status::ok();
}
@@ -915,13 +917,13 @@
}
binder::Status checkOperatingMode(int operatingMode,
- const CameraMetadata &staticInfo, const String8 &cameraId) {
+ const CameraMetadata &staticInfo, const std::string &cameraId) {
if (operatingMode < 0) {
- String8 msg = String8::format(
- "Camera %s: Invalid operating mode %d requested", cameraId.string(), operatingMode);
- ALOGE("%s: %s", __FUNCTION__, msg.string());
+ std::string msg = fmt::sprintf(
+ "Camera %s: Invalid operating mode %d requested", cameraId.c_str(), operatingMode);
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT,
- msg.string());
+ msg.c_str());
}
bool isConstrainedHighSpeed = (operatingMode == ICameraDeviceUser::CONSTRAINED_HIGH_SPEED_MODE);
@@ -936,12 +938,12 @@
}
}
if (!isConstrainedHighSpeedSupported) {
- String8 msg = String8::format(
+ std::string msg = fmt::sprintf(
"Camera %s: Try to create a constrained high speed configuration on a device"
- " that doesn't support it.", cameraId.string());
- ALOGE("%s: %s", __FUNCTION__, msg.string());
+ " that doesn't support it.", cameraId.c_str());
+ ALOGE("%s: %s", __FUNCTION__, msg.c_str());
return STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT,
- msg.string());
+ msg.c_str());
}
}
diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.h b/services/camera/libcameraservice/utils/SessionConfigurationUtils.h
index dc143da..79d80ea 100644
--- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.h
+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.h
@@ -21,6 +21,7 @@
#include <camera/camera2/OutputConfiguration.h>
#include <camera/camera2/SessionConfiguration.h>
#include <camera/camera2/SubmitInfo.h>
+#include <camera/StringUtils.h>
#include <aidl/android/hardware/camera/device/ICameraDevice.h>
#include <android/hardware/camera/device/3.4/ICameraDeviceSession.h>
#include <android/hardware/camera/device/3.7/ICameraDeviceSession.h>
@@ -37,17 +38,18 @@
#define STATUS_ERROR(errorCode, errorString) \
binder::Status::fromServiceSpecificError(errorCode, \
- String8::format("%s:%d: %s", __FUNCTION__, __LINE__, errorString))
+ fmt::sprintf("%s:%d: %s", __FUNCTION__, __LINE__, errorString).c_str())
#define STATUS_ERROR_FMT(errorCode, errorString, ...) \
binder::Status::fromServiceSpecificError(errorCode, \
- String8::format("%s:%d: " errorString, __FUNCTION__, __LINE__, \
- __VA_ARGS__))
+ fmt::sprintf("%s:%d: " errorString, __FUNCTION__, __LINE__, \
+ __VA_ARGS__).c_str())
namespace android {
namespace camera3 {
-typedef std::function<CameraMetadata (const String8 &, bool overrideForPerfClass)> metadataGetter;
+typedef std::function<CameraMetadata (const std::string &, bool overrideForPerfClass)>
+ metadataGetter;
class StreamConfiguration {
public:
@@ -96,7 +98,7 @@
binder::Status createSurfaceFromGbp(
camera3::OutputStreamInfo& streamInfo, bool isStreamInfoValid,
sp<Surface>& surface, const sp<IGraphicBufferProducer>& gbp,
- const String8 &logicalCameraId, const CameraMetadata &physicalCameraMetadata,
+ const std::string &logicalCameraId, const CameraMetadata &physicalCameraMetadata,
const std::vector<int32_t> &sensorPixelModesUsed, int64_t dynamicRangeProfile,
int64_t streamUseCase, int timestampBase, int mirrorMode,
int32_t colorSpace);
@@ -120,26 +122,27 @@
bool isStreamUseCaseSupported(int64_t streamUseCase, const CameraMetadata &deviceInfo);
void mapStreamInfo(const OutputStreamInfo &streamInfo,
- camera3::camera_stream_rotation_t rotation, String8 physicalId,
+ camera3::camera_stream_rotation_t rotation, const std::string &physicalId,
int32_t groupId, aidl::android::hardware::camera::device::Stream *stream /*out*/);
// Check that the physicalCameraId passed in is spported by the camera
// device.
binder::Status checkPhysicalCameraId(
-const std::vector<std::string> &physicalCameraIds, const String8 &physicalCameraId,
-const String8 &logicalCameraId);
+const std::vector<std::string> &physicalCameraIds, const std::string &physicalCameraId,
+const std::string &logicalCameraId);
binder::Status checkSurfaceType(size_t numBufferProducers,
bool deferredConsumer, int surfaceType);
binder::Status checkOperatingMode(int operatingMode,
-const CameraMetadata &staticInfo, const String8 &cameraId);
+const CameraMetadata &staticInfo, const std::string &cameraId);
binder::Status
convertToHALStreamCombination(
const SessionConfiguration& sessionConfiguration,
- const String8 &logicalCameraId, const CameraMetadata &deviceInfo, bool isCompositeJpegRDisabled,
- metadataGetter getMetadata, const std::vector<std::string> &physicalCameraIds,
+ const std::string &logicalCameraId, const CameraMetadata &deviceInfo,
+ bool isCompositeJpegRDisabled, metadataGetter getMetadata,
+ const std::vector<std::string> &physicalCameraIds,
aidl::android::hardware::camera::device::StreamConfiguration &streamConfiguration,
bool overrideForPerfClass, bool *earlyExit);
diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtilsHidl.cpp b/services/camera/libcameraservice/utils/SessionConfigurationUtilsHidl.cpp
index 111c1bf..cf93d3b 100644
--- a/services/camera/libcameraservice/utils/SessionConfigurationUtilsHidl.cpp
+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtilsHidl.cpp
@@ -105,7 +105,7 @@
binder::Status
convertToHALStreamCombination(
const SessionConfiguration& sessionConfiguration,
- const String8 &logicalCameraId, const CameraMetadata &deviceInfo,
+ const std::string &logicalCameraId, const CameraMetadata &deviceInfo,
metadataGetter getMetadata, const std::vector<std::string> &physicalCameraIds,
hardware::camera::device::V3_7::StreamConfiguration &streamConfiguration,
bool overrideForPerfClass, bool *earlyExit) {
diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtilsHidl.h b/services/camera/libcameraservice/utils/SessionConfigurationUtilsHidl.h
index c47abe0..eae2e30 100644
--- a/services/camera/libcameraservice/utils/SessionConfigurationUtilsHidl.h
+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtilsHidl.h
@@ -34,7 +34,7 @@
// isn't valid.
binder::Status
convertToHALStreamCombination(const SessionConfiguration& sessionConfiguration,
- const String8 &cameraId, const CameraMetadata &deviceInfo,
+ const std::string &cameraId, const CameraMetadata &deviceInfo,
metadataGetter getMetadata, const std::vector<std::string> &physicalCameraIds,
hardware::camera::device::V3_7::StreamConfiguration &streamConfiguration,
bool overrideForPerfClass, bool *earlyExit);
diff --git a/services/camera/libcameraservice/utils/TagMonitor.cpp b/services/camera/libcameraservice/utils/TagMonitor.cpp
index d1e54ab..38de93a 100644
--- a/services/camera/libcameraservice/utils/TagMonitor.cpp
+++ b/services/camera/libcameraservice/utils/TagMonitor.cpp
@@ -18,11 +18,15 @@
#define ATRACE_TAG ATRACE_TAG_CAMERA
//#define LOG_NDEBUG 0
+#include <iostream>
+#include <sstream>
+
#include "TagMonitor.h"
#include <inttypes.h>
#include <utils/Log.h>
#include <camera/VendorTagDescriptor.h>
+#include <camera/StringUtils.h>
#include <camera_metadata_hidden.h>
#include <device3/Camera3Stream.h>
@@ -44,7 +48,7 @@
mMonitoringEvents(other.mMonitoringEvents),
mVendorTagId(other.mVendorTagId) {}
-const String16 TagMonitor::kMonitorOption = String16("-m");
+const std::string TagMonitor::kMonitorOption("-m");
const char* TagMonitor::k3aTags =
"android.control.aeMode, android.control.afMode, android.control.awbMode,"
@@ -56,17 +60,17 @@
"android.control.effectMode, android.control.mode, android.control.sceneMode,"
"android.control.videoStabilizationMode";
-void TagMonitor::parseTagsToMonitor(String8 tagNames) {
+void TagMonitor::parseTagsToMonitor(std::string tagNames) {
std::lock_guard<std::mutex> lock(mMonitorMutex);
// Expand shorthands
ssize_t idx = tagNames.find("3a");
if (idx != -1) {
ssize_t end = tagNames.find(",", idx);
- char* start = tagNames.lockBuffer(tagNames.size());
- start[idx] = '\0';
- char* rest = (end != -1) ? (start + end) : (start + tagNames.size());
- tagNames = String8::format("%s%s%s", start, k3aTags, rest);
+ tagNames = tagNames.substr(0, idx) + k3aTags;
+ if (end != -1) {
+ tagNames += tagNames.substr(end);
+ }
}
sp<VendorTagDescriptor> vTags =
@@ -81,14 +85,13 @@
bool gotTag = false;
- char *tokenized = tagNames.lockBuffer(tagNames.size());
- char *savePtr;
- char *nextTagName = strtok_r(tokenized, ", ", &savePtr);
- while (nextTagName != nullptr) {
+ std::istringstream iss(tagNames);
+ std::string nextTagName;
+ while (std::getline(iss, nextTagName, ',')) {
uint32_t tag;
- status_t res = CameraMetadata::getTagFromName(nextTagName, vTags.get(), &tag);
+ status_t res = CameraMetadata::getTagFromName(nextTagName.c_str(), vTags.get(), &tag);
if (res != OK) {
- ALOGW("%s: Unknown tag %s, ignoring", __FUNCTION__, nextTagName);
+ ALOGW("%s: Unknown tag %s, ignoring", __FUNCTION__, nextTagName.c_str());
} else {
if (!gotTag) {
mMonitoredTagList.clear();
@@ -96,11 +99,9 @@
}
mMonitoredTagList.push_back(tag);
}
- nextTagName = strtok_r(nullptr, ", ", &savePtr);
+ iss >> std::ws;
}
- tagNames.unlockBuffer();
-
if (gotTag) {
// Got at least one new tag
mMonitoringEnabled = true;
@@ -269,7 +270,7 @@
for (const auto& event : mMonitoringEvents) {
int indentation = (event.source == REQUEST) ? 15 : 30;
- String8 eventString = String8::format("f%d:%" PRId64 "ns:%*s%*s",
+ std::string eventString = fmt::sprintf("f%d:%" PRId64 "ns:%*s%*s",
event.frameNumber, event.timestamp,
2, event.cameraId.c_str(),
indentation,
@@ -278,20 +279,20 @@
if (!event.outputStreamIds.empty()) {
eventString += " output stream ids:";
for (const auto& id : event.outputStreamIds) {
- eventString.appendFormat(" %d", id);
+ eventString += fmt::sprintf(" %d", id);
}
eventString += "\n";
- vec.emplace_back(eventString.string());
+ vec.emplace_back(eventString);
continue;
}
if (event.inputStreamId != -1) {
- eventString.appendFormat(" input stream id: %d\n", event.inputStreamId);
- vec.emplace_back(eventString.string());
+ eventString += fmt::sprintf(" input stream id: %d\n", event.inputStreamId);
+ vec.emplace_back(eventString);
continue;
}
- eventString += String8::format(
+ eventString += fmt::sprintf(
"%s.%s: ",
get_local_camera_metadata_section_name_vendor_id(event.tag, mVendorTagId),
get_local_camera_metadata_tag_name_vendor_id(event.tag, mVendorTagId));
@@ -303,14 +304,14 @@
event.newData.data(), event.tag, event.type,
event.newData.size() / camera_metadata_type_size[event.type], indentation + 18);
}
- vec.emplace_back(eventString.string());
+ vec.emplace_back(eventString);
}
}
#define CAMERA_METADATA_ENUM_STRING_MAX_SIZE 29
-String8 TagMonitor::getEventDataString(const uint8_t* data_ptr, uint32_t tag, int type, int count,
- int indentation) {
+std::string TagMonitor::getEventDataString(const uint8_t* data_ptr, uint32_t tag, int type,
+ int count, int indentation) {
static int values_per_line[NUM_TYPES] = {
[TYPE_BYTE] = 16,
[TYPE_INT32] = 8,
@@ -327,11 +328,11 @@
int lines = count / values_per_line[type];
if (count % values_per_line[type] != 0) lines++;
- String8 returnStr = String8();
+ std::ostringstream returnStr;
int index = 0;
int j, k;
for (j = 0; j < lines; j++) {
- returnStr.appendFormat("%*s[", (j != 0) ? indentation + 4 : 0, "");
+ returnStr << fmt::sprintf("%*s[", (j != 0) ? indentation + 4 : 0, "");
for (k = 0;
k < values_per_line[type] && count > 0;
k++, count--, index += type_size) {
@@ -344,9 +345,9 @@
value_string_tmp,
sizeof(value_string_tmp))
== OK) {
- returnStr += value_string_tmp;
+ returnStr << value_string_tmp;
} else {
- returnStr.appendFormat("%hhu ", *(data_ptr + index));
+ returnStr << fmt::sprintf("%hhu ", *(data_ptr + index));
}
break;
case TYPE_INT32:
@@ -357,33 +358,33 @@
value_string_tmp,
sizeof(value_string_tmp))
== OK) {
- returnStr += value_string_tmp;
+ returnStr << value_string_tmp;
} else {
- returnStr.appendFormat("%" PRId32 " ", *(int32_t*)(data_ptr + index));
+ returnStr << fmt::sprintf("%" PRId32 " ", *(int32_t*)(data_ptr + index));
}
break;
case TYPE_FLOAT:
- returnStr.appendFormat("%0.8f ", *(float*)(data_ptr + index));
+ returnStr << fmt::sprintf("%0.8f ", *(float*)(data_ptr + index));
break;
case TYPE_INT64:
- returnStr.appendFormat("%" PRId64 " ", *(int64_t*)(data_ptr + index));
+ returnStr << fmt::sprintf("%" PRId64 " ", *(int64_t*)(data_ptr + index));
break;
case TYPE_DOUBLE:
- returnStr.appendFormat("%0.8f ", *(double*)(data_ptr + index));
+ returnStr << fmt::sprintf("%0.8f ", *(double*)(data_ptr + index));
break;
case TYPE_RATIONAL: {
int32_t numerator = *(int32_t*)(data_ptr + index);
int32_t denominator = *(int32_t*)(data_ptr + index + 4);
- returnStr.appendFormat("(%d / %d) ", numerator, denominator);
+ returnStr << fmt::sprintf("(%d / %d) ", numerator, denominator);
break;
}
default:
- returnStr += "??? ";
+ returnStr << "??? ";
}
}
- returnStr += "]\n";
+ returnStr << "]\n";
}
- return returnStr;
+ return std::move(returnStr.str());
}
template<typename T>
diff --git a/services/camera/libcameraservice/utils/TagMonitor.h b/services/camera/libcameraservice/utils/TagMonitor.h
index 9ded15d..bff4de0 100644
--- a/services/camera/libcameraservice/utils/TagMonitor.h
+++ b/services/camera/libcameraservice/utils/TagMonitor.h
@@ -21,9 +21,9 @@
#include <atomic>
#include <mutex>
#include <unordered_map>
+#include <string>
#include <utils/RefBase.h>
-#include <utils/String8.h>
#include <utils/Timers.h>
#include <media/RingBuffer.h>
@@ -42,7 +42,7 @@
public:
// Monitor argument
- static const String16 kMonitorOption;
+ static const std::string kMonitorOption;
enum eventSource {
REQUEST,
@@ -59,7 +59,7 @@
// If invalid, do nothing.
// Recognizes "3a" as a shortcut for enabling tracking 3A state, mode, and
// triggers
- void parseTagsToMonitor(String8 tagNames);
+ void parseTagsToMonitor(std::string tagNames);
// Disable monitoring; does not clear the event log
void disableMonitoring();
@@ -85,8 +85,8 @@
// function.
void dumpMonitoredTagEventsToVectorLocked(std::vector<std::string> &out);
- static String8 getEventDataString(const uint8_t* data_ptr, uint32_t tag, int type, int count,
- int indentation);
+ static std::string getEventDataString(const uint8_t* data_ptr, uint32_t tag, int type,
+ int count, int indentation);
void monitorSingleMetadata(TagMonitor::eventSource source, int64_t frameNumber,
nsecs_t timestamp, const std::string& cameraId, uint32_t tag,