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.

1086 lines
36 KiB

#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
#if __GNUC__
#pragma GCC visibility push(default)
#endif
/**
* @file zmf_video.h
* @brief ZMF video interfaces
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Initialize Video module of ZMF(Zero Media Framework).
* @param applicationContext For Windows, it can be the handle of the window,
* The notification event will be sent to that window.
* Or it can be callback function of type ZmfEventListenCallback.
* For Android, it must be the Context.
* For iOS, it should be NULL and is ignored.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoInitialize(void *applicationContext);
/**
* @brief Destroy Video module of ZMF module. All resources will be released.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoTerminate (void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
/**
* @brief Face direction of capture device.
*/
typedef enum {
ZmfVideoFaceUnknown = 0, /**< @brief Facing unknown. */
ZmfVideoFaceFront = 1, /**< @brief Facing front. */
ZmfVideoFaceBack = 2, /**< @brief Facing back. */
} ZmfVideoFaceType;
/**
* @brief Coordinate rotation angle.
*/
typedef enum {
ZmfRotationFixedScreen = -2, /**< @brief The screen keep a fixed angle with the device. it's DEFAULT */
ZmfRotationAutoScreen = -1, /**< @brief screen will rotating by gravity sensor */
ZmfRotationAngle0 = 0, /**< @brief 0 degree. */
ZmfRotationAngle90 = 90, /**< @brief 90 degrees CCW. */
ZmfRotationAngle180 = 180, /**< @brief 180 degrees CCW. */
ZmfRotationAngle270 = 270, /**< @brief 270 degrees CCW. */
} ZmfRotationAngle;
/**
* @brief Mirror type.
*/
typedef enum {
ZmfMirrorNone = 0, /**< @brief None mirror */
ZmfMirrorHorizontal = 1, /**< @brief Horizontal mirror. */
ZmfMirrorVertical = 2, /**< @brief Vertical mirror. */
ZmfMirrorFlipFromLeft = 4, /**< @brief left to right animation only supported on ios. */
ZmfMirrorFlipFromTop = 8, /**< @brief top to down animation only supported on ios. */
ZmfMirrorAuto = 3, /**< @brief Auto selection */
} ZmfMirrorType;
/**
* @brief Built-in Render Effect type.
*/
typedef enum {
ZmfRenderEffectNone = 0, /**< @brief none effect. */
/** Blur effect,
* JSON params:
* "hoffset": number of width pixel offset, default is 2
* "voffset": number of height pixel offset, defualt is 2
* "iterate": number of repetitions, default is 3
* "pixels": number of the blur radius
* "sigma":
*/
ZmfRenderEffectBlur = 1,
ZmfRenderEffectGrey = 2, /**< @brief grey. */
ZmfRenderEffectMask = 3, /**< @brief mask. */
/** Magnifier effect,
* JSON params:
* "dx": translation width offset relative to magnifier center x
* "dy": translation height offset relative to magnifier center y
* "x": width coordinate of magnifier center, range from 0 to 1
* "y": height coordinate of magnifier center, range from 0 to 1
* "zoom": zoom parameter, default is 2
*"radius": number of radius, relative to min(width, height), default is 0.2
*/
ZmfRenderEffectMagnifier = 4,
ZmfRenderEffectOldTime = 5,
ZmfRenderEffectPhotoVerse = 6,
ZmfRenderEffectLomo = 7,
/** Blur effect,
* JSON params:
* "hoffset": number of width pixel offset, default is 2
* "voffset": number of height pixel offset, defualt is 2
* "iterate": number of repetitions, default is 3
* "pixels": number of the blur radius
* "sigma":
* "x": number of center
* "y": number of center
* "radius": number of radius, ratio of min(w,h), default is 0.2
* "exp": number of alpha exp, default is 1.0
*/
ZmfRenderEffectDepthOfField = 8,
/**
* Convert equirectangular to rectilinear
* option JSON param:
* "status": turn on/off this effect. This will also reset all parameters.
* 0: turn off effect;
* 1: turn on effect;
* "yaw": azimuth angle of gnomonic center, in degree, valid range [0,360], default 0
* "pitch": elevation angle of gnomonic center, in degree, valid range [-180,180], default 0
* "roll": roll angle around gnomonic axis, in degree, valid range [0,360], default 0
* "fov": horizontal field of view in degree, valid range (0,180), default 90.
* Warning: fov too close to 0 will greatly reduce image resolution
* fov too close to 180 will greatly distort image.
* Suggest range: 45-135.
* if not specified, it is calculated from width using fixed aspect ratio 2:1.
* "reset": reset parameters to default. valid value: any number.
*/
ZmfRenderEffectErtToRect = 9,
} ZmfRenderEffectType;
typedef enum {
ZmfRenderMatchNone = 0,
/**
* JSON param:
* "epsilon":
* "duration":
* "position":
* "fovy":
* "attitude":
*/
ZmfRenderMatchAttitude = 1,
ZmfRenderMatchLight = 2,
/**
* JSON param:
* "timestamp":
* "action":"ResetEffect"
*/
ZmfRenderMatchTimeStamp = 3,
} ZmfRenderMatchType;
typedef enum {
ZmfRenderView,
ZmfRenderViewFx,
ZmfRenderImmersive,
ZmfRenderImmersiveFx
} ZmfRenderType;
/**
* @brief Built-in Capture Effect.
*/
typedef int ZmfCaptureEffectType;
enum {
ZmfCaptureEffectNone = 0, /**< @brief none effect. */
/**
* option JSON param:
* "fps": the minimum FPS
* "exposure": the percent(0-100]
*/
ZmfCaptureSmartExposure = 1,
ZmfCaptureGammaCorrection = 1<<1,
ZmfCaptureContrastEnhance = 1<<2,
ZmfCaptureFaceEnhance = 1<<3,
/**
* option JSON param:
* "image": the backlot jpg file path
* "width": the width of image.
* "height": the height of image.
*/
ZmfCaptureVirtualBacklot = 1<<4,
/**
* Convert equirectangular to rectilinear
* option JSON param:
* "status": turn on/off this effect. This will also reset all parameters.
* 0: turn off effect;
* 1: turn on effect;
* "yaw": azimuth angle of gnomonic center, in degree, valid range [0,360], default 0
* "pitch": elevation angle of gnomonic center, in degree, valid range [-180,180], default 0
* "roll": roll angle around gnomonic axis, in degree, valid range [0,360], default 0
* "fov": horizontal field of view in degree, valid range (0,180), default 90.
* Warning: fov too close to 0 will greatly reduce image resolution
* fov too close to 180 will greatly distort image.
* Suggest range: 45-135.
* if not specified, it is calculated from width using fixed aspect ratio 2:1.
* "reset": reset parameters to default. valid value: any number.
*/
ZmfCaptureErtToRect = 1<<5,
/**
* @brief video capture will use h264 capture format
* if video device support h264 output.
* Otherwise, video capture will use default yuv or mjpg as capture format.
* Currently, h264 capture is supported when capture module is UVC (default is CamView)
* and camera support uvc 1.5 (such as Ricoh Theta S).
*/
ZmfCapturePreferH264 = 1<<6,
ZmfCaptureBrightnessNotification = 1<<7,
};
/**
* @brief Video source type.
*/
typedef enum {
ZmfVideoSourcePeer = 0, /**< @brief Image is from peer. */
ZmfVideoSourceCapture = 1, /**< @brief Image is from capture device. */
ZmfVideoSourceFile = 2, /**< @brief Image is from file. */
} ZmfVideoSourceType;
/**
* @brief Video render mode.
*/
typedef enum {
/**
* @brief Auto selection mode.
*
* When the aspect of image and render area is matched, it act as
* @ref ZmfRenderFullScreen. Otherwise, it act as @ref ZmfRenderFullContent.
* IOS platform will resize the window, other won't
*/
ZmfRenderAuto = 0,
/** like ZmfRenderAuto, but high accuracy, only ios supported */
ZmfRenderMatch = 4,
/**
* @brief Scale image to fill the entire render area, and remain the aspect
* ratio unchanged.
*/
ZmfRenderFullScreen = 1,
/**
* @brief Scale image to display all content in render area, and remain the
* aspect ratio unchanged.
*/
ZmfRenderFullContent = 2,
/**
* @brief Auto selection mode, like ZmfRenderAuto, but not resize the window
*
* When the aspect of image and render area is matched, it act as
* @ref ZmfRenderFullScreen. Otherwise, it act as @ref ZmfRenderFullContent.
*
*/
ZmfRenderFullAuto = 3,
} ZmfRenderMode;
#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 Video Device ID
* @{
*/
/** @brief Capture device ID string for rear camera. */
extern const char * ZmfVideoCaptureBack;
/** @brief Capture device ID string for front camera. */
extern const char * ZmfVideoCaptureFront;
/** @brief Capture device ID string for rear ar camera. */
extern const char * ZmfARCaptureBack;
/** @brief Capture device ID string for front ar camera. */
extern const char * ZmfARCaptureFront;
/**
* @}
*/
/**
* @defgroup ZmfVideoNotificationParameters Video Notification Parameters.
* @{
*/
/**
* @brief An NSString object containing a string that identifies
* ID of video capture device.
*/
extern NSString * const ZmfCapture;
/**
* @brief An NSString object containing a string that identifies
* file path
*/
extern NSString * const ZmfFile;
/**
* @brief An NSNumber object containing an integer that identifies
* the facing type of capture device.
* For a list of possible values, @ref ZmfVideoFaceType.
*/
extern NSString * const ZmfFace;
/**
* @brief An NSNumber object containing an integer that identifies
* the width in pixel.
*/
extern NSString * const ZmfWidth;
/**
* @brief An NSNumber object containing an integer that identifies
* the height in pixel.
*/
extern NSString * const ZmfHeight;
/**
* @brief An NSNumber object containing an integer that identifies
* the angle in degree.
*/
extern NSString * const ZmfAngle;
/**
* @brief An NSString object containing an integer that identifies
* the render source.
*/
extern NSString * const ZmfRender;
/**
* @brief An NSNumber object containing an integer that identifies
* the render source type.
* For a list of possible values, @ref ZmfVideoSourceType.
*/
extern NSString * const ZmfSourceType;
/**
* @brief An NSNumber object containing an integer that identifies
* the handle of render window.
*/
extern NSString * const ZmfWindow;
/**
* @brief An NSNumber object containing an integer that identifies
* the frame rate in fps.
*/
extern NSString * const ZmfFrameRate;
/**
* @brief A NSNumber containing a boolean that identifies
* the exposure state.
*/
extern NSString * const ZmfExposure;
/**
* @brief A NSNumber containing a integer that identifies
* the current video average brightness(0 ~ 255).
*/
extern NSString * const ZmfBrightness;
/**
* @brief A NSNumber containing a boolean that identifies
* the backlot state, 1 means detect the backlot, otherwise not.
*/
extern NSString * const ZmfBacklot;
/**
* @brief An NSString object containing a string that describes error.
* the format match 'camera <id>|render <id>|video: <reason>'.
*/
extern NSString * const ZmfVideoError;
/**
* @brief An NSNumber object containing an integer that identifies
* the matching.
*/
extern NSString * const ZmfMatching;
/**
* @}
*/
/**
* @defgroup ZmfVideoNotifications Video Notifications.
* @{
*/
/**
* @brief Post when the ZMF module request to start capture video data.
*
* The userInfo dictionary of this notification contains @ref ZmfCapture,
* @ref ZmfWidth, @ref ZmfHeight and @ref ZmfFrameRate, which provide detail
* information for the request.
*/
extern NSString * const ZmfVideoCaptureRequestStart;
/**
* @brief Post when the ZMF module request to change video capture parameters.
*
* The userInfo dictionary of this notification contains @ref ZmfCapture,
* @ref ZmfWidth, @ref ZmfHeight and @ref ZmfFrameRate, which provide detail
* information for the request.
*/
extern NSString * const ZmfVideoCaptureRequestChange;
/**
* @brief Post when the ZMF module request to stop capture.
*
* The userInfo dictionary of this notification contains @ref ZmfCapture,
* which provide detail information for the request.
*/
extern NSString * const ZmfVideoCaptureRequestStop;
/**
* @brief Post when the ZMF module has received first video data after
* @ref Zmf_VideoCaptureStart invoked.
*
* The userInfo dictionary of this notification contains @ref ZmfCapture,
* @ref ZmfFace, @ref ZmfWidth, and @ref ZmfHeight,
* which indicate the actual parameters of the video data captured.
*/
extern NSString * const ZmfVideoCaptureDidStart;
/**
* @brief Post when the ZMF module video capture status changed.
* The userInfo dictionary contains the info of ZmfExposure, ZmfBrightness and ZmfBacklot
*/
extern NSString * const ZmfVideoCaptureStatus;
/**
* @brief Post when the ZMF module request to start rendering video data.
*
* The userInfo dictionary of this notification contains @ref ZmfRender.
*/
extern NSString * const ZmfVideoRenderRequestAdd;
/**
* @brief Post when the ZMF module has received the first image after
* @ref Zmf_VideoRenderAdd invoked.
*/
extern NSString * const ZmfVideoRenderDidReceive;
/**
* @brief Post when the ZMF module has delivered the first image to render after
* @ref Zmf_VideoRenderStart and @ref Zmf_VideoRenderAdd invoked.
*/
extern NSString * const ZmfVideoRenderDidStart;
/**
* @brief Post when the rendering image size has changed.
*
* The userInfo dictionary of this notification contains @ref ZmfRender,
* @ref ZmfWindow, @ref ZmfWidth and @ref ZmfHeight.
*/
extern NSString * const ZmfVideoRenderDidResize;
/**
* @brief Post when the ZMF module has stop rendering video data.
*
* The userInfo dictionary of this notification contains @ref ZmfRender,
* @ref ZmfWindow.
*/
extern NSString * const ZmfVideoRenderRequestRemove;
/**
* @brief Post when the ZMF module has matched rendering video data.
*
* The userInfo dictionary of this notification contains @ref ZmfRender,
* @ref ZmfWindow, and @ref ZmfMatching
*/
extern NSString * const ZmfVideoRenderDidMatch;
/**
* @brief Post when the ZMF module video snapshot compeleted.
* The userInfo dictionary contains the info of ZmfFile, ZmfWidth and ZmfHeight
*/
extern NSString * const ZmfVideoSnapshotCompleted;
/**
* @}
*/
#endif /* __OBJC__ */
#ifdef _WIN32
/**
* @brief Event number for video notifications.
*
* The wParam of the event is the type of notification.
* For a list of possible values, @ref ZmfVideoEventType.
*
* The lParam of the event may contain a JSON object which depends on the
* type of notification.
*/
#define ZmfVideoEvent ZmfAudioEvent + 10
/**
* @defgroup ZmfVideoNotificationParameters Video Notification Parameters.
* @{
*/
/**
* @brief A String object containing an string that identifies
* ID of video capture device.
*/
#define ZmfCapture "Capture"
/**
* @brief A Number object containing an integer that identifies
* the facing type of capture device.
* For a list of possible values, @ref ZmfVideoFaceType.
*/
#define ZmfFace "Face"
/**
* @brief A Number object containing an integer that identifies
* the width in pixel.
*/
#define ZmfWidth "Width"
/**
* @brief A String object containing an string that identifies
* file path
*/
#define ZmfFile "File"
/**
* @brief A Number object containing an integer that identifies
* the height in pixel.
*/
#define ZmfHeight "Height"
/**
* @brief A Number object containing an integer that identifies
* the angle in degree.
*/
#define ZmfAngle "Angle"
/**
* @brief A String object containing a string that identifies
* the unique render name.
*
*/
#define ZmfRender "Render"
/**
* @brief A Number object containing an integer that identifies
* the render source type.
*
* @ref ZmfVideoSourceType.
*/
#define ZmfSourceType "SourceType"
/**
* @brief A Number object containing an integer that identifies
* the handle of render window.
*/
#define ZmfWindow "Window"
/**
* @brief A Number object containing an integer that identifies
* the frame rate in fps.
*/
#define ZmfFrameRate "FrameRate"
/**
* @brief A Number containing a boolean that identifies
* the exposure state.
*/
#define ZmfExposure "Exposure"
/**
* @brief A NSNumber containing a integer that identifies
* the current video average brightness(0 ~ 255).
*/
#define ZmfBrightness "Brightness"
/**
* @brief A NSNumber containing a boolean that identifies
* the backlot state, 1 means detect the backlot, otherwise not.
*/
#define ZmfBacklot "Backlot"
/**
* @brief A String object containing a string that describes error.
* the format match 'camera <id>|render <id>|video: <reason>'.
*/
#define ZmfVideoError "VideoError"
/**
* @brief A number object containing an integer that identifies
* the matching.
*/
#define ZmfMatching "Matching"
/**
* @}
*/
/**
* @brief Type of video notifications.
*/
typedef enum {
/**
* @brief Post when the ZMF module request to start capture video data.
*
* The lParam of this event is a JSON object contains @ref ZmfCapture,
* @ref ZmfWidth, @ref ZmfHeight and @ref ZmfFrameRate, which provide detail
* information for the request.
*/
ZmfVideoCaptureRequestStart = 20,
/**
* @brief Post when the ZMF module request to change capture video data.
*
* The lParam of this event is a JSON object contains @ref ZmfCapture,
* @ref ZmfWidth, @ref ZmfHeight and @ref ZmfFrameRate, which provide detail
* information for the request.
*/
ZmfVideoCaptureRequestChange = 30,
/**
* @brief Post when the ZMF module request to stop capture.
*
* The lParam of this event is a JSON object contains @ref ZmfCapture,
* which provide detail information for the request.
*/
ZmfVideoCaptureRequestStop = 21,
/**
* @brief Post when the ZMF module has received first video data after
* @ref Zmf_VideoCaptureStart invoked.
*
* The lParam of this event is a JSON object contains @ref ZmfCapture,
* @ref ZmfFace, @ref ZmfWidth, and @ref ZmfHeight, @ref ZmfAngle,
* which indicate the actual parameters of the video data captured.
*/
ZmfVideoCaptureDidStart = 22,
/**
* @brief Post when the ZMF module video capture status changed.
* The userInfo dictionary contains the info of ZmfExposure, ZmfBrightness and ZmfBacklot
*/
ZmfVideoCaptureStatus = 33,
/**
* @brief Post when the ZMF module request to start rendering video data.
*
* The lParam of this event is a JSON object contains @ref ZmfRender,
* @ref ZmfWidth and @ref ZmfHeight.
*/
ZmfVideoRenderRequestAdd = 25,
/**
* @brief Post when the ZMF module has received the first image after
* @ref Zmf_VideoRenderAdd invoked.
*/
ZmfVideoRenderDidReceive = 26,
/**
* @brief Post when the first image has delivery to render after
* @ref Zmf_VideoRenderStart and @ref Zmf_VideoRenderAdd invoked.
*/
ZmfVideoRenderDidStart = 27,
/**
* @brief Post when the rendering image size has changed.
*
* The lParam of this event is a JSON object contains @ref ZmfRender,
* @ref ZmfWindow, @ref ZmfWidth and @ref ZmfHeight.
*/
ZmfVideoRenderDidResize = 28,
/**
* @brief Post when the ZMF module request to stop rendering video data.
*
* The lParam of this event is a JSON object contains @ref ZmfRender,
* @ref ZmfWindow
*/
ZmfVideoRenderRequestRemove = 29,
/** @brief Post when the ZMF Video module has an error occurred.
*
* The lParam of this event is a JSON object contains @ref ZmfVideoError
*/
ZmfVideoErrorOccurred = 31,
/** @brief Post when the ZMF module render matching.
*
* The lParam of this event is a JSON object contains @ref ZmfRender,
* @ref ZmfWindow, and @ref ZmfMatching
*/
ZmfVideoRenderDidMatch = 32,
/**
* @brief Post when the ZMF module video snapshot compeleted.
* The userInfo dictionary contains the info of ZmfFile, ZmfWidth and ZmfHeight
*/
ZmfVideoSnapshotCompleted = 34,
} ZmfVideoEventType;
#endif /* _WIN32 */
#ifdef __cplusplus
extern "C" {
#endif
/** deprecated, use Zmf_CameraGetCount */
#define Zmf_VideoCaptureGetCount Zmf_CameraGetCount
/** deprecated, use Zmf_CameraGetName */
#define Zmf_VideoCaptureGetName Zmf_CameraGetName
/**
* @brief Get count of video capture devices.
* @return The total count of video capture devices.
*/
int Zmf_CameraGetCount (void);
/**
* @brief Get count of Desktop devices, only supported on Windows
* @return The total count of video capture devices.
*/
int Zmf_DesktopGetCount(void);
/**
* @brief Get count of Windows, only supported on Windows
* @return The total count of video capture devices.
*/
int Zmf_WindowGetCount(void);
/**
* @brief Get the name of specific capture device.
* @param iIndex The index of capture device, from 0 to count - 1.
* @param acId Pointer the buffer contains unique name utf8 string.
* @param acName Pointer the buffer contains friendly name utf8 string.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_CameraGetName (int iIndex, char acId[512], char acName[512]);
/**
* @brief Get the name of specific desktop device, only supported on Windows
* @param iIndex The index of capture device, from 0 to count - 1.
* @param acId Pointer the buffer contains unique name utf8 string.
* @param acName Pointer the buffer contains friendly name utf8 string.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_DesktopGetName(int iIndex, char acId[512], char acName[512]);
/**
* @brief Get the name of specific windows, only supported on Windows
* @param iIndex The index of capture device, from 0 to count - 1.
* @param acId Pointer the buffer contains unique name utf8 string.
* @param acName Pointer the buffer contains friendly name utf8 string.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_WindowGetName(int iIndex, char acId[512], char acName[512]);
/**
* @brief Get the face and angle of specific capture device.
* @param pcId The ID of capture device.
* @param piFace Capture device face @ref ZmfVideoFaceType
* @param piAngle Capture device angle @ref ZmfRotationAngle
* @return orient angle >0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureGetOrient (const char *pcId, int *piFace, int *piAngle);
/**
* @brief Start running video capture device.
* @param pcId The ID of capture device.
* @param iWidth The captured image width in pixel, just expected value.
* @param iHeight The captured image height in pixel, just expected value.
* @param iFrameRate The captured frame rate in fps, just expected value.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureStart (const char *pcId, int iWidth, int iHeight, int iFrameRate);
/**
* @brief rotate the image from the capture device
* @param pcId The ID of capture device.
* @param enAngle The rotation angle, @ref ZmfRotationAngle.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureRotate (const char *pcId, ZmfRotationAngle enAngle);
/**
* @brief Set the face of specific capture device.
* @param pcId The ID of capture device.
* @param iFace Capture device face @ref ZmfVideoFaceType
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureFace (const char *pcId, int iFace);
/** 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)
/**
* @brief Coordinate rotation angle Mask.
*/
typedef enum {
ZmfRotationMask0 = 1<<0, /**< @brief 0 degree. */
ZmfRotationMask90 = 1<<1, /**< @brief 90 degrees CCW. */
ZmfRotationMask180 = 1<<2, /**< @brief 180 degrees CCW. */
ZmfRotationMask270 = 1<<3, /**< @brief 270 degrees CCW. */
ZmfRotationMaskAll = 0xF,
} ZmfRotationMask;
/**
* @brief Listens device rotation event automatically, or in response to rotation angle fixture
* @param rotationMask whether Listens event or fixed angle, @ref ZmfRotationMask
* @param fixedDeviceAngle if rotationMask is 0, this is fixed angle
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureListenRotation(int rotationMask, int fixedDeviceAngle);
/**
* @brief Listens device rotation event automatically, or in response to rotation angle fixture
* @param rotationMask whether Listens event or fixed angle, @ref ZmfRotationMask
* @param fixedDeviceAngle if rotationMask is 0, this is fixed angle
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderListenRotation(int rotationMask, int fixedDeviceAngle);
/** deprecated, use Zmf_ScreenSetOrientation */
#define Zmf_VideoCaptureSetScreenOrientation(screenOrient) \
Zmf_VideoScreenOrientation(screenOrient)
/**
* @brief Set screen orientation (window coordinates),
* the CCW angle of screen to the device.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoScreenOrientation(int screenOrient);
/**
* @brief Set the effect type of specific capture.
* @param enEffectType Effect type, @ref ZmfCaptureEffectType
* @param strJson Effect param, json string
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureEffect (ZmfCaptureEffectType enEffectType, const char* strJson);
/**
* @brief Stop running video capture device.
* @param pcId The ID of capture device.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureStop (const char *pcId);
/**
* @brief Stop all running video capture devices.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureStopAll (void);
/**
* @breif Focus at the point which is touched on the screen.
* @param captureId The ID of capture device.
* @param pWnd The handle of window to render on.
* @param pointX The position X of touch relative to the view to display, value range from 0 to 1.
* @param pointY The position Y of touch relative to the view to display, value range from 0 to 1.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureHandleFocusMetering(const char* captureId,void *pWnd,float pointX,float pointY);
/**
* @breif Lens focus at the Position to be set.
* @param captureId The ID of capture device.
* @param lensPosition The position of lens to be set, value range from 0 to 1.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoCaptureHandleFocusWithLensPosition(const char* captureId,float lensPosition);
/**
* @brief Initialize resource and start render on specific window.
* @param pWnd The handle of window to render on.
* @param enRenderType ZmfRenderType
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderStart (void *pWnd, ZmfRenderType enRenderType);
/**
* @brief Stop render and destroy resource.
* @param pWnd The handle of window to render on.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderStop (void *pWnd);
/**
* @brief Attach render source to specific window.
* @param pWnd The handle of window to render on.
* @param renderId The render source notified by @ref ZmfVideoRenderRequestAdd.
* @param iOrder The Z-Order value render source. It must assign different
* value for each render source. Render with larger value
* overlapped on render with smaller value.
* @param enMode Render mode, @ref ZmfRenderMode.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderAdd (void *pWnd, const char* renderId, int iOrder, ZmfRenderMode enMode);
/**
* @brief replace render oldRenderId with newRenderId
* @param pWnd The handle of window to render on.
* @param oldRenderId The current render id, used by @ref Zmf_VideoRenderAdd.
* @param newRenderId The new render id
*/
int Zmf_VideoRenderReplace(void *pWnd, const char* oldRenderId, const char *newRenderId);
/**
* @brief Take an snapshot of video render/capture
* @param pcId The render ID or capture ID
* @param iWidth The file image width in pixel, -1 keep origin.
* @param iHeight The file image height in pixel, -1 keep origin.
* @param jpgFileName The file path name.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoSnapshot(const char *pcId, int iWidth, int iHeight, const char *jpgFileName);
/** deprecated, use Zmf_VideoSnapshot */
#define Zmf_VideoRenderSnapshot(renderId, iWidth, iHeight,jpgFileName) \
Zmf_VideoSnapshot(renderId, iWidth, iHeight, jpgFileName)
/**
* @brief Detach render source from specific window.
* @param pWnd The handle of window.
* @param renderId The render source used by @ref Zmf_VideoRenderAdd.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderRemove (void *pWnd, const char* renderId);
/**
* @brief Detach all render sources from specific window.
* @param pWnd The handle of window.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderRemoveAll(void *pWnd);
/**
* @brief Move render area of specific render source.
*
* The origin of coordination is the top left point of window.
* X-axis positive direction is from left to right.
* Y-axis positive direction is from top to bottom.
* The valid range is from 0.0 to 1.0.
*
* @param pWnd The handle of window.
* @param renderId The render source.
* @param fLeft The X position of top left point of render area.
* Default is 0.0.
* @param fTop The Y position of top left point of render area.
* Default is 0.0.
* @param fRight The X position of right bottom point of render area.
* Default is 1.0.
* @param fBottom The Y position of right bottom point of render area.
* Default is 1.0.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderMove (void *pWnd, const char* renderId, float fLeft, float fTop,
float fRight, float fBottom);
/**
* @brief Set the mirror type of specific render source.
* @param pWnd The handle of window.
* @param renderId The render source.
* @param enType Mirror type, @ref ZmfMirrorType
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderMirror (void *pWnd, const char* renderId, ZmfMirrorType enType);
/**
* @brief Set whether continuously update or freeze of specific render source.
* @param pWnd The handle of window.
* @param renderId The render source.
* @param bEnable boolean value
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderFreeze (void *pWnd, const char* renderId, int bEnable);
/**
* @brief Set coordination rotation angle according to the coordination
* of the window.
* @param pWnd The handle of window.
* @param enAngle The rotation angle, @ref ZmfRotationAngle.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderRotate (void *pWnd, ZmfRotationAngle enAngle);
/**
* @brief Set the effect type of specific render.
* @param pWnd The handle of window.
* @param renderId The render source.
* @param enEffectType Effect type, @ref ZmfRenderEffectType
* @param strJson Effect param, json string
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderEffect(void *pWnd, const char* renderId, ZmfRenderEffectType enEffectType, const char* strJson);
/**
* @brief Set the match type of specific render.
* @param pWnd The handle of window.
* @param renderId The render source.
* @param enMatchType Effect type, @ref ZmfRenderEffectType
* @param strJson Effect param, json string
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderMatch(void *pWnd, const char* renderId, ZmfRenderMatchType enMatchType, const char* strJson);
/**
* @brief get the location point of specific render.
* @param pWnd The handle of window.
* @param renderId The render source.
* @param location point
* @return 0 on succeed, otherwise failed.
*/
int Zmf_VideoRenderGetLocation(void *pWnd, const char* renderId, float* location);
/**
* @brief Initialize AR module of ZMF(Zero Media Framework).
* @return 0 on succeed, otherwise failed.
*/
int Zmf_ARInit();
/**
* @brief terminate AR module of ZMF(Zero Media Framework).
* @return 0 on succeed, otherwise failed.
*/
int Zmf_ARTerm();
/**
* @brief Start running ar capture device.
* @param pcId The ID of capture device: @ref ZmfARCaptureFront or ZmfARCaptureBack
* currently only ZmfARCaptureFront is supported on some ios devices.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_ARCaptureStart(const char *pcId);
/**
* @brief stop running ar capture device.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_ARCaptureStop();
/**
* @brief Set background image: used to replace background in image captured by AR camera.
* @param pcImageFile image file name, including full path. Only support jpg
* @param width, height currently only support 1280*720.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_ARSetBackgroundImage(const char *pcImageFile, int width, int height);
/**
* @brief Set background image: used to replace background in image captured by AR camera.
* @param image platform dependent image: on iOS, it it UIImage.
* @return 0 on succeed, otherwise failed.
*/
int Zmf_ARSetBackgroundImage2(void* image);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#if __GNUC__
#pragma GCC visibility pop
#endif
#endif /* __ZMF_VIDEO_H__ */