[go: nahoru, domu]

blob: a2416312273c1d41637d78efbb2e8c0c0cd1404b [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.camera.camera2;
import static com.google.common.truth.Truth.assertThat;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CaptureRequest;
import android.util.Range;
import androidx.annotation.experimental.UseExperimental;
import androidx.camera.camera2.impl.Camera2CaptureCallbacks;
import androidx.camera.camera2.impl.CameraEventCallbacks;
import androidx.camera.core.CameraCaptureSessionStateCallbacks;
import androidx.camera.core.CameraDeviceStateCallbacks;
import androidx.camera.core.Config;
import androidx.camera.testing.fakes.FakeConfig;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import org.junit.Test;
import org.junit.runner.RunWith;
@SmallTest
@RunWith(AndroidJUnit4.class)
public final class Camera2ConfigTest {
private static final int INVALID_TEMPLATE_TYPE = -1;
private static final int INVALID_COLOR_CORRECTION_MODE = -1;
private static final CameraCaptureSession.CaptureCallback SESSION_CAPTURE_CALLBACK =
Camera2CaptureCallbacks.createComboCallback();
private static final CameraCaptureSession.StateCallback SESSION_STATE_CALLBACK =
CameraCaptureSessionStateCallbacks.createNoOpCallback();
private static final CameraDevice.StateCallback DEVICE_STATE_CALLBACK =
CameraDeviceStateCallbacks.createNoOpCallback();
private static final CameraEventCallbacks CAMERA_EVENT_CALLBACKS =
CameraEventCallbacks.createEmptyCallback();
@Test
public void emptyConfigurationDoesNotContainTemplateType() {
FakeConfig.Builder builder = new FakeConfig.Builder();
Camera2Config config = new Camera2Config(builder.build());
assertThat(config.getCaptureRequestTemplate(INVALID_TEMPLATE_TYPE))
.isEqualTo(INVALID_TEMPLATE_TYPE);
}
@Test
public void canExtendWithTemplateType() {
FakeConfig.Builder builder = new FakeConfig.Builder();
new Camera2Config.Extender<>(builder)
.setCaptureRequestTemplate(CameraDevice.TEMPLATE_PREVIEW);
Camera2Config config = new Camera2Config(builder.build());
assertThat(config.getCaptureRequestTemplate(INVALID_TEMPLATE_TYPE))
.isEqualTo(CameraDevice.TEMPLATE_PREVIEW);
}
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void canExtendWithSessionCaptureCallback() {
FakeConfig.Builder builder = new FakeConfig.Builder();
new Camera2Config.Extender<>(builder).setSessionCaptureCallback(SESSION_CAPTURE_CALLBACK);
Camera2Config config = new Camera2Config(builder.build());
assertThat(config.getSessionCaptureCallbackInternal(/*valueIfMissing=*/ null))
.isSameInstanceAs(SESSION_CAPTURE_CALLBACK);
}
@Test
public void canExtendWithSessionStateCallback() {
FakeConfig.Builder builder = new FakeConfig.Builder();
new Camera2Config.Extender<>(builder).setSessionStateCallback(SESSION_STATE_CALLBACK);
Camera2Config config = new Camera2Config(builder.build());
assertThat(config.getSessionStateCallbackInternal(/*valueIfMissing=*/ null))
.isSameInstanceAs(SESSION_STATE_CALLBACK);
}
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void canExtendWithDeviceStateCallback() {
FakeConfig.Builder builder = new FakeConfig.Builder();
new Camera2Config.Extender<>(builder).setDeviceStateCallback(DEVICE_STATE_CALLBACK);
Camera2Config config = new Camera2Config(builder.build());
assertThat(config.getDeviceStateCallbackInternal(/*valueIfMissing=*/ null))
.isSameInstanceAs(DEVICE_STATE_CALLBACK);
}
@Test
public void canExtendWithCameraEventCallback() {
FakeConfig.Builder builder = new FakeConfig.Builder();
new Camera2Config.Extender<>(builder).setCameraEventCallback(CAMERA_EVENT_CALLBACKS);
Camera2Config config = new Camera2Config(builder.build());
assertThat(config.getCameraEventCallback(/*valueIfMissing=*/ null))
.isSameInstanceAs(CAMERA_EVENT_CALLBACKS);
}
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void canSetAndRetrieveCaptureRequestKeys() {
FakeConfig.Builder builder = new FakeConfig.Builder();
Range<Integer> fakeRange = new Range<>(0, 30);
new Camera2Config.Extender<>(builder)
.setCaptureRequestOption(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fakeRange)
.setCaptureRequestOption(
CaptureRequest.COLOR_CORRECTION_MODE,
CameraMetadata.COLOR_CORRECTION_MODE_FAST);
Camera2Config config = new Camera2Config(builder.build());
assertThat(
config.getCaptureRequestOptionInternal(
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
/*valueIfMissing=*/ null))
.isSameInstanceAs(fakeRange);
assertThat(
config.getCaptureRequestOptionInternal(
CaptureRequest.COLOR_CORRECTION_MODE,
INVALID_COLOR_CORRECTION_MODE))
.isEqualTo(CameraMetadata.COLOR_CORRECTION_MODE_FAST);
}
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void canSetAndRetrieveCaptureRequestKeys_fromOptionIds() {
FakeConfig.Builder builder = new FakeConfig.Builder();
Range<Integer> fakeRange = new Range<>(0, 30);
new Camera2Config.Extender<>(builder)
.setCaptureRequestOption(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fakeRange)
.setCaptureRequestOption(
CaptureRequest.COLOR_CORRECTION_MODE,
CameraMetadata.COLOR_CORRECTION_MODE_FAST)
// Insert one non capture request option to ensure it gets filtered out
.setCaptureRequestTemplate(CameraDevice.TEMPLATE_PREVIEW);
Camera2Config config = new Camera2Config(builder.build());
config.findOptions(
"camera2.captureRequest.option",
new Config.OptionMatcher() {
@Override
public boolean onOptionMatched(Config.Option<?> option) {
// The token should be the capture request key
assertThat(option.getToken())
.isAnyOf(
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
CaptureRequest.COLOR_CORRECTION_MODE);
return true;
}
});
assertThat(config.listOptions()).hasSize(3);
}
@Test
public void canSetAndRetrieveCaptureRequestKeys_byBuilder() {
Range<Integer> fakeRange = new Range<>(0, 30);
Camera2Config.Builder builder =
new Camera2Config.Builder()
.setCaptureRequestOption(
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fakeRange)
.setCaptureRequestOption(
CaptureRequest.COLOR_CORRECTION_MODE,
CameraMetadata.COLOR_CORRECTION_MODE_FAST);
Camera2Config config = new Camera2Config(builder.build());
assertThat(
config.getCaptureRequestOptionInternal(
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
/*valueIfMissing=*/ null))
.isSameInstanceAs(fakeRange);
assertThat(
config.getCaptureRequestOptionInternal(
CaptureRequest.COLOR_CORRECTION_MODE,
INVALID_COLOR_CORRECTION_MODE))
.isEqualTo(CameraMetadata.COLOR_CORRECTION_MODE_FAST);
}
@Test
public void canInsertAllOptions_byBuilder() {
Range<Integer> fakeRange = new Range<>(0, 30);
Camera2Config.Builder builder =
new Camera2Config.Builder()
.setCaptureRequestOption(
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fakeRange)
.setCaptureRequestOption(
CaptureRequest.COLOR_CORRECTION_MODE,
CameraMetadata.COLOR_CORRECTION_MODE_FAST);
Camera2Config config1 = new Camera2Config(builder.build());
Camera2Config.Builder builder2 =
new Camera2Config.Builder()
.setCaptureRequestOption(
CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON)
.setCaptureRequestOption(
CaptureRequest.CONTROL_AWB_MODE,
CaptureRequest.CONTROL_AWB_MODE_AUTO)
.insertAllOptions(config1);
Camera2Config config2 = new Camera2Config(builder2.build());
assertThat(
config2.getCaptureRequestOptionInternal(
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
/*valueIfMissing=*/ null))
.isSameInstanceAs(fakeRange);
assertThat(
config2.getCaptureRequestOptionInternal(
CaptureRequest.COLOR_CORRECTION_MODE,
INVALID_COLOR_CORRECTION_MODE))
.isEqualTo(CameraMetadata.COLOR_CORRECTION_MODE_FAST);
assertThat(
config2.getCaptureRequestOptionInternal(
CaptureRequest.CONTROL_AE_MODE, /*valueIfMissing=*/ 0))
.isEqualTo(CaptureRequest.CONTROL_AE_MODE_ON);
assertThat(config2.getCaptureRequestOptionInternal(
CaptureRequest.CONTROL_AWB_MODE, 0))
.isEqualTo(CaptureRequest.CONTROL_AWB_MODE_AUTO);
}
}