diff --git a/app/build.gradle b/app/build.gradle
index cacc00a..3397ec3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,5 +84,4 @@ dependencies {
// CameraX View class
implementation "androidx.camera:camera-view:1.1.0"
-
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b26650d..c56cbf0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.xypower.mppreview">
+
diff --git a/app/src/main/cpp/HdrImpl.cpp b/app/src/main/cpp/HdrImpl.cpp
index b93fb8e..5f1481a 100644
--- a/app/src/main/cpp/HdrImpl.cpp
+++ b/app/src/main/cpp/HdrImpl.cpp
@@ -57,5 +57,11 @@ bool makeHdr(std::vector& times, std::vector& images, cv::Mat& r
ldrReinhard.convertTo(rgb, CV_8U);
ldrReinhard.release();
+ mergeDebevec.release();
+ responseDebevec.release();
+ alignMTB.release();
+ tonemapReinhard.release();
+ calibrateDebevec.release();
+ mergeDebevec.release();
return true;
}
\ No newline at end of file
diff --git a/app/src/main/cpp/MpPreview.cpp b/app/src/main/cpp/MpPreview.cpp
index ceb555f..9b1b4da 100644
--- a/app/src/main/cpp/MpPreview.cpp
+++ b/app/src/main/cpp/MpPreview.cpp
@@ -671,6 +671,7 @@ Java_com_xypower_mppreview_Camera2RawFragment_makeHdr3(JNIEnv *env, jclass clazz
cv::Mat tmp(bmpInfo.height, bmpInfo.width, CV_8UC4, outVirtualAddress);
tmp.copyTo(images[idx]);
AHardwareBuffer_unlock(hardwareBuffer, &fence);
+ AHardwareBuffer_release(hardwareBuffer);
}
else
{
@@ -679,14 +680,16 @@ Java_com_xypower_mppreview_Camera2RawFragment_makeHdr3(JNIEnv *env, jclass clazz
cv::Mat tmp(bmpInfo.height, bmpInfo.width, CV_8UC4, outAddress);
tmp.copyTo(images[idx]);
AndroidBitmap_unlockPixels(env, bitmaps[idx]);
+ tmp.release();
}
//convert RGB to BGR
cv::cvtColor(images[idx], images[idx], cv::COLOR_RGB2BGR);
-
// ConvertDngToPng(pngDatas[idx], pngLengths[idx], images[idx]);
}
-
+ bitmaps.clear();
+ env->DeleteLocalRef(img1);
+ env->DeleteLocalRef(img2);
ALOGI("End Decode");
cv::Mat rgb;
@@ -704,6 +707,11 @@ Java_com_xypower_mppreview_Camera2RawFragment_makeHdr3(JNIEnv *env, jclass clazz
params.push_back(100);
if (cv::imwrite(fileName.c_str(), rgb, params))
{
+ rgb.release();
+// images[0].release();
+// images[1].release();
+// images.clear();
+
ALOGI("End HDR3");
return JNI_TRUE;
}
diff --git a/app/src/main/java/com/xypower/mppreview/Camera2RawFragment.java b/app/src/main/java/com/xypower/mppreview/Camera2RawFragment.java
index cc71f35..c6fb71f 100644
--- a/app/src/main/java/com/xypower/mppreview/Camera2RawFragment.java
+++ b/app/src/main/java/com/xypower/mppreview/Camera2RawFragment.java
@@ -47,6 +47,7 @@ import android.util.Rational;
import android.util.Size;
import android.util.SparseIntArray;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.OrientationEventListener;
import android.view.Surface;
import android.view.TextureView;
@@ -62,8 +63,10 @@ import android.widget.Toast;
import com.xypower.mppreview.bean.Contants;
import com.xypower.mppreview.bean.PngPhotoBean;
import com.xypower.mppreview.interfaces.CompleteCallback;
+import com.xypower.mppreview.utils.HdrUtil;
import com.xypower.mppreview.widget.ErrorDialog;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
@@ -139,6 +142,9 @@ public class Camera2RawFragment extends Fragment {
private ExecutorService executorService;
private Button takepic;
private ImageView rorpic;
+ private Rect focusArea;
+ private ImageSaver.ImagePairRunnable runnable;
+ private ImageSaver.ImagePair imagePair;
public static native boolean makeHdr(long exposureTime1, String path1, long exposureTime2, String path2, String outputPath);
@@ -386,6 +392,11 @@ public class Camera2RawFragment extends Fragment {
private CameraCaptureSession.CaptureCallback mPreCaptureCallback = new CameraCaptureSession.CaptureCallback() {
private void process(CaptureResult result) {
+
+// Integer afStates = result.get(CaptureResult.CONTROL_AF_STATE);
+// if (afStates!=null &&(afStates == CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED || afStates == CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED)) {
+// resetAutoFocus();
+// }
synchronized (mCameraStateLock) {
switch (mState) {
case STATE_PREVIEW: {
@@ -558,10 +569,117 @@ public class Camera2RawFragment extends Fragment {
takePicture();
}
});
+// mTextureView.setOnTouchListener(new View.OnTouchListener() {
+// @Override
+// public boolean onTouch(View v, MotionEvent event) {
+// if (event.getAction() == MotionEvent.ACTION_DOWN) {
+// float x = event.getX();
+// float y = event.getY();
+//
+// // 将触摸坐标转换为相机对焦区域
+// focusArea = calculateFocusArea(x, y);
+// triggerAutoFocus(focusArea);
+// }
+// return true;
+// }
+// });
+
executorService = Executors.newFixedThreadPool(2);
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ imagePair = null;
+ runnable = null;
+ mTextureView = null;
+ executorService.shutdown();
+ }
+
+ private Rect calculateFocusArea(float x, float y) {
+ int viewWidth = mTextureView.getWidth();
+ int viewHeight = mTextureView.getHeight();
+
+ int focusSize =200; // 对焦区域大小
+// int left = (int) (x / viewWidth * 2000 - 1000 - focusSize / 2);
+// int top = (int) (y / viewHeight * 2000 - 1000 - focusSize / 2);
+ int left = (int) (x - focusSize / 2);
+ int top = (int) (y - focusSize / 2);
+ int right = left + focusSize;
+ int bottom = top + focusSize;
+
+ if (left<0) {
+ left = 0;
+ }
+ if (top<0) {
+ top = 0;
+ }
+ if (right < 0) {
+ right = 0;
+ }
+ if (bottom < 0) {
+ bottom = 0;
+ }
+ return new Rect(left, top, right, bottom);
+ }
+
+ private void triggerAutoFocus(Rect focusArea) {
+ try {
+// CaptureRequest.Builder mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+ mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
+ mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
+ mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_REGIONS, new MeteringRectangle[]{new MeteringRectangle(focusArea, 1000)});
+ mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_REGIONS, new MeteringRectangle[]{new MeteringRectangle(focusArea, 1000)});
+ mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
+//
+// try {
+ // AE/AF区域设置通过setRepeatingRequest不断发请求
+ mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mPreCaptureCallback, mBackgroundHandler);
+// } catch (CameraAccessException e) {
+// e.printStackTrace();
+// }
+// mCaptureSession.capture(captureBuilder.build(), null, null);
+
+// startControlAFRequest(new MeteringRectangle(focusArea, 1000), mPreCaptureCallback);
+
+// mCaptureSession.capture(mPreviewRequestBuilder.build(), mPreCaptureCallback, mBackgroundHandler);
+
+ } catch (CameraAccessException e) {
+ e.printStackTrace();
+ }
+
+//
+// int previewWidth = mTextureView.getWidth();
+// int previewHeight = mTextureView.getHeight();
+// RectF previewRect = new RectF(focusArea.left, focusArea.top, previewWidth, previewHeight);
+//
+// CoordinateTransformer cf = new CoordinateTransformer(mCharacteristics, previewRect);
+//
+// RectF rect = cf.toCameraSpace(previewRect);
+
+// MeteringRectangle mr = new MeteringRectangle(new Rect((int) rect.left, (int) rect.top, (int) rect.right, (int) rect.bottom), 1000);
+// startControlAFRequest(new MeteringRectangle(focusArea, 1000), mPreCaptureCallback);
+ }
+
+ private void resetAutoFocus() {
+ try {
+// CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+// mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
+// mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+
+
+ mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
+ mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+// mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
+
+
+// mCaptureSession.capture(captureBuilder.build(), mPreCaptureCallback, null);
+ mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mPreCaptureCallback, mBackgroundHandler);
+ } catch (CameraAccessException e) {
+ e.printStackTrace();
+ }
+ }
@Override
public void onResume() {
super.onResume();
@@ -627,7 +745,7 @@ public class Camera2RawFragment extends Fragment {
}
public void startControlAFRequest(MeteringRectangle rect, CameraCaptureSession.CaptureCallback captureCallback) {
-
+// mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
MeteringRectangle[] rectangle = new MeteringRectangle[]{rect};
// Focus Mode AUTO
// mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_AUTO);
@@ -643,6 +761,7 @@ public class Camera2RawFragment extends Fragment {
}
//触发对焦
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START);
+
try {
//触发对焦通过capture发送请求, 因为用户点击屏幕后只需触发一次对焦
mCaptureSession.capture(mPreviewRequestBuilder.build(), captureCallback, mBackgroundHandler);
@@ -1117,14 +1236,28 @@ public class Camera2RawFragment extends Fragment {
double step = rational.doubleValue();
captureBuilder.set(CaptureRequest.EDGE_MODE, CaptureRequest.EDGE_MODE_HIGH_QUALITY);
captureBuilder.set(CaptureRequest.NOISE_REDUCTION_MODE, CaptureRequest.NOISE_REDUCTION_MODE_HIGH_QUALITY);
+
+
+// if (focusArea!=null) {
+// captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
+// captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
+// captureBuilder.set(CaptureRequest.CONTROL_AF_REGIONS, new MeteringRectangle[]{new MeteringRectangle(focusArea, 1000)});
+// captureBuilder.set(CaptureRequest.CONTROL_AE_REGIONS, new MeteringRectangle[]{new MeteringRectangle(focusArea, 1000)});
+// captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
+// }
+//
+// try {
+ // AE/AF区域设置通过setRepeatingRequest不断发请求
+// mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mPreCaptureCallback, mBackgroundHandler);
+
if (pic1 < 21) {
// mCharacteristics.get(CameraMetadata.CONTROL_AE_COMPENSATION_STEP)
ArrayList mlist = new ArrayList<>();
List requests = new ArrayList<>();
long v = 0;
- ImageSaver.ImagePair imagePair = new ImageSaver.ImagePair(2);
- ImageSaver.ImagePairRunnable runnable = new ImageSaver.ImagePairRunnable(imagePair) {
+ imagePair = new ImageSaver.ImagePair(2);
+ runnable = new ImageSaver.ImagePairRunnable(imagePair) {
@Override
public void run() {
final List images = imagePair.getImages();
@@ -1140,11 +1273,23 @@ public class Camera2RawFragment extends Fragment {
Log.d("开始Hdr处理", "strat");
String hdrOutputPath = outputPath + "HDR_" + generateTimestamp() + ".bmp";
boolean b = makeHdr3(img1.exposureTime, img1.bitmap, img1.length, img2.exposureTime, img2.bitmap, img2.length, hdrOutputPath);
+
+
+// Mat mat1 = new Mat();
+// Mat mat2 = new Mat();
+// Mat Hdrmat = new Mat();
+// Utils.bitmapToMat(img1.bitmap, mat1);
+// Utils.bitmapToMat(img2.bitmap, mat2);
+//
+// Mat[] mats = {mat1, mat2};
+// float[] floats = {img1.exposureTime,img2.exposureTime};
+// HdrUtil.createHDR(mats, floats,Hdrmat,hdrOutputPath);
img1.bitmap.recycle();
img2.bitmap.recycle();
img1 = null;
img2 = null;
images.clear();
+
Log.d("结束Hdr处理", "end");
if (b) {
getActivity().runOnUiThread(new Runnable() {
@@ -1173,10 +1318,10 @@ public class Camera2RawFragment extends Fragment {
captureBuilder.setTag(mRequestCounter.getAndIncrement());
if (idx == 0) {
-// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
// 设置曝光时间,例如设置为1000微秒
// long exposureTime = 1000 000000L; // 1000微秒
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
+ captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 0);
if (exposureTime > 0) {
v = exposureTime;
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, v);
@@ -1188,6 +1333,7 @@ public class Camera2RawFragment extends Fragment {
if (idx == 1) {
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
+ captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 2);
if (exposureTime > 0) {
if (pic1 <= 0) {
v = exposureTime * DEFAULT_COMPATATION;
diff --git a/app/src/main/java/com/xypower/mppreview/ImageSaver.java b/app/src/main/java/com/xypower/mppreview/ImageSaver.java
index e3e1dba..3c85a42 100644
--- a/app/src/main/java/com/xypower/mppreview/ImageSaver.java
+++ b/app/src/main/java/com/xypower/mppreview/ImageSaver.java
@@ -32,7 +32,6 @@ public class ImageSaver implements Runnable {
private final CaptureResult mCaptureResult;
private final CameraCharacteristics mCharacteristics;
private CompleteCallback mCallback;
- private final Context mContext;
private final ImagePair mImagePair;
private final Camera2RawFragment.RefCountedAutoCloseable mReader;
@@ -50,9 +49,9 @@ public class ImageSaver implements Runnable {
}
public static class ImagePair {
- private List mImages;
- private int mExpectedCount;
- private Runnable mRunnable;
+ public List mImages;
+ public int mExpectedCount;
+ public Runnable mRunnable;
public ImagePair(int expectedCount) {
mImages = new ArrayList<>();
@@ -94,14 +93,13 @@ public class ImageSaver implements Runnable {
private ArrayList mlist = new ArrayList<>();//用来存储已拍照的照片名称
- public ImageSaver(Image image, File file, CaptureResult result, CameraCharacteristics characteristics, Context context,
+ public ImageSaver(Image image, File file, CaptureResult result, CameraCharacteristics characteristics,
Camera2RawFragment.RefCountedAutoCloseable reader, ArrayList list,
CompleteCallback callback, ImagePair imagePair) {
mImage = image;
mFile = file;
mCaptureResult = result;
mCharacteristics = characteristics;
- mContext = context;
mReader = reader;
mlist = list;
mCallback = callback;
@@ -162,6 +160,7 @@ public class ImageSaver implements Runnable {
// ImageDecoder.Source source = ImageDecoder.createSource(mFile);
ImageDecoder.Source source = ImageDecoder.createSource(byteBuffer);
+
try {
bmp = ImageDecoder.decodeBitmap(source, listener);
} catch (Exception ex) {
@@ -169,13 +168,17 @@ public class ImageSaver implements Runnable {
}
Log.i(TAG, "End Hardware Decoding Exp=" + t.toString());
+
byteBuffer.clear();
byteBuffer = null;
mImagePair.addImage(bmp, 0, t.longValue());
+// bmp.recycle();
+// bmp = null;
success = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
+ dngCreator.close();
mImage.close();
closeOutput(baos);
}
@@ -189,6 +192,7 @@ public class ImageSaver implements Runnable {
e.printStackTrace();
} finally {
mImage.close();
+ dngCreator.close();
closeOutput(output);
}
}
@@ -213,6 +217,16 @@ public class ImageSaver implements Runnable {
}
}
+// private static void clear() {
+// if (null != outputStream) {
+// try {
+// outputStream.close();
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+// }
+// }
+
// private void saveJpeg(Image image,String name) {
// Image.Plane[] planes = image.getPlanes();
// ByteBuffer buffer = planes[0].getBuffer();
diff --git a/app/src/main/java/com/xypower/mppreview/ImageSaverBuilder.java b/app/src/main/java/com/xypower/mppreview/ImageSaverBuilder.java
index c3b34a0..69d6ea3 100644
--- a/app/src/main/java/com/xypower/mppreview/ImageSaverBuilder.java
+++ b/app/src/main/java/com/xypower/mppreview/ImageSaverBuilder.java
@@ -85,7 +85,7 @@ public class ImageSaverBuilder {
if (!isComplete()) {
return null;
}
- return new ImageSaver(mImage, mFile, mCaptureResult, mCharacteristics, mContext, mReader, mlist,mCallback, mImagePair);
+ return new ImageSaver(mImage, mFile, mCaptureResult, mCharacteristics, mReader, mlist,mCallback, mImagePair);
}
public synchronized String getSaveLocation() {
diff --git a/app/src/main/java/com/xypower/mppreview/MainActivity.java b/app/src/main/java/com/xypower/mppreview/MainActivity.java
index 37817a1..2792980 100644
--- a/app/src/main/java/com/xypower/mppreview/MainActivity.java
+++ b/app/src/main/java/com/xypower/mppreview/MainActivity.java
@@ -16,6 +16,10 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkRequest;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
@@ -30,6 +34,8 @@ import com.xypower.mppreview.ui.CameraChannelActivity;
import com.xypower.mppreview.utils.PhotoUtil;
import com.xypower.mppreview.bean.Contants;
import com.xypower.mppreview.utils.CameraUtils;
+import com.xypower.mppreview.utils.RouteManager;
+
import java.io.File;
import java.util.ArrayList;
@@ -40,6 +46,13 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
loadLibrary("mppreview");
}
+// static {
+// if (!OpenCVLoader.initDebug()) {
+// Log.e("OpenCV", "Initialization failed");
+// } else {
+// Log.d("OpenCV", "Initialization succeeded");
+// }
+// }
private static int MY_PERMISSIONS_REQUEST_FOREGROUND_SERVICE = 100;
public static int ExposureComp = 0;
@@ -98,19 +111,43 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
viewBinding.hdrtakepic.setOnClickListener(this);
viewBinding.systakepic.setOnClickListener(this);
viewBinding.spinner.setOnItemSelectedListener(this);
-// viewBinding.channel1.setOnClickListener(this);
-// viewBinding.channel2.setOnClickListener(this);
-// viewBinding.channel3.setOnClickListener(this);
-// viewBinding.channel4.setOnClickListener(this);
-// viewBinding.channel5.setOnClickListener(this);
-// viewBinding.channel6.setOnClickListener(this);
numberOfCameras = CameraUtils.getNumberOfCameras(this);
ItemAdapter itemAdapter = new ItemAdapter(numberOfCameras);
itemAdapter.setOnClickListener(this);
viewBinding.recyclerView.setAdapter(itemAdapter);
viewBinding.recyclerView.setLayoutManager(new GridLayoutManager(this,3));
+// initNetWork();
+
+ }
+ private void initNetWork() {
+ ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+ ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
+ @Override
+ public void onAvailable(Network network) {
+ super.onAvailable(network);
+ NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
+ if (capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
+ Log.d("NetworkCallback", "Ethernet connected");
+ // 以太网已连接
+ viewBinding.hdrhint.setText("已连接");
+
+ RouteManager.addRoute("192.168.68.0/24", "eth0");
+ }
+ }
+ @Override
+ public void onLost(Network network) {
+ super.onLost(network);
+ Log.d("NetworkCallback", "Network lost");
+ // 网络断开
+ viewBinding.hdrhint.setText("已断开");
+ }
+ };
+ NetworkRequest request = new NetworkRequest.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
+ .build();
+ connectivityManager.registerNetworkCallback(request, networkCallback);
}
private void initActivityResult() {
diff --git a/app/src/main/java/com/xypower/mppreview/adapter/ItemAdapter.java b/app/src/main/java/com/xypower/mppreview/adapter/ItemAdapter.java
index b6e1129..7ee50c3 100644
--- a/app/src/main/java/com/xypower/mppreview/adapter/ItemAdapter.java
+++ b/app/src/main/java/com/xypower/mppreview/adapter/ItemAdapter.java
@@ -11,9 +11,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.xypower.mppreview.R;
import com.xypower.mppreview.interfaces.OnItemClickListener;
-import java.util.List;
-
-
public class ItemAdapter extends RecyclerView.Adapter {
private Integer count;
public OnItemClickListener listener;
diff --git a/app/src/main/java/com/xypower/mppreview/utils/HdrUtil.java b/app/src/main/java/com/xypower/mppreview/utils/HdrUtil.java
index 05ba556..87d6387 100644
--- a/app/src/main/java/com/xypower/mppreview/utils/HdrUtil.java
+++ b/app/src/main/java/com/xypower/mppreview/utils/HdrUtil.java
@@ -1,8 +1,8 @@
package com.xypower.mppreview.utils;
-import static java.lang.System.loadLibrary;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
@@ -13,4 +13,34 @@ public class HdrUtil {
return sdf.format(new Date());
}
+// public static void createHDR(Mat[] images, float[] exposureTimes, Mat hdrImage,String filepath) {
+// Mat[] images32f = new Mat[images.length];
+// for (int i = 0; i < images.length; i++) {
+// images32f[i] = new Mat();
+// images[i].convertTo(images32f[i], CvType.CV_32F);
+// }
+//
+// Mat response = new Mat();
+// Mat times = new Mat(exposureTimes.length, 1, CvType.CV_32F);
+// for (int i = 0; i < exposureTimes.length; i++) {
+// times.put(i, 0, exposureTimes[i]);
+// }
+//
+// // Calibrate the camera response
+// CalibrateDebevec calibrate = createCalibrateDebevec();
+// calibrate.process(Arrays.asList(images32f), response, times);
+//
+// // Merge the images into an HDR image
+// MergeDebevec merge = createMergeDebevec();
+// merge.process(Arrays.asList(images32f), hdrImage, times, response);
+// saveHDRImage(hdrImage,filepath);
+// }
+//
+// public static void saveHDRImage(Mat hdrImage, String filePath) {
+// Imgcodecs.imwrite(filePath, hdrImage);
+// }
+
+
+
+
}
diff --git a/gradle.properties b/gradle.properties
index 659c92a..50943f0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -20,4 +20,5 @@ android.useAndroidX=true
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
-opencvsdk=D:/Workspace/deps/opencv-mobile-4.10.0-android-nihui
\ No newline at end of file
+#opencvsdk=D:/Workspace/deps/opencv-mobile-4.10.0-android-nihui
+opencvsdk=D:/Workspace/deps/opencv-mobile-4.10.0-android
\ No newline at end of file