Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44b4d778 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Avoid possible NPE when forwarding images" into sc-dev

parents ba58f850 707d5e5a
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.media.Image;
import android.media.ImageReader;
import android.media.ImageWriter;
import android.annotation.NonNull;
import android.os.Handler;
import android.os.RemoteException;
import android.util.Log;
import android.util.Size;
@@ -39,6 +40,7 @@ public class CameraExtensionForwardProcessor {
    private final IPreviewImageProcessorImpl mProcessor;
    private final long mOutputSurfaceUsage;
    private final int mOutputSurfaceFormat;
    private final Handler mHandler;

    private ImageReader mIntermediateReader = null;
    private Surface mIntermediateSurface = null;
@@ -48,10 +50,11 @@ public class CameraExtensionForwardProcessor {
    private boolean mOutputAbandoned = false;

    public CameraExtensionForwardProcessor(@NonNull IPreviewImageProcessorImpl processor,
                                           int format, long surfaceUsage) {
            int format, long surfaceUsage, @NonNull Handler handler) {
        mProcessor = processor;
        mOutputSurfaceUsage = surfaceUsage;
        mOutputSurfaceFormat = format;
        mHandler = handler;
    }

    public void close() {
@@ -98,7 +101,7 @@ public class CameraExtensionForwardProcessor {
                    mResolution.getHeight(), CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT,
                    FORWARD_QUEUE_SIZE, mOutputSurfaceUsage);
            mIntermediateSurface = mIntermediateReader.getSurface();
            mIntermediateReader.setOnImageAvailableListener(new ForwardCallback(), null);
            mIntermediateReader.setOnImageAvailableListener(new ForwardCallback(), mHandler);

            mProcessor.onOutputSurface(mIntermediateSurface, mOutputSurfaceFormat);
            // PreviewImageProcessorImpl always expect the extension processing format as input
@@ -124,11 +127,15 @@ public class CameraExtensionForwardProcessor {
        @Override public void onImageAvailable(ImageReader reader) {
            Image processedImage = null;
            try {
                processedImage = mIntermediateReader.acquireNextImage();
                processedImage = reader.acquireNextImage();
            } catch (IllegalStateException e) {
                Log.e(TAG, "Failed to acquire processed image!");
                return;
            }
            if (processedImage == null) {
                Log.e(TAG, "Invalid image");
                return;
            }

            if (mOutputSurface != null && mOutputSurface.isValid() && !mOutputAbandoned) {
                if (mOutputWriter == null) {
+1 −1
Original line number Diff line number Diff line
@@ -352,7 +352,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
            try {
                mPreviewImageProcessor = new CameraExtensionForwardProcessor(
                        mPreviewExtender.getPreviewImageProcessor(), repeatingSurfaceInfo.mFormat,
                        repeatingSurfaceInfo.mUsage);
                        repeatingSurfaceInfo.mUsage, mHandler);
            } catch (ClassCastException e) {
                throw new UnsupportedOperationException("Failed casting preview processor!");
            }