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.params.InputConfiguration;
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.location.Location;
import android.location.LocationManager;
@@ -75,6 +77,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
@@ -693,6 +696,38 @@ public class CameraTestUtils extends Assert {
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.
*
@@ -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}.
*

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.SimpleImageReaderListener;
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.getValueNotNull;
@@ -872,7 +873,6 @@ public class Camera2RecordingTest extends Camera2SurfaceViewTestCase {
outputSurfaces.add(mReaderSurface);
}
mSessionListener = new BlockingSessionCallback();
mSession = configureCameraSession(mCamera, outputSurfaces, mSessionListener, mHandler);
CaptureRequest.Builder recordingRequestBuilder =
mCamera.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
@@ -885,7 +885,10 @@ public class Camera2RecordingTest extends Camera2SurfaceViewTestCase {
}
recordingRequestBuilder.addTarget(mRecordingSurface);
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) {
mMediaRecorder.start();