You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1665 lines
82 KiB

2 years ago
#ifndef __ZMF_VIDEO_H__
#define __ZMF_VIDEO_H__
#ifdef __OBJC__
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
#import <UIKit/UIKit.h>
#else
#import <AppKit/AppKit.h>
#endif
#endif
#ifdef __GNUC__
#pragma GCC visibility push(default)
#endif
/**
* @file zmf_video.h
* @brief ZMF
*/
/**
* @defgroup ZmfVideoType
* @brief
* @{
*/
/**
* @brief
*/
typedef enum {
ZmfVideoFaceUnknown = 0, /**< @brief 未知 */
ZmfVideoFaceFront = 1, /**< @brief 前置摄像头 */
ZmfVideoFaceBack = 2, /**< @brief 后置摄像头 */
} ZmfVideoFaceType;
/**
* @brief
*/
typedef enum {
ZmfRotationFixedScreen = -2, /**< @brief 默认,屏幕和设备之间保持固定的夹角 */
ZmfRotationAutoScreen = -1, /**< @brief 屏幕跟随重力感应旋转 */
ZmfRotationAngle0 = 0, /**< @brief 0度 */
ZmfRotationAngle90 = 90, /**< @brief 90度 */
ZmfRotationAngle180 = 180, /**< @brief 180度 */
ZmfRotationAngle270 = 270, /**< @brief 270度 */
} ZmfRotationAngle;
/**
* @brief
*/
typedef enum {
ZmfMirrorNone = 0, /**< @brief 不镜像 */
ZmfMirrorHorizontal = 1, /**< @brief 水平方向镜像 */
ZmfMirrorVertical = 2, /**< @brief 垂直方向镜像 */
ZmfMirrorFlipFromLeft = 4, /**< @brief 转场动画,从左侧翻转 */
ZmfMirrorFlipFromTop = 8, /**< @brief 转场动画,从上侧翻转 */
ZmfMirrorAuto = 3, /**< @brief 自动选择 */
} ZmfMirrorType;
/**
* @brief
*/
typedef enum {
ZmfRenderEffectNone = 0, /**< @brief 无 */
/** 高斯模糊特效\n
* JSON :\n
* "hoffset": 2\n
* "voffset": 2\n
* "iterate": 3\n
* "pixels": \n
* "sigma": sigma越大越模糊\n
*/
ZmfRenderEffectBlur = 1, /**< @brief 高斯模糊 */
ZmfRenderEffectGrey = 2, /**< @brief 黑白 */
ZmfRenderEffectMask = 3, /**< @brief 掩膜 */
/** 放大镜特效\n
* JSON :\n
* "dx": x的宽度偏移量\n
* "dy": y的高度偏移量\n
* "x": x坐标[0, 1]\n
* "y": y坐标[0, 1]\n
* "zoom": 2\n
*"radius": 0.2\n
*/
ZmfRenderEffectMagnifier = 4, /**< @brief 放大镜 */
ZmfRenderEffectOldTime = 5, /**< @brief 怀旧 */
ZmfRenderEffectPhotoVerse = 6, /**< @brief 底片 */
ZmfRenderEffectLomo = 7, /**< @brief 温暖 */
/** 景深特效\n
* JSON :\n
* "x": x轴中点\n
* "y": y轴中点\n
* "radius": 0.2\n
* "exp": alpha exp, 1.0\n
*/
ZmfRenderEffectDepthOfField = 8, /**< @brief 拖动控制景深 */
/**
* 线\n
* JSON :\n
* "status": \n
* 0: \n
* 1: \n
* "yaw": [0360]0\n
* "pitch": [-180180]0\n
* "roll": [0360]0\n
* "fov": (0180)90\n
* fov 0\n
* fov 180\n
* : 45-135\n
* 使2:1\n
* "reset": \n
*/
ZmfRenderEffectErtToRect = 9, /**< @brief 远端全景视频 */
} ZmfRenderEffectType;
/**
* @brief
*/
typedef enum {
ZmfRenderMatchNone = 0, /**< @brief 无 */
/**
* JSON :\n
* "epsilon":\n
* "duration":\n
* "position":\n
* "fovy":\n
* "attitude":\n
*/
ZmfRenderMatchAttitude = 1, /**< @brief 姿态匹配 */
ZmfRenderMatchLight = 2, /**< @brief 光线特性匹配 */
/**
* JSON :\n
* "timestamp":\n
* "action":"ResetEffect"\n
*/
ZmfRenderMatchTimeStamp = 3, /**< @brief 时间匹配 */
} ZmfRenderMatchType;
/**
* @brief
*/
typedef enum {
ZmfRenderView, /**< @brief 普通渲染 */
ZmfRenderViewFx, /**< @brief 普通渲染,支持特效 */
ZmfRenderImmersive, /**< @brief 场景渲染 */
ZmfRenderImmersiveFx, /**< @brief 场景渲染,支持特效 */
ZmfRenderViewMetal
} ZmfRenderType;
/**
* @brief
*/
typedef enum {
ZmfCaptureEffectNone = 0, /**< @brief 无 */
/**
* JSON :\n
* "fps": FPS\n
* "exposure": (0,100]\n
*/
ZmfCaptureSmartExposure = 1, /**< @brief 智能曝光 */
ZmfCaptureGammaCorrection = 1<<1, /**< @brief Gamma校正 */
ZmfCaptureContrastEnhance = 1<<2, /**< @brief 对比度增强 */
ZmfCaptureFaceEnhance = 1<<3, /**< @brief 人脸增强 */
/**
* JSON :\n
* "library": 使\n
* "model": 使\n
* "effectType":001\n
* "image": 使\n
*/
ZmfCaptureVirtualBacklot = 1<<4, /**< @brief 虚拟背景 */
/**
* 线\n
* JSON :\n
* "status": \n
* 0: \n
* 1: \n
* "yaw": [0360]0\n
* "pitch": [-180180]0\n
* "roll": [0360]0\n
* "fov": (0180)90\n
* fov 0\n
* fov 180\n
* : 45-135\n
* 使2:1\n
* "reset": \n
*/
ZmfCaptureErtToRect = 1<<5, /**< @brief 本地采集全景视频 */
/**
* H264格式数据使yuv或mjpg格式\n
* UVC采集(CamView)H264UVC1.5(Ricoh Theta S)\n
*/
ZmfCapturePreferH264 = 1<<6, /**< @brief 采集H264类型数据 */
ZmfCaptureBrightnessNotification = 1<<7, /**< @brief 亮度提示 */
/**
* JSON \n
* "enable": 0: 1(): \n
*/
ZmfDesktopCaptureMouse = 1<<8, /**< @brief 屏幕共享是否采集鼠标 */
/**
* JSON :\n
* "mouse": true \n
* "disableEffects": true (Aero)Windows\n
" "disableCAPTUREBLT": true 使用GDI BitBlt()时,从raster-operation移除CAPTUREBLT\n
*/
ZmfScreenCaptureOptions = 1<<9, /**< @brief 屏幕共享选项 */
ZmfWindowCaptureOptions = 1<<10, /**< @brief 窗口采集共享选项 */
} ZmfCaptureEffectType;
/**
* @brief Video source type.
*/
typedef enum {
/**
* JSON :\n
* NULL
*/
ZmfCaptureBeautyNone = 0, /**< @brief 关闭美颜特效\n */
/**
* JSON :\n
* "constant": 0-100\n
* "hue": \n
* "saturation": \n
* "smooth": \n
* "filter": \n
* "whiten": \n
* "redden":
*/
ZmfCaptureBeauty = 1,/**< @brief 自由选择想要开启的美颜种类以及对应的程度值\n */
/**
* JSON :\n
* NULL
*/
ZmfCaptureBeautyAll = 2,/**< @brief 开启全部七种美颜特效,函数内部设置了相应的初始值\n */
} ZmfBeautyEffectType;
/**
* @brief Video source type.
*/
typedef enum {
ZmfVideoSourcePeer = 0, /**< @brief 图像来自内部 */
ZmfVideoSourceCapture = 1, /**< @brief 图像来自采集设备 */
ZmfVideoSourceFile = 2, /**< @brief 图像来自文件 */
} ZmfVideoSourceType;
/**
* @brief
*/
typedef enum {
/**
* ZmfRenderFullScreen \n
* ZmfRenderFullContent iOS平台会重绘窗口\n
*/
ZmfRenderAuto = 0, /**< @brief 自动选择 */
/** 类似 ZmfRenderAuto,但是精度更高,仅支持iOS */
ZmfRenderMatch = 4, /**< @brief 自动选择 */
/** 保持图像宽高比不变的前提下,缩放图像使其铺满渲染窗口(图像可能显示不完全) */
ZmfRenderFullScreen = 1, /**< @brief 全屏填充 */
/** 保持图像宽高比不变的前提下,缩放图像使其完整显示于渲染窗口(窗口可能存在黑边) */
ZmfRenderFullContent = 2, /**< @brief 适应内容 */
/**
* ZmfRenderAuto */
ZmfRenderFullAuto = 3, /**< @brief 自动选择 */
} ZmfRenderMode;
/**
* @brief ()
*/
typedef enum {
ZmfRotationMask0 = 1<<0, /**< @brief 0度 */
ZmfRotationMask90 = 1<<1, /**< @brief 90度 */
ZmfRotationMask180 = 1<<2, /**< @brief 180度 */
ZmfRotationMask270 = 1<<3, /**< @brief 270度 */
ZmfRotationMaskAll = 0xF,
} ZmfRotationMask;
/**
* @}
*/
#ifdef __OBJC__
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
__attribute__((visibility("default")))
@interface ZmfView : UIView
@end
#else
__attribute__((visibility("default")))
@interface ZmfGLView : NSOpenGLView
@end
__attribute__((visibility("default")))
@interface ZmfView : NSView
@end
#endif
/**
* @defgroup ZmfVideoDeviceId ID
* @{
*/
/** @brief 后置摄像头ID */
extern const char * ZmfVideoCaptureBack;
/** @brief 前置摄像头ID */
extern const char * ZmfVideoCaptureFront;
/** @brief 后置AR摄像头ID */
extern const char * ZmfARCaptureBack;
/** @brief 前置AR摄像头ID */
extern const char * ZmfARCaptureFront;
/**
* @}
*/
/**
* @defgroup ZmfVideoNotificationParameters
* @{
*/
/**
* @brief NSString对象ID(string)
*/
extern NSString * const ZmfCapture;
/**
* @brief NSString对象(string)
*/
extern NSString * const ZmfFile;
/**
* @brief NSNumber对象(int) @ref ZmfVideoFaceType
*/
extern NSString * const ZmfFace;
/**
* @brief NSNumber对象(int)
*/
extern NSString * const ZmfWidth;
/**
* @brief NSNumber对象(int)
*/
extern NSString * const ZmfHeight;
/**
* @brief NSNumber对象(int)
*/
extern NSString * const ZmfAngle;
/**
* @brief NSString对象(string)
*/
extern NSString * const ZmfRender;
/**
* @brief NSNumber对象(int) @ref ZmfVideoSourceType
*/
extern NSString * const ZmfSourceType;
/**
* @brief NSNumber对象(int)
*/
extern NSString * const ZmfWindow;
/**
* @brief NSNumber对象(int)
*/
extern NSString * const ZmfFrameRate;
/**
* @brief NSNumber对象(bool)
*/
extern NSString * const ZmfExposure;
/**
* @brief NSNumber对象(int)(0 ~ 255)
*/
extern NSString * const ZmfBrightness;
/**
* @brief NSNumber对象(bool)1
*/
extern NSString * const ZmfBacklot;
/**
* @brief NSString对象(string)type: <deviceType>, detail: <errorInfo>
* deviceType包括 @ref ZmfRender, @ref ZmfVideoCamera, @ref ZmfVideoScreen
*/
extern NSString * const ZmfVideoError;
/**
* @brief NSNumber对象(int) @ref ZmfRenderMatchType
*/
extern NSString * const ZmfMatching;
/**
* @brief NSNumber对象(string) @ref ZmfVideoError
*/
extern NSString * const ZmfVideoCamera;
/**
* @brief NSNumber对象(string) @ref ZmfVideoError
*/
extern NSString * const ZmfVideoScreen;
/**
* @}
*/
/**
* @defgroup ZmfVideoNotifications
* @{
*/
/**
* @brief ZMF模块请求开始采集视频\n
* @ref ZmfCapture, @ref ZmfWidth, @ref ZmfHeight, @ref ZmfFrameRate
*/
extern NSString * const ZmfVideoCaptureRequestStart;
/**
* @brief ZMF模块请求改变视频采集参数\n
* @ref ZmfCapture, @ref ZmfWidth, @ref ZmfHeight, @ref ZmfFrameRate
*/
extern NSString * const ZmfVideoCaptureRequestChange;
/**
* @brief ZMF模块请求停止采集视频\n
* @ref ZmfCapture
*/
extern NSString * const ZmfVideoCaptureRequestStop;
/**
* @brief @ref Zmf_VideoCaptureStart ZMF模块收到第一帧视频数据\n
* @ref ZmfCapture, @ref ZmfFace, @ref ZmfWidth, @ref ZmfHeight
* \n表示实际的视频采集参数
*/
extern NSString * const ZmfVideoCaptureDidStart;
/**
* @brief ZMF模块视频采集状态改变\n
* @ref ZmfExposure, @ref ZmfBrightness, @ref ZmfBacklot
*/
extern NSString * const ZmfVideoCaptureStatus;
/**
* @brief ZMF模块请求开始渲染视频\n
* @ref ZmfRender.
*/
extern NSString * const ZmfVideoRenderRequestAdd;
/**
* @brief @ref Zmf_VideoRenderAdd ZMF模块收到第一帧渲染数据\n
*/
extern NSString * const ZmfVideoRenderDidReceive;
/**
* @brief @ref Zmf_VideoRenderStart @ref Zmf_VideoRenderAdd ZMF模块渲染第一帧数据\n
*/
extern NSString * const ZmfVideoRenderDidStart;
/**
* @brief \n
* @ref ZmfRender, @ref ZmfWindow, @ref ZmfWidth, @ref ZmfHeight, @ref ZmfAngle
*/
extern NSString * const ZmfVideoRenderDidResize;
/**
* @brief ZMF模块停止渲染视频\n
* @ref ZmfRender, ref ZmfWindow
*/
extern NSString * const ZmfVideoRenderRequestRemove;
/**
* @brief ZMF模块渲染数据已经匹配\n
* @ref ZmfRender, @ref ZmfWindow, @ref ZmfMatching
*/
extern NSString * const ZmfVideoRenderDidMatch;
/**
* @brief ZMF模块完成截图\n
* @ref ZmfFile, @ref ZmfWidth, @ref ZmfHeight
*/
extern NSString * const ZmfVideoSnapshotCompleted;
/** @brief 通知事件:ZMF视频模块运行发生错误\n
* @ref ZmfVideoError
*/
extern NSString * const ZmfVideoErrorOccurred;
/**
* @brief ZMF美颜模块初始化失败\n
*/
extern NSString * const ZmfBeautyInitError;
/**
* @}
*/
#else /* __OBJC__ */
/**
* @defgroup ZmfVideoNotification
* @brief UI可以在通话前打开所有设备
* @{
*/
#ifdef _WIN32
/**
* @brief \n
* @param wParam @ref ZmfVideoEventType
* @param lParam JSON对象
*/
#define ZmfVideoEvent ZmfAudioEvent + 10
#endif /* _WIN32 */
#ifndef ZMF_NO_JSON_KEY
/**
* @brief ID(string)
*/
#define ZmfCapture "Capture"
/**
* @brief (string)
*/
#define ZmfFile "File"
/**
* @brief (int) @ref ZmfVideoFaceType
*/
#define ZmfFace "Face"
/**
* @brief (int)
*/
#define ZmfWidth "Width"
/**
* @brief (int)
*/
#define ZmfHeight "Height"
/**
* @brief (int)
*/
#define ZmfAngle "Angle"
/**
* @brief (string)
*/
#define ZmfRender "Render"
/**
* @brief (int) @ref ZmfVideoSourceType
*/
#define ZmfSourceType "SourceType"
/**
* @brief (int)
*/
#define ZmfWindow "Window"
/**
* @brief (int)
*/
#define ZmfFrameRate "FrameRate"
/**
* @brief (bool)
*/
#define ZmfExposure "Exposure"
/**
* @brief (int)(0 ~ 255)
*/
#define ZmfBrightness "Brightness"
/**
* @brief (bool)1
*/
#define ZmfBacklot "Backlot"
/**
* @brief (string)camera <id>|render <id>|video: <reason>
*/
#define ZmfVideoError "VideoError"
/**
* @brief (string) "[ErrorNumber][DomainCode]."DomainCode参见 @ref ZMF_DOMAIN
*/
#define ZmfVideoErrorCode "ErrorCode"
/**
* @brief (int) @ref ZmfErrorNumber
*/
#define ZmfVideoErrorNumber "ErrorNumber"
/**
* @brief (int) @ref ZmfRenderMatchType
*/
#define ZmfMatching "Matching"
#endif
/**
* @brief
*/
typedef enum {
/**
* @brief ZMF模块请求开始采集视频\n
* @ref ZmfCapture, @ref ZmfWidth, @ref ZmfHeight, @ref ZmfFrameRate
*/
ZmfVideoCaptureRequestStart = 20,
/**
* @brief ZMF模块请求改变视频采集参数\n
* @ref ZmfCapture, @ref ZmfWidth, @ref ZmfHeight, @ref ZmfFrameRate
*/
ZmfVideoCaptureRequestChange = 30,
/**
* @brief ZMF模块请求停止采集视频\n
* @ref ZmfCapture
*/
ZmfVideoCaptureRequestStop = 21,
/**
* @brief @ref Zmf_VideoCaptureStart ZMF模块收到第一帧视频数据\n
* @ref ZmfCapture, @ref ZmfFace, @ref ZmfWidth, @ref ZmfHeight, @ref ZmfAngle
* \n表示实际的视频采集参数
*/
ZmfVideoCaptureDidStart = 22,
/**
* @brief ZMF模块视频采集状态改变\n
* @ref ZmfExposure, @ref ZmfBrightness, @ref ZmfBacklot
*/
ZmfVideoCaptureStatus = 33,
/**
* @brief ZMF模块请求开始渲染视频\n
* @ref ZmfRender, @ref ZmfWidth, @ref ZmfHeight
*/
ZmfVideoRenderRequestAdd = 25,
/**
* @brief @ref Zmf_VideoRenderAdd ZMF模块收到第一帧渲染数据\n
*/
ZmfVideoRenderDidReceive = 26,
/**
* @brief @ref Zmf_VideoRenderStart @ref Zmf_VideoRenderAdd ZMF模块渲染第一帧数据\n
*/
ZmfVideoRenderDidStart = 27,
/**
* @brief \n
* @ref ZmfRender, @ref ZmfWindow, @ref ZmfWidth, @ref ZmfHeight, @ref ZmfAngle
*/
ZmfVideoRenderDidResize = 28,
/**
* @brief ZMF模块请求停止渲染视频\n
* @ref ZmfRender, @ref ZmfWindow
*/
ZmfVideoRenderRequestRemove = 29,
/** @brief 通知事件:ZMF视频模块运行发生错误\n
* @ref ZmfVideoError, @ref ZmfVideoErrorNumber, @ref ZmfVideoErrorCode
*/
ZmfVideoErrorOccurred = 31,
/**
* @brief ZMF模块渲染数据已经匹配\n
* @ref ZmfRender, @ref ZmfWindow, @ref ZmfMatching
*/
ZmfVideoRenderDidMatch = 32,
/**
* @brief ZMF模块完成截图\n
* @ref ZmfFile, @ref ZmfWidth, @ref ZmfHeight
*/
ZmfVideoSnapshotCompleted = 34,
/**
* @brief ZMF美颜模块初始化失败\n
*/
ZmfBeautyInitError = 35,
} ZmfVideoEventType;
/**
* @}
*/
/**
* @defgroup ZmfVideoInterface
* @brief ZMF模块实现视频采集
* @{
*/
#endif /* __OBJC__ */
#ifdef __cplusplus
extern "C" {
#endif
/// @cond
/** deprecated, use Zmf_CameraGetCount */
#define Zmf_VideoCaptureGetCount Zmf_CameraGetCount
/** deprecated, use Zmf_CameraGetName */
#define Zmf_VideoCaptureGetName Zmf_CameraGetName
/// @endcond
/**
* @brief ZMF视频模块
* @details
* @param applicationContext Windows平台ZmfEventListenCallback类型的回调函数\n
* Linux平台 @ref ZmfEventListenCallback NULL\n
* Android平台Context\n
* iOS/MacOS平台\n
* @return intZMF视频模块初始化的同步返回结果\n
* 0: ZMF视频模块初始化线\n
* -ZMF_ERROR_EXCLUDE_VIDEO_DEVICE: iOS/MAC平台设置为不使用视频设备状态\n
* -ZMF_ERROR_VDM_NOTINIT: iOS/MAC平台视频采集初始化失败\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: iOS/MAC平台分配渲染内存失败\n
* @note 0 @ref ZmfEventListenCallback
* @ref ZmfVideoErrorOccurred \n
* ZMF_ERROR_WINVDM_CREATE_DEVENUM: Windows平台\n
* @see Zmf_VideoTerminate
*/
int Zmf_VideoInitialize(void *applicationContext);
/**
* @brief ZMF视频模块
* @details
* @return intZMF视频模块销毁的同步返回结果
* 0: ZMF视频模块销毁线
* @note Linux和windows0
* @see Zmf_VideoInitialize
*/
int Zmf_VideoTerminate (void);
/**
* @brief
* @return int\n
* =0: zmf没有获取到可用的摄像头\n
* >0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_WINVDM_DEVENUM_NULL: Windows平台\n
* -ZMF_ERROR_WINVDM_CREATE_CLASSENUM: Windows平台class枚举对象出错\n
* -ZMF_ERROR_WC_TO_MB: (WideChar)(MultiByte)\n
* -ZMF_ERROR_WINVDM_GET_CAPTUREFILTER: Windows平台\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_CameraGetName, Zmf_DesktopGetCount, Zmf_WindowGetCount
*/
int Zmf_CameraGetCount (void);
/**
* @brief
* @return int\n
* =0: zmf没有获取到可用的桌面\n
* >0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_DesktopGetName, Zmf_CameraGetCount, Zmf_WindowGetCount
*/
int Zmf_DesktopGetCount(void);
/**
* @brief iOS指屏幕共享()
* @return int\n
* =0: zmf没有获取到可用的窗口\n
* >0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_WindowGetName, Zmf_CameraGetCount, Zmf_DesktopGetCount
*/
int Zmf_WindowGetCount(void);
/**
* @brief ID
* @param iIndex [0count-1]
* @param acId ID字符串UTF-8
* @param acName UTF-8
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: iOS/MAC平台指定的视频采集未找到\n
* -ZMF_ERROR_VDM_INVALID_INDEX: iOS/MAC平台无效的视频设备索引\n
* -ZMF_ERROR_WINVDM_DEVENUM_NULL: Windows平台\n
* -ZMF_ERROR_WINVDM_CREATE_CLASSENUM: Windows平台class枚举对象出错\n
* -ZMF_ERROR_WC_TO_MB: (WideChar)(MultiByte)\n
* -ZMF_ERROR_WINVDM_GET_CAPTUREFILTER: Windows平台\n
* @pre @ref Zmf_CameraGetCount
* @see Zmf_DesktopGetName, Zmf_WindowGetName
*/
int Zmf_CameraGetName (int iIndex, char acId[512], char acName[512]);
/**
* @brief ID
* @param iIndex [0count-1]
* @param acId ID字符串UTF-8
* @param acName UTF-8
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_INVALID_INDEX: /\n
* @pre @ref Zmf_WindowGetCount
* @see Zmf_CameraGetName, Zmf_WindowGetName
*/
int Zmf_DesktopGetName(int iIndex, char acId[512], char acName[512]);
/**
* @brief ID
* @param iIndex [0count-1]
* @param acId ID字符串UTF-8
* @param acName UTF-8
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_INVALID_INDEX: /\n
* @pre @ref Zmf_CameraGetCount
* @see Zmf_CameraGetName, Zmf_DesktopGetName
*/
int Zmf_WindowGetName(int iIndex, char acId[512], char acName[512]);
/**
* @brief
* @param pcId IDLinux平台NULL
* @param piFace @ref ZmfVideoFaceType
* @param piAngle @ref ZmfRotationAngle
* @return int\n
* 0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: ID\n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: zmf视频采集启动接口时//\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureFace, Zmf_VideoCaptureRotate
*/
int Zmf_VideoCaptureGetOrient (const char *pcId, int *piFace, int *piAngle);
/**
* @brief
* @details
* @param pcId ID
* @param iWidth ()
* @param iHeight ()
* @param iFrameRate ()[1,~]
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_WC_TO_MB: (WideChar)(MultiByte)\n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: Id的设备未找到\n
* -ZMF_ERROR_VDM_CAPTURE_STARTED: Id的设备已经开始视频采集\n
* -ZMF_ERROR_LINUXVDM_IOCTL_SETFMT: Linux平台IOCTL设置视频采集设备的采集格式失败\n
* -ZMF_ERROR_LINUXVDM_IOCTL_GETPARMS: Linux平台IOCTL获取视频采集设备的参数失败\n
* -ZMF_ERROR_LINUXVDM_IOCTL_SETPARM: Linux平台IOCTL设置视频采集设备的参数失败\n
* -ZMF_ERROR_LINUXVDM_IOCTL_OPEN_STREAM: Linux平台IOCTL打开视频采集设备失败\n
* -ZMF_ERROR_LINUXVDM_ALLOC_BUFFER: Linux平台\n
* -ZMF_ERROR_IOS_SCREENSHARE_NOT_AVAILABLE: iOS平台 \n
* -ZMF_ERROR_WINVDM_DEVENUM_NULL: Windows平台\n
* -ZMF_ERROR_WINVDM_CREATE_CLASSENUM: Windows平台class枚举对象出错\n
* -ZMF_ERROR_WINVDM_GET_CAPTUREFILTER: Windows平台\n
* -ZMF_ERROR_WINVDM_CREATE_GRAPHBUILDER: Windows平台zmf视频模块初始化时graphBuilder出错\n
* -ZMF_ERROR_WINVDM_CREATE_MEDIACONTROL: Windows平台zmf视频模块初始化时\n
* -ZMF_ERROR_WINVDM_CREATE_SINKFILTER: Windows平台zmf视频模块初始化时sinkfilter出错\n
* -ZMF_ERROR_WINVDM_ADD_SINKFILTER: Windows平台zmf视频模块初始化时sinkfilter添加到graphBuilder时出错\n
* -ZMF_ERROR_WINVDM_ADD_CAPTUREFILTER: Windows平台capturefilter添加到graphBuilder时出错\n
* -ZMF_ERROR_WINVDM_GET_OUTPUTPIN: Windows平台dvfilter的输出管脚出错\n
* -ZMF_ERROR_WINVDM_RUN_MEDIACONTROL: Windows平台\n
* -ZMF_ERROR_WINVDM_GET_STREAMCONFIG: Windows平台\n
* -ZMF_ERROR_WINVDM_GET_CAPABILITYNUM: Windows平台\n
* -ZMF_ERROR_WINVDM_GET_STREAMCAPS: Windows平台\n
* -ZMF_ERROR_WINVDM_PBFORMAT_NULL: Windows平台pbformat成员为空\n
* -ZMF_ERROR_WINVDM_PMT_NULL: Windows平台\n
* -ZMF_ERROR_WINVDM_SET_STREAMFORMAT: Windows平台使\n
* -ZMF_ERROR_WINVDM_CONNECT_PIN: Windows平台2\n
* -ZMF_ERROR_WINVDM_CREATE_DVFILTER: Windows平台dvfilter出错\n
* -ZMF_ERROR_WINVDM_ADD_DVFILTER: Windows平台dvfilter添加到graphBuilder时出错\n
* -ZMF_ERROR_WINVDM_GET_INPUTPIN: Windows平台dvfilter的输入管脚出错\n
* @note 线线 @ref ZmfEventListenCallback
* @ref ZmfVideoErrorOccurred \n
* ZMF_ERROR_OUT_OF_MEMORY: \n
* ZMF_ERROR_YUV_LIB_ERROR: I420格式时失败\n
* ZMF_ERROR_YUV_NOT_SUPPORTED: 使yuv处理的相关工具函数\n
* ZMF_ERROR_YUV_FMT_ANY: yuv处理相关的函数时format不支持\n
* ZMF_ERROR_BEAUTY_LIBPNG_UNSUPPORTED: libpng库不支持\n
* ZMF_ERROR_LINUXVDM_IOCTL_DEQUEUE_BUFFER: Linux平台启动视频采集时线IOCTL接口将缓存移出队列时出错\n
* ZMF_ERROR_LINUXVDM_IOCTL_ENQUEUE_BUFFER: Linux平台启动视频采集时线IOCTL接口将缓存添加到队列时出错\n
* ZMF_ERROR_WINVDM_CROPSIZE_OVER_BUFLEN: Windows平台\n
* ZMF_ERROR_WINVDM_HORIZONTAL_PADDING: Windows平台paddingzmf当前不支持水平方向padding\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_DesktopCaptureStart, Zmf_VideoCaptureStop, Zmf_VideoCaptureStopAll
*/
int Zmf_VideoCaptureStart (const char *pcId, int iWidth, int iHeight, int iFrameRate);
/**
* @brief
* @details
* windows平台支持
* @param captureId ID
* @param width
* @param height
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureSetPaddingRatio
*/
int Zmf_VideoCaptureSetCroppedResolution (const char *captureId, const int width, const int height);
/**
* @brief
* @details 使
* windows平台支持
* @param captureId ID
* @param paddingRatio
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @warning @ref Zmf_VideoCaptureSetCroppedResolution 使
*/
int Zmf_VideoCaptureSetPaddingRatio (const char *captureId, float paddingRatio);
/**
* @brief
* @param pcId ID
* @param iFrameRate [1,~]
* @param top (Y轴)>0
* @param bottom (Y轴)(botoom-top)>8
* @param left (X轴)>0
* @param right (X轴)(right-left)>16
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: Id不对应任意一个屏幕共享设备\n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: Id的设备未找到\n
* -ZMF_ERROR_VDM_DESKTOP_SET_REGION: \n
* -ZMF_ERROR_VDM_CAPTURE_STARTED: Id的设备已经开始视频采集\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureStart
*/
int Zmf_DesktopCaptureStart (const char *pcId, int iFrameRate, int top, int bottom, int left, int right);
/**
* @brief 8/16
* @details 使8/16padding模式8/16
* @param pcId ID
* @param bPadding 0: padding功能; : padding功能
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: Id不对应任意一个屏幕共享设备\n
* -ZMF_ERROR_VDM_CAPTURE_NOT_STARTED: zmf视频接口时\n
* @pre @ref Zmf_VideoCaptureStart
* @warning padding模式需要同时打开RTP扩展EN_MVD_RTP_EXT_PADDING
*/
int Zmf_DesktopCapturePadding (const char *pcId, const int bPadding);
/**
* @brief
* @details
* @param pcId ID
* @param pHWND
* @param iCount
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: Id不对应任意一个屏幕共享设备\n
* -ZMF_ERROR_VDM_CAPTURE_NOT_STARTED: zmf视频接口时\n
* @pre @ref Zmf_VideoCaptureStart
* @warning v6.4.4使
*/
int Zmf_DesktopCaptureExcludeWindow (const char *pcId, void* pHWND, int iCount);
/**
* @brief
* @details
* @param pcId ID
* @param enAngle @ref ZmfRotationAngle
* @return int\n
* 0: \n
* -ZMF_ERROR_API_NOT_SUPPORTED:API在当前平台不支持\n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @warning
* @see Zmf_VideoRenderRotate, Zmf_VideoScreenOrientation, Zmf_VideoCaptureListenRotation, Zmf_VideoRenderListenRotation
*/
int Zmf_VideoCaptureRotate (const char *pcId, ZmfRotationAngle enAngle);
/**
* @brief
* @details windows平台支持
* @param pcId ID
* @param iFace @ref ZmfVideoFaceType
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
*/
int Zmf_VideoCaptureFace (const char *pcId, int iFace);
/// @cond
/** deprecated, use Zmf_VideoCaptureListenRotation/Zmf_VideoRenderListenRotation*/
#define Zmf_VideoCaptureEnableRotation(bEnable, fixedDeviceAngle) do{\
Zmf_VideoCaptureListenRotation(bEnable != 0 ? ZmfRotationMaskAll : 0, fixedDeviceAngle);\
Zmf_VideoRenderListenRotation(bEnable != 0 ? ZmfRotationMaskAll : 0, fixedDeviceAngle); \
}while(0)
/// @endcond
/**
* @brief
* @param rotationMask @ref ZmfRotationMask
* @param fixedDeviceAngle (rotationMask值为0){0,90,180,270}
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* @see Zmf_VideoRenderListenRotation
*/
int Zmf_VideoCaptureListenRotation(int rotationMask, int fixedDeviceAngle);
/**
* @brief
* @param rotationMask @ref ZmfRotationMask
* @param fixedDeviceAngle (rotationMask值为0){0,90,180,270}
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureListenRotation
*/
int Zmf_VideoRenderListenRotation(int rotationMask, int fixedDeviceAngle);
/// @cond
/** deprecated, use Zmf_ScreenSetOrientation */
#define Zmf_VideoCaptureSetScreenOrientation(screenOrient) \
Zmf_VideoScreenOrientation(screenOrient)
/// @endcond
/**
* @brief ()
* @param screenOrient
* @return int\n
* 0: \n
* @see Zmf_VideoCaptureRotate, Zmf_VideoCaptureListenRotation, Zmf_VideoRenderListenRotation
*/
int Zmf_VideoScreenOrientation(int screenOrient);
/**
* @brief /
* @param captureId ID
* @param enEffectType , @ref ZmfBeautyEffectType
* @param strJson JSON参数
* @param width
* @param height
* @param url
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_BEAUTY_THREAD_STOP:线\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
*/
int Zmf_BeautyEffect(const char* captureId, ZmfBeautyEffectType enEffectType, const char* strJson, int width, int height, const char* url);
/**
* @brief
* @param enEffectType @ref ZmfCaptureEffectType
* @param strJson JSON参数 @ref ZmfCaptureEffectType
* @return int\n
* 0: \n
* -ZMF_ERROR_OUT_OF_MEMORY: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_PARSE_JSON: json参数出错\n
* -ZMF_ERROR_API_NOT_SUPPORTED:\n
* -ZMF_ERROR_VIDEOEFFECT_ETR_PARAMVALUE: @ref ZmfCaptureErtToRect json中的参数超出取值范围\n
* -ZMF_ERROR_VIDEOEFFECT_VISION_LIB: @ref ZmfCaptureVirtualBacklot json中设置的lib参数无效\n
* -ZMF_ERROR_VIDEOEFFECT_VISION_LOAD_LIB: @ref ZmfCaptureVirtualBacklot \n
* -ZMF_ERROR_VIDEOEFFECT_VISION_LOAD_FUNCTION: @ref ZmfCaptureVirtualBacklot \n
* -ZMF_ERROR_VIDEOEFFECT_VISION_MODEL: @ref ZmfCaptureVirtualBacklot json中缺少model参数model创建会话失败\n
* -ZMF_ERROR_VIDEOEFFECT_VISION_WORKDIR: @ref ZmfCaptureVirtualBacklot json中缺少workDir参数\n
* -ZMF_ERROR_VIDEOEFFECT_VISION_IMAGE: @ref ZmfCaptureVirtualBacklot json中缺少image参数image路径载入图片失败\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoRenderEffect, Zmf_VideoRenderMatch
*/
int Zmf_VideoCaptureEffect (ZmfCaptureEffectType enEffectType, const char* strJson);
/**
* @brief
* @param pcId ID
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_WINVDM_STOP_CAPTURE: Windows平台停止视频采集时出错\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureStopAll, Zmf_VideoCaptureStart
*/
int Zmf_VideoCaptureStop (const char *pcId);
/**
* @brief
* @details
* @return int\n
* 0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_WINVDM_STOP_CAPTURE: Windows平台停止视频采集时出错\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureStop, Zmf_VideoCaptureStart
*/
int Zmf_VideoCaptureStopAll (void);
/**
* @brief
* @details
* @param captureId ID
* @param pWnd
* @param pointX X[0, 1]
* @param pointY Y[0, 1]
* @return int, \n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: \n
* -ZMF_ERROR_VDM_CAPTURE_NOT_STARTED: zmf视频接口时\n
* -ZMF_ERROR_IOS_FOCUSMODE_UNSUPPORTED: iOS平台\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureHandleFocusWithLensPosition
*/
int Zmf_VideoCaptureHandleFocusMetering(const char* captureId,void *pWnd,float pointX,float pointY);
/**
* @brief
* @details
* @param captureId ID
* @param lensPosition ()(0, 1]
* @return int, \n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: ID\n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: \n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureHandleFocusMetering
*/
int Zmf_VideoCaptureHandleFocusWithLensPosition(const char* captureId,float lensPosition);
/**
* @brief ios
* @param captureId ID
* @return int\n
* 1: \n
* 0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: ID\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureSetFlash
*/
int Zmf_VideoCaptureHasFlash(const char* captureId);
/**
* @brief ios
* @param captureId ID
* @param enable 0:, :
* @return int\n
* 0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: ID\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: \n
* @pre Zmf_VideoCaptureHasFlash检查摄像头有闪光灯
* @see Zmf_VideoCaptureHasFlash
*/
int Zmf_VideoCaptureSetFlash(const char* captureId, int enable);
/**
* @brief EV, ios
* @param captureId ID
* @param min
* @param max
* @return int\n
* 0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: ID\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: \n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureSetExposureCompensation
*/
int Zmf_VideoCaptureGetMinMaxExposureCompensation(const char* captureId, int* min, int* max);
/**
* @brief ios
* @param captureId ID
* @param ev minmax之间
* @return int\n
* 0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: ID\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* @pre Zmf_VideoCaptureGetMinMaxExposureCompensation
* @see Zmf_VideoCaptureGetMinMaxExposureCompensation
*/
int Zmf_VideoCaptureSetExposureCompensation(const char* captureId, float ev);
/**
* @brief , ios
* @param captureId ID
* @param min 1.0
* @param max
* @param upscaleThreshold
*
* @return int\n
* 0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: ID\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoCaptureSetZoom
*/
int Zmf_VideoCaptureGetMinMaxZoom(const char* captureId, float* min, float* max, float* upscaleThreshold);
/**
* @brief ios
* @param captureId ID
* @param zoom minmax之间; upscaleThreshold
* @return int\n
* 0: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_CAPTUREID_INVALID: ID\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* @pre Zmf_VideoCaptureGetMinMaxZoom
* @see Zmf_VideoCaptureGetMinMaxZoom
*/
int Zmf_VideoCaptureSetZoom(const char* captureId, float zoom);
/**
* @brief
* @param pWnd
* @param enRenderType @ref ZmfRenderType
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* -ZMF_ERROR_LINUXVDM_OPENDISPLAY: linux平台调用XOpenDisplay函数失败\n
* -ZMF_ERROR_LINUXVDM_CREATEGC: linux平台调用XCreateGC函数失败\n
* -ZMF_ERROR_MAC_CGVIEW_ALREADYSTART: MacOS平台cg渲染已开启\n
* -ZMF_ERROR_MAC_GLVIEW_ALREADYSTART: MacOS平台gl渲染已开启\n
* -ZMF_ERROR_IOS_RENDERSTART_FAILED: iOS平台渲染开启失败\n
* @note 线线 @ref ZmfEventListenCallback
* @ref ZmfVideoErrorOccurred \n
* ZMF_ERROR_WINVDM_D3D_DEVICE_EXIST: Windows平台D3D渲染初始化时D3D设备已经存在\n
* ZMF_ERROR_WINVDM_D3D_NO_WINDOW: Windows平台D3D渲染初始化时\n
* ZMF_ERROR_WINVDM_D3D_CREATE: Windows平台D3D渲染时D3D对象失败\n
* ZMF_ERROR_WINVDM_D3D_CREATE_DEVICE: Windows平台D3D渲染时D3D设备失败\n
* ZMF_ERROR_WINVDM_D3D_CREATE_RENDER_TARGET: Windows平台D3D渲染时D3D渲染对象失败\n
* ZMF_ERROR_WINVDM_D3D_GET_RENDER_TARGET: Windows平台D3D渲染时D3D渲染对象失败\n
* ZMF_ERROR_WINVDM_D3D_WINDOW_UNVISIBLE: Windows平台D3D渲染初始化时\n
* ZMF_ERROR_WINVDM_D3D_GET_WINDOW_RECT: Windows平台D3D渲染初始化时\n
* ZMF_ERROR_WINVDM_D3D_DEVICE_RESET: Windows平台D3D渲染初始化时\n
* ZMF_ERROR_WINVDM_D3D_CREATE_VERTEXBUFFER: Windows平台D3D渲染线程中(vertexBuffer)\n
* ZMF_ERROR_WINVDM_D3D_SET_RENDER_TARGET: Windows平台D3D渲染线程中\n
* ZMF_ERROR_WINVDM_D3D_CLEAR: Windows平台D3D渲染线程中\n
* ZMF_ERROR_WINVDM_D3D_BEGIN_SCENE: Windows平台D3D渲染线程中D3D的BeginScene接口失败\n
* ZMF_ERROR_WINVDM_D3D_VERTEXBUFFER_LOCK: Windows平台D3D渲染线程中\n
* ZMF_ERROR_WINVDM_D3D_END_SCENE: Windows平台D3D渲染线程中D3D的EndScene接口失败\n
* ZMF_ERROR_WINVDM_D3D_PRESENT: Windows平台D3D渲染线程中D3D的present接口呈现画面失败\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoRenderStop
*/
int Zmf_VideoRenderStart (void *pWnd, ZmfRenderType enRenderType);
/**
* @brief
* @param pWnd
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* -ZMF_ERROR_MAC_CGVIEW_UNSTARTED: MAC平台cg渲染未开启\n
* -ZMF_ERROR_MAC_GLVIEW_UNSTARTED: MAC平台gl渲染未开启\n
* -ZMF_ERROR_IOS_RENDER_UNSTARTED: iOS平台渲染未开启\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* @see Zmf_VideoRenderStart
*/
int Zmf_VideoRenderStop (void *pWnd);
/**
* @brief
* @param pWnd
* @param renderId ID @ref ZmfVideoRenderRequestAdd
* @param iOrder Z序每个渲染的Z序必须不同Z序大的渲染会覆盖Z序小的
* @param enMode @ref ZmfRenderMode
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_LOCK_FAILED: \n
* -ZMF_ERROR_UNLOCK_FAILED: \n
* -ZMF_ERROR_OUT_OF_MEMORY: iOS平台metal渲染分配内存失败\n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderStart
* @warning Z序唯一Z序的其它渲染源可能无法被渲染
* @see Zmf_VideoRenderReplace, Zmf_VideoRenderRemove, Zmf_VideoRenderRemoveAll
*/
int Zmf_VideoRenderAdd (void *pWnd, const char* renderId, int iOrder, ZmfRenderMode enMode);
/**
* @brief ID
* @details @ref Zmf_VideoRenderRemove @ref Zmf_VideoRenderAdd
* @param pWnd
* @param oldRenderId ID @ref Zmf_VideoRenderAdd
* @param newRenderId ID
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_VDM_LAYER_NOT_FOUND: pWnd对应的render中oldRenderId对应的layer\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderAdd
* @see Zmf_VideoRenderRemove, Zmf_VideoRenderRemoveAll
*/
int Zmf_VideoRenderReplace(void *pWnd, const char* oldRenderId, const char *newRenderId);
/**
* @brief
* @param pcId ID或渲染源ID
* @param iWidth -1
* @param iHeight -1
* @param jpgFileName
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_LOCK_FAILED: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_DEVICE_NOT_FOUND: Id的设备未找到\n
* -ZMF_ERROR_SNAPSHOT_STARTED: . \n
* @remarks
* @note @ref ZmfEventListenCallback @ref ZmfVideoErrorOccurred
* \n
* -ZMF_ERROR_OUT_OF_MEMORY: \n
* -ZMF_ERROR_YUV_LIB_ERROR: I420格式时失败\n
* @pre ZMF视频模块初始化成功 @ref Zmf_VideoInitialize
* \n如果截图渲染源画面 @ref Zmf_VideoRenderStart
*/
int Zmf_VideoSnapshot(const char *pcId, int iWidth, int iHeight, const char *jpgFileName);
/// @cond
/** deprecated, use Zmf_VideoSnapshot */
#define Zmf_VideoRenderSnapshot(renderId, iWidth, iHeight,jpgFileName) \
Zmf_VideoSnapshot(renderId, iWidth, iHeight, jpgFileName)
/// @endcond
/**
* @brief
* @param pWnd
* @param renderId ID @ref Zmf_VideoRenderAdd
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_LAYER_NOT_FOUND: pWnd对应的render中oldRenderId对应的layer\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderAdd
* @see Zmf_VideoRenderReplace, Zmf_VideoRenderRemoveAll
*/
int Zmf_VideoRenderRemove (void *pWnd, const char* renderId);
/**
* @brief
* @param pWnd
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderAdd
* @see Zmf_VideoRenderReplace, Zmf_VideoRenderRemove
*/
int Zmf_VideoRenderRemoveAll(void *pWnd);
/**
* @brief
* @details X轴正半轴Y轴正半轴范围[0, 1]
* @param pWnd
* @param renderId ID
* @param fLeft X轴坐标0
* @param fTop Y轴坐标0
* @param fRight X轴坐标1
* @param fBottom Y轴坐标1
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_VDM_LAYER_NOT_FOUND: pWnd对应的render中oldRenderId对应的layer\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderAdd
*/
int Zmf_VideoRenderMove (void *pWnd, const char* renderId, float fLeft, float fTop,
float fRight, float fBottom);
/**
* @brief
* @param pWnd
* @param renderId ID
* @param enType @ref ZmfMirrorType
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_VDM_LAYER_NOT_FOUND: pWnd对应的render中oldRenderId对应的layer\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderAdd
*/
int Zmf_VideoRenderMirror (void *pWnd, const char* renderId, ZmfMirrorType enType);
/**
* @brief Linux平台不支持
* @param pWnd
* @param renderId ID
* @param bEnable 0: ; :
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_VDM_LAYER_NOT_FOUND: pWnd对应的render中oldRenderId对应的layer\n
* -ZMF_ERROR_API_NOT_SUPPORTED: Linux平台不支持\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderAdd
*/
int Zmf_VideoRenderFreeze (void *pWnd, const char* renderId, int bEnable);
/**
* @brief
* @param pWnd
* @param enAngle @ref ZmfRotationAngle
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderStart
* @see Zmf_VideoCaptureRotate
*/
int Zmf_VideoRenderRotate (void *pWnd, ZmfRotationAngle enAngle);
/**
* @brief
* @param pWnd
* @param renderId ID
* @param enEffectType @ref ZmfRenderEffectType
* @param strJson JSON参数
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_PARSE_JSON: strJson参数作为json字符串解析\n
* -ZMF_ERROR_VIDEOEFFECT_ETR_PARAMVALUE: @ref ZmfRenderEffectErtToRect json中的参数超出取值范围\n
* -ZMF_ERROR_API_NOT_SUPPORTED: Linux平台不支持 @ref ZmfRenderEffectErtToRect \n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* @pre @ref Zmf_VideoRenderAdd
* \n渲染方式需设置为 @ref ZmfRenderViewFx
* @warning Windows平台只支持 @ref ZmfRenderEffectMagnifier
* @see Zmf_VideoCaptureEffect, Zmf_VideoRenderMatch
*/
int Zmf_VideoRenderEffect(void *pWnd, const char* renderId, ZmfRenderEffectType enEffectType, const char* strJson);
/**
* @brief
* @param pWnd
* @param renderId ID
* @param enMatchType @ref ZmfRenderMatchType
* @param strJson JSON参数
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_API_NOT_SUPPORTED: Linux平台不支持\n
* -ZMF_ERROR_RENDER_ALLOC_FAILED: \n
* -ZMF_ERROR_VDM_LAYER_NOT_FOUND: layer\n
* -ZMF_ERROR_PARSE_JSON: strJson参数作为json字符串解析\n
* @pre @ref Zmf_VideoRenderAdd
* \n渲染方式需设置为 @ref ZmfRenderViewFx
* @see Zmf_VideoCaptureEffect, Zmf_VideoRenderEffect
*/
int Zmf_VideoRenderMatch(void *pWnd, const char* renderId, ZmfRenderMatchType enMatchType, const char* strJson);
/**
* @brief
* @param pWnd
* @param renderId ID
* @param location X轴中点Y轴中点X轴偏移Y轴偏移
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* -ZMF_ERROR_VDM_NOTINIT: zmf视频接口时\n
* -ZMF_ERROR_VDM_GET_RENDER: render对象\n
* -ZMF_ERROR_VDM_LAYER_NOT_FOUND: layer\n
* @pre @ref Zmf_VideoRenderAdd
* \n渲染方式需设置为 @ref ZmfRenderViewFx
* @warning location数组的长度为5
*/
int Zmf_VideoRenderGetLocation(void *pWnd, const char* renderId, float* location);
/**
* @brief ZMF视频AR模块
* @param NULL
* @return intAR模块初始化是否成功\n
* 0: \n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* @note 0 @ref ZmfEventListenCallback @ref ZmfVideoErrorOccurred
*
* @see Zmf_ARTerm
*/
int Zmf_ARInit();
/**
* @brief ZMF视频AR模块
* @param NULL
* @return intAR模块结束是否成功\n
* 0: \n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* @see Zmf_ARInit
*/
int Zmf_ARTerm();
/**
* @brief AR采集
* @param pcId ID @ref ZmfARCaptureFront or @ref ZmfARCaptureBack
* @return int\n
* 0: \n
* -ZMF_ERROR_IOS_AR_UNINITED: ar模块未初始化\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* @pre ZMF视频AR模块初始化成功 @ref Zmf_ARInit
* @warning @ref ZmfARCaptureFront iOS设备
* @see Zmf_ARCaptureStop
*/
int Zmf_ARCaptureStart(const char *pcId);
/**
* @brief AR采集
* @return int\n
* 0: \n
* -ZMF_ERROR_IOS_AR_UNINITED: ar模块未初始化\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* @pre ZMF视频AR模块初始化成功 @ref Zmf_ARInit
* @see Zmf_ARCaptureStart
*/
int Zmf_ARCaptureStop();
/**
* @brief
* @details AR采集图像的背景
* @param pcImageFile JPG格式
* @param width 1280x720
* @param height 1280x720
* @return int\n
* 0: \n
* -ZMF_ERROR_IOS_AR_UNINITED: ar模块未初始化\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* -ZMF_ERROR_IOS_AR_LIBYUV_UNSUPPORTED: iOS平台ARlibyuv库不可用\n
* -ZMF_ERROR_IOS_AR_OPEN_IMAGE_FILE_FAILED: iOS平台AR\n
* -ZMF_ERROR_IOS_AR_FORMAT_CONVERT_FAILED: iOS平台AR\n
* @pre ZMF视频AR模块初始化成功 @ref Zmf_ARInit
* @see Zmf_ARSetBackgroundImage2
*/
int Zmf_ARSetBackgroundImage(const char *pcImageFile, int width, int height);
/**
* @brief
* @details AR采集图像的背景
* @param image iOS指UIImage
* @return int\n
* 0: \n
* -ZMF_ERROR_IOS_AR_UNINITED: ar模块未初始化\n
* -ZMF_ERROR_API_NOT_SUPPORTED: \n
* -ZMF_ERROR_IOS_AR_LIBYUV_UNSUPPORTED: iOS平台ARlibyuv库不可用\n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_IOS_AR_FORMAT_CONVERT_FAILED: iOS平台AR\n
* @pre ZMF视频AR模块初始化成功 @ref Zmf_ARInit
* @see Zmf_ARSetBackgroundImage
*/
int Zmf_ARSetBackgroundImage2(void* image);
#if defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR)
/**
* @brief
* @details ios12.0使appGroupId以及The Bundle ID
* @param screenId
* @param framerate 0-3010
* @param appGroupId app和屏幕共享插件共同的AppGroup ID
* @param preferredExtension Bundle Identifier
* @return int, \n
* 0: \n
* -ZMF_ERROR_IOS_AR_OSVERSION_UNSUPPORTED: iOS平台AR\n
* -ZMF_ERROR_IOS_APPEXSCREENSHARE_SETUP_SOCKET_FAILED: iOS平台应用外屏幕共享socket失败\n
* @retval
* @pre
* @see Zmf_ScreenAppExStop
*/
int Zmf_ScreenAppExStart(const char* screenId,int framerate,const char* appGroupId,const char* preferredExtension);
/**
* @brief
* @return int
* @retval 0
* @see Zmf_ScreenAppExStart
*/
int Zmf_ScreenAppExStop();
#endif
#ifdef __cplusplus
}
#endif /* __cplusplus */
/**
* @}
*/
#ifdef __GNUC__
#pragma GCC visibility pop
#endif
#endif /* __ZMF_VIDEO_H__ */