bef_effect_ai_qrcode_decode.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #ifndef ANDROIDDEMO_BEF_EFFECT_QRCODE_H
  2. #define ANDROIDDEMO_BEF_EFFECT_QRCODE_H
  3. #include "bef_effect_ai_public_define.h"
  4. #if defined(__ANDROID__) || defined(TARGET_OS_ANDROID)
  5. #include<jni.h>
  6. #endif
  7. // clang-format off
  8. #define CODE_TYPE_QRCODE 0x00000001
  9. #define CODE_TYPE_DOUYIN_CODE 0x00000002
  10. #define CODE_TYPE_UPC_A_CODE 0x00000004
  11. #define CODE_TYPE_UPC_E_CODE 0x00000008
  12. #define CODE_TYPE_EAN_8_CODE 0x00000010
  13. #define CODE_TYPE_EAN_13_CODE 0x00000020
  14. #define CODE_TYPE_CODE39_CODE 0x00000040
  15. #define CODE_TYPE_CODE128_CODE 0x00000080
  16. // clang-format on
  17. typedef struct EnigmaPoint {
  18. float x;
  19. float y;
  20. } EnigmaPoint;
  21. typedef struct EnigmaCode {
  22. int type; // 二维码的类型,目前支持2种: CODE_TYPE_QRCODE 和
  23. // CODE_TYPE_DOUYIN_CODE
  24. char *text; // 二维码的内容
  25. // 二维码的定位点坐标,QR二维码和抖音码都有3个定位点
  26. // 目前坐标是以输入原图为标准大小的绝对坐标
  27. EnigmaPoint *points;
  28. int points_len;
  29. } EnigmaCode;
  30. // 二维码识别结果,默认情况下 code_count 为 1,如果需要返回图片上的所有二维码,
  31. // 需要打开 EnigmaParamType.DecodeMultiple 配置,但该功能目前还不支持
  32. typedef struct EnigmaResult {
  33. EnigmaCode *code;
  34. int code_count;
  35. // 推进系数为 {0,[1.0, 2.0]} 之间的值,0
  36. // 表示不需要推进,[1.0, 2.0]表示相机在原有的放大系数上需要推进的倍数。
  37. float zoom_in_factor;
  38. } EnigmaResult;
  39. typedef enum {
  40. KeepROISize = 1, // 设置是否改变ROI的大小 (目前暂不支持)
  41. // 指定二维码的类型,目前有2种 {CODE_TYPE_QRCODE, CODE_TYPE_DOUYIN_CODE}
  42. CodeType = 2,
  43. // 设置验证级别的高低, 目前有4个等级: {0, 1, 2, 3},
  44. // 数字越大,级别越高,级别越高,二维码的容错性更强,但可编码的字符数越小
  45. ECLevel = 3,
  46. // 设置版本的高低, 目前有6个版本: {1, 2, 3, 4, 5, 6},
  47. // 版本越高,能容纳的数据越多
  48. Version = 4,
  49. // 如果拍摄的图片上有多种码,那么把该值设置为1, 则会返回多种码的结果,
  50. // 默认只返回一种结果
  51. DecodeMultiple = 5,
  52. // 在二维码比较小的情况下,设置是否自动放缩
  53. AutoZoomIn = 6,
  54. //指定编码生成的图片是否带透明通道, 0表示无透明通道,生成三通道图片
  55. // 1表示码的环形区域和logo外都为透明,生成四通道图片
  56. // 2表示除了抖音码的所占的圆形区域,其余部分都为透明,生成四通道图片
  57. BackgroundMode = 7,
  58. } EnigmaParamType;
  59. typedef void *EnigmaHandle;
  60. BEF_SDK_API bef_effect_result_t
  61. bef_effect_ai_qrcode_decode_create(EnigmaHandle *handle);
  62. BEF_SDK_API bef_effect_result_t
  63. bef_effect_ai_set_decode_param(EnigmaHandle handle,
  64. EnigmaParamType type,
  65. float value);
  66. BEF_SDK_API bef_effect_result_t
  67. bef_effect_ai_qrcode_decode(EnigmaHandle handle,
  68. const unsigned char *image,
  69. bef_ai_pixel_format pixel_format,
  70. int image_width,
  71. int image_height,
  72. int image_stride,
  73. int roi_left,
  74. int roi_top,
  75. int roi_width,
  76. int roi_height,
  77. bef_ai_rotate_type orientation,
  78. EnigmaResult **ret);
  79. BEF_SDK_API bef_effect_result_t
  80. bef_effect_ai_qrcode_release(EnigmaHandle handle);
  81. #endif //ANDROIDDEMO_BEF_EFFECT_QRCODE_H