You need to enable JavaScript to run this app.
智能美化特效

智能美化特效

复制全文
接口说明-算法
视频去频闪
复制全文
视频去频闪
简介

去频闪算法可在视频后处理过程自动检测并抑制光源闪烁及相机闪光导致的亮度波动,支持延迟与荧光灯两种模式,兼容 Android 纹理 / iOS buffer输入。

技术规格
支持平台Android、iOS
支持输入类型纹理(Android OES/RGBA)、缓冲区/PixelBuffer
输出类型纹理或缓冲区(与输入类型对应)
算法模式延迟型频闪(DELAY)、闪光频闪(FLASH)
C 接口说明

头文件位置:

  • bef_ai_image_quality_enhancement_video_deflicker.h

  • 公共定义:bef_ai_image_quality_enhancement_public_define.h

1. 创建去频闪句柄

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;

参数说明

参数名类型说明
handlebef_image_quality_enhancement_handle*输出创建的算法句柄
configbef_ai_video_deflicker_init_config*初始化配置,包含输入类型、最大尺寸、子算法类型等

返回值

  • 成功返回 BEF_RESULT_SUC,失败返回相应错误码,参考 bef_effect_ai_public_define.h

2. 去频闪处理

BEF_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;

参数说明

参数名类型说明
handlebef_image_quality_enhancement_handle算法句柄
configbef_ai_video_deflicker_process_config*处理配置,包含尺寸、开关、首帧标志及输入数据
outputbef_ai_lens_video_deflicker_data*算法输出(纹理或缓冲区)

返回值

  • 成功返回 BEF_RESULT_SUC,失败返回相应错误码

3. 释放句柄

BEF_SDK_API bef_effect_result_t
bef_ai_image_quality_enhancement_video_deflicker_destroy(bef_image_quality_enhancement_handle handle);

参数说明

参数名类型说明
handlebef_image_quality_enhancement_handle算法句柄

返回值

  • 成功返回 BEF_RESULT_SUC,失败返回相应错误码

4. 授权校验

// 离线 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);

参数说明

参数名类型说明
handlebef_image_quality_enhancement_handle算法句柄
licensePathconst char*授权文件路径或内容字符串

返回值

  • 成功返回 BEF_RESULT_SUC,失败返回相应错误码
Java 接口说明

详细接口见:com.effectsar.labcv.effectsdk.VideoDeflicker.java

1. 初始化

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,否则返回对应错误码

2. 处理(纹理)

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,否则返回对应错误码

3. 释放

public int destroy();
使用建议
  • 初始化时传入合理的 maxWidth/maxHeight,避免频繁内存申请释放

  • Android OES 纹理需提供 stMatrix;非 OES 纹理可置空

  • 首帧需设置 isFirst = true,Java 封装已自动管理;若自行封装,请按序维护

  • blendRate/kernelSize 为算法调参,需结合实际效果调优

FAQ
  • 若出现异常,建议首先查看以下 tag 输出的 Error 日志:bef_effect_aiSMASH_E_LOGEffectSDK

  • 纹理/缓冲区类型不匹配会导致处理失败,请确保 dataTypeinputTextureId 与输入源一致

错误码
  • 错误码请参考 bef_effect_ai_public_define.h 或项目中的错误码表
最近更新时间:2025.12.18 08:00:56
这个页面对您有帮助吗?
有用
有用
无用
无用