[go: nahoru, domu]

blob: 2c2ecc9f858bf1f932ac87080e0792140bf03f54 [file] [log] [blame]
/*
* Copyright 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.extensions.util;
import static junit.framework.TestCase.assertNotNull;
import static org.junit.Assert.assertTrue;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import androidx.annotation.NonNull;
import androidx.camera.core.CameraDeviceConfig;
import androidx.camera.core.CameraInfoUnavailableException;
import androidx.camera.core.CameraX;
import androidx.camera.core.CameraX.LensFacing;
import androidx.camera.core.ImageCapture;
import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.Preview;
import androidx.camera.core.PreviewConfig;
import androidx.camera.extensions.AutoImageCaptureExtender;
import androidx.camera.extensions.AutoPreviewExtender;
import androidx.camera.extensions.BeautyImageCaptureExtender;
import androidx.camera.extensions.BeautyPreviewExtender;
import androidx.camera.extensions.BokehImageCaptureExtender;
import androidx.camera.extensions.BokehPreviewExtender;
import androidx.camera.extensions.ExtensionsManager.EffectMode;
import androidx.camera.extensions.HdrImageCaptureExtender;
import androidx.camera.extensions.HdrPreviewExtender;
import androidx.camera.extensions.ImageCaptureExtender;
import androidx.camera.extensions.NightImageCaptureExtender;
import androidx.camera.extensions.NightPreviewExtender;
import androidx.camera.extensions.PreviewExtender;
import androidx.camera.extensions.impl.AutoImageCaptureExtenderImpl;
import androidx.camera.extensions.impl.AutoPreviewExtenderImpl;
import androidx.camera.extensions.impl.BeautyImageCaptureExtenderImpl;
import androidx.camera.extensions.impl.BeautyPreviewExtenderImpl;
import androidx.camera.extensions.impl.BokehImageCaptureExtenderImpl;
import androidx.camera.extensions.impl.BokehPreviewExtenderImpl;
import androidx.camera.extensions.impl.HdrImageCaptureExtenderImpl;
import androidx.camera.extensions.impl.HdrPreviewExtenderImpl;
import androidx.camera.extensions.impl.ImageCaptureExtenderImpl;
import androidx.camera.extensions.impl.NightImageCaptureExtenderImpl;
import androidx.camera.extensions.impl.NightPreviewExtenderImpl;
import androidx.camera.extensions.impl.PreviewExtenderImpl;
import androidx.camera.testing.CameraUtil;
import java.util.Arrays;
import java.util.Collection;
public class ExtensionsTestUtil {
@NonNull
public static Collection<Object[]> getAllEffectLensFacingCombinations() {
return Arrays.asList(new Object[][]{
{EffectMode.BOKEH, LensFacing.FRONT},
{EffectMode.BOKEH, LensFacing.BACK},
{EffectMode.HDR, LensFacing.FRONT},
{EffectMode.HDR, LensFacing.BACK},
{EffectMode.BEAUTY, LensFacing.FRONT},
{EffectMode.BEAUTY, LensFacing.BACK},
{EffectMode.NIGHT, LensFacing.FRONT},
{EffectMode.NIGHT, LensFacing.BACK},
{EffectMode.AUTO, LensFacing.FRONT},
{EffectMode.AUTO, LensFacing.BACK}
});
}
/**
* Creates an {@link ImageCaptureConfig.Builder} object for specific {@link EffectMode} and
* {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
* @return An {@link ImageCaptureConfig.Builder} object.
*/
@NonNull
public static ImageCaptureConfig.Builder createImageCaptureConfigBuilderWithEffect(
@NonNull EffectMode effectMode, @NonNull LensFacing lensFacing) {
ImageCaptureConfig.Builder builder =
new ImageCaptureConfig.Builder().setLensFacing(lensFacing);
ImageCaptureExtender extender = null;
switch (effectMode) {
case HDR:
extender = HdrImageCaptureExtender.create(builder);
break;
case BOKEH:
extender = BokehImageCaptureExtender.create(builder);
break;
case BEAUTY:
extender = BeautyImageCaptureExtender.create(builder);
break;
case NIGHT:
extender = NightImageCaptureExtender.create(builder);
break;
case AUTO:
extender = AutoImageCaptureExtender.create(builder);
break;
}
// Applies effect configs if it is not normal mode.
if (effectMode != EffectMode.NORMAL) {
assertNotNull(extender);
assertTrue(extender.isExtensionAvailable());
extender.enableExtension();
}
return builder;
}
/**
* Creates a {@link PreviewConfig.Builder} object for specific {@link EffectMode} and
* {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
* @return A {@link PreviewConfig.Builder} object.
*/
@NonNull
public static PreviewConfig.Builder createPreviewConfigBuilderWithEffect(
@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing) {
PreviewConfig.Builder builder =
new PreviewConfig.Builder().setLensFacing(lensFacing);
PreviewExtender extender = null;
switch (effectMode) {
case HDR:
extender = HdrPreviewExtender.create(builder);
break;
case BOKEH:
extender = BokehPreviewExtender.create(builder);
break;
case BEAUTY:
extender = BeautyPreviewExtender.create(builder);
break;
case NIGHT:
extender = NightPreviewExtender.create(builder);
break;
case AUTO:
extender = AutoPreviewExtender.create(builder);
break;
}
// Applies effect configs if it is not normal mode.
if (effectMode != EffectMode.NORMAL) {
assertNotNull(extender);
assertTrue(extender.isExtensionAvailable());
extender.enableExtension();
}
return builder;
}
/**
* Creates an {@link ImageCaptureConfig} object for specific {@link EffectMode} and
* {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
* @return An {@link ImageCaptureConfig} object.
*/
@NonNull
public static ImageCaptureConfig createImageCaptureConfigWithEffect(
@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing) {
ImageCaptureConfig.Builder imageCaptureConfigBuilder =
createImageCaptureConfigBuilderWithEffect(effectMode, lensFacing);
ImageCaptureConfig imageCaptureConfig = imageCaptureConfigBuilder.build();
return imageCaptureConfig;
}
/**
* Creates a {@link PreviewConfig} object for specific {@link EffectMode} and
* {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
* @return A {@link PreviewConfig} object.
*/
@NonNull
public static PreviewConfig createPreviewConfigWithEffect(@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing) {
PreviewConfig.Builder previewConfigBuilder =
createPreviewConfigBuilderWithEffect(effectMode, lensFacing);
PreviewConfig previewConfig = previewConfigBuilder.build();
return previewConfig;
}
/**
* Creates an {@link ImageCapture} object for specific {@link EffectMode} and
* {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
* @return An {@link ImageCapture} object.
*/
@NonNull
public static ImageCapture createImageCaptureWithEffect(@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing) {
ImageCaptureConfig imageCaptureConfig = createImageCaptureConfigWithEffect(effectMode,
lensFacing);
ImageCapture imageCapture = new ImageCapture(imageCaptureConfig);
return imageCapture;
}
/**
* Creates a {@link Preview} object for specific {@link EffectMode} and {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
* @return A {@link Preview} object.
*/
@NonNull
public static Preview createPreviewWithEffect(@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing) {
PreviewConfig previewConfig = createPreviewConfigWithEffect(effectMode, lensFacing);
Preview preview = new Preview(previewConfig);
return preview;
}
/**
* Creates an {@link ImageCaptureExtenderImpl} object for specific {@link EffectMode} and
* {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
* @return An {@link ImageCaptureExtenderImpl} object.
*/
@NonNull
public static ImageCaptureExtenderImpl createImageCaptureExtenderImpl(
@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing)
throws CameraInfoUnavailableException, CameraAccessException {
ImageCaptureExtenderImpl impl = null;
switch (effectMode) {
case HDR:
impl = new HdrImageCaptureExtenderImpl();
break;
case BOKEH:
impl = new BokehImageCaptureExtenderImpl();
break;
case BEAUTY:
impl = new BeautyImageCaptureExtenderImpl();
break;
case NIGHT:
impl = new NightImageCaptureExtenderImpl();
break;
case AUTO:
impl = new AutoImageCaptureExtenderImpl();
break;
}
assertNotNull(impl);
ImageCaptureConfig.Builder configBuilder = new ImageCaptureConfig.Builder().setLensFacing(
lensFacing);
String cameraId = CameraX.getCameraWithCameraDeviceConfig(
((CameraDeviceConfig) configBuilder.build()));
CameraCharacteristics cameraCharacteristics =
CameraUtil.getCameraManager().getCameraCharacteristics(
CameraX.getCameraWithLensFacing(lensFacing));
impl.init(cameraId, cameraCharacteristics);
return impl;
}
/**
* Creates a {@link PreviewExtenderImpl} object for specific {@link EffectMode} and
* {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
* @return A {@link PreviewExtenderImpl} object.
*/
@NonNull
public static PreviewExtenderImpl createPreviewExtenderImpl(@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing)
throws CameraInfoUnavailableException, CameraAccessException {
PreviewExtenderImpl impl = null;
switch (effectMode) {
case HDR:
impl = new HdrPreviewExtenderImpl();
break;
case BOKEH:
impl = new BokehPreviewExtenderImpl();
break;
case BEAUTY:
impl = new BeautyPreviewExtenderImpl();
break;
case NIGHT:
impl = new NightPreviewExtenderImpl();
break;
case AUTO:
impl = new AutoPreviewExtenderImpl();
break;
}
assertNotNull(impl);
PreviewConfig.Builder configBuilder = new PreviewConfig.Builder().setLensFacing(lensFacing);
String cameraId = CameraX.getCameraWithCameraDeviceConfig(
((CameraDeviceConfig) configBuilder.build()));
CameraCharacteristics cameraCharacteristics =
CameraUtil.getCameraManager().getCameraCharacteristics(
CameraX.getCameraWithLensFacing(lensFacing));
impl.init(cameraId, cameraCharacteristics);
return impl;
}
/**
* Creates an {@link ImageCaptureExtender} object for specific {@link EffectMode} and
* {@link ImageCaptureConfig.Builder}.
*
* @param effectMode The effect mode for the created object.
* @param builder The {@link ImageCaptureConfig.Builder} for the created object.
* @return An {@link ImageCaptureExtender} object.
*/
@NonNull
public static ImageCaptureExtender createImageCaptureExtender(@NonNull EffectMode effectMode,
@NonNull ImageCaptureConfig.Builder builder) {
ImageCaptureExtender extender = null;
switch (effectMode) {
case HDR:
extender = HdrImageCaptureExtender.create(builder);
break;
case BOKEH:
extender = BokehImageCaptureExtender.create(builder);
break;
case BEAUTY:
extender = BeautyImageCaptureExtender.create(builder);
break;
case NIGHT:
extender = NightImageCaptureExtender.create(builder);
break;
case AUTO:
extender = AutoImageCaptureExtender.create(builder);
break;
}
assertNotNull(extender);
return extender;
}
/**
* Creates a {@link PreviewExtender} object for specific {@link EffectMode} and
* {@link PreviewConfig.Builder}.
*
* @param effectMode The effect mode for the created object.
* @param builder The {@link PreviewConfig.Builder} for the created object.
* @return A {@link PreviewExtender} object.
*/
@NonNull
public static PreviewExtender createPreviewExtender(@NonNull EffectMode effectMode,
@NonNull PreviewConfig.Builder builder) {
PreviewExtender extender = null;
switch (effectMode) {
case HDR:
extender = HdrPreviewExtender.create(builder);
break;
case BOKEH:
extender = BokehPreviewExtender.create(builder);
break;
case BEAUTY:
extender = BeautyPreviewExtender.create(builder);
break;
case NIGHT:
extender = NightPreviewExtender.create(builder);
break;
case AUTO:
extender = AutoPreviewExtender.create(builder);
break;
}
assertNotNull(extender);
return extender;
}
}