Camera NDK: don't explicit delete ACameraMetadata

To fix the warning in RefBase destructor.

Test: NDK CTS tests, and ARCore measure app.
Bug: 112775599
Change-Id: Ia448ac6d7e6c17699c16d287f65fc2826c9d7578
gugelfrei
Yin-Chia Yeh 6 years ago
parent c524813b80
commit dd045bf360

@ -23,6 +23,7 @@
#include <camera/NdkCameraManager.h> #include <camera/NdkCameraManager.h>
#include "impl/ACameraManager.h" #include "impl/ACameraManager.h"
#include "impl/ACameraMetadata.h"
using namespace android; using namespace android;
@ -107,7 +108,14 @@ camera_status_t ACameraManager_getCameraCharacteristics(
__FUNCTION__, mgr, cameraId, chars); __FUNCTION__, mgr, cameraId, chars);
return ACAMERA_ERROR_INVALID_PARAMETER; return ACAMERA_ERROR_INVALID_PARAMETER;
} }
return mgr->getCameraCharacteristics(cameraId, chars); sp<ACameraMetadata> spChars;
camera_status_t status = mgr->getCameraCharacteristics(cameraId, &spChars);
if (status != ACAMERA_OK) {
return status;
}
spChars->incStrong((void*) ACameraManager_getCameraCharacteristics);
*chars = spChars.get();
return ACAMERA_OK;
} }
EXPORT EXPORT

@ -57,13 +57,15 @@ ACameraMetadata* ACameraMetadata_copy(const ACameraMetadata* src) {
ALOGE("%s: src is null!", __FUNCTION__); ALOGE("%s: src is null!", __FUNCTION__);
return nullptr; return nullptr;
} }
return new ACameraMetadata(*src); ACameraMetadata* copy = new ACameraMetadata(*src);
copy->incStrong((void*) ACameraMetadata_copy);
return copy;
} }
EXPORT EXPORT
void ACameraMetadata_free(ACameraMetadata* metadata) { void ACameraMetadata_free(ACameraMetadata* metadata) {
ATRACE_CALL(); ATRACE_CALL();
if (metadata != nullptr) { if (metadata != nullptr) {
delete metadata; metadata->decStrong((void*) ACameraMetadata_free);
} }
} }

@ -137,7 +137,7 @@ void ACaptureRequest_free(ACaptureRequest* request) {
if (request == nullptr) { if (request == nullptr) {
return; return;
} }
delete request->settings; request->settings.clear();
delete request->targets; delete request->targets;
delete request; delete request;
return; return;

@ -50,11 +50,11 @@ const char* CameraDevice::kAnwKey = "Anw";
CameraDevice::CameraDevice( CameraDevice::CameraDevice(
const char* id, const char* id,
ACameraDevice_StateCallbacks* cb, ACameraDevice_StateCallbacks* cb,
std::unique_ptr<ACameraMetadata> chars, sp<ACameraMetadata> chars,
ACameraDevice* wrapper) : ACameraDevice* wrapper) :
mCameraId(id), mCameraId(id),
mAppCallbacks(*cb), mAppCallbacks(*cb),
mChars(std::move(chars)), mChars(chars),
mServiceCallback(new ServiceCallback(this)), mServiceCallback(new ServiceCallback(this)),
mWrapper(wrapper), mWrapper(wrapper),
mInError(false), mInError(false),
@ -436,7 +436,7 @@ CameraDevice::freeACaptureRequest(ACaptureRequest* req) {
if (req == nullptr) { if (req == nullptr) {
return; return;
} }
delete req->settings; req->settings.clear();
delete req->targets; delete req->targets;
delete req; delete req;
} }

