react-native-camera/windows/ReactNativeCameraCPP/ReactCameraConstants.h
Jon Thysell 2782a24d25
feat(windows): added barcode scanning support (#2930)
Build:
* Fixed issue with edit and continue debug symbols
* Fixed ReactNativeCameraCPP61 builds
* Added dependency on huycn.zxingcpp.winrt for barcode support

ReactNativeCameraCPP RNCamera component:
* Added onBarCodeRead event support
* Added barCodeScannerEnabled property support
* Added barCodeTypes property support
* Added barCodeReadIntervalMS property to alter how often the scan
  occurs when enabled

ReactNativeCameraCPP RNCamera module:
* Added BarCodeType constants

Other:
* Fixed intermittent issue with thread marshalling
* Re-ran clang formatting

Closes #2830
2020-08-11 15:57:00 -03:00

180 lines
8.9 KiB
C++

#pragma once
#include <functional>
#include <winrt/Windows.Media.Devices.h>
#include <winrt/Windows.Media.MediaProperties.h>
#include "JSValue.h"
#define BarcodeReadEvent L"onBarCodeRead"
namespace winrt::ReactNativeCameraCPP {
class ReactCameraConstants {
public:
static const int CameraAspectFill = 0;
static const int CameraAspectFit = 1;
static const int CameraAspectStretch = 2;
static const int CameraCaptureTargetMemory = 0;
static const int CameraCaptureTargetDisk = 1;
static const int CameraCaptureTargetCameraRoll = 2;
static const int CameraCaptureTargetTemp = 3;
static const int CameraOrientationAuto = UINT_MAX;
static const int CameraOrientationPortrait = (int)winrt::Windows::Devices::Sensors::SimpleOrientation::NotRotated;
static const int CameraOrientationPortraitUpsideDown =
(int)winrt::Windows::Devices::Sensors::SimpleOrientation::Rotated180DegreesCounterclockwise;
static const int CameraOrientationLandscapeLeft =
(int)winrt::Windows::Devices::Sensors::SimpleOrientation::Rotated90DegreesCounterclockwise;
static const int CameraOrientationLandscapeRight =
(int)winrt::Windows::Devices::Sensors::SimpleOrientation::Rotated270DegreesCounterclockwise;
static const int CameraTypeUnknown = (int)winrt::Windows::Devices::Enumeration::Panel::Unknown;
static const int CameraTypeFront = (int)winrt::Windows::Devices::Enumeration::Panel::Front;
static const int CameraTypeBack = (int)winrt::Windows::Devices::Enumeration::Panel::Back;
static const int CameraTypeTop = (int)winrt::Windows::Devices::Enumeration::Panel::Top;
static const int CameraTypeBottom = (int)winrt::Windows::Devices::Enumeration::Panel::Bottom;
static const int CameraTypeLeft = (int)winrt::Windows::Devices::Enumeration::Panel::Left;
static const int CameraTypeRight = (int)winrt::Windows::Devices::Enumeration::Panel::Right;
static const int CameraFlashModeOff = 0;
static const int CameraFlashModeOn = 1;
static const int CameraFlashModeAuto = 2;
static const int CameraAutoFocusOff = (int)winrt::Windows::Media::Devices::FocusPreset::Manual;
static const int CameraAutoFocusOn = (int)winrt::Windows::Media::Devices::FocusPreset::Auto;
static const int CameraWhiteBalanceAuto = (int)winrt::Windows::Media::Devices::ColorTemperaturePreset::Auto;
static const int CameraWhiteBalanceSunny = (int)winrt::Windows::Media::Devices::ColorTemperaturePreset::Daylight;
static const int CameraWhiteBalanceCloudy = (int)winrt::Windows::Media::Devices::ColorTemperaturePreset::Cloudy;
static const int CameraWhiteBalanceShadow = (int)winrt::Windows::Media::Devices::ColorTemperaturePreset::Candlelight;
static const int CameraWhiteBalanceIncandescent =
(int)winrt::Windows::Media::Devices::ColorTemperaturePreset::Tungsten;
static const int CameraWhiteBalanceFluorescent =
(int)winrt::Windows::Media::Devices::ColorTemperaturePreset::Fluorescent;
static const int CameraVideoQualityAuto = (int)winrt::Windows::Media::MediaProperties::VideoEncodingQuality::Auto;
static const int CameraVideoQuality2160P =
(int)winrt::Windows::Media::MediaProperties::VideoEncodingQuality::Uhd2160p;
static const int CameraVideoQuality1080P = (int)winrt::Windows::Media::MediaProperties::VideoEncodingQuality::HD1080p;
static const int CameraVideoQuality720P = (int)winrt::Windows::Media::MediaProperties::VideoEncodingQuality::HD720p;
static const int CameraVideoQualityWVGA = (int)winrt::Windows::Media::MediaProperties::VideoEncodingQuality::Wvga;
static const int CameraVideoQualityVGA = (int)winrt::Windows::Media::MediaProperties::VideoEncodingQuality::Vga;
static const int CameraVideoCodecH264 = 0;
static const int CameraVideoCodecHEVC = 1;
static const int CameraVideoCodecWMV = 2;
static const int MediaTypeJPG = 1;
static const int MediaTypeMP4 = 2;
static const int MediaTypeWMV = 3;
static const int BarcodeReadIntervalMinMS = 200;
static const int BarcodeReadIntervalMS = 500;
static const int BarcodeReadTimeoutMS = 5000;
static winrt::Microsoft::ReactNative::JSValueObject GetAspectConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"stretch", CameraAspectStretch}, {"fit", CameraAspectFit}, {"fill", CameraAspectFill}};
}
static winrt::Microsoft::ReactNative::JSValue GetBarcodeConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"aztec", "AZTEC"}, // winrt::ZXing::BarcodeType::AZTEC
{"codabar", "CODABAR"}, // winrt::ZXing::BarcodeType::CODABAR
{"code39", "CODE_39"}, // winrt::ZXing::BarcodeType::CODE_39
{"code93", "CODE_93"}, // winrt::ZXing::BarcodeType::CODE_93
{"code128", "CODE_128"}, // winrt::ZXing::BarcodeType::CODE_128
{"datamatrix", "DATA_MATRIX"}, // winrt::ZXing::BarcodeType::DATA_MATRIX
{"ean8", "EAN_8"}, // winrt::ZXing::BarcodeType::EAN_8
{"ean13", "EAN_13"}, // winrt::ZXing::BarcodeType::EAN_13
{"interleaved2of5", "ITF"}, // winrt::ZXing::BarcodeType::ITF
{"maxicode", "MAXICODE"}, // winrt::ZXing::BarcodeType::MAXICODE
{"pdf417", "PDF_417"}, // winrt::ZXing::BarcodeType::PDF_417
{"qr", "QR_CODE"}, // winrt::ZXing::BarcodeType::QR_CODE
{"rss14", "RSS_14"}, // winrt::ZXing::BarcodeType::RSS_14
{"rssexpanded", "RSS_EXPANDED"}, // winrt::ZXing::BarcodeType::RSS_EXPANDED
{"upc_a", "UPC_A"}, // winrt::ZXing::BarcodeType::UPC_A
{"upc_e", "UPC_E"}, // winrt::ZXing::BarcodeType::UPC_E
{"upc_ean", "UPC_EAN_EXTENSION"}, // winrt::ZXing::BarcodeType::UPC_EAN_EXTENSION
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetFaceDetectionConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"Mode", winrt::Microsoft::ReactNative::JSValue::EmptyObject.Copy()},
{"Landmarks", winrt::Microsoft::ReactNative::JSValue::EmptyObject.Copy()},
{"Classifications", winrt::Microsoft::ReactNative::JSValue::EmptyObject.Copy()},
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetAutoFocusConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"off", CameraAutoFocusOff},
{"on", CameraAutoFocusOn},
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetWhiteBalanceConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"auto", CameraWhiteBalanceAuto},
{"sunny", CameraWhiteBalanceSunny},
{"cloudy", CameraWhiteBalanceCloudy},
{"shadow", CameraWhiteBalanceShadow},
{"incandescent", CameraWhiteBalanceIncandescent},
{"fluorescent", CameraWhiteBalanceFluorescent},
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetTypeConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"unknown", CameraTypeUnknown},
{"front", CameraTypeFront},
{"back", CameraTypeBack},
{"top", CameraTypeTop},
{"bottom", CameraTypeBottom},
{"left", CameraTypeLeft},
{"right", CameraTypeRight},
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetCaptureQualityConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"auto", CameraVideoQualityAuto},
{"2160p", CameraVideoQuality2160P},
{"1080p", CameraVideoQuality1080P},
{"720p", CameraVideoQuality720P},
{"480p", CameraVideoQualityWVGA},
{"4:3", CameraVideoQualityVGA},
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetCaptureCodecConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"H264", CameraVideoCodecH264},
{"HEVC", CameraVideoCodecHEVC},
{"WMV", CameraVideoCodecWMV},
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetCaptureTargetConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"memory", CameraCaptureTargetMemory},
{"disk", CameraCaptureTargetDisk},
{"cameraRoll", CameraCaptureTargetCameraRoll},
{"temp", CameraCaptureTargetTemp},
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetOrientationConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"auto", CameraOrientationAuto},
{"landscapeLeft", CameraOrientationLandscapeLeft},
{"landscapeRight", CameraOrientationLandscapeRight},
{"portrait", CameraOrientationPortrait},
{"portraitUpsideDown", CameraOrientationPortraitUpsideDown},
};
}
static winrt::Microsoft::ReactNative::JSValueObject GetFlashModeConstants() noexcept {
return winrt::Microsoft::ReactNative::JSValueObject{
{"off", CameraFlashModeOff},
{"on", CameraFlashModeOn},
{"auto", CameraOrientationAuto},
};
}
};
}; // namespace winrt::ReactNativeCameraCPP