移除JPG照片

TempBranch
Matthew 9 months ago
parent 8dab92b04d
commit 43c6fe8ec1

@ -15,6 +15,8 @@ import android.os.SystemClock;
import android.text.TextUtils;
import android.view.OrientationEventListener;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeMap;
@ -134,7 +136,7 @@ public class RawActivity extends AppCompatActivity {
/**
* Tag for the {@link Log}.
*/
private static final String TAG = "Camera2RawFragment";
private static final String TAG = "RawActivity";
/**
* Camera state: Device is closed.
@ -242,7 +244,7 @@ public class RawActivity extends AppCompatActivity {
* A counter for tracking corresponding {@link CaptureRequest}s and {@link CaptureResult}s
* across the {@link CameraCaptureSession} capture callbacks.
*/
private final AtomicInteger mRequestCounter = new AtomicInteger();
private final AtomicInteger mRequestCounter = new AtomicInteger(1);
/**
* A {@link Semaphore} to prevent the app from exiting before closing the camera.
@ -275,6 +277,7 @@ public class RawActivity extends AppCompatActivity {
private int mBurstCaptures = 1;
private List<String> mPathsOfCapture = new ArrayList<>();
private Set<Integer> mRequestIds = new HashSet<>();
/**
* A {@link CameraCaptureSession } for camera preview.
@ -308,7 +311,7 @@ public class RawActivity extends AppCompatActivity {
* captures. This is used to allow us to clean up the {@link ImageReader} when all background
* tasks using its {@link Image}s have completed.
*/
private RefCountedAutoCloseable<ImageReader> mJpegImageReader;
// private RefCountedAutoCloseable<ImageReader> mJpegImageReader;
/**
* A reference counted holder wrapping the {@link ImageReader} that handles RAW image captures.
@ -330,7 +333,7 @@ public class RawActivity extends AppCompatActivity {
/**
* Request ID to {@link ImageSaver.ImageSaverBuilder} mapping for in-progress JPEG captures.
*/
private final TreeMap<Integer, ImageSaver.ImageSaverBuilder> mJpegResultQueue = new TreeMap<>();
// private final TreeMap<Integer, ImageSaver.ImageSaverBuilder> mJpegResultQueue = new TreeMap<>();
/**
* Request ID to {@link ImageSaver.ImageSaverBuilder} mapping for in-progress RAW captures.
@ -423,6 +426,7 @@ public class RawActivity extends AppCompatActivity {
* This a callback object for the {@link ImageReader}. "onImageAvailable" will be called when a
* JPEG image is ready to be saved.
*/
/*
private final ImageReader.OnImageAvailableListener mOnJpegImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@ -432,6 +436,7 @@ public class RawActivity extends AppCompatActivity {
}
};
*/
/**
* This a callback object for the {@link ImageReader}. "onImageAvailable" will be called when a
@ -535,24 +540,27 @@ public class RawActivity extends AppCompatActivity {
public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request,
long timestamp, long frameNumber) {
String currentDateTime = generateTimestamp();
int requestId = (int) request.getTag();
File rawFile = new File(Environment.
getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),
"RAW_" + currentDateTime + ".dng");
"RAW_" + currentDateTime + "_" + requestId + ".dng");
/*
File jpegFile = new File(Environment.
getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),
"JPEG_" + currentDateTime + ".jpg");
*/
// Look up the ImageSaverBuilder for this request and update it with the file name
// based on the capture start time.
ImageSaver.ImageSaverBuilder jpegBuilder;
// ImageSaver.ImageSaverBuilder jpegBuilder;
ImageSaver.ImageSaverBuilder rawBuilder;
int requestId = (int) request.getTag();
synchronized (mCameraStateLock) {
jpegBuilder = mJpegResultQueue.get(requestId);
// jpegBuilder = mJpegResultQueue.get(requestId);
rawBuilder = mRawResultQueue.get(requestId);
}
if (jpegBuilder != null) jpegBuilder.setFile(jpegFile);
// if (jpegBuilder != null) jpegBuilder.setFile(jpegFile);
if (rawBuilder != null) rawBuilder.setFile(rawFile);
}
@ -566,26 +574,38 @@ public class RawActivity extends AppCompatActivity {
// Look up the ImageSaverBuilder for this request and update it with the CaptureResult
synchronized (mCameraStateLock) {
jpegBuilder = mJpegResultQueue.get(requestId);
// jpegBuilder = mJpegResultQueue.get(requestId);
rawBuilder = mRawResultQueue.get(requestId);
/*
if (jpegBuilder != null) {
jpegBuilder.setResult(result);
sb.append("Saving JPEG as: ");
sb.append(jpegBuilder.getSaveLocation());
}
*/
if (rawBuilder != null) {
rawBuilder.setResult(result);
if (jpegBuilder != null) sb.append(", ");
// if (jpegBuilder != null) sb.append(", ");
sb.append("Saving RAW as: ");
sb.append(rawBuilder.getSaveLocation());
}
// If we have all the results necessary, save the image to a file in the background.
handleCompletionLocked(requestId, jpegBuilder, mJpegResultQueue);
handleCompletionLocked(requestId, rawBuilder, mRawResultQueue);
/*
if (jpegBuilder != null) {
handleCompletionLocked(requestId, jpegBuilder, mJpegResultQueue);
}
*/
if (rawBuilder != null) {
handleCompletionLocked(requestId, rawBuilder, mRawResultQueue);
}
finishedCaptureLocked();
mRequestIds.remove(Integer.valueOf(requestId));
if (mRequestIds.isEmpty()) {
finishedCaptureLocked();
}
}
}
@ -594,7 +614,7 @@ public class RawActivity extends AppCompatActivity {
CaptureFailure failure) {
int requestId = (int) request.getTag();
synchronized (mCameraStateLock) {
mJpegResultQueue.remove(requestId);
// mJpegResultQueue.remove(requestId);
mRawResultQueue.remove(requestId);
finishedCaptureLocked();
}
@ -786,13 +806,15 @@ public class RawActivity extends AppCompatActivity {
// Set up ImageReaders for JPEG and RAW outputs. Place these in a reference
// counted wrapper to ensure they are only closed when all background tasks
// using them are finished.
/*
if (mJpegImageReader == null || mJpegImageReader.getAndRetain() == null) {
mJpegImageReader = new RefCountedAutoCloseable<>(
ImageReader.newInstance(largestJpeg.getWidth(),
largestJpeg.getHeight(), ImageFormat.JPEG, /*maxImages*/5));
largestJpeg.getHeight(), ImageFormat.JPEG, 5));
}
mJpegImageReader.get().setOnImageAvailableListener(
mOnJpegImageAvailableListener, mBackgroundHandler);
*/
if (mRawImageReader == null || mRawImageReader.getAndRetain() == null) {
mRawImageReader = new RefCountedAutoCloseable<>(
@ -867,13 +889,16 @@ public class RawActivity extends AppCompatActivity {
mCaptureSession = null;
}
if (null != mCameraDevice) {
Log.d("RAW", "Will call CameraDevice close");
mCameraDevice.close();
mCameraDevice = null;
}
/*
if (null != mJpegImageReader) {
mJpegImageReader.close();
mJpegImageReader = null;
}
*/
if (null != mRawImageReader) {
mRawImageReader.close();
mRawImageReader = null;
@ -934,7 +959,7 @@ public class RawActivity extends AppCompatActivity {
// Here, we create a CameraCaptureSession for camera preview.
mCameraDevice.createCaptureSession(Arrays.asList(surface,
mJpegImageReader.get().getSurface(),
// mJpegImageReader.get().getSurface(),
mRawImageReader.get().getSurface()), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(CameraCaptureSession cameraCaptureSession) {
@ -1232,7 +1257,10 @@ public class RawActivity extends AppCompatActivity {
for (int idx = 0; idx < mBurstCaptures; idx++) {
// Set request tag to easily track results in callbacks.
captureBuilder.setTag(mRequestCounter.getAndIncrement());
int requestId = mRequestCounter.getAndIncrement();
mRequestIds.add(Integer.valueOf(requestId));
captureBuilder.setTag(requestId);
CaptureRequest request = captureBuilder.build();
requests.add(request);
@ -1432,16 +1460,6 @@ public class RawActivity extends AppCompatActivity {
mImage.close();
closeOutput(output);
}
if (mResult) {
try {
// ImageDecoder.Source src = ImageDecoder.createSource(mFile);
// Bitmap bm = ImageDecoder.decodeBitmap(src);
} catch (Exception ex) {
}
}
break;
}
default: {

Loading…
Cancel
Save