优化资源的释放

serial
BlueMatthew 1 year ago
parent 7129373681
commit b5b24d7d19

@ -130,6 +130,11 @@ CPhoneDevice::CPhoneCamera::CPhoneCamera(CPhoneDevice* dev, int32_t width, int32
{
}
CPhoneDevice::CPhoneCamera::~CPhoneCamera()
{
m_dev = NULL;
}
bool CPhoneDevice::CPhoneCamera::on_image(cv::Mat& rgb)
{
if (m_dev != NULL)
@ -834,26 +839,11 @@ void CPhoneDevice::CloseCamera2(CPhoneDevice::CPhoneCamera* camera, bool turnOff
delete camera;
}
// GpioControl::EnableGpio(CMD_SET_CAM_3V3_EN_STATE, true);
JNIEnv* env = NULL;
bool didAttachThread = false;
bool res = GetJniEnv(m_vm, &env, didAttachThread);
if (!res)
{
ALOGE("Failed to get JNI Env");
return;
}
if (turnOffOtg)
{
TurnOffOtg(env);
}
TurnOffCameraPower(env);
if (didAttachThread)
{
m_vm->DetachCurrentThread();
TurnOffOtg(NULL);
}
TurnOffCameraPower(NULL);
}
void visualize(const char* filename, const ncnn::Mat& m)
@ -983,19 +973,14 @@ bool CPhoneDevice::OnImageReady(cv::Mat& mat)
}
}
int thickness2 = 8 * ratio;
int thickness2 = 6 * ratio;
if (thickness2 < 2) thickness2 = 2;
int thickness1 = 1 * ratio;
int thickness1 = 2 * ratio;
if (thickness1 < 1) thickness1 = 1;
cv::Scalar scalar1(0, 0, 0); // black
cv::Scalar scalar2(255, 255, 255); // white
#ifdef _DEBUG
cv::Scalar scalar(0, 0, 255); // white

