Merge "Camera: Use session configuraion when recording tests" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-07-12 17:26:37 +00:00
committed by Android (Google) Code Review
2 changed files with 54 additions and 2 deletions

View File

@@ -43,6 +43,8 @@ import android.hardware.camera2.CaptureResult;
import android.hardware.camera2.TotalCaptureResult; import android.hardware.camera2.TotalCaptureResult;
import android.hardware.camera2.params.InputConfiguration; import android.hardware.camera2.params.InputConfiguration;
import android.hardware.camera2.params.MeteringRectangle; import android.hardware.camera2.params.MeteringRectangle;
import android.hardware.camera2.params.OutputConfiguration;
import android.hardware.camera2.params.SessionConfiguration;
import android.hardware.camera2.params.StreamConfigurationMap; import android.hardware.camera2.params.StreamConfigurationMap;
import android.location.Location; import android.location.Location;
import android.location.LocationManager; import android.location.LocationManager;
@@ -75,6 +77,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
@@ -693,6 +696,38 @@ public class CameraTestUtils extends Assert {
return openCamera(manager, cameraId, /*listener*/null, handler); return openCamera(manager, cameraId, /*listener*/null, handler);
} }
/**
* Configure a new camera session with output surfaces and initial session parameters.
*
* @param camera The CameraDevice to be configured.
* @param outputSurfaces The surface list that used for camera output.
* @param listener The callback CameraDevice will notify when session is available.
* @param handler The handler used to notify callbacks.
* @param initialRequest Initial request settings to use as session parameters.
*/
public static CameraCaptureSession configureCameraSessionWithParameters(CameraDevice camera,
List<Surface> outputSurfaces, BlockingSessionCallback listener,
Handler handler, CaptureRequest initialRequest) throws CameraAccessException {
List<OutputConfiguration> outConfigurations = new ArrayList<>(outputSurfaces.size());
for (Surface surface : outputSurfaces) {
outConfigurations.add(new OutputConfiguration(surface));
}
SessionConfiguration sessionConfig = new SessionConfiguration(
SessionConfiguration.SESSION_REGULAR, outConfigurations,
new HandlerExecutor(handler), listener);
sessionConfig.setSessionParameters(initialRequest);
camera.createCaptureSession(sessionConfig);
CameraCaptureSession session = listener.waitAndGetSession(SESSION_CONFIGURE_TIMEOUT_MS);
assertFalse("Camera session should not be a reprocessable session",
session.isReprocessable());
assertFalse("Capture session type must be regular",
CameraConstrainedHighSpeedCaptureSession.class.isAssignableFrom(
session.getClass()));
return session;
}
/** /**
* Configure a new camera session with output surfaces and type. * Configure a new camera session with output surfaces and type.
* *
@@ -1334,6 +1369,20 @@ public class CameraTestUtils extends Assert {
} }
} }
public static class HandlerExecutor implements Executor {
private final Handler mHandler;
public HandlerExecutor(Handler handler) {
assertNotNull("handler must be valid", handler);
mHandler = handler;
}
@Override
public void execute(Runnable runCmd) {
mHandler.post(runCmd);
}
}
/** /**
* Provide a mock for {@link CameraDevice.StateCallback}. * Provide a mock for {@link CameraDevice.StateCallback}.
* *

View File

@@ -58,6 +58,7 @@ import static com.android.mediaframeworktest.helpers.CameraTestUtils.SIZE_BOUND_
import static com.android.mediaframeworktest.helpers.CameraTestUtils.SimpleCaptureCallback; import static com.android.mediaframeworktest.helpers.CameraTestUtils.SimpleCaptureCallback;
import static com.android.mediaframeworktest.helpers.CameraTestUtils.SimpleImageReaderListener; import static com.android.mediaframeworktest.helpers.CameraTestUtils.SimpleImageReaderListener;
import static com.android.mediaframeworktest.helpers.CameraTestUtils.configureCameraSession; import static com.android.mediaframeworktest.helpers.CameraTestUtils.configureCameraSession;
import static com.android.mediaframeworktest.helpers.CameraTestUtils.configureCameraSessionWithParameters;
import static com.android.mediaframeworktest.helpers.CameraTestUtils.getSupportedVideoSizes; import static com.android.mediaframeworktest.helpers.CameraTestUtils.getSupportedVideoSizes;
import static com.android.mediaframeworktest.helpers.CameraTestUtils.getValueNotNull; import static com.android.mediaframeworktest.helpers.CameraTestUtils.getValueNotNull;
@@ -872,7 +873,6 @@ public class Camera2RecordingTest extends Camera2SurfaceViewTestCase {
outputSurfaces.add(mReaderSurface); outputSurfaces.add(mReaderSurface);
} }
mSessionListener = new BlockingSessionCallback(); mSessionListener = new BlockingSessionCallback();
mSession = configureCameraSession(mCamera, outputSurfaces, mSessionListener, mHandler);
CaptureRequest.Builder recordingRequestBuilder = CaptureRequest.Builder recordingRequestBuilder =
mCamera.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); mCamera.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
@@ -885,7 +885,10 @@ public class Camera2RecordingTest extends Camera2SurfaceViewTestCase {
} }
recordingRequestBuilder.addTarget(mRecordingSurface); recordingRequestBuilder.addTarget(mRecordingSurface);
recordingRequestBuilder.addTarget(mPreviewSurface); recordingRequestBuilder.addTarget(mPreviewSurface);
mSession.setRepeatingRequest(recordingRequestBuilder.build(), listener, mHandler); CaptureRequest recordingRequest = recordingRequestBuilder.build();
mSession = configureCameraSessionWithParameters(mCamera, outputSurfaces, mSessionListener,
mHandler, recordingRequest);
mSession.setRepeatingRequest(recordingRequest, listener, mHandler);
if (useMediaRecorder) { if (useMediaRecorder) {
mMediaRecorder.start(); mMediaRecorder.start();