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 "impl/ACameraManager.h"
#include "impl/ACameraMetadata.h"
using namespace android;
@ -107,7 +108,14 @@ camera_status_t ACameraManager_getCameraCharacteristics(
__FUNCTION__, mgr, cameraId, chars);
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

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

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

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

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

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

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

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

Loading…
Cancel
Save