@ -155,6 +155,7 @@ public:
class CPhoneCamera : public NdkCamera {
public:
CPhoneCamera(CPhoneDevice* dev, int32_t width, int32_t height, const NdkCamera::CAMERA_PARAMS& params);
virtual ~CPhoneCamera();
virtual bool on_image(cv::Mat& rgb);
virtual void on_error(const std::string& msg);

@ -23,9 +23,19 @@
#include "Camera2Helper.h"
#include <AndroidHelper.h>
static void onAvailabilityCallback(void* context, const char* cameraId)
{
ALOGW("CameraStatus::onAvailability CameraId: %s", cameraId);
}
static void onUnavailabilityCallback(void* context, const char* cameraId)
{
ALOGW("CameraStatus::onUnavailability CameraId: %s", cameraId);
}
static void onDisconnected(void* context, ACameraDevice* device)
{
ALOGW("onDisconnected %p", device);
ALOGW("CameraStatus::onDisconnected CameraId: %s", ACameraDevice_getId(device));
}
static void onError(void* context, ACameraDevice* device, int error)
@ -34,6 +44,8 @@ static void onError(void* context, ACameraDevice* device, int error)
{
}
ALOGW("CameraStatus::onError CameraId: %s err=%d", ACameraDevice_getId(device), error);
std::string msg = "NdkCamera error code=" + std::to_string(error);
((NdkCamera*)context)->on_error(msg);
// __android_log_print(ANDROID_LOG_WARN, "NdkCamera", "onError %p %d", device, error);
@ -111,6 +123,12 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
nightModeSupported = false;
nightPortraitModeSupported = false;
#ifdef _DEBUG
camera_manager_cb.context = this;
camera_manager_cb.onCameraAvailable = onAvailabilityCallback;
camera_manager_cb.onCameraUnavailable = onUnavailabilityCallback;
#endif
camera_manager = 0;
camera_device = 0;
image_reader = 0;
@ -131,11 +149,14 @@ NdkCamera::~NdkCamera()
}
int NdkCamera::open(const std::string& cameraId) {
ALOGW("DBG::open %s", cameraId.c_str());
ALOGW("DBG::try open %s", cameraId.c_str());
// camera_facing = _camera_facing;
camera_manager = ACameraManager_create();
#ifdef _DEBUG
ACameraManager_registerAvailabilityCallback(camera_manager, &camera_manager_cb);
#endif
// find front camera
std::string camera_id;
@ -337,7 +358,9 @@ int NdkCamera::open(const std::string& cameraId) {
}
if (camera_id == "1")
{
#if 0
camera_facing = 1;
#endif
}
if (camera_id == "2")
{
@ -364,8 +387,6 @@ int NdkCamera::open(const std::string& cameraId) {
// ANativeWindow_acquire(image_reader_surface);
}
ALOGW("open %s %d", camera_id.c_str(), camera_orientation);
// open camera
{
ACameraDevice_StateCallbacks camera_device_state_callbacks;
@ -376,10 +397,13 @@ int NdkCamera::open(const std::string& cameraId) {
res = ACameraManager_openCamera(camera_manager, camera_id.c_str(), &camera_device_state_callbacks, &camera_device);
if (res != ACAMERA_OK)
{
ALOGE("Failed to open camera res=%d", res);
return 1;
}
}
ALOGW("CameraStatus::Open %s %d", camera_id.c_str(), camera_orientation);
// std::this_thread::sleep_for(std::chrono::milliseconds(128));
// capture request
{
@ -438,8 +462,8 @@ int NdkCamera::open(const std::string& cameraId) {
if (m_params.nightMode) {
if (nightModeSupported) {
uint8_t modeEnabled = 1; // ACAMERA_CONTROL_SCENE_MODE_HDR
// res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_NIGHT, 1, &modeEnabled);
uint8_t sceneMode = ACAMERA_CONTROL_SCENE_MODE_NIGHT;
res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode);
}
if (nightPortraitModeSupported) {
uint8_t modeEnabled = 1; // ACAMERA_CONTROL_SCENE_MODE_HDR
@ -490,7 +514,7 @@ void NdkCamera::close()
if (capture_session)
{
ACameraCaptureSession_stopRepeating(capture_session);
res = ACameraCaptureSession_stopRepeating(capture_session);
ACameraCaptureSession_close(capture_session);
capture_session = 0;
}
@ -511,18 +535,6 @@ void NdkCamera::close()
capture_request = 0;
}
if (image_reader_surface)
{
// ANativeWindow_release(image_reader_surface);
image_reader_surface = 0;
}
if (image_reader)
{
AImageReader_delete(image_reader);
image_reader = 0;
}
if (capture_session_output)
{
if (capture_session_output_container)
@ -541,15 +553,31 @@ void NdkCamera::close()
if (camera_device)
{
ALOGW("CameraStatus::try close %s", mCameraId.c_str());
ACameraDevice_close(camera_device);
camera_device = 0;
}
if (image_reader_surface)
{
// ANativeWindow_release(image_reader_surface);
image_reader_surface = 0;
}
if (image_reader)
{
AImageReader_setImageListener(image_reader, NULL);
AImageReader_delete(image_reader);
image_reader = 0;
}
if (camera_manager)
{
#ifdef _DEBUG
ACameraManager_unregisterAvailabilityCallback(camera_manager, &camera_manager_cb);
#endif
ACameraManager_delete(camera_manager);
camera_manager = 0;
ALOGW("DBG::close %s", mCameraId.c_str());
}
}
@ -661,6 +689,15 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
AImage_delete(image);
m_imagesCaptured ++;
if (capture_session != 0)
{
camera_status_t cs = ACameraCaptureSession_stopRepeating(capture_session);
if (cs != ACAMERA_OK)
{
int aa = 0;
}
}
}
void NdkCamera::on_error(const std::string& msg)

@ -105,6 +105,9 @@ public:
CAPTURE_RESULT mResult;
private:
#ifdef _DEBUG
ACameraManager_AvailabilityCallbacks camera_manager_cb;
#endif
ACameraManager* camera_manager;
ACameraDevice* camera_device;
AImageReader* image_reader;

Loading…
Cancel
Save