|
|
@ -1,5 +1,7 @@
|
|
|
|
package com.xypower.mppreview;
|
|
|
|
package com.xypower.mppreview;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import static java.lang.System.loadLibrary;
|
|
|
|
|
|
|
|
|
|
|
|
import android.Manifest;
|
|
|
|
import android.Manifest;
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.app.Dialog;
|
|
|
|
import android.app.Dialog;
|
|
|
@ -28,8 +30,6 @@ import android.hardware.camera2.params.MeteringRectangle;
|
|
|
|
import android.hardware.camera2.params.StreamConfigurationMap;
|
|
|
|
import android.hardware.camera2.params.StreamConfigurationMap;
|
|
|
|
import android.media.Image;
|
|
|
|
import android.media.Image;
|
|
|
|
import android.media.ImageReader;
|
|
|
|
import android.media.ImageReader;
|
|
|
|
import android.media.MediaScannerConnection;
|
|
|
|
|
|
|
|
import android.net.Uri;
|
|
|
|
|
|
|
|
import android.os.AsyncTask;
|
|
|
|
import android.os.AsyncTask;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
|
|
|
|
|
|
@ -86,6 +86,12 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public class Camera2RawFragment extends Fragment {
|
|
|
|
public class Camera2RawFragment extends Fragment {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static int covertNum;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static {
|
|
|
|
|
|
|
|
loadLibrary("mppreview");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Conversion from screen rotation to JPEG orientation.
|
|
|
|
* Conversion from screen rotation to JPEG orientation.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -162,8 +168,10 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private OrientationEventListener mOrientationListener;
|
|
|
|
private OrientationEventListener mOrientationListener;
|
|
|
|
|
|
|
|
|
|
|
|
private native boolean makeHdr(long exposureTime1, String path1, long exposureTime2, String path2, String outputPath);
|
|
|
|
public static native boolean makeHdr(long exposureTime1, String path1, long exposureTime2, String path2, String outputPath);
|
|
|
|
private native boolean makeHdr(long exposureTime1, String path1, long exposureTime2, String path2, long exposureTime3, String path3, String outputPath);
|
|
|
|
|
|
|
|
|
|
|
|
public static native boolean makeHdr2(long exposureTime1, String path1, long exposureTime2, String path2, long exposureTime3, String path3, String outputPath);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private int mExposureComp = MainActivity.ExposureComp;
|
|
|
|
private int mExposureComp = MainActivity.ExposureComp;
|
|
|
|
|
|
|
|
|
|
|
@ -392,7 +400,7 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
private Long exposetime;
|
|
|
|
private Long exposetime;
|
|
|
|
private Integer sensitivity;
|
|
|
|
private Integer sensitivity;
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* /**
|
|
|
|
* A {@link CameraCaptureSession.CaptureCallback} that handles events for the preview and
|
|
|
|
* A {@link CameraCaptureSession.CaptureCallback} that handles events for the preview and
|
|
|
|
* pre-capture sequence.
|
|
|
|
* pre-capture sequence.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -614,21 +622,51 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
button.setOnClickListener(new View.OnClickListener() {
|
|
|
|
button.setOnClickListener(new View.OnClickListener() {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onClick(View view) {
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
|
|
|
// File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
|
|
|
|
|
|
|
|
// List<String> strings = RawToJpgConverter.listFiles(directory);
|
|
|
|
|
|
|
|
// if (strings != null && strings.size() > 0) {
|
|
|
|
|
|
|
|
// for (String item : strings) {
|
|
|
|
|
|
|
|
// if (item.contains("create")) {
|
|
|
|
|
|
|
|
// File file1 = new File(directory, item);
|
|
|
|
|
|
|
|
// File file2 = new File(directory, "create_" + item + ".jpg");
|
|
|
|
|
|
|
|
// try {
|
|
|
|
|
|
|
|
// RawToJpgConverter.convertRawToJpg(file1.getPath(), file2.getPath());
|
|
|
|
|
|
|
|
// } catch (IOException e) {
|
|
|
|
|
|
|
|
// throw new RuntimeException(e);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
|
|
|
|
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
|
|
|
|
|
|
|
|
String dcimpath = directory.getPath();
|
|
|
|
List<String> strings = RawToJpgConverter.listFiles(directory);
|
|
|
|
List<String> strings = RawToJpgConverter.listFiles(directory);
|
|
|
|
|
|
|
|
long t1;
|
|
|
|
|
|
|
|
long t2;
|
|
|
|
|
|
|
|
String p1;
|
|
|
|
|
|
|
|
String p2;
|
|
|
|
|
|
|
|
ArrayList<PngPhotoBean> list = new ArrayList();
|
|
|
|
if (strings != null && strings.size() > 0) {
|
|
|
|
if (strings != null && strings.size() > 0) {
|
|
|
|
for (String item : strings) {
|
|
|
|
for (String item : strings) {
|
|
|
|
if (item.contains("RAW")) {
|
|
|
|
if (item.contains("create")) {
|
|
|
|
|
|
|
|
String[] s = item.split("_");
|
|
|
|
File file1 = new File(directory, item);
|
|
|
|
File file1 = new File(directory, item);
|
|
|
|
File file2 = new File(directory, "create_" + item + ".jpg");
|
|
|
|
PngPhotoBean bean = new PngPhotoBean();
|
|
|
|
try {
|
|
|
|
bean.etime = Long.parseLong(s[1]);
|
|
|
|
RawToJpgConverter.convertRawToJpg(file1.getPath(), file2.getPath());
|
|
|
|
bean.path = file1.getPath();
|
|
|
|
} catch (IOException e) {
|
|
|
|
list.add(bean);
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
if (list.size() == 2) {
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (list.size() == 2) {
|
|
|
|
|
|
|
|
PngPhotoBean bean = list.get(0);
|
|
|
|
|
|
|
|
PngPhotoBean bean1 = list.get(1);
|
|
|
|
|
|
|
|
makeHdr(bean.etime, bean.path, bean1.etime, bean1.path, dcimpath + "/" + "hdr_" + generateTimestamp() + ".png");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
@ -1270,10 +1308,10 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
Rational rational = mCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP);
|
|
|
|
Rational rational = mCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP);
|
|
|
|
double step = rational.doubleValue();
|
|
|
|
double step = rational.doubleValue();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mCharacteristics.get(CameraMetadata.CONTROL_AE_COMPENSATION_STEP)
|
|
|
|
// mCharacteristics.get(CameraMetadata.CONTROL_AE_COMPENSATION_STEP)
|
|
|
|
List<CaptureRequest> requests = new ArrayList<>();
|
|
|
|
List<CaptureRequest> requests = new ArrayList<>();
|
|
|
|
for (int idx = 0; idx < 10; idx++) {
|
|
|
|
double v = 0;
|
|
|
|
|
|
|
|
for (int idx = 0; idx < 2; idx++) {
|
|
|
|
// Set request tag to easily track results in callbacks.
|
|
|
|
// Set request tag to easily track results in callbacks.
|
|
|
|
captureBuilder.setTag(mRequestCounter.getAndIncrement());
|
|
|
|
captureBuilder.setTag(mRequestCounter.getAndIncrement());
|
|
|
|
|
|
|
|
|
|
|
@ -1284,7 +1322,7 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
if (isHandTakePic) {
|
|
|
|
if (isHandTakePic) {
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
double v = exposureTime * pic1;
|
|
|
|
v = exposureTime * pic1;
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
if (sensitivity > 0) {
|
|
|
@ -1300,142 +1338,7 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
if (isHandTakePic) {
|
|
|
|
if (isHandTakePic) {
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
double v = exposureTime * 2;
|
|
|
|
v = exposureTime * 7;
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 2) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 3;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 3) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 4;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 4) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 5;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 5) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 6;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 6) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 7;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 7) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 8;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 8) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 9;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 9) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 10;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 100);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (idx == 10) {
|
|
|
|
|
|
|
|
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
|
|
|
|
|
|
|
|
// 设置曝光时间,例如设置为1000微秒
|
|
|
|
|
|
|
|
// long exposureTime = 1000 000000L; // 1000微秒
|
|
|
|
|
|
|
|
if (isHandTakePic) {
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
|
|
|
|
|
if (exposureTime > 0) {
|
|
|
|
|
|
|
|
double v = exposureTime * 11;
|
|
|
|
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) v);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (sensitivity > 0) {
|
|
|
|
if (sensitivity > 0) {
|
|
|
@ -1451,6 +1354,8 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
ImageSaver.ImageSaverBuilder jpegBuilder = new ImageSaver.ImageSaverBuilder(activity).setCharacteristics(mCharacteristics);
|
|
|
|
ImageSaver.ImageSaverBuilder jpegBuilder = new ImageSaver.ImageSaverBuilder(activity).setCharacteristics(mCharacteristics);
|
|
|
|
ImageSaver.ImageSaverBuilder rawBuilder = new ImageSaver.ImageSaverBuilder(activity).setCharacteristics(mCharacteristics);
|
|
|
|
ImageSaver.ImageSaverBuilder rawBuilder = new ImageSaver.ImageSaverBuilder(activity).setCharacteristics(mCharacteristics);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rawBuilder.setExposetime((long) v);
|
|
|
|
|
|
|
|
|
|
|
|
mJpegResultQueue.put((int) request.getTag(), jpegBuilder);
|
|
|
|
mJpegResultQueue.put((int) request.getTag(), jpegBuilder);
|
|
|
|
mRawResultQueue.put((int) request.getTag(), rawBuilder);
|
|
|
|
mRawResultQueue.put((int) request.getTag(), rawBuilder);
|
|
|
|
|
|
|
|
|
|
|
@ -1591,14 +1496,16 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
* A reference counted wrapper for the ImageReader that owns the given image.
|
|
|
|
* A reference counted wrapper for the ImageReader that owns the given image.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private final RefCountedAutoCloseable<ImageReader> mReader;
|
|
|
|
private final RefCountedAutoCloseable<ImageReader> mReader;
|
|
|
|
|
|
|
|
private final long mExpostime;
|
|
|
|
|
|
|
|
|
|
|
|
private ImageSaver(Image image, File file, CaptureResult result, CameraCharacteristics characteristics, Context context, RefCountedAutoCloseable<ImageReader> reader) {
|
|
|
|
private ImageSaver(Image image, File file, CaptureResult result, CameraCharacteristics characteristics, Context context, RefCountedAutoCloseable<ImageReader> reader, long mexpostime) {
|
|
|
|
mImage = image;
|
|
|
|
mImage = image;
|
|
|
|
mFile = file;
|
|
|
|
mFile = file;
|
|
|
|
mCaptureResult = result;
|
|
|
|
mCaptureResult = result;
|
|
|
|
mCharacteristics = characteristics;
|
|
|
|
mCharacteristics = characteristics;
|
|
|
|
mContext = context;
|
|
|
|
mContext = context;
|
|
|
|
mReader = reader;
|
|
|
|
mReader = reader;
|
|
|
|
|
|
|
|
mExpostime = mexpostime;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -1649,19 +1556,28 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
|
|
|
|
|
|
|
|
// If saving the file succeeded, update MediaStore.
|
|
|
|
// If saving the file succeeded, update MediaStore.
|
|
|
|
if (success) {
|
|
|
|
if (success) {
|
|
|
|
MediaScannerConnection.scanFile(mContext, new String[]{mFile.getPath()},
|
|
|
|
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
|
|
|
|
/*mimeTypes*/null, new MediaScannerConnection.MediaScannerConnectionClient() {
|
|
|
|
File file = new File(directory, "create_" + mExpostime + "_" + generateTimestamp() + ".png");
|
|
|
|
@Override
|
|
|
|
try {
|
|
|
|
public void onMediaScannerConnected() {
|
|
|
|
RawToJpgConverter.convertRawToJpg(mFile.getPath(), file.getPath());
|
|
|
|
// Do nothing
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
// covertNum++;
|
|
|
|
public void onScanCompleted(String path, Uri uri) {
|
|
|
|
// MediaScannerConnection.scanFile(mContext, new String[]{mFile.getPath()},
|
|
|
|
Log.i(TAG, "Scanned " + path + ":");
|
|
|
|
// /*mimeTypes*/null, new MediaScannerConnection.MediaScannerConnectionClient() {
|
|
|
|
Log.i(TAG, "-> uri=" + uri);
|
|
|
|
// @Override
|
|
|
|
}
|
|
|
|
// public void onMediaScannerConnected() {
|
|
|
|
});
|
|
|
|
// // Do nothing
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// @Override
|
|
|
|
|
|
|
|
// public void onScanCompleted(String path, Uri uri) {
|
|
|
|
|
|
|
|
// Log.i(TAG, "Scanned " + path + ":");
|
|
|
|
|
|
|
|
// Log.i(TAG, "-> uri=" + uri);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1676,6 +1592,8 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
private CaptureResult mCaptureResult;
|
|
|
|
private CaptureResult mCaptureResult;
|
|
|
|
private CameraCharacteristics mCharacteristics;
|
|
|
|
private CameraCharacteristics mCharacteristics;
|
|
|
|
private Context mContext;
|
|
|
|
private Context mContext;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private long mexpostime;
|
|
|
|
private RefCountedAutoCloseable<ImageReader> mReader;
|
|
|
|
private RefCountedAutoCloseable<ImageReader> mReader;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -1688,6 +1606,12 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
mContext = context;
|
|
|
|
mContext = context;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public synchronized ImageSaverBuilder setExposetime(long time) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mexpostime = time;
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public synchronized ImageSaverBuilder setRefCountedReader(RefCountedAutoCloseable<ImageReader> reader) {
|
|
|
|
public synchronized ImageSaverBuilder setRefCountedReader(RefCountedAutoCloseable<ImageReader> reader) {
|
|
|
|
if (reader == null) throw new NullPointerException();
|
|
|
|
if (reader == null) throw new NullPointerException();
|
|
|
|
|
|
|
|
|
|
|
@ -1723,7 +1647,7 @@ public class Camera2RawFragment extends Fragment {
|
|
|
|
if (!isComplete()) {
|
|
|
|
if (!isComplete()) {
|
|
|
|
return null;
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return new ImageSaver(mImage, mFile, mCaptureResult, mCharacteristics, mContext, mReader);
|
|
|
|
return new ImageSaver(mImage, mFile, mCaptureResult, mCharacteristics, mContext, mReader, mexpostime);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public synchronized String getSaveLocation() {
|
|
|
|
public synchronized String getSaveLocation() {
|
|
|
|