diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 5b4b085d..348a45e5 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -119,9 +119,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA aeLockAvailable = false; awbLockAvailable = false; - hdrSupported = false; - nightModeSupported = false; - nightPortraitModeSupported = false; + sceneModeSupported = false; camera_manager_cb.context = this; camera_manager_cb.onCameraAvailable = ::onAvailabilityCallback; @@ -212,7 +210,7 @@ int NdkCamera::open(const std::string& cameraId) { int32_t format = e.data.i32[i + 0]; if (input) continue; - 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]); if (!disp.IsSameRatio(res)) @@ -224,7 +222,7 @@ int NdkCamera::open(const std::string& cameraId) { continue; } - if (format == AIMAGE_FORMAT_YUV_420_888 && res > disp) + if (/*format == AIMAGE_FORMAT_YUV_420_888 && */res > disp) { foundIt = true; foundRes = res; @@ -362,19 +360,11 @@ int NdkCamera::open(const std::string& cameraId) { { for (int i = 0; i < e.count; i++) { - if (ACAMERA_CONTROL_SCENE_MODE_HDR == e.data.u8[i]) + if (m_params.sceneMode == e.data.u8[i]) { - hdrSupported = true; + sceneModeSupported = true; break; } - else if (ACAMERA_CONTROL_SCENE_MODE_NIGHT == e.data.u8[i]) - { - nightModeSupported = true; - } - else if (ACAMERA_CONTROL_SCENE_MODE_NIGHT_PORTRAIT == e.data.u8[i]) - { - nightPortraitModeSupported = true; - } } } } @@ -479,20 +469,9 @@ int NdkCamera::open(const std::string& cameraId) { uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO; status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode); - if (hdrSupported && m_params.hdrMode) { - uint8_t hdrMode = ACAMERA_CONTROL_SCENE_MODE_HDR; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1,&hdrMode); - } - - if (m_params.nightMode) { - if (nightModeSupported) { - uint8_t sceneMode = ACAMERA_CONTROL_SCENE_MODE_NIGHT; - status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode); - } - if (nightPortraitModeSupported) { - uint8_t modeEnabled = 1; // ACAMERA_CONTROL_SCENE_MODE_HDR - // res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_NIGHT_PORTRAIT, 1, &modeEnabled); - } + if (m_params.sceneMode != 0) { + uint8_t sceneMode = m_params.sceneMode; + status = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode); } status = ACameraOutputTarget_create(image_reader_surface, &image_reader_target); @@ -1004,7 +983,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque val = {0}; status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_SCENE_MODE, &val); - mResult.hdrMode = (*(val.data.u8) == ACAMERA_CONTROL_SCENE_MODE_HDR) ? 1 : 0; + mResult.sceneMode = status == ACAMERA_OK ? *(val.data.u8) : 0; val = {0}; status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_MODE, &val); diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index 22564117..2aa03702 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -69,13 +69,12 @@ class NdkCamera public: struct CAMERA_PARAMS { - unsigned int hdrMode : 1; - unsigned int nightMode : 1; + unsigned int sceneMode : 5; unsigned int autoFocus : 1; unsigned int autoExposure : 1; unsigned int orientation:3; unsigned int focusTimeout : 14; // milli-seconds 65535 / 4 - unsigned int reserved : 11; + unsigned int reserved : 8; unsigned int exposureTime; // ms unsigned int sensibility; }; @@ -90,7 +89,7 @@ public: int64_t exposureTime; float FocusDistance; int32_t sensitibity; - uint8_t hdrMode; + uint8_t sceneMode; }; @@ -132,9 +131,7 @@ protected: int32_t mHeight; std::string mCameraId; - bool hdrSupported; - bool nightModeSupported; - bool nightPortraitModeSupported; + bool sceneModeSupported; bool afSupported; bool awbSupported; bool aeLockAvailable; diff --git a/app/src/main/java/com/xypower/mpapp/ChannelActivity.java b/app/src/main/java/com/xypower/mpapp/ChannelActivity.java index 7924e846..b1d31b46 100644 --- a/app/src/main/java/com/xypower/mpapp/ChannelActivity.java +++ b/app/src/main/java/com/xypower/mpapp/ChannelActivity.java @@ -70,6 +70,7 @@ public class ChannelActivity extends AppCompatActivity { } }); + /* binding.btnNightMode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -87,6 +88,7 @@ public class ChannelActivity extends AppCompatActivity { } } }); + */ } private View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() { @@ -130,7 +132,7 @@ public class ChannelActivity extends AppCompatActivity { binding.btnAutoExplosure.setChecked(true); binding.btnAutoFocus.setChecked(true); - binding.btnHdrMode.setChecked(true); + // binding.btnHdrMode.setChecked(true); binding.exposuretime.setText("0"); binding.sensitivity.setText("0"); @@ -146,8 +148,17 @@ public class ChannelActivity extends AppCompatActivity { binding.btnUsbCamera.setChecked(jsonObject.optInt("usbCamera", 0) == 1); binding.btnAutoExplosure.setChecked(jsonObject.optInt("autoExposure", 1) == 1); binding.btnAutoFocus.setChecked(jsonObject.optInt("autoFocus", 1) == 1); - binding.btnHdrMode.setChecked(jsonObject.optInt("hdrMode", 0) == 1); - binding.btnNightMode.setChecked(jsonObject.optInt("nightMode", 0) == 1); + // binding.btnHdrMode.setChecked(jsonObject.optInt("hdrMode", 0) == 1); + // binding.btnNightMode.setChecked(jsonObject.optInt("nightMode", 0) == 1); + int sceneMode = jsonObject.optInt("sceneMode", 0); + String sceneModeText = Integer.toString(sceneMode) + " "; + for (int idx = 0; idx < binding.sceneModes.getCount(); idx++) { + String text = (String)binding.sceneModes.getItemAtPosition(idx); + if (text.indexOf(sceneModeText) == 0) { + binding.sceneModes.setSelection(idx); + break; + } + } binding.exposuretime.setText(Integer.toString(jsonObject.optInt("exposureTime", 0))); binding.sensitivity.setText(Integer.toString(jsonObject.optInt("sensibility", 0))); binding.orientations.setSelection(jsonObject.optInt("orientation", 0)); @@ -223,8 +234,13 @@ public class ChannelActivity extends AppCompatActivity { jsonObject.put("usbCamera", binding.btnUsbCamera.isChecked() ? 1 : 0); jsonObject.put("autoExposure", binding.btnAutoExplosure.isChecked() ? 1 : 0); jsonObject.put("autoFocus", binding.btnAutoFocus.isChecked() ? 1 : 0); - jsonObject.put("hdrMode", binding.btnHdrMode.isChecked() ? 1 : 0); - jsonObject.put("nightMode", binding.btnNightMode.isChecked() ? 1 : 0); + // jsonObject.put("hdrMode", binding.btnHdrMode.isChecked() ? 1 : 0); + // jsonObject.put("nightMode", binding.btnNightMode.isChecked() ? 1 : 0); + int sceneMode = 0; + String sceneModeText = (String)binding.sceneModes.getSelectedItem(); + sceneModeText = sceneModeText.substring(0, sceneModeText.indexOf(" -")); + sceneMode = Integer.parseInt(sceneModeText); + jsonObject.put("sceneMode", sceneMode); jsonObject.put("exposureTime", Integer.parseInt(binding.exposuretime.getText().toString())); jsonObject.put("sensibility", Integer.parseInt(binding.sensitivity.getText().toString())); jsonObject.put("orientation", binding.orientations.getSelectedItemPosition()); diff --git a/app/src/main/res/layout/activity_channel.xml b/app/src/main/res/layout/activity_channel.xml index e57dd154..7b5eddf1 100644 --- a/app/src/main/res/layout/activity_channel.xml +++ b/app/src/main/res/layout/activity_channel.xml @@ -130,26 +130,17 @@ app:layout_constraintStart_toEndOf="@+id/btnAutoExplosure" app:layout_constraintTop_toBottomOf="@+id/resolutionCX" /> - - - + + + 0 - Disabled + 5 - Night + 5 - Night + 9 - Snow + 10 - Sunset + 12 - Fireworks + 18 - HDR + + \ No newline at end of file