-
Notifications
You must be signed in to change notification settings - Fork 209
Video_Filter_Inner
SDK目前最多支持七种内置美颜,开发者可以根据App的实际情况选择为用户提供合适的美颜
软编只在4.4及以上系统支持,4.4以下的系统会fallback到软编兼容模式
使用内置美颜时,需要将demo assets目录下的资源copy到你的目标工程的assets目录下,否则部分滤镜功能会受限。
有两种方式可以设置:
方式一: 使用ImgTexFilterMgt中的KSY_FILTER_XXX
定义,调用接口setFilter(GLRender glRender, int filterIdx)完成。
参考代码如下:
//设置美颜
mStreamer.getImgTexFilterMgt().setFilter(
mStreamer.getGLRender(), ImgTexFilterMgt.KSY_FILTER_BEAUTY_SOFT);
//关闭美颜
mStreamer.getImgTexFilterMgt().setFilter(mStreamer.getGLRender(),
ImgTexFilterMgt.KSY_FILTER_BEAUTY_DISABLE);
支持的美颜类型
常量名(KSY_FILTER_*) | 名称 | 效果描述 | 美颜效果(三星s6) | 资源依赖 |
---|---|---|---|---|
BEAUTY_DISABLE | 禁用美颜 | 无 | no_beauty | 无 |
BEAUTY_DENOISE | 自然 | 美白(中) 磨皮(低) 红润(低) |
denoise | 无 |
BEAUTY_SKINWHITEN | 白肤 | 美白(强) 磨皮(中) 红润(低) |
skin_whiten | 无 |
BEAUTY_SOFT | 嫩肤 | 美白(中) 磨皮(中) 红润(强) |
beauty_soft | 无 |
BEAUTY_SOFT_SHARPEN | 简单 | 美白(中) 磨皮(低) 红润(低) |
sharpen | 无 |
BEAUTY_SOFT_EXT | 轻度嫩肤 | 美白(中) 磨皮(中) 红润(中) |
soft_ext | 无 |
BEAUTY_ILLUSION | 柔肤 | 美白(中) 磨皮(中) 红润(低) |
illusion | 无 |
BEAUTY_PRO | 粉嫩 | 美白(中) 磨皮(强) 红润(中) |
0_pink.png 0_ruddy2.png 13_nature.png |
|
BEAUTY_SMOOTH | 白皙 | 美白(中) 磨皮(强) 红润(低) |
smooth | 3_sweety.png |
不同美颜,算法复杂度不同,性能消耗不同,以上算法复杂度依此增加 KSYBeautifyProFilter中传入参数(1、2、3、4)区别仅仅在于磨皮,其中1比较柔和,但在较亮的场景下,画面会比较朦胧。3(natural)相对更加清晰,4最清晰。2和4相对1和3,计算更复杂。总体清晰度1<3<2<=4,处理速度(1=3)>(2=4)。
方式二: 创建内置美颜实例,并将实例调用接口setFilter(ImgTexFilter filter)完成。
通过此种方法,可以同时时多个美颜生效,设置方法同自定义美颜的设置方法自定义美颜。
注意:使用该方式时,如果要设置回之前的filter,必须重新new出相应的filter对象,而不能复用之前的对象。
参考代码如下:
//设置单个美颜
mStreamer.getImgTexFilterMgt().setFilter(
new ImgBeautyDenoiseFilter(mStreamer.getGLRender());
//设置多个美颜(自定义美颜和内置美颜均可)
List<ImgTexFilter> groupFilter = new LinkedList<>();
groupFilter.add(new DemoFilter2(mStreamer.getGLRender()));
groupFilter.add(new DemoFilter3(mStreamer.getGLRender()));
groupFilter.add(new DemoFilter4(mStreamer.getGLRender()));
groupFilter.add(new ImgBeautyDenoiseFilter(mStreamer.getGLRender()));
mStreamer.getImgTexFilterMgt().setFilter(groupFilter);
//关闭美颜
mStreamer.getImgTexFilterMgt().setFilter(null);
调节美颜级别:
// 设置美颜类型
ImgFilterBase filter = new ImgBeautyProFilter(mStreamer.getGLRender(), this);
mStreamer.getImgTexFilterMgt().setFilter(filter);
// 设置美颜级别(首先判断是否支持,然后进行设置)
// 设置磨皮级别,范围0-1
if (filter.isGrindRatioSupported()) {
filter.setGrindRatio(0.6);
}
// 设置美白级别,范围0-1
if (filter.isWhitenRatioSupported()) {
filter.setWhitenRatio(0.6);
}
// 设置红润级别,一般范围为0-1,BeautyPro为-1.0~1.0
if (filter.isRuddyRatioSupported()) {
filter.setRuddyRatio(-0.3);
}
美颜type | 类名 | 支持的美颜级别调整 |
---|---|---|
KSY_FILTER_BEAUTY_DENOISE | ImgBeautyDenoiseFilter | - |
KSY_FILTER_BEAUTY_SKINWHITEN | ImgBeautySkinWhitenFilter | - |
KSY_FILTER_BEAUTY_SOFT | ImgBeautySoftFilter | 磨皮 |
KSY_FILTER_BEAUTY_ILLUSION | ImgBeautyIllusionFilter | 磨皮 |
KSY_FILTER_BEAUTY_SMOOTH | ImgBeautySmoothFilter | 磨皮 美白 红润 |
KSY_FILTER_BEAUTY_SOFT_EXT | ImgBeautySoftExtFilter | - |
KSY_FILTER_BEAUTY_SOFT_SHARPEN | ImgBeautySoftSharpenFilter | - |
KSY_FILTER_BEAUTY_PRO | ImgBeautyProFilter | 磨皮 美白 红润 |
各个美颜性能对比及效果:(TBD)
注:美颜的设置在推流过程中可动态生效
特效滤镜需要使用demo中assets目录下的资源文件,使用方法如下:
// 创建风格滤镜
ImgBeautySpecialEffectsFilter effectsFilter = new ImgBeautySpecialEffectsFilter(
mStreamer.getGLRender(),
CameraActivity.this,
ImgBeautySpecialEffectsFilter.KSY_SPECIAL_EFFECT_BLUE);
// 设置风格滤镜
mStreamer.getImgTexFilterMgt().setFilter(effectsFilter);
支持的特效滤镜及其所依赖的资源文件:
常量索引 | 名称及效果 | 资源依赖 |
---|---|---|
KSY_SPECIAL_EFFECT_FRESHY | 小清新 | 1_freshy.png |
KSY_SPECIAL_EFFECT_BEAUTY | 青春靓丽 | 2_beauty.png |
KSY_SPECIAL_EFFECT_SWEETY | 甜美可人 | 3_sweety.png |
KSY_SPECIAL_EFFECT_SEPIA | 怀旧 | 4_sepia.png |
KSY_SPECIAL_EFFECT_BLUE | 蓝调 | 5_blue.png |
KSY_SPECIAL_EFFECT_NOSTALGIA | 老照片 | 6_nostalgia.png |
KSY_SPECIAL_EFFECT_SAKURA | 樱花 | 7_sakura.png |
KSY_SPECIAL_EFFECT_SAKURA_NIGHT | 樱花(光线较暗) | 8_sakura_night.png |
KSY_SPECIAL_EFFECT_RUDDY_NIGHT | 红润(光线较暗) | 9_ruddy_night.png |
KSY_SPECIAL_EFFECT_SUNSHINE_NIGHT | 阳光(光线较暗) | 10_sunshine_night.png |
KSY_SPECIAL_EFFECT_RUDDY | 红润 | 11_ruddy.png |
KSY_SPECIAL_EFFECT_SUSHINE | 阳光 | 12_sunshine.png |
KSY_SPECIAL_EFFECT_NATURE | 自然 | 13_nature.png |
SDK从v4.1.2开始支持ACV滤镜,也就是通过输入photoshop的acv文件来实现其中的效果。
使用方式:
ImgBeautyToneCurveFilter acvFilter = new ImgBeautyToneCurveFilter(mStreamer.getGLRender());
acvFilter.setFromCurveFileInputStream(CameraActivity.this.getResources().openRawResource(R.raw.tone_cuver_sample));
mStreamer.getImgTexFilterMgt().setFilter(acvFilter);
该模式下只支持简单磨皮的美颜效果
可通过调用接口KSYStreamer的接口setEnableImgBufBeauty开启
某些美颜滤镜可能无法运行在一些机型上,此时SDK提供了错误回调,开发者可以在回调中进行相应处理。
可参考demo中的如下处理:
mStreamer.getImgTexFilterMgt().setOnErrorListener(new ImgTexFilterBase.OnErrorListener() {
@Override
public void onError(ImgTexFilterBase filter, int errno) {
Toast.makeText(CameraActivity.this, "当前机型不支持该滤镜",
Toast.LENGTH_SHORT).show();
mStreamer.getImgTexFilterMgt().setFilter(mStreamer.getGLRender(),
ImgTexFilterMgt.KSY_FILTER_BEAUTY_DISABLE);
}
});
Android | iOS |
---|---|
KSY_FILTER_BEAUTY_DENOISE | KSYGPUDnoiseFilter |
KSY_FILTER_BEAUTY_SOFT | KSYGPUBeautifyPlusFilter |
KSY_FILTER_BEAUTY_ILLUSION | KSYGPUBeautifyExtFilter |
KSY_FILTER_BEAUTY_SMOOTH | KSYBeautifyFaceFilter |
KSY_FILTER_BEAUTY_PRO | KSYBeautifyProFilter |