ax_vo_api.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /**********************************************************************************
  2. *
  3. * Copyright (c) 2019-2020 Beijing AXera Technology Co., Ltd. All Rights Reserved.
  4. *
  5. * This source file is the property of Beijing AXera Technology Co., Ltd. and
  6. * may not be copied or distributed in any isomorphic form without the prior
  7. * written consent of Beijing AXera Technology Co., Ltd.
  8. *
  9. **********************************************************************************/
  10. #ifndef _AX_VO_H_
  11. #define _AX_VO_H_
  12. #include "ax_global_type.h"
  13. #include "ax_sys_api.h"
  14. #ifdef __cplusplus
  15. extern "C"
  16. {
  17. #endif
  18. #define AX_VO_WIDTH_MAX 4096
  19. #define AX_VO_HEIGHT_MAX 4096
  20. #define AX_VO_DEV_MAX 4
  21. #define AX_VO_LAYER_MAX 7
  22. #define AX_VO_BIND_LAYER_MAX 2
  23. #define AX_VO_CHN_MAX 16
  24. #define AX_GRAPHIC_LAYER_MAX 2
  25. #define AX_ID_VO_PUB_SMOD 0x8A
  26. #define AX_ERR_VO_INVALID_DEVID AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, AX_ERR_INVALID_DEVID)
  27. #define AX_ERR_VO_INVALID_CHNID AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, AX_ERR_INVALID_CHNID)
  28. #define AX_ERR_VO_ILLEGAL_PARAM AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, AX_ERR_ILLEGAL_PARAM)
  29. #define AX_ERR_VO_NULL_PTR AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, AX_ERR_NULL_PTR)
  30. #define AX_ERR_VO_NOT_PERM AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, AX_ERR_NOT_PERM)
  31. #define AX_ERR_VO_NODEV AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, AX_ERR_UNEXIST)
  32. #define AX_ERR_VO_NOMEM AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, AX_ERR_NOMEM)
  33. #define AX_ERR_VO_DEV_OP_FAIL AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, 0x80)
  34. #define AX_ERR_VO_LAYER_OP_FAIL AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, 0x81)
  35. #define AX_ERR_VO_CHN_OP_FAIL AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, 0x82)
  36. #define AX_ERR_VO_INVALID_LAYERID AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, 0x83)
  37. #define AX_ERR_VO_OPEN_FILE_FAIL AX_DEF_ERR(AX_ID_VO, AX_ID_VO_PUB_SMOD, 0x84)
  38. typedef AX_U32 VO_DEV;
  39. typedef AX_U32 VO_LAYER;
  40. typedef AX_U32 GRAPHIC_LAYER;
  41. typedef AX_U32 VO_CHN;
  42. typedef AX_U32 VO_WBC;
  43. typedef enum {
  44. VO_INTF_VIRT = 0,
  45. VO_INTF_DPI,
  46. VO_INTF_DSI0,
  47. VO_INTF_DSI1,
  48. VO_INTF_2DSI,
  49. VO_INTF_BT656,
  50. VO_INTF_BT1120,
  51. VO_INTF_BUTT
  52. } VO_INTF_TYPE_E;
  53. typedef enum {
  54. VO_OUTPUT_USER = 1,
  55. VO_OUTPUT_480P60,
  56. VO_OUTPUT_576P50,
  57. VO_OUTPUT_720P24,
  58. VO_OUTPUT_720P25,
  59. VO_OUTPUT_720P30,
  60. VO_OUTPUT_720P50,
  61. VO_OUTPUT_720P60,
  62. VO_OUTPUT_800P60,
  63. VO_OUTPUT_1080P24,
  64. VO_OUTPUT_1080P25,
  65. VO_OUTPUT_1080P30,
  66. VO_OUTPUT_1080P50,
  67. VO_OUTPUT_1080P60,
  68. VO_OUTPUT_3840x2160_24,
  69. VO_OUTPUT_3840x2160_25,
  70. VO_OUTPUT_3840x2160_30,
  71. VO_OUTPUT_3840x2160_50,
  72. VO_OUTPUT_3840x2160_60,
  73. VO_OUTPUT_4096x2160_24,
  74. VO_OUTPUT_4096x2160_25,
  75. VO_OUTPUT_4096x2160_30,
  76. VO_OUTPUT_4096x2160_50,
  77. VO_OUTPUT_4096x2160_60,
  78. VO_OUTPUT_BUTT,
  79. } VO_INTF_SYNC_E;
  80. typedef struct axVO_RESO_S {
  81. AX_U32 u32Width;
  82. AX_U32 u32Height;
  83. AX_U32 u32RefreshRate;
  84. } VO_RESO_S;
  85. typedef struct axVO_SIZE_S {
  86. AX_U32 u32Width;
  87. AX_U32 u32Height;
  88. } VO_SIZE_S;
  89. typedef struct axVO_RECT_S {
  90. AX_U32 u32X;
  91. AX_U32 u32Y;
  92. AX_U32 u32Width;
  93. AX_U32 u32Height;
  94. } VO_RECT_S;
  95. typedef struct axVO_PUB_ATTR_S {
  96. VO_INTF_TYPE_E enIntfType;
  97. VO_INTF_SYNC_E enIntfSync;
  98. VO_RESO_S stReso;
  99. } VO_PUB_ATTR_S;
  100. typedef enum {
  101. VO_LAYER_SYNC_NORMAL,
  102. VO_LAYER_SYNC_SHUTTLE,
  103. VO_LAYER_SYNC_GROUPING,
  104. VO_LAYER_SYNC_PRIMARY,
  105. VO_LAYER_SYNC_BUTT,
  106. } VO_LAYER_SYNC_E;
  107. typedef enum {
  108. VO_LAYER_OUT_BUF_POOL,
  109. VO_LAYER_OUT_BUF_INPLACE,
  110. VO_LAYER_OUT_BUF_BUTT,
  111. } VO_LAYER_BUF_E;
  112. typedef enum {
  113. VO_LAYER_OUT_TO_FIFO = 1,
  114. VO_LAYER_OUT_TO_LINK = 2,
  115. } VO_LAYER_DISPATCH_MODE_E;
  116. typedef struct axVO_VIDEO_LAYER_ATTR_S {
  117. VO_RECT_S stDispRect; /* RW; Display resolution */
  118. VO_SIZE_S stImageSize; /* RW; Canvas size of the video layer */
  119. AX_IMG_FORMAT_E enPixFmt;
  120. VO_LAYER_SYNC_E enLayerSync;
  121. AX_U32 u32PrimaryChnId;
  122. AX_U32 u32FrameRate;
  123. AX_U32 u32FifoDepth;
  124. AX_U32 u32ChnNr;
  125. AX_U32 u32BkClr;
  126. VO_LAYER_BUF_E enLayerBuf;
  127. AX_U32 u32InplaceChnId;
  128. AX_POOL u32PoolId;
  129. VO_LAYER_DISPATCH_MODE_E enDispatchMode;
  130. AX_U64 u64KeepChnPrevFrameBitmap;
  131. } VO_VIDEO_LAYER_ATTR_S;
  132. typedef struct axVO_CHN_ATTR_S {
  133. VO_RECT_S stRect;
  134. AX_U32 u32FifoDepth;
  135. } VO_CHN_ATTR_S;
  136. /* Device Relative Settings */
  137. AX_S32 AX_VO_Init(AX_VOID);
  138. AX_S32 AX_VO_Deinit(AX_VOID);
  139. AX_S32 AX_VO_SetPubAttr(VO_DEV VoDev, const VO_PUB_ATTR_S *pstPubAttr);
  140. AX_S32 AX_VO_GetPubAttr(VO_DEV VoDev, VO_PUB_ATTR_S *pstPubAttr);
  141. AX_S32 AX_VO_Enable(VO_DEV VoDev);
  142. AX_S32 AX_VO_Disable(VO_DEV VoDev);
  143. /* Video Relative Settings */
  144. AX_S32 AX_VO_SetVideoLayerAttr(VO_LAYER VoLayer, const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr);
  145. AX_S32 AX_VO_GetVideoLayerAttr(VO_LAYER VoLayer, VO_VIDEO_LAYER_ATTR_S *pstLayerAttr);
  146. AX_S32 AX_VO_EnableVideoLayer(VO_LAYER VoLayer);
  147. AX_S32 AX_VO_DisableVideoLayer(VO_LAYER VoLayer);
  148. AX_S32 AX_VO_BindVideoLayer(VO_LAYER VoLayer, VO_DEV VoDev);
  149. AX_S32 AX_VO_UnBindVideoLayer(VO_LAYER VoLayer, VO_DEV VoDev);
  150. AX_S32 AX_VO_BindGraphicLayer(GRAPHIC_LAYER GraphicLayer, VO_DEV VoDev);
  151. AX_S32 AX_VO_UnBindGraphicLayer(GRAPHIC_LAYER GraphicLayer, VO_DEV VoDev);
  152. /* This interface obtains the FD corresponding to the layer for the select operation. Closing operation is not allowed */
  153. AX_S32 AX_VO_GetLayerFd(VO_LAYER VoLayer, AX_S32 *s32Fd);
  154. AX_S32 AX_VO_GetLayerFrame(VO_LAYER VoLayer, AX_VIDEO_FRAME_S *pstVoFrame, AX_S32 s32MS);
  155. AX_S32 AX_VO_ReleaseLayerFrame(VO_LAYER VoLayer, const AX_VIDEO_FRAME_S *pstVoFrame);
  156. /* Channel Relative Operations */
  157. AX_S32 AX_VO_EnableChn(VO_LAYER VoLayer, VO_CHN VoChn);
  158. AX_S32 AX_VO_DisableChn(VO_LAYER VoLayer, VO_CHN VoChn);
  159. AX_S32 AX_VO_SetChnAttr(VO_LAYER VoLayer, VO_CHN VoChn, const VO_CHN_ATTR_S *pstChnAttr);
  160. AX_S32 AX_VO_GetChnAttr(VO_LAYER VoLayer, VO_CHN VoChn, VO_CHN_ATTR_S *pstChnAttr);
  161. AX_S32 AX_VO_SendFrame(VO_LAYER VoLayer, VO_CHN VoChn, AX_VIDEO_FRAME_S *pstVoFrame, AX_S32 s32MS);
  162. #ifdef __cplusplus
  163. }
  164. #endif
  165. #endif /* _AX_VO_H_ */