Initial clean commit

This commit is contained in:
2026-03-26 12:05:37 +08:00
commit 7c3c8dffee
1177 changed files with 147248 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
//
// FURenderInput.h
// FURenderKit
//
// Created by liuyang on 2021/1/4.
//
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
#import "CNamaSDK.h"
typedef enum : NSUInteger {
FUImageBufferFormatRGBA,
FUImageBufferFormatBGRA,
FUImageBufferFormatYUV420V,
FUImageBufferFormatYUV420F,
FUImageBufferFormatYUVI420,
} FUImageBufferFormat;
typedef enum : NSUInteger {
FUImageOrientationUP,
FUImageOrientationRight,
FUImageOrientationDown,
FUImageOrientationLeft
} FUImageOrientation;
/// CPU image 数据
struct FUImageBuffer {
Byte *buffer0; // 格式与传入 buffer 类型对应关系RGBA: rgba_buffer; BGRA: bgra_buffer; YUV420V/YUV420F/YUVI420: y_buffer
size_t stride0; // 格式与传入 stride 类型对应关系RGBA: rgba_stride; BGRA: bgra_stride; YUV420V/YUV420F/YUVI420: y_stride
Byte *buffer1; // 格式与传入 buffer 类型对应关系RGBA/BGRA: NULL; YUV420V/YUV420F: uv_buffer; YUVI420: u_buffer
size_t stride1; // 格式与传入 stride 类型对应关系RGBA/BGRA: 0; YUV420V/YUV420F: uv_stride; YUVI420: u_stride
Byte *buffer2; // 格式与传入 buffer 类型对应关系RGBA/BGRA: NULL; YUV420V/YUV420F: NULL; YUVI420: v_buffer
size_t stride2; // 格式与传入 stride 类型对应关系RGBA/BGRA: 0; YUV420V/YUV420F: 0; YUVI420: v_stride
CGSize size; // 图像宽高
FUImageBufferFormat format; // 图像格式
};
typedef struct FUImageBuffer FUImageBuffer;
FUImageBuffer FUImageBufferMakeRGBA(Byte *buffer0, size_t width, size_t height, size_t stride0);
FUImageBuffer FUImageBufferMakeBGRA(Byte *buffer0, size_t width, size_t height, size_t stride0);
FUImageBuffer FUImageBufferMakeYUV420F(Byte *buffer0, Byte *buffer1, size_t width, size_t height, size_t stride0, size_t stride1);
FUImageBuffer FUImageBufferMakeYUV420V(Byte *buffer0, Byte *buffer1, size_t width, size_t height, size_t stride0, size_t stride1);
FUImageBuffer FUImageBufferMakeI420(Byte *buffer0, Byte *buffer1, Byte *buffer2, size_t width, size_t height, size_t stride0, size_t stride1, size_t stride2);
FUImageBuffer FUImageBufferMake(Byte *buffer0, Byte *buffer1, Byte *buffer2, size_t width, size_t height, size_t stride0, size_t stride1, size_t stride2, FUImageBufferFormat format);
/// 纹理数据
struct FUTexture {
GLuint ID; // 纹理ID
CGSize size; // 纹理宽高
};
typedef struct FUTexture FUTexture;
#pragma -mark FURenderConfig
@interface FURenderConfig : NSObject
/// 自定义输出结果的大小当前只会对输出的纹理及pixelBuffer有效
@property (nonatomic, assign) CGSize customOutputSize;
/// 当前图片是否来源于前置摄像头,默认为 NO
@property (nonatomic, assign) BOOL isFromFrontCamera;
/// 当前图片是否来源于镜像摄像头,默认为 NO
@property (nonatomic, assign) BOOL isFromMirroredCamera;
/// 原始图像的朝向
@property (nonatomic, assign) FUImageOrientation imageOrientation;
/// 贴纸水平镜像
@property (nonatomic, assign) BOOL stickerFlipH;
/// 贴纸垂直镜像
@property (nonatomic, assign) BOOL stickerFlipV;
/// 重力开关,开启此功能可以根据已设置的 imageRotation 自动适配AI检测的方向。
@property (nonatomic, assign) BOOL gravityEnable;
/// 设置为YES 只会生效美颜结果
@property (nonatomic, assign) BOOL onlyRenderBeauty;
/// 设置输入pixelBuffer/imageBuffer的旋转方向以使buffer数据与textureTransform作用后纹理的方向一致该参数仅用于AI算法检测不会改变buffer的方向或镜像属性
@property (nonatomic, assign) TRANSFORM_MATRIX bufferTransform;
/// 设置输入纹理的旋转及镜像信息,设置该属性会影响输出纹理的方向。默认基于 CPU 图像创建的纹理与CPU 图像成上下镜像关系,此时 textureTransform 对应的值为 DEFAULT以此类推如果对默认生成的纹理做了其他变换则将该参数设置为对应的变换即可。
@property (nonatomic, assign) TRANSFORM_MATRIX textureTransform;
/// 设置输出pixelBuffer/imageBuffer的旋转方向以使buffer数据与textureTransform作用后纹理的方向一致该参数仅用于AI算法检测不会改变buffer的方向或镜像属性
@property (nonatomic, assign) TRANSFORM_MATRIX outputTransform;
/// 是否渲染到当前的FBO设置为YES时返回的 FURenderOutput 内的所有数据均为空值。
@property (nonatomic, assign) BOOL renderToCurrentFBO;
//是否读回到输入的buffer, 如果手机在后台状态也不回写数据返回的output对象内部buffer为空。
@property (nonatomic, assign) BOOL readBackToPixelBuffer;
/// 设置为YES 且 renderToCurrentFBO 为 NO 时只会输出纹理不会输出CPU层的图像。
@property (nonatomic, assign) BOOL onlyOutputTexture;
/// 控制输出图像是否保留透明信息默认值为NO可能会输出不透明的图像开启该参数可以保持图像中透明信息。
@property (nonatomic, assign) BOOL keepAlpha;
/// 如果 renderKit 有 glDisplayView ,控制绘制结果将直接渲染到 glDisplayView
@property (nonatomic, assign) BOOL autoDisplay;
@end
#pragma -mark FURenderInput
@interface FURenderInput : NSObject
/// 输入的纹理
@property (nonatomic, assign) FUTexture texture;
/// 输入的 pixelBuffer
@property (nonatomic, assign) CVPixelBufferRef pixelBuffer;
/// 输入的 imageBuffer如果同时传入了 pixelBuffer将优先使用 pixelBuffer
/// 输入 imageBuffer在 renderConfig 的 onlyOutputTexture 为 NO 时render 结果会直接读会输入的 imageBuffer大小格式与输入均保持一致。
@property (nonatomic, assign) FUImageBuffer imageBuffer;
/// 设置render相关的输入输出配置详细参数请查看 FURenderConfig 类的接口注释。
@property (nonatomic, strong, readonly) FURenderConfig *renderConfig;
@end
#pragma -mark FURenderOutput
@interface FURenderOutput : NSObject
/// 输出的纹理
@property (nonatomic, assign) FUTexture texture;
/// 输出的 pixelBuffer
@property (nonatomic, assign) CVPixelBufferRef pixelBuffer;
/// 输出的 imageBuffer内部数据与输入的 imageBuffer 一致。
@property (nonatomic, assign) FUImageBuffer imageBuffer;
@end