Merge "Camera: Avoid possible NPE when forwarding images" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
44b4d77808
@@ -25,6 +25,7 @@ import android.media.Image;
|
|||||||
import android.media.ImageReader;
|
import android.media.ImageReader;
|
||||||
import android.media.ImageWriter;
|
import android.media.ImageWriter;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.os.Handler;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Size;
|
import android.util.Size;
|
||||||
@@ -39,6 +40,7 @@ public class CameraExtensionForwardProcessor {
|
|||||||
private final IPreviewImageProcessorImpl mProcessor;
|
private final IPreviewImageProcessorImpl mProcessor;
|
||||||
private final long mOutputSurfaceUsage;
|
private final long mOutputSurfaceUsage;
|
||||||
private final int mOutputSurfaceFormat;
|
private final int mOutputSurfaceFormat;
|
||||||
|
private final Handler mHandler;
|
||||||
|
|
||||||
private ImageReader mIntermediateReader = null;
|
private ImageReader mIntermediateReader = null;
|
||||||
private Surface mIntermediateSurface = null;
|
private Surface mIntermediateSurface = null;
|
||||||
@@ -48,10 +50,11 @@ public class CameraExtensionForwardProcessor {
|
|||||||
private boolean mOutputAbandoned = false;
|
private boolean mOutputAbandoned = false;
|
||||||
|
|
||||||
public CameraExtensionForwardProcessor(@NonNull IPreviewImageProcessorImpl processor,
|
public CameraExtensionForwardProcessor(@NonNull IPreviewImageProcessorImpl processor,
|
||||||
int format, long surfaceUsage) {
|
int format, long surfaceUsage, @NonNull Handler handler) {
|
||||||
mProcessor = processor;
|
mProcessor = processor;
|
||||||
mOutputSurfaceUsage = surfaceUsage;
|
mOutputSurfaceUsage = surfaceUsage;
|
||||||
mOutputSurfaceFormat = format;
|
mOutputSurfaceFormat = format;
|
||||||
|
mHandler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() {
|
public void close() {
|
||||||
@@ -98,7 +101,7 @@ public class CameraExtensionForwardProcessor {
|
|||||||
mResolution.getHeight(), CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT,
|
mResolution.getHeight(), CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT,
|
||||||
FORWARD_QUEUE_SIZE, mOutputSurfaceUsage);
|
FORWARD_QUEUE_SIZE, mOutputSurfaceUsage);
|
||||||
mIntermediateSurface = mIntermediateReader.getSurface();
|
mIntermediateSurface = mIntermediateReader.getSurface();
|
||||||
mIntermediateReader.setOnImageAvailableListener(new ForwardCallback(), null);
|
mIntermediateReader.setOnImageAvailableListener(new ForwardCallback(), mHandler);
|
||||||
|
|
||||||
mProcessor.onOutputSurface(mIntermediateSurface, mOutputSurfaceFormat);
|
mProcessor.onOutputSurface(mIntermediateSurface, mOutputSurfaceFormat);
|
||||||
// PreviewImageProcessorImpl always expect the extension processing format as input
|
// PreviewImageProcessorImpl always expect the extension processing format as input
|
||||||
@@ -124,11 +127,15 @@ public class CameraExtensionForwardProcessor {
|
|||||||
@Override public void onImageAvailable(ImageReader reader) {
|
@Override public void onImageAvailable(ImageReader reader) {
|
||||||
Image processedImage = null;
|
Image processedImage = null;
|
||||||
try {
|
try {
|
||||||
processedImage = mIntermediateReader.acquireNextImage();
|
processedImage = reader.acquireNextImage();
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
Log.e(TAG, "Failed to acquire processed image!");
|
Log.e(TAG, "Failed to acquire processed image!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (processedImage == null) {
|
||||||
|
Log.e(TAG, "Invalid image");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (mOutputSurface != null && mOutputSurface.isValid() && !mOutputAbandoned) {
|
if (mOutputSurface != null && mOutputSurface.isValid() && !mOutputAbandoned) {
|
||||||
if (mOutputWriter == null) {
|
if (mOutputWriter == null) {
|
||||||
|
|||||||
@@ -352,7 +352,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
try {
|
try {
|
||||||
mPreviewImageProcessor = new CameraExtensionForwardProcessor(
|
mPreviewImageProcessor = new CameraExtensionForwardProcessor(
|
||||||
mPreviewExtender.getPreviewImageProcessor(), repeatingSurfaceInfo.mFormat,
|
mPreviewExtender.getPreviewImageProcessor(), repeatingSurfaceInfo.mFormat,
|
||||||
repeatingSurfaceInfo.mUsage);
|
repeatingSurfaceInfo.mUsage, mHandler);
|
||||||
} catch (ClassCastException e) {
|
} catch (ClassCastException e) {
|
||||||
throw new UnsupportedOperationException("Failed casting preview processor!");
|
throw new UnsupportedOperationException("Failed casting preview processor!");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user