找一个最接近的分辨率拍照

记录照片的参数
serial
BlueMatthew 1 year ago
parent 46ffa300d7
commit 5aa79e7f54

@ -184,6 +184,10 @@ int NdkCamera::open(const std::string& cameraId) {
// DisplayDimension foundRes(4000, 4000); // DisplayDimension foundRes(4000, 4000);
// DisplayDimension maxJPG(0, 0); // DisplayDimension maxJPG(0, 0);
unsigned long long minRatio = -1;
DisplayDimension temp;
unsigned long long pixels = (unsigned long long)mWidth * mHeight;
for (int i = 0; i < e.count; i += 4) for (int i = 0; i < e.count; i += 4)
{ {
int32_t input = e.data.i32[i + 3]; int32_t input = e.data.i32[i + 3];
@ -193,7 +197,17 @@ int NdkCamera::open(const std::string& cameraId) {
if (format == AIMAGE_FORMAT_YUV_420_888 || format == AIMAGE_FORMAT_JPEG) if (format == AIMAGE_FORMAT_YUV_420_888 || format == AIMAGE_FORMAT_JPEG)
{ {
DisplayDimension res(e.data.i32[i + 1], e.data.i32[i + 2]); DisplayDimension res(e.data.i32[i + 1], e.data.i32[i + 2]);
if (!disp.IsSameRatio(res)) continue; if (!disp.IsSameRatio(res))
{
unsigned long long ps = res.width() * res.height();
unsigned long long ratio = (ps >= pixels) ? (ps - pixels) : (pixels - ps);
if (ratio < minRatio)
{
temp = res;
minRatio = ratio;
}
continue;
}
if (format == AIMAGE_FORMAT_YUV_420_888 && res > disp) if (format == AIMAGE_FORMAT_YUV_420_888 && res > disp)
{ {
@ -204,6 +218,12 @@ int NdkCamera::open(const std::string& cameraId) {
}*/ }*/
} }
} }
if (!foundIt)
{
foundRes = temp;
foundIt = true;
}
} }
{ {
@ -723,15 +743,21 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
} }
} }
if (m_imagesCaptured != 0)
{
return;
}
val = { 0 }; val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_EXPOSURE_TIME, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_EXPOSURE_TIME, &val);
int64_t exTime = (status == ACAMERA_OK) ? val.data.i64[0] : -1; int64_t exTime = (status == ACAMERA_OK) ? val.data.i64[0] : -1;
mResult.exposureTime = exTime;
val = { 0 }; val = { 0 };
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AE_MODE, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AE_MODE, &val);
uint8_t aeMode = (status == ACAMERA_OK) ? val.data.u8[0] : 0; uint8_t aeMode = (status == ACAMERA_OK) ? val.data.u8[0] : 0;
// ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity_); // ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity_);
mResult.autoExposure = aeMode;
val = { 0 }; val = { 0 };
float focusDistance = NAN; float focusDistance = NAN;
@ -743,6 +769,15 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
focusDistance = *val.data.f; focusDistance = *val.data.f;
} }
} }
mResult.FocusDistance = focusDistance;
val = {0};
status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val);
mResult.sensitibity = *(val.data.i32);
val = {0};
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_SCENE_MODE, &val);
mResult.hdrMode = (*(val.data.u8) == ACAMERA_CONTROL_SCENE_MODE_HDR) ? 1 : 0;
ALOGD("onCaptureCompleted EXPOSURE_TIME=%lld, FocusDis=%f camera id=%s, AE=%s AF_STATE=%u", exTime, focusDistance, mCameraId.c_str(), ((aeMode == 1) ? "ON" : "OFF"), afState); ALOGD("onCaptureCompleted EXPOSURE_TIME=%lld, FocusDis=%f camera id=%s, AE=%s AF_STATE=%u", exTime, focusDistance, mCameraId.c_str(), ((aeMode == 1) ? "ON" : "OFF"), afState);

@ -50,11 +50,13 @@ public:
struct CAPTURE_RESULT struct CAPTURE_RESULT
{ {
unsigned char autoFocus; uint8_t autoFocus;
unsigned char autoExposure; uint8_t autoExposure;
unsigned long exposureTime; int64_t exposureTime;
float FocusDistance; float FocusDistance;
unsigned int sensitibity; int32_t sensitibity;
uint8_t hdrMode;
}; };
NdkCamera(int32_t width, int32_t height, const CAMERA_PARAMS& params); NdkCamera(int32_t width, int32_t height, const CAMERA_PARAMS& params);
@ -71,6 +73,12 @@ public:
void onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result); void onCaptureCompleted(ACameraCaptureSession* session, ACaptureRequest* request, const ACameraMetadata* result);
const CAPTURE_RESULT& getCaptureResult() const
{
return mResult;
}
public: public:
CAMERA_PARAMS m_params; CAMERA_PARAMS m_params;
int camera_facing; int camera_facing;

Loading…
Cancel
Save