FURenderer.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916
  1. //
  2. // FURenderer.h
  3. //
  4. // Created by ly on 16/11/2.
  5. // Copyright © 2016年 liuyang. All rights reserved.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import <GLKit/GLKit.h>
  9. #import "CNamaSDK.h"
  10. typedef struct {
  11. CVPixelBufferRef pixelBuffer;
  12. GLuint bgraTextureHandle;
  13. } FUOutput;
  14. typedef enum {
  15. FUFormatBGRABuffer = FU_FORMAT_BGRA_BUFFER,
  16. FUFormatRGBABuffer = FU_FORMAT_RGBA_BUFFER,
  17. FUFormatNV12Buffer = FU_FORMAT_NV12_BUFFER,
  18. FUFormatI420Buffer = FU_FORMAT_I420_BUFFER,
  19. FUFormatRGBATexture = FU_FORMAT_RGBA_TEXTURE,
  20. } FUFormat;
  21. typedef enum {
  22. FURotationMode0 = FU_ROTATION_MODE_0,
  23. FURotationMode90 = FU_ROTATION_MODE_90,
  24. FURotationMode180 = FU_ROTATION_MODE_180,
  25. FURotationMode270 = FU_ROTATION_MODE_270,
  26. } FURotationMode;
  27. __attribute__((visibility("default"))) @interface FURotatedImage : NSObject
  28. @property void* mData;
  29. @property int mWidth;
  30. @property int mHeight;
  31. - (instancetype)init;
  32. @end
  33. ;
  34. __attribute__((visibility("default"))) @interface FUAvatarInfo : NSObject {
  35. @public
  36. float landmarks[150];
  37. float identity[75];
  38. float expression[56];
  39. float translation[3];
  40. float rotation[4];
  41. float rotationMode[1];
  42. float pupilPos[2];
  43. int isValid;
  44. TAvatarInfo info;
  45. }
  46. @end
  47. __attribute__((visibility("default"))) @interface FURenderer : NSObject
  48. /**
  49. 获取 FURenderer 单例
  50. @return FURenderer 单例
  51. */
  52. + (FURenderer*)shareRenderer;
  53. /**
  54. context切换
  55. */
  56. - (void)setBackCurrentContext;
  57. - (void)setUpCurrentContext;
  58. /**
  59. 初始化接口1:
  60. - 初始化 SDK,并对 SDK 进行授权,在调用其他接口前必须要先进行初始化。
  61. - 使用该接口进行初始化的话,需要在代码中配置 EAGLContext
  62. 环境,并且保证我们的接口是在同一个 EAGLContext 下调用的
  63. @param data v3.bundle 对应的二进制数据地址
  64. @param dataSize v3.bundle 数据的字节数
  65. @param ardata 该参数已舍弃,传 NULL 即可
  66. @param package 密钥数组,必须配置好密钥,SDK 才能正常工作
  67. @param size 密钥数组大小
  68. @return 初始化结果,为0则初始化失败,大于0则初始化成功
  69. */
  70. - (int)setupWithData:(void*)data
  71. dataSize:(int)dataSize
  72. ardata:(void*)ardata
  73. authPackage:(void*)package
  74. authSize:(int)size;
  75. /**
  76. 初始化接口2:
  77. - 初始化 SDK,并对 SDK 进行授权,在调用其他接口前必须要先进行初始化。
  78. - 与 初始化接口1 相比此接口新增 shouldCreate
  79. 参数,如果传入YES我们将在内部创建并持有一个 EAGLContext,无需外部再创建
  80. EAGLContext 环境。
  81. @param data v3.bundle 对应的二进制数据地址
  82. @param dataSize v3.bundle 数据的字节数
  83. @param ardata 该参数已废弃,传 NULL 即可
  84. @param package 密钥数组,必须配置好密钥,SDK 才能正常工作
  85. @param size 密钥数组大小
  86. @param shouldCreate 如果设置为 YES,我们会在内部创建并持有一个
  87. EAGLContext,OpenGL相关操作建议所用OC层接口
  88. (注:OC接口会切换到内部创建的EAGLContext上执行,防止多EAGLContext异常问题)
  89. @return 初始化结果,为0则初始化失败,大于0则初始化成功
  90. */
  91. - (int)setupWithData:(void*)data
  92. dataSize:(int)dataSize
  93. ardata:(void*)ardata
  94. authPackage:(void*)package
  95. authSize:(int)size
  96. shouldCreateContext:(BOOL)shouldCreate;
  97. /**
  98. 初始化接口3:
  99. - 初始化SDK,并对 SDK 进行授权,在调用其他接口前必须要先进行初始化。
  100. - 与 初始化接口2 相比改为通过 v3.bundle
  101. 的文件路径进行初始化,并且删除了废弃的 ardata 参数。
  102. @param v3path v3.bundle 对应的文件路径
  103. @param package 密钥数组,必须配置好密钥,SDK 才能正常工作
  104. @param size 密钥数组大小
  105. @param shouldCreate 如果设置为 YES,我们会在内部创建并持有一个
  106. EAGLContext,OpenGL相关操作建议所用OC层接口
  107. (注:OC接口会切换到内部创建的EAGLContext上执行,防止多EAGLContext异常问题)
  108. @return 初始化结果,为0则初始化失败,大于0则初始化成功
  109. */
  110. - (int)setupWithDataPath:(NSString*)v3path
  111. authPackage:(void*)package
  112. authSize:(int)size
  113. shouldCreateContext:(BOOL)shouldCreate;
  114. /**
  115. 初始化接口4:
  116. - 初始化SDK,采用离线鉴权方式
  117. @param v3path v3.bundle 对应的文件路径
  118. @param offLinePath offLineBundle.bundle 离线鉴权包路径
  119. @param package 密钥数组,必须配置好密钥,SDK 才能正常工作
  120. @param size 密钥数组大小
  121. @param shouldCreate 如果设置为 YES,我们会在内部创建并持有一个
  122. EAGLContext,OpenGL相关操作建议所用OC层接口
  123. (注:OC接口会切换到内部创建的EAGLContext上执行,防止多EAGLContext异常问题)
  124. @return 第一次鉴权成功后的文件
  125. */
  126. - (NSData*)setupLocalWithV3Path:(NSString*)v3path
  127. offLinePath:(NSString*)offLinePath
  128. authPackage:(void*)package
  129. authSize:(int)size
  130. shouldCreateContext:(BOOL)shouldCreate;
  131. /**
  132. 视频处理接口1:
  133. - 将 items 中的道具绘制到 pixelBuffer 中
  134. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP
  135. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  136. 将无法驱动道具中的特效动画
  137. @param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
  138. @param itemCount 句柄数组中包含的句柄个数
  139. @return 被处理过的的图像数据,返回 nil 视频处理失败
  140. */
  141. - (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
  142. withFrameId:(int)frameid
  143. items:(int*)items
  144. itemCount:(int)itemCount;
  145. /**
  146. 视频处理接口2:
  147. - 将 items 中的道具绘制到 pixelBuffer 中
  148. - 与 视频处理接口1 相比新增 flip 参数,将该参数设置为 YES
  149. 可使道具做水平镜像翻转
  150. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP
  151. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  152. 将无法驱动道具中的特效动画
  153. @param items 包含多个道具句柄的 int 数组
  154. @param itemCount 句柄数组中包含的句柄个数
  155. @param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
  156. @return 被处理过的的图像数据,返回 nil 视频处理失败
  157. */
  158. - (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
  159. withFrameId:(int)frameid
  160. items:(int*)items
  161. itemCount:(int)itemCount
  162. flipx:(BOOL)flip;
  163. /**
  164. 视频处理接口3:
  165. - 将 items 中的道具绘制到 pixelBuffer 中
  166. - 与 视频处理接口2 相比新增 customSize 参数,可以自定义输出分辨率
  167. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP
  168. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  169. 将无法驱动道具中的特效动画
  170. @param items 包含多个道具句柄的 int 数组
  171. @param itemCount 句柄数组中包含的句柄个数
  172. @param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
  173. @param customSize 自定义输出的分辨率,目前仅支持BGRA格式
  174. @return 被处理过的的图像数据,返回 nil 视频处理失败
  175. */
  176. - (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
  177. withFrameId:(int)frameid
  178. items:(int*)items
  179. itemCount:(int)itemCount
  180. flipx:(BOOL)flip
  181. customSize:(CGSize)customSize NS_AVAILABLE_IOS(8_0);
  182. /**
  183. 视频处理接口4:
  184. - 将 items 中的道具绘制到一个新的 pixelBuffer 中,输出与输入不是同一个
  185. pixelBuffer
  186. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP
  187. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  188. 将无法驱动道具中的特效动画
  189. @param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
  190. @param itemCount 句柄数组中包含的句柄个数
  191. @return 被处理过的的图像数据,返回 nil 视频处理失败
  192. */
  193. - (CVPixelBufferRef)renderToInternalPixelBuffer:(CVPixelBufferRef)pixelBuffer
  194. withFrameId:(int)frameid
  195. items:(int*)items
  196. itemCount:(int)itemCount
  197. NS_AVAILABLE_IOS(8_0);
  198. /**
  199. 视频处理接口5:
  200. - 将 items 中的道具绘制到 textureHandle 及 pixelBuffer 中
  201. - 该接口适用于可同时输入 GLES texture 及 pixelBuffer 的用户,这里的
  202. pixelBuffer 主要用于 CPU 上的人脸检测,如果只有 GLES texture 此接口将无法工作。
  203. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP,用于人脸识别
  204. @param textureHandle 用户当前 EAGLContext 下的 textureID,用于图像处理
  205. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  206. 将无法驱动道具中的特效动画
  207. @param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
  208. @param itemCount 句柄数组中包含的句柄个数
  209. @return 被处理过的的图像数据
  210. */
  211. - (FUOutput)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
  212. bgraTexture:(GLuint)textureHandle
  213. withFrameId:(int)frameid
  214. items:(int*)items
  215. itemCount:(int)itemCount NS_AVAILABLE_IOS(8_0);
  216. /**
  217. 视频处理接口6:
  218. - 将items中的道具绘制到 textureHandle 及 pixelBuffer 中
  219. - 与 视频处理接口5 相比新增 flip 参数,将该参数设置为 YES
  220. 可使道具做水平镜像翻转。
  221. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP,用于人脸识别
  222. @param textureHandle 用户当前 EAGLContext 下的 textureID,用于图像处理
  223. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  224. 将无法驱动道具中的特效动画
  225. @param items 包含多个道具句柄的int数组,包括普通道具、美颜道具、手势道具等
  226. @param itemCount 句柄数组中包含的句柄个数
  227. @param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
  228. @return 被处理过的的图像数据
  229. */
  230. - (FUOutput)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
  231. bgraTexture:(GLuint)textureHandle
  232. withFrameId:(int)frameid
  233. items:(int*)items
  234. itemCount:(int)itemCount
  235. flipx:(BOOL)flip NS_AVAILABLE_IOS(8_0);
  236. /**
  237. 视频处理接口7:
  238. - 将items中的道具绘制到 textureHandle 及 pixelBuffer 中
  239. - 与 视频处理接口6 相比新增 customSize 参数,可以自定义输出分辨率。
  240. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP,用于人脸识别
  241. @param textureHandle 用户当前 EAGLContext 下的 textureID,用于图像处理
  242. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  243. 将无法驱动道具中的特效动画
  244. @param items 包含多个道具句柄的int数组,包括普通道具、美颜道具、手势道具等
  245. @param itemCount 句柄数组中包含的句柄个数
  246. @param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
  247. @param customSize 自定义输出的分辨率,目前仅支持BGRA格式
  248. @return 被处理过的的图像数据
  249. */
  250. - (FUOutput)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
  251. bgraTexture:(GLuint)textureHandle
  252. withFrameId:(int)frameid
  253. items:(int*)items
  254. itemCount:(int)itemCount
  255. flipx:(BOOL)flip
  256. customSize:(CGSize)customSize NS_AVAILABLE_IOS(8_0);
  257. /**
  258. 视频处理接口8:
  259. -
  260. 该接口不包含人脸检测功能,只能对图像做美白、红润、滤镜、磨皮操作,不包含瘦脸及大眼等美型功能。
  261. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP
  262. @param item 美颜道具句柄
  263. @return 被处理过的的图像数据 返回 nil 视频处理失败
  264. */
  265. - (CVPixelBufferRef)beautifyPixelBuffer:(CVPixelBufferRef)pixelBuffer
  266. withBeautyItem:(int)item;
  267. /**
  268. 视频处理接口9:
  269. - 将 items 中的道具绘制到 YUV420P 图像中
  270. @param y Y帧图像地址
  271. @param u U帧图像地址
  272. @param v V帧图像地址
  273. @param ystride Y帧stride
  274. @param ustride U帧stride
  275. @param vstride V帧stride
  276. @param width 图像宽度
  277. @param height 图像高度
  278. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  279. 将无法驱动道具中的特效动画
  280. @param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
  281. @param itemCount 句柄数组中包含的句柄个数
  282. */
  283. - (void)renderFrame:(uint8_t*)y
  284. u:(uint8_t*)u
  285. v:(uint8_t*)v
  286. ystride:(int)ystride
  287. ustride:(int)ustride
  288. vstride:(int)vstride
  289. width:(int)width
  290. height:(int)height
  291. frameId:(int)frameid
  292. items:(int*)items
  293. itemCount:(int)itemCount;
  294. /**
  295. 视频处理接口10:
  296. - 将 items 中的道具绘制到 YUV420P 图像中
  297. - 与 视频处理接口9 相比新增 flip 参数,将该参数设置为 YES
  298. 可使道具做水平镜像翻转
  299. @param y Y帧图像地址
  300. @param u U帧图像地址
  301. @param v V帧图像地址
  302. @param ystride Y帧stride
  303. @param ustride U帧stride
  304. @param vstride V帧stride
  305. @param width 图像宽度
  306. @param height 图像高度
  307. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  308. 将无法驱动道具中的特效动画
  309. @param items 包含多个道具句柄的 int 数组,包括普通道具、美颜道具、手势道具等
  310. @param itemCount 句柄数组中包含的句柄个数
  311. @param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
  312. */
  313. - (void)renderFrame:(uint8_t*)y
  314. u:(uint8_t*)u
  315. v:(uint8_t*)v
  316. ystride:(int)ystride
  317. ustride:(int)ustride
  318. vstride:(int)vstride
  319. width:(int)width
  320. height:(int)height
  321. frameId:(int)frameid
  322. items:(int*)items
  323. itemCount:(int)itemCount
  324. flipx:(BOOL)flip;
  325. /**
  326. 视频处理接口11:
  327. - 将 items 中的道具绘制到 pixelBuffer 中
  328. - 与 视频处理接口2 相比新增 masks 参数,用来指定 items
  329. 中的道具画在多人中的哪一张脸上
  330. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP
  331. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  332. 将无法驱动道具中的特效动画
  333. @param items 包含多个道具句柄的 int 数组
  334. @param itemCount 句柄数组中包含的句柄个数
  335. @param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
  336. @param masks 指定items中的道具画在多张人脸中的哪一张脸上的 int 数组,其长度要与
  337. items 长度一致,
  338. masks中的每一位与items中的每一位道具一一对应。使用方法为:要使某一个道具画在检测到的第一张人脸上,
  339. 对应的int值为 "2的0次方",画在第二张人脸上对应的int值为
  340. “2的1次方”,第三张人脸对应的int值为 “2的2次方”, 以此类推。例:masks =
  341. {pow(2,0),pow(2,1),pow(2,2)....},值得注意的是美颜道具对应的int值为 0。
  342. @return 被处理过的的图像数据,返回 nil 视频处理失败
  343. */
  344. - (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
  345. withFrameId:(int)frameid
  346. items:(int*)items
  347. itemCount:(int)itemCount
  348. flipx:(BOOL)flip
  349. masks:(void*)masks;
  350. /**
  351. 视频处理接口12: 注意:目前仅支持背景分割场景
  352. - 将 items 中的道具绘制到 pixelBuffer 中
  353. - 与 视频处理接口2 相比新增 customSize 参数,可以自定义输出分辨率
  354. @param pixelBuffer 图像数据,支持的格式为:BGRA、YUV420SP
  355. @param frameid 当前处理的视频帧序数,每次处理完对其进行加 1 操作,不加 1
  356. 将无法驱动道具中的特效动画
  357. @param items 包含多个道具句柄的 int 数组
  358. @param itemCount 句柄数组中包含的句柄个数
  359. @param flip 道具镜像使能,如果设置为 YES 可以将道具做镜像操作
  360. @param customSize 自定义输出的分辨率,目前仅支持BGRA格式
  361. @param useAlpha 是否带道具透明通道,if useAlpha = NO,RGBA 数据alpha
  362. 会被强制设置为1,其他视频处理接口皆为该模式
  363. @return 被处理过的的图像数据,返回 nil 视频处理失败
  364. */
  365. - (CVPixelBufferRef)renderPixelBuffer:(CVPixelBufferRef)pixelBuffer
  366. withFrameId:(int)frameid
  367. items:(int*)items
  368. itemCount:(int)itemCount
  369. flipx:(BOOL)flip
  370. customSize:(CGSize)customSize
  371. useAlpha:(BOOL)useAlpha;
  372. - (int)renderItems:(void*)inPtr
  373. inFormat:(FUFormat)inFormat
  374. outPtr:(void*)outPtr
  375. outFormat:(FUFormat)outFormat
  376. width:(int)width
  377. height:(int)height
  378. frameId:(int)frameid
  379. items:(int*)items
  380. itemCount:(int)itemCount
  381. flipx:(BOOL)flip;
  382. - (int)renderBundles:(void*)inPtr
  383. inFormat:(FUFormat)inFormat
  384. outPtr:(void*)outPtr
  385. outFormat:(FUFormat)outFormat
  386. width:(int)width
  387. height:(int)height
  388. frameId:(int)frameid
  389. items:(int*)items
  390. itemCount:(int)itemCount;
  391. - (int)renderBundlesSplitView:(void*)inPtr
  392. inFormat:(FUFormat)inFormat
  393. outPtr:(void*)outPtr
  394. outFormat:(FUFormat)outFormat
  395. width:(int)width
  396. height:(int)height
  397. frameId:(int)frameid
  398. items:(int*)items
  399. itemCount:(int)itemCount
  400. splitViewInfoPtr:(TSplitViewInfo*)splitViewInfoPtr;
  401. - (CVPixelBufferRef)renderBundlesWithPixelBuffer:(CVPixelBufferRef)pixelBuffer
  402. withFrameId:(int)frameid
  403. items:(int*)items
  404. itemCount:(int)itemCount;
  405. - (CVPixelBufferRef)
  406. renderBundlesSplitViewWithPixelBuffer:(CVPixelBufferRef)pixelBuffer
  407. withFrameId:(int)frameid
  408. items:(int*)items
  409. itemCount:(int)itemCount
  410. splitViewInfoPtr:(TSplitViewInfo*)splitViewInfoPtr;
  411. - (void)setInputCameraMatrix:(int)flip_x
  412. flip_y:(int)flip_y
  413. rotate_mode:(int)rotate_mode;
  414. - (void)setOutputResolution:(int)w h:(int)h;
  415. /*
  416. @return 1代表成功,0代表失败
  417. */
  418. - (int)rotateImage:(FURotatedImage*)outImage
  419. inPtr:(void*)inPtr
  420. inFormat:(FUFormat)inFormat
  421. width:(int)width
  422. height:(int)height
  423. rotationMode:(FURotationMode)rotationMode
  424. flipX:(BOOL)flipX
  425. flipY:(BOOL)flipY;
  426. /**
  427. resize视频图像,目前仅支持BGRA格式的pixelBuffer
  428. @param pixelBuffer BGRA格式的pixelBuffer
  429. @param resizeSize resizeSize
  430. @return resizeSize之后的pixelBuffer
  431. */
  432. - (CVPixelBufferRef)resizePixelBuffer:(CVPixelBufferRef)pixelBuffer
  433. resizeSize:(CGSize)resizeSize NS_AVAILABLE_IOS(8_0);
  434. /**
  435. 通过texture获取指定大小与格式的pixelBuffer
  436. @param texture rgba texture
  437. @param textureSize texture 尺寸
  438. @param outPutSize 输出的pixelBuffer的尺寸
  439. @param outputFormat
  440. 输出的pixelBuffer的格式,接受的参数有两个,分别为:FU_FORMAT_NV12_BUFFER、FU_FORMAT_BGRA_BUFFER
  441. @return 从texture获取到的指定大小与格式的pixelBuffer
  442. */
  443. - (CVPixelBufferRef)getPixelBufferFromTexture:(int)texture
  444. textureSize:(CGSize)textureSize
  445. outputSize:(CGSize)outPutSize
  446. outputFormat:(int)outputFormat
  447. NS_AVAILABLE_IOS(8_0);
  448. /**
  449. 切换摄像头时需调用的接口:
  450. - 切换摄像头时需要调用该接口,我们会在内部重置人脸检测的一些状态
  451. */
  452. + (void)onCameraChange;
  453. /**
  454. 销毁所有gl资源时需调用的接口:
  455. - 销毁所有gl资源时需要调用该接口
  456. */
  457. + (void)ReleaseGLResources;
  458. /**
  459. 销毁所有道具时需调用的接口:
  460. - 销毁所有道具时需要调用该接口,我们会在内部销毁每个指令中的OpenGL资源
  461. */
  462. + (void)OnDeviceLost;
  463. /**
  464. 销毁所有道具时需调用的接口:
  465. - 销毁所有道具时需要调用该接口,我们仅销毁Cpu资源
  466. */
  467. + (void)OnDeviceLostSafe;
  468. /**
  469. 通过道具二进制文件创建道具:
  470. - 通过道具二进制文件创建道具句柄
  471. @param data 道具二进制文件
  472. @param size 文件大小
  473. @return 创建的道具句柄
  474. */
  475. + (int)createItemFromPackage:(void*)data size:(int)size;
  476. /**
  477. 通过道具文件路径创建道具:
  478. - 通过道具文件路径创建道具句柄
  479. @param path 道具文件路径
  480. @return 创建的道具句柄
  481. */
  482. + (int)itemWithContentsOfFile:(NSString*)path;
  483. /**
  484. 销毁单个道具:
  485. - 通过道具句柄销毁道具,并释放相关资源
  486. - 销毁道具后请将道具句柄设为 0 ,以避免 SDK 使用无效的句柄而导致程序出错。
  487. @param item 道具句柄
  488. */
  489. + (void)destroyItem:(int)item;
  490. /**
  491. 销毁所有道具:
  492. - 销毁全部道具,并释放相关资源
  493. - 销毁道具后请将道具句柄数组中的句柄设为 0 ,以避免 SDK
  494. 使用无效的句柄而导致程序出错。
  495. */
  496. + (void)destroyAllItems;
  497. /**
  498. 加载AI能力模型bundle
  499. @param data AI能力模型二进制文件
  500. @param size 文件大小
  501. @param type AI能力类型,定义在FUAITYPE中
  502. @return 加载成功返回1,否则返回0
  503. */
  504. + (int)loadAIModelFromPackage:(void*)data size:(int)size aitype:(FUAITYPE)type;
  505. /**
  506. 在不需要的时候,释放AI能力模型bundle
  507. @param type AI能力类型,定义在FUAITYPE中
  508. @return 释放成功返回1,否则返回0
  509. */
  510. + (int)releaseAIModel:(FUAITYPE)type;
  511. /**
  512. 获取AI能力模型是否加载。
  513. @param type AI能力类型,定义在FUAITYPE中
  514. @return 已加载返回1,否则返回0
  515. */
  516. + (int)isAIModelLoaded:(FUAITYPE)type;
  517. /**
  518. 为道具设置参数:
  519. @param item 道具句柄
  520. @param name 参数名
  521. @param value 参数值:只支持 NSString 、 NSNumber 两种数据类型
  522. @return 执行结果:返回 0 代表设置失败,大于 0 表示设置成功
  523. */
  524. + (int)itemSetParam:(int)item withName:(NSString*)name value:(id)value;
  525. /**
  526. 为道具设置参数:
  527. @param item 道具句柄
  528. @param name 参数名
  529. @param value 参数值:double 数组
  530. @param length 参数值:double 数组长度
  531. @return 执行结果:返回 0 代表设置失败,大于 0 表示设置成功
  532. */
  533. + (int)itemSetParamdv:(int)item
  534. withName:(NSString*)name
  535. value:(double*)value
  536. length:(int)length;
  537. /**
  538. 从道具中获取 double 数组:
  539. @param item 道具句柄
  540. @param name 参数名
  541. @param value 参数值:double 数组
  542. @param length 参数值:double 数组长度
  543. @return 执行结果:返回获取的数组长度
  544. */
  545. + (int)itemGetParamdv:(int)item
  546. withName:(NSString*)name
  547. buffer:(double*)buffer
  548. length:(int)length;
  549. /**
  550. 从道具中获取 float 数组:
  551. @param item 道具句柄
  552. @param name 参数名
  553. @param value 参数值:float 数组
  554. @param length 参数值:float 数组长度
  555. @return 执行结果:返回获取的数组长度
  556. */
  557. + (int)itemGetParamfv:(int)item
  558. withName:(NSString*)name
  559. buffer:(float*)buffer
  560. length:(int)length;
  561. /**
  562. 从道具中获取 double 型参数值:
  563. @param item 道具句柄
  564. @param name 参数名
  565. @return 参数值
  566. */
  567. + (double)getDoubleParamFromItem:(int)item withName:(NSString*)name;
  568. /**
  569. 从道具中获取 NSString 型参数值:
  570. @param item 道具句柄
  571. @param name 参数名
  572. @return 参数值
  573. */
  574. + (NSString*)getStringParamFromItem:(int)item withName:(NSString*)name;
  575. + (int)itemSetParamu8v:(int)item
  576. withName:(NSString*)name
  577. buffer:(void*)buffer
  578. size:(int)size;
  579. + (int)itemGetParamu8v:(int)item
  580. withName:(NSString*)name
  581. buffer:(void*)buffer
  582. size:(int)size;
  583. + (int)itemSetParamu64:(int)item
  584. withName:(NSString*)name
  585. value:(unsigned long long)value;
  586. /**
  587. 判断是否检测到人脸:
  588. @return 检测到的人脸个数,返回 0 代表没有检测到人脸
  589. */
  590. + (int)isTracking;
  591. /**
  592. 判断SDK是否已经初始化:
  593. @return 返回1代表初始化,返回0代表未初始化
  594. */
  595. + (int)isLibraryInit;
  596. /**
  597. 开启多人检测模式:
  598. - 开启多人检测模式,最多可同时检测 8 张人脸
  599. @param maxFaces 设置多人模式开启的人脸个数,最多支持 8 个
  600. @return 上一次设置的人脸个数
  601. */
  602. + (int)setMaxFaces:(int)maxFaces;
  603. /**
  604. 人脸信息跟踪:
  605. - 该接口只对人脸进行检测,如果程序中没有运行过视频处理接口( 视频处理接口8
  606. 除外),则需要先执行完该接口才能使用 获取人脸信息接口 来获取人脸信息
  607. @param inputFormat 输入图像格式:FU_FORMAT_BGRA_BUFFER 或 FU_FORMAT_NV12_BUFFER
  608. @param inputData 输入的图像 bytes 地址
  609. @param width 图像宽度
  610. @param height 图像高度
  611. @return 检测到的人脸个数,返回 0 代表没有检测到人脸
  612. */
  613. + (int)trackFace:(int)inputFormat
  614. inputData:(void*)inputData
  615. width:(int)width
  616. height:(int)height;
  617. + (int)trackFaceWithTongue:(int)inputFormat
  618. inputData:(void*)inputData
  619. width:(int)width
  620. height:(int)height;
  621. /**
  622. 获取人脸信息:
  623. - 在程序中需要先运行过视频处理接口( 视频处理接口8 除外)或 人脸信息跟踪接口
  624. 后才能使用该接口来获取人脸信息;
  625. -
  626. 该接口能获取到的人脸信息与我司颁发的证书有关,普通证书无法通过该接口获取到人脸信息;
  627. - 具体参数及证书要求如下:
  628. landmarks: 2D人脸特征点,返回值为75个二维坐标,长度75*2
  629. 证书要求: LANDMARK证书、AVATAR证书
  630. landmarks_ar: 3D人脸特征点,返回值为75个三维坐标,长度75*3
  631. 证书要求: AVATAR证书
  632. rotation: 人脸三维旋转,返回值为旋转四元数,长度4
  633. 证书要求: LANDMARK证书、AVATAR证书
  634. translation: 人脸三维位移,返回值一个三维向量,长度3
  635. 证书要求: LANDMARK证书、AVATAR证书
  636. eye_rotation: 眼球旋转,返回值为旋转四元数,长度4
  637. 证书要求: LANDMARK证书、AVATAR证书
  638. rotation_raw: 人脸三维旋转(不考虑屏幕方向),返回值为旋转四元数,长度4
  639. 证书要求: LANDMARK证书、AVATAR证书
  640. expression: 表情系数,长度46
  641. 证书要求: AVATAR证书
  642. projection_matrix: 投影矩阵,长度16
  643. 证书要求: AVATAR证书
  644. face_rect: 人脸矩形框,返回值为(xmin,ymin,xmax,ymax),长度4
  645. 证书要求: LANDMARK证书、AVATAR证书
  646. rotation_mode: 人脸朝向,0-3分别对应手机四种朝向,长度1
  647. 证书要求: LANDMARK证书、AVATAR证书
  648. @param faceId 被检测的人脸 ID ,未开启多人检测时传 0
  649. ,表示检测第一个人的人脸信息;当开启多人检测时,其取值范围为 [0 ~ maxFaces-1]
  650. ,取其中第几个值就代表检测第几个人的人脸信息
  651. @param name 人脸信息参数名: "landmarks" , "eye_rotation" , "translation" ,
  652. "rotation" ....
  653. @param pret 作为容器使用的 float 数组指针,获取到的人脸信息会被直接写入该 float
  654. 数组。
  655. @param number float 数组的长度
  656. @return 返回 1 代表获取成功,返回 0 代表获取失败
  657. */
  658. + (int)getFaceInfo:(int)faceId
  659. name:(NSString*)name
  660. pret:(float*)pret
  661. number:(int)number;
  662. + (int)getFaceInfoRotated:(int)faceId
  663. name:(NSString*)name
  664. pret:(float*)pret
  665. number:(int)number;
  666. /**
  667. 获取正在跟踪人脸的标识符,用于在SDK外部对多人情况下的不同人脸进行区别。
  668. @param faceId,人脸编号,表示识别到的第 x
  669. 张人脸,从0开始,到n-1,n为当前跟踪到的人脸数。
  670. @return 人脸的标识符 [1,maxFaces]
  671. */
  672. + (int)getFaceIdentifier:(int)faceId;
  673. /**
  674. 将普通道具绑定到avatar道具:
  675. - 该接口主要应用于 P2A 项目中,将普通道具绑定到 avatar
  676. 道具上,从而实现道具间的数据共享;
  677. - 在视频处理时只需要传入 avatar 道具句柄,普通道具也会和 avatar
  678. 一起被绘制出来。
  679. - 普通道具又分免费版和收费版,免费版有免费版对应的 contract
  680. 文件,收费版有收费版对应的 contract 文件,当绑定时需要同时传入这些 contracts
  681. 文件才能绑定成功。
  682. - 注意: contract 的创建和普通道具创建方法一致
  683. @param avatarItem avatar 道具句柄
  684. @param items 需要被绑定到 avatar 道具上的普通道具的句柄数组
  685. @param itemsCount 句柄数组包含的道具句柄个数
  686. @param contracts contract 道具的句柄数组
  687. @param contractsCount contracts 数组中 contract 道具句柄的个数
  688. @return 被绑定到 avatar 道具上的普通道具个数
  689. */
  690. + (int)avatarBindItems:(int)avatarItem
  691. items:(int*)items
  692. itemsCount:(int)itemsCount
  693. contracts:(int*)contracts
  694. contractsCount:(int)contractsCount
  695. DEPRECATED_MSG_ATTRIBUTE("use bindItems:items:itemsCount: instead");
  696. /**
  697. 将普通道具从avatar道具上解绑:
  698. - 该接口可以将普通道具从 avatar
  699. 道具上解绑,主要应用场景为切换道具或去掉某个道具
  700. @param avatarItem avatar 道具句柄
  701. @param items 需要从 avatar 道具上的解除绑定的普通道具的句柄数组
  702. @param itemsCount 句柄数组包含的道具句柄个数
  703. @return 从 avatar 道具上解除绑定的普通道具个数
  704. */
  705. + (int)avatarUnbindItems:(int)avatarItem
  706. items:(int*)items
  707. itemsCount:(int)itemsCount
  708. DEPRECATED_MSG_ATTRIBUTE("use unBindItems:items:itemsCount: instead");
  709. /**
  710. 绑定道具:
  711. -
  712. 该接口可以将一些普通道具绑定到某个目标道具上,从而实现道具间的数据共享,在视频处理时只需要传入该目标道具句柄即可
  713. @param item 目标道具句柄
  714. @param items 需要被绑定到目标道具上的其他道具的句柄数组
  715. @param itemsCount 句柄数组包含的道具句柄个数
  716. @return 被绑定到目标道具上的普通道具个数
  717. */
  718. + (int)bindItems:(int)item items:(int*)items itemsCount:(int)itemsCount;
  719. /**
  720. 解绑道具:
  721. - 该接口可以将一些普通道具从某个目标道具上解绑
  722. @param item 目标道具句柄
  723. @param items 需要从目标道具上解除绑定的普通道具的句柄数组
  724. @param itemsCount 句柄数组包含的道具句柄个数
  725. @return 被绑定到目标道具上的普通道具个数
  726. */
  727. + (int)unBindItems:(int)item items:(int*)items itemsCount:(int)itemsCount;
  728. /**
  729. 解绑所有道具:
  730. - 该接口可以解绑绑定在目标道具上的全部道具
  731. @param item 目标道具句柄
  732. @return 从目标道具上解除绑定的普通道具个数
  733. */
  734. + (int)unbindAllItems:(int)item;
  735. /**
  736. 获取 SDK 版本信息:
  737. @return 版本信息
  738. */
  739. + (NSString*)getVersion;
  740. + (void)setDefaultRotationMode:(int)mode;
  741. + (void)setDeviceOrientation:(int)orientation;
  742. + (int)getCurrentRotationMode;
  743. + (int)setMultiSamples:(int)samples;
  744. + (void)setAsyncTrackFaceEnable:(int)enable;
  745. + (void)setTongueTrackingEnable:(int)enable;
  746. + (int)loadTongueModel:(void*)model size:(int)size;
  747. + (int)SetLoadQuality:(int)quality;
  748. /**
  749. 统计接口调用次数
  750. @param 接口名称
  751. @return 返回 1 代表调用成功,返回 0 代表代表失败
  752. **/
  753. + (int)authCountWithAPIName:(NSString*)name;
  754. /**
  755. 释放nama资源
  756. */
  757. + (void)namaLibDestroy;
  758. + (void)humanProcessorReset;
  759. /**
  760. prepare GL resource for a list of items in advance
  761. This function needs a GLES 2.0+ context.
  762. @param items the list of items
  763. @param itemCount the number of items
  764. */
  765. - (void)prepareGLResource:items:(int*)items itemCount:(int)itemCount;
  766. /**
  767. check prepare gl resource is ready.
  768. 1 for ready prepared, 0 false.
  769. @param items the list of items
  770. @param itemCount the number of items
  771. */
  772. - (int)isGLPrepared:items:(int*)items itemCount:(int)itemCount;
  773. /**
  774. check gl error
  775. @return OpenGL error information, 0 for no error
  776. */
  777. + (int)checkGLError;
  778. @end