From: Andreas Gampe Date: Wed, 5 Apr 2017 03:02:25 +0000 (-0700) Subject: CameraProvider: Refactor legacy name regex code X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0b171f1ff2a98b5d972c7a7cfa2dac250991b3a5;p=android-x86%2Fhardware-interfaces.git CameraProvider: Refactor legacy name regex code The match will use iterators that will be invalidated when the used string input goes out of scope. Refactor the API to return the two components of the match. Bug: 36871785 Test: m && m SANITIZE_TARGET=address Change-Id: I2418541234a09e53856ea61e0fbc4b67d8036308 --- diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp index 8701ec1d..9f4d1883 100644 --- a/camera/provider/2.4/default/CameraProvider.cpp +++ b/camera/provider/2.4/default/CameraProvider.cpp @@ -40,6 +40,22 @@ const char *kHAL1_0 = "1.0"; const int kMaxCameraDeviceNameLen = 128; const int kMaxCameraIdLen = 16; +bool matchDeviceName(const hidl_string& deviceName, std::string* deviceVersion, + std::string* cameraId) { + std::string deviceNameStd(deviceName.c_str()); + std::smatch sm; + if (std::regex_match(deviceNameStd, sm, kDeviceNameRE)) { + if (deviceVersion != nullptr) { + *deviceVersion = sm[1]; + } + if (cameraId != nullptr) { + *cameraId = sm[2]; + } + return true; + } + return false; +} + } // anonymous namespace using ::android::hardware::camera::common::V1_0::CameraMetadataType; @@ -112,30 +128,22 @@ Status CameraProvider::getHidlStatus(int status) { } } -bool CameraProvider::matchDeviceName(const hidl_string& deviceName, std::smatch& sm) { - std::string deviceNameStd(deviceName.c_str()); - return std::regex_match(deviceNameStd, sm, kDeviceNameRE); -} - std::string CameraProvider::getLegacyCameraId(const hidl_string& deviceName) { - std::smatch sm; - bool match = matchDeviceName(deviceName, sm); - if (!match) { - return std::string(""); - } - return sm[2]; + std::string cameraId; + matchDeviceName(deviceName, nullptr, &cameraId); + return cameraId; } int CameraProvider::getCameraDeviceVersion(const hidl_string& deviceName) { - std::smatch sm; - bool match = matchDeviceName(deviceName, sm); + std::string deviceVersion; + bool match = matchDeviceName(deviceName, &deviceVersion, nullptr); if (!match) { return -1; } - if (sm[1].compare(kHAL3_2) == 0) { + if (deviceVersion == kHAL3_2) { // maybe switched to 3.4 or define the hidl version enum later return CAMERA_DEVICE_API_VERSION_3_2; - } else if (sm[1].compare(kHAL1_0) == 0) { + } else if (deviceVersion == kHAL1_0) { return CAMERA_DEVICE_API_VERSION_1_0; } return 0; @@ -322,15 +330,13 @@ Return CameraProvider::isSetTorchModeSupported(isSetTorchModeSupported_cb Return CameraProvider::getCameraDeviceInterface_V1_x( const hidl_string& cameraDeviceName, getCameraDeviceInterface_V1_x_cb _hidl_cb) { - std::smatch sm; - bool match = matchDeviceName(cameraDeviceName, sm); + std::string cameraId, deviceVersion; + bool match = matchDeviceName(cameraDeviceName, &deviceVersion, &cameraId); if (!match) { _hidl_cb(Status::ILLEGAL_ARGUMENT, nullptr); return Void(); } - std::string cameraId = sm[2]; - std::string deviceVersion = sm[1]; std::string deviceName(cameraDeviceName.c_str()); ssize_t index = mCameraDeviceNames.indexOf(std::make_pair(cameraId, deviceName)); if (index == NAME_NOT_FOUND) { // Either an illegal name or a device version mismatch @@ -377,15 +383,13 @@ Return CameraProvider::getCameraDeviceInterface_V1_x( Return CameraProvider::getCameraDeviceInterface_V3_x( const hidl_string& cameraDeviceName, getCameraDeviceInterface_V3_x_cb _hidl_cb) { - std::smatch sm; - bool match = matchDeviceName(cameraDeviceName, sm); + std::string cameraId, deviceVersion; + bool match = matchDeviceName(cameraDeviceName, &deviceVersion, &cameraId); if (!match) { _hidl_cb(Status::ILLEGAL_ARGUMENT, nullptr); return Void(); } - std::string cameraId = sm[2]; - std::string deviceVersion = sm[1]; std::string deviceName(cameraDeviceName.c_str()); ssize_t index = mCameraDeviceNames.indexOf(std::make_pair(cameraId, deviceName)); if (index == NAME_NOT_FOUND) { // Either an illegal name or a device version mismatch diff --git a/camera/provider/2.4/default/CameraProvider.h b/camera/provider/2.4/default/CameraProvider.h index 2a43e2f3..d7b0ea6d 100644 --- a/camera/provider/2.4/default/CameraProvider.h +++ b/camera/provider/2.4/default/CameraProvider.h @@ -91,7 +91,6 @@ private: bool setUpVendorTags(); // extract legacy camera ID/device version from a HIDL device name - static bool matchDeviceName(const hidl_string& deviceName, std::smatch& sm); static std::string getLegacyCameraId(const hidl_string& deviceName); static int getCameraDeviceVersion(const hidl_string& deviceName);