去频闪算法可在视频后处理过程自动检测并抑制光源闪烁及相机闪光导致的亮度波动,支持延迟与荧光灯两种模式,兼容 Android 纹理 / iOS buffer输入。
| 支持平台 | Android、iOS |
|---|---|
| 支持输入类型 | 纹理(Android OES/RGBA)、缓冲区/PixelBuffer |
| 输出类型 | 纹理或缓冲区(与输入类型对应) |
| 算法模式 | 延迟型频闪(DELAY)、闪光频闪(FLASH) |
头文件位置:
bef_ai_image_quality_enhancement_video_deflicker.h
公共定义:bef_ai_image_quality_enhancement_public_define.h
BEF_SDK_API bef_effect_result_t bef_ai_image_quality_enhancement_video_deflicker_create(bef_image_quality_enhancement_handle *handle, const bef_ai_video_deflicker_init_config *config); typedef struct bef_ai_video_deflicker_init_config { void *context; // 可设置为 NULL;iOS 可传入 MTLDevice const char *kernelBinPath; // 可读写的路径(Android/Windows),iOS/mac 传资源路径 bool isExtOESTexture; // 是否为 OES 纹理(Android) int maxWidth; // 最大输入帧宽 int maxHeight; // 最大输入帧高 bef_ai_lens_video_deflicker_alg_type algType; // 子算法类型:DELAY/FLASH bef_ai_lens_data_type dataType; // 输入数据类型 bef_ai_lens_power_level powerLevel; // 性能模式 bef_ai_lens_backend_type backendType; // 后端设置(通常为 GPU) } bef_ai_video_deflicker_init_config;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| handle | bef_image_quality_enhancement_handle* | 输出创建的算法句柄 |
| config | bef_ai_video_deflicker_init_config* | 初始化配置,包含输入类型、最大尺寸、子算法类型等 |
返回值
BEF_RESULT_SUC,失败返回相应错误码,参考 bef_effect_ai_public_define.hBEF_SDK_API bef_effect_result_t bef_ai_image_quality_enhancement_video_deflicker_process(bef_image_quality_enhancement_handle handle, const bef_ai_video_deflicker_process_config *config, bef_ai_lens_video_deflicker_data *output); typedef struct bef_ai_video_deflicker_process_config { int width; // 帧的宽 int height; // 帧的高 int strideWidth; // X 方向 stride int strideHeight; // Y 方向 stride bool open; // 动态开启/关闭算法 int inputTextureId; // 输入帧纹理 id(纹理输入时) int isFirst; // 是否为第一帧 float blendRate; // 算法参数 1(融合系数) float kernelSize; // 算法参数 2(核大小) float *stMatrix; // OES 纹理矩阵(Android) bef_ai_lens_data data;// 缓冲区输入时的数据指针 } bef_ai_video_deflicker_process_config; typedef union bef_ai_lens_video_deflicker_data { int texture; // 输出纹理 id void *buffer; // 输出缓冲区指针 } bef_ai_lens_video_deflicker_data;
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| handle | bef_image_quality_enhancement_handle | 算法句柄 |
| config | bef_ai_video_deflicker_process_config* | 处理配置,包含尺寸、开关、首帧标志及输入数据 |
| output | bef_ai_lens_video_deflicker_data* | 算法输出(纹理或缓冲区) |
返回值
BEF_RESULT_SUC,失败返回相应错误码BEF_SDK_API bef_effect_result_t bef_ai_image_quality_enhancement_video_deflicker_destroy(bef_image_quality_enhancement_handle handle);
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| handle | bef_image_quality_enhancement_handle | 算法句柄 |
返回值
BEF_RESULT_SUC,失败返回相应错误码// 离线 license 检测 BEF_SDK_API bef_effect_result_t bef_ai_image_quality_enhancement_video_deflicker_check_license(bef_image_quality_enhancement_handle handle, const char *licensePath); // 在线 license 检测 BEF_SDK_API bef_effect_result_t bef_ai_image_quality_enhancement_video_deflicker_check_online_license(bef_image_quality_enhancement_handle handle, const char *licensePath);
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| handle | bef_image_quality_enhancement_handle | 算法句柄 |
| licensePath | const char* | 授权文件路径或内容字符串 |
返回值
BEF_RESULT_SUC,失败返回相应错误码详细接口见:com.effectsar.labcv.effectsdk.VideoDeflicker.java
public int create(VideoDeflickerInitConfig param, String licensePath, boolean onlineLicense); public static class VideoDeflickerInitConfig { String binPath; // 可读写目录路径 boolean isExtOESTexture; // 是否为 OES 纹理 int maxHeight; // 最大输入帧高 int maxWidth; // 最大输入帧宽 int pixelFmt; // 输入数据格式 int powerLevel; // 性能模式 int backendType; // 后端设置 int algType; // 去频闪模式(DELAY/FLASH) }
返回值
BEF_RESULT_SUC,否则返回对应错误码public int processTexture(VideoDeflickerProcessParam param, BefTextureResultInfo destTextureId); public static class VideoDeflickerProcessParam { int height; // 帧高 int strideW; // X 方向 stride int strideH; // Y 方向 stride boolean open; // 动态开启/关闭算法 int inputTextureId; // 输入纹理 id boolean isFirst; // 首帧标志(由 SDK 内部管理) float blendRate; // 融合系数 float kernelSize; // 核大小 float[] stMatrix; // OES 纹理矩阵(Android) }
参数说明
param:本帧的尺寸/stride/开关/输入纹理等;isFirst 将由 SDK 自动设置首帧为 true,后续帧置为 false
destTextureId:输出纹理结果(封装在 BefTextureResultInfo 中)
返回值
BEF_RESULT_SUC,否则返回对应错误码public int destroy();
初始化时传入合理的 maxWidth/maxHeight,避免频繁内存申请释放
Android OES 纹理需提供 stMatrix;非 OES 纹理可置空
首帧需设置 isFirst = true,Java 封装已自动管理;若自行封装,请按序维护
blendRate/kernelSize 为算法调参,需结合实际效果调优
若出现异常,建议首先查看以下 tag 输出的 Error 日志:bef_effect_ai、SMASH_E_LOG、EffectSDK
纹理/缓冲区类型不匹配会导致处理失败,请确保 dataType、inputTextureId 与输入源一致
bef_effect_ai_public_define.h 或项目中的错误码表