@ -48,7 +48,7 @@ struct CameraCaptureFailure : public RefBase, public ACameraCaptureFailure {};
class CameraDevice final : public RefBase { class CameraDevice final : public RefBase {
public: public:
CameraDevice(const char* id, ACameraDevice_StateCallbacks* cb, CameraDevice(const char* id, ACameraDevice_StateCallbacks* cb,
std::unique_ptr<ACameraMetadata> chars, sp<ACameraMetadata> chars,
ACameraDevice* wrapper); ACameraDevice* wrapper);
~CameraDevice(); ~CameraDevice();
@ -156,7 +156,7 @@ class CameraDevice final : public RefBase {
mutable Mutex mDeviceLock; mutable Mutex mDeviceLock;
const String8 mCameraId; // Camera ID const String8 mCameraId; // Camera ID
const ACameraDevice_StateCallbacks mAppCallbacks; // Callback to app const ACameraDevice_StateCallbacks mAppCallbacks; // Callback to app
const std::unique_ptr<ACameraMetadata> mChars; // Camera characteristics const sp<ACameraMetadata> mChars; // Camera characteristics
const sp<ServiceCallback> mServiceCallback; const sp<ServiceCallback> mServiceCallback;
ACameraDevice* mWrapper; ACameraDevice* mWrapper;
@ -294,8 +294,8 @@ class CameraDevice final : public RefBase {
*/ */
struct ACameraDevice { struct ACameraDevice {
ACameraDevice(const char* id, ACameraDevice_StateCallbacks* cb, ACameraDevice(const char* id, ACameraDevice_StateCallbacks* cb,
std::unique_ptr<ACameraMetadata> chars) : sp<ACameraMetadata> chars) :
mDevice(new CameraDevice(id, cb, std::move(chars), this)) {} mDevice(new CameraDevice(id, cb, chars, this)) {}
~ACameraDevice() {}; ~ACameraDevice() {};

@ -402,7 +402,7 @@ ACameraManager::deleteCameraIdList(ACameraIdList* cameraIdList) {
} }
camera_status_t ACameraManager::getCameraCharacteristics( camera_status_t ACameraManager::getCameraCharacteristics(
const char *cameraIdStr, ACameraMetadata **characteristics) { const char* cameraIdStr, sp<ACameraMetadata>* characteristics) {
Mutex::Autolock _l(mLock); Mutex::Autolock _l(mLock);
sp<hardware::ICameraService> cs = CameraManagerGlobal::getInstance().getCameraService(); sp<hardware::ICameraService> cs = CameraManagerGlobal::getInstance().getCameraService();
@ -437,18 +437,16 @@ ACameraManager::openCamera(
const char* cameraId, const char* cameraId,
ACameraDevice_StateCallbacks* callback, ACameraDevice_StateCallbacks* callback,
/*out*/ACameraDevice** outDevice) { /*out*/ACameraDevice** outDevice) {
ACameraMetadata* rawChars; sp<ACameraMetadata> chars;
camera_status_t ret = getCameraCharacteristics(cameraId, &rawChars); camera_status_t ret = getCameraCharacteristics(cameraId, &chars);
Mutex::Autolock _l(mLock); Mutex::Autolock _l(mLock);
if (ret != ACAMERA_OK) { if (ret != ACAMERA_OK) {
ALOGE("%s: cannot get camera characteristics for camera %s. err %d", ALOGE("%s: cannot get camera characteristics for camera %s. err %d",
__FUNCTION__, cameraId, ret); __FUNCTION__, cameraId, ret);
return ACAMERA_ERROR_INVALID_PARAMETER; return ACAMERA_ERROR_INVALID_PARAMETER;
} }
std::unique_ptr<ACameraMetadata> chars(rawChars);
rawChars = nullptr;
ACameraDevice* device = new ACameraDevice(cameraId, callback, std::move(chars)); ACameraDevice* device = new ACameraDevice(cameraId, callback, chars);
sp<hardware::ICameraService> cs = CameraManagerGlobal::getInstance().getCameraService(); sp<hardware::ICameraService> cs = CameraManagerGlobal::getInstance().getCameraService();
if (cs == nullptr) { if (cs == nullptr) {

@ -186,7 +186,7 @@ struct ACameraManager {
static void deleteCameraIdList(ACameraIdList* cameraIdList); static void deleteCameraIdList(ACameraIdList* cameraIdList);
camera_status_t getCameraCharacteristics( camera_status_t getCameraCharacteristics(
const char *cameraId, ACameraMetadata **characteristics); const char* cameraId, android::sp<ACameraMetadata>* characteristics);
camera_status_t openCamera(const char* cameraId, camera_status_t openCamera(const char* cameraId,
ACameraDevice_StateCallbacks* callback, ACameraDevice_StateCallbacks* callback,
/*out*/ACameraDevice** device); /*out*/ACameraDevice** device);

@ -55,7 +55,7 @@ struct ACaptureRequest {
return ACAMERA_OK; return ACAMERA_OK;
} }
ACameraMetadata* settings; sp<ACameraMetadata> settings;
ACameraOutputTargets* targets; ACameraOutputTargets* targets;
void* context; void* context;
}; };

Loading…
Cancel
Save