集成准备
开发者环境要求
开发工具:VS2019(建议)
运行环境依赖:QT5.15.2 + QT VS 插件
硬件环境要求
显卡支持 OpenGL 4.1 或者以上
系统要求 windows8 或者以上
CPU 支持 AVX 和 AVX2 指令
配置开发者环境
1. 安装 QT 插件。QT 插件安装成功后界面如下:
2. 配置 QT 插件版本,选择对应的 QT 版本。
3. 配置工程依赖的 QT 组件。
4. 添加头文件和 Xmagic 的 dll 库。
接口概览
Windows 端 SDK 的集成涉及到的接口如下:
接口名 | 描述功能 | 代码示例 |
鉴权接口 | ||
Xmagic 创建接口 | ||
Xmagic 销毁接口 | ||
设置美颜参数(如美颜、动效、化妆等) | ||
| 处理美颜接口,返回对应的美颜处理数据(如像素、纹理) | |
| 设置自定义人像分割 | |
重置输入数据大小 | - | |
暂停美颜 | - | |
开始美颜 | - |
接口使用说明
鉴权接口
XMAGIC_API void setTELicense(const char* url, const char* key, int (*TELicenseCallback)(int, const char*));
参数含义:
参数 | 含义 |
url | 对应的鉴权证书链接(在后台获取) |
key | 对应的鉴权证书 key(在后台获取) |
TELicenseCallback | 鉴权成功或者失败的回调 |
鉴权回调 code 的含义:
错误码 | 说明 |
0 | 成功。Success |
-1 | 输入参数无效,例如 URL 或 KEY 为空 |
-3 | 下载环节失败,请检查网络设置 |
-4 | 从本地读取的 TE 授权信息为空,可能是 IO 失败引起 |
-5 | 读取 VCUBE TEMP License文件内容为空,可能是 IO 失败引起 |
-6 | v_cube.license 文件 JSON 字段不对。请联系腾讯云团队处理 |
-7 | 签名校验失败。请联系腾讯云团队处理 |
-8 | 解密失败。请联系腾讯云团队处理 |
-9 | TELicense 字段里的 JSON 字段不对。请联系腾讯云团队处理 |
-10 | 从网络解析的TE授权信息为空。请联系腾讯云团队处理 |
-11 | 把 TE 授权信息写到本地文件时失败,可能是 IO 失败引起 |
-12 | 下载失败,解析本地 asset 页失败 |
-13 | 鉴权失败 |
其他 | 请联系腾讯云团队处理 |
创建 Xmagic 接口
XMAGIC_API IXmagic* createXmagic(std::string& resDir, int width, int height);
参数含义:
参数 | 含义 |
resDir | 对应的资源文件(SDK 依赖的资源路径) |
width | 处理数据宽 |
height | 处理数据高 |
销毁 Xmagic 接口
XMAGIC_API void destroyXmagic(IXmagic** xmagic);
设置美颜参数
virtual void updateProperty(XmagicProperty* property) = 0;
参数含义:
参数 | 说明 |
category | 美颜类型,包括以下几种: 美颜:BEAUTY = 0 美体:BODY_BEAUTY 滤镜:LUT 动效:MOTION 人像分割:SEGMENTATION 化妆:MAKEUP |
resPath | 对应设置资源的地址(如动效、化妆、人像分割等) |
effKey | 美颜的 key |
effValue | 美颜的值 |
isAuth | 默认 true |
处理美颜(像素)
virtual void process(YTImagePixelData* srcImage, YTImagePixelData* dstImage) = 0;
参数说明:
参数 | 说明 |
srcImage | 输入的美颜数据 |
dstImage | 输出的美颜数据 |
YTImagePixelData 结构说明:
struct YTImagePixelData {/// 字段含义:像素格式PixelFormat pixelFormat;/// 字段含义uint8_t* data;/// 字段含义:数据的长度,单位是字节int32_t length;/// 字段含义:宽度int32_t width;/// 字段含义:高度int32_t height;YTImagePixelData() : pixelFormat(PixelFormat::PixelFormatRGBA32), data(nullptr), length(0), width(0), height(0) {}};
处理美颜纹理,返回对应的处理纹理
virtual int process(int textureId, int width, int height) = 0;
参数说明:
参数 | 说明 |
textureId | 输入的纹理 ID |
width | 纹理宽度 |
height | 纹理高度 |
设置自定义人像分割
virtual void setSegmentBg(std::string &segmentBgName ,int segmentBgType ,int timeOffset) = 0;
参数说明
参数 | 说明 |
segmentBgName | 自定义人像分割路径 |
segmentBgType | 设置背影类型(0为图片,1为视频) |
timeOffset | 如果为视频,设置视频播放时长 |
重置输入大小
virtual void setRenderSize(int width, int height) = 0;
参数说明:
参数 | 说明 |
width | 重置后的宽度 |
height | 重置后的高度 |
暂停美颜
virtual void onPasue() = 0;
开始美颜
virtual void onResume() = 0;
代码示例
说明
以下仅为部分示例代码。
鉴权接口
//鉴权接口auto respCallback = [](int ret, const char* data) -> int {int retCode = ret;const char* msg = data;return 0;};setTELicense("url", "key", respCallback);
创建 Xmaigc
//创建Xmaigcstd::string exeFilePath = "资源位置";IXmagic* xmagic = createXmagic(exeDirectory, 720, 1280);
销毁 Xmaigc
//销毁if (xmagic) {destroyXmagic(&xmagic);}
设置属性和输出
//设置属性和输出YTImagePixelData src,dst;src.width = 720;src.height = 1280;src.length = 4 * 720 * 1280;src.pixelFormat = PixelFormat::PixelFormatRGBA32;//uint8_t* rgbaBuffer = (uint8_t*)malloc(src.length);//int w = 0, h = 0, comp = 0;uint8_t* imageData;int w = 0, h = 0, comp = 0;stbi_set_flip_vertically_on_load(false); // SDK要求输入的图是倒置的,否则有问题imageData = stbi_load(path.c_str(), &w, &h, &comp, STBI_rgb_alpha);src.data = imageData;dst.width = 720;dst.height = 1280;dst.length = 4 * 720 * 1280;dst.pixelFormat = PixelFormat::PixelFormatRGBA32;uint8_t* rgbaBuffer = (uint8_t*)malloc(dst.length);//这个要释放dst.data = rgbaBuffer;std::string bgPath = exeDirectory + "bg.jpg";xmagic->setSegmentBg(bgPath, 0, 0);XmagicProperty property;property.category = Category::SEGMENTATION;property.resPath = exeDirectory + "segmentMotionRes.bundle/video_empty_segmentation/template.json";xmagic->updateProperty(&property);for(int i =0; i < 2; i++){xmagic->process(&src, &dst);}