package io.fotoapparat.hardware.v2.parameters.converters;
import android.hardware.camera2.CameraMetadata;
import android.os.Build;
import android.support.annotation.RequiresApi;
import java.util.HashMap;
import java.util.Map;
import io.fotoapparat.parameter.Flash;
import io.fotoapparat.util.BidirectionalHashMap;
/**
* Facilitates interactions between Android native {@link android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE}
* flash firing modes and {@link io.fotoapparat.Fotoapparat}'s {@link Flash}.
*/
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class FlashConverter {
private final static Map<Flash, Integer> FLASH_FLASH_MODE_MAP = new HashMap<>();
private static BidirectionalHashMap<Flash, Integer> FLASH_EXPOSURE_MAP;
static {
Map<Flash, Integer> flashExposureModeMap = new HashMap<>();
flashExposureModeMap.put(Flash.ON, CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
flashExposureModeMap.put(Flash.AUTO, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH);
flashExposureModeMap.put(Flash.AUTO_RED_EYE,
CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE);
flashExposureModeMap.put(Flash.TORCH, CameraMetadata.CONTROL_AE_MODE_ON);
flashExposureModeMap.put(Flash.OFF, CameraMetadata.CONTROL_AE_MODE_ON);
FLASH_EXPOSURE_MAP = new BidirectionalHashMap<>(flashExposureModeMap);
FLASH_FLASH_MODE_MAP.put(Flash.ON, null);
FLASH_FLASH_MODE_MAP.put(Flash.AUTO, null);
FLASH_FLASH_MODE_MAP.put(Flash.AUTO_RED_EYE, null);
FLASH_FLASH_MODE_MAP.put(Flash.TORCH, CameraMetadata.FLASH_MODE_TORCH);
FLASH_FLASH_MODE_MAP.put(Flash.OFF, CameraMetadata.FLASH_MODE_OFF);
}
/**
* Converts a {@link Flash} to a Android native {@link android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE}
*
* @param flash The {@link io.fotoapparat.Fotoapparat}'s camera {@link Flash} value.
* @return The native Android {@link android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE}
* value.
*/
public static int flashToAutoExposureMode(Flash flash) {
return FLASH_EXPOSURE_MAP.forward().get(flash);
}
/**
* Converts a Android native {@link android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE} to
* a {@link Flash}.
*
* @param exposureMode The native Android {@link android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE}
* value.
* @return The {@link io.fotoapparat.Fotoapparat}'s camera {@link Flash} value.
*/
public static Flash exposureModeToFlash(int exposureMode) {
return FLASH_EXPOSURE_MAP.reversed().get(exposureMode);
}
/**
* Converts a {@link Flash} to a Android native {@link android.hardware.camera2.CaptureRequest#FLASH_MODE}
*
* @param flash The {@link io.fotoapparat.Fotoapparat}'s camera {@link Flash} value.
* @return The native Android {@link android.hardware.camera2.CaptureRequest#FLASH_MODE} value.
*/
public static Integer flashToFiringMode(Flash flash) {
return FLASH_FLASH_MODE_MAP.get(flash);
}
}