/include/linux/msm_vidc_enc.h

https://bitbucket.org/thekraven/iscream_thunderc-2.6.35 · C++ Header · 621 lines · 382 code · 117 blank · 122 comment · 0 complexity · 946ab65c25419499ac94027569353766 MD5 · raw file

  1. /* Copyright (c) 2009, Code Aurora Forum. All rights reserved.
  2. *
  3. * Redistribution and use in source and binary forms, with or without
  4. * modification, are permitted provided that the following conditions are
  5. * met:
  6. * * Redistributions of source code must retain the above copyright
  7. * notice, this list of conditions and the following disclaimer.
  8. * * Redistributions in binary form must reproduce the above
  9. * copyright notice, this list of conditions and the following
  10. * disclaimer in the documentation and/or other materials provided
  11. * with the distribution.
  12. * * Neither the name of Code Aurora Forum, Inc. nor the names of its
  13. * contributors may be used to endorse or promote products derived
  14. * from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
  17. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  18. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
  19. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  20. * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  21. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  22. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  23. * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  24. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  25. * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  26. * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. *
  28. */
  29. #ifndef _MSM_VIDC_ENC_H_
  30. #define _MSM_VIDC_ENC_H_
  31. #include <linux/types.h>
  32. #include <linux/ioctl.h>
  33. /** STATUS CODES*/
  34. /* Base value for status codes */
  35. #define VEN_S_BASE 0x00000000
  36. #define VEN_S_SUCCESS (VEN_S_BASE)/* Success */
  37. #define VEN_S_EFAIL (VEN_S_BASE+1)/* General failure */
  38. #define VEN_S_EFATAL (VEN_S_BASE+2)/* Fatal irrecoverable failure*/
  39. #define VEN_S_EBADPARAM (VEN_S_BASE+3)/* Error passed parameters*/
  40. /*Command called in invalid state*/
  41. #define VEN_S_EINVALSTATE (VEN_S_BASE+4)
  42. #define VEN_S_ENOSWRES (VEN_S_BASE+5)/* Insufficient OS resources*/
  43. #define VEN_S_ENOHWRES (VEN_S_BASE+6)/*Insufficient HW resources */
  44. #define VEN_S_EBUFFREQ (VEN_S_BASE+7)/* Buffer requirements were not met*/
  45. #define VEN_S_EINVALCMD (VEN_S_BASE+8)/* Invalid command called */
  46. #define VEN_S_ETIMEOUT (VEN_S_BASE+9)/* Command timeout. */
  47. /*Re-attempt was made when multiple invocation not supported for API.*/
  48. #define VEN_S_ENOREATMPT (VEN_S_BASE+10)
  49. #define VEN_S_ENOPREREQ (VEN_S_BASE+11)/*Pre-requirement is not met for API*/
  50. #define VEN_S_ECMDQFULL (VEN_S_BASE+12)/*Command queue is full*/
  51. #define VEN_S_ENOTSUPP (VEN_S_BASE+13)/*Command not supported*/
  52. #define VEN_S_ENOTIMPL (VEN_S_BASE+14)/*Command not implemented.*/
  53. #define VEN_S_ENOTPMEM (VEN_S_BASE+15)/*Buffer is not from PMEM*/
  54. #define VEN_S_EFLUSHED (VEN_S_BASE+16)/*returned buffer was flushed*/
  55. #define VEN_S_EINSUFBUF (VEN_S_BASE+17)/*provided buffer size insufficient*/
  56. #define VEN_S_ESAMESTATE (VEN_S_BASE+18)
  57. #define VEN_S_EINVALTRANS (VEN_S_BASE+19)
  58. #define VEN_INTF_VER 1
  59. /*Asynchronous messages from driver*/
  60. #define VEN_MSG_INDICATION 0
  61. #define VEN_MSG_INPUT_BUFFER_DONE 1
  62. #define VEN_MSG_OUTPUT_BUFFER_DONE 2
  63. #define VEN_MSG_NEED_OUTPUT_BUFFER 3
  64. #define VEN_MSG_FLUSH_INPUT_DONE 4
  65. #define VEN_MSG_FLUSH_OUPUT_DONE 5
  66. #define VEN_MSG_START 6
  67. #define VEN_MSG_STOP 7
  68. #define VEN_MSG_PAUSE 8
  69. #define VEN_MSG_RESUME 9
  70. #define VEN_MSG_STOP_READING_MSG 10
  71. /*Buffer flags bits masks*/
  72. #define VEN_BUFFLAG_EOS 0x00000001
  73. #define VEN_BUFFLAG_ENDOFFRAME 0x00000010
  74. #define VEN_BUFFLAG_SYNCFRAME 0x00000020
  75. #define VEN_BUFFLAG_EXTRADATA 0x00000040
  76. #define VEN_BUFFLAG_CODECCONFIG 0x00000080
  77. /*ENCODER CONFIGURATION CONSTANTS*/
  78. /*Encoded video frame types*/
  79. #define VEN_FRAME_TYPE_I 1/* I frame type */
  80. #define VEN_FRAME_TYPE_P 2/* P frame type */
  81. #define VEN_FRAME_TYPE_B 3/* B frame type */
  82. /*Video codec types*/
  83. #define VEN_CODEC_MPEG4 1/* MPEG4 Codec */
  84. #define VEN_CODEC_H264 2/* H.264 Codec */
  85. #define VEN_CODEC_H263 3/* H.263 Codec */
  86. /*Video codec profile types.*/
  87. #define VEN_PROFILE_MPEG4_SP 1/* 1 - MPEG4 SP profile */
  88. #define VEN_PROFILE_MPEG4_ASP 2/* 2 - MPEG4 ASP profile */
  89. #define VEN_PROFILE_H264_BASELINE 3/* 3 - H264 Baseline profile */
  90. #define VEN_PROFILE_H264_MAIN 4/* 4 - H264 Main profile */
  91. #define VEN_PROFILE_H264_HIGH 5/* 5 - H264 High profile */
  92. #define VEN_PROFILE_H263_BASELINE 6/* 6 - H263 Baseline profile */
  93. /*Video codec profile level types.*/
  94. #define VEN_LEVEL_MPEG4_0 0x1/* MPEG4 Level 0 */
  95. #define VEN_LEVEL_MPEG4_1 0x2/* MPEG4 Level 1 */
  96. #define VEN_LEVEL_MPEG4_2 0x3/* MPEG4 Level 2 */
  97. #define VEN_LEVEL_MPEG4_3 0x4/* MPEG4 Level 3 */
  98. #define VEN_LEVEL_MPEG4_4 0x5/* MPEG4 Level 4 */
  99. #define VEN_LEVEL_MPEG4_5 0x6/* MPEG4 Level 5 */
  100. #define VEN_LEVEL_MPEG4_3b 0x7/* MPEG4 Level 3b */
  101. #define VEN_LEVEL_MPEG4_6 0x8/* MPEG4 Level 6 */
  102. #define VEN_LEVEL_H264_1 0x9/* H.264 Level 1 */
  103. #define VEN_LEVEL_H264_1b 0xA/* H.264 Level 1b */
  104. #define VEN_LEVEL_H264_1p1 0xB/* H.264 Level 1.1 */
  105. #define VEN_LEVEL_H264_1p2 0xC/* H.264 Level 1.2 */
  106. #define VEN_LEVEL_H264_1p3 0xD/* H.264 Level 1.3 */
  107. #define VEN_LEVEL_H264_2 0xE/* H.264 Level 2 */
  108. #define VEN_LEVEL_H264_2p1 0xF/* H.264 Level 2.1 */
  109. #define VEN_LEVEL_H264_2p2 0x10/* H.264 Level 2.2 */
  110. #define VEN_LEVEL_H264_3 0x11/* H.264 Level 3 */
  111. #define VEN_LEVEL_H264_3p1 0x12/* H.264 Level 3.1 */
  112. #define VEN_LEVEL_H264_4 0x13/* H.264 Level 4 */
  113. #define VEN_LEVEL_H263_10 0x14/* H.263 Level 10 */
  114. #define VEN_LEVEL_H263_20 0x15/* H.263 Level 20 */
  115. #define VEN_LEVEL_H263_30 0x16/* H.263 Level 30 */
  116. #define VEN_LEVEL_H263_40 0x17/* H.263 Level 40 */
  117. #define VEN_LEVEL_H263_45 0x18/* H.263 Level 45 */
  118. #define VEN_LEVEL_H263_50 0x19/* H.263 Level 50 */
  119. #define VEN_LEVEL_H263_60 0x1A/* H.263 Level 60 */
  120. #define VEN_LEVEL_H263_70 0x1B/* H.263 Level 70 */
  121. /*Entropy coding model selection for H.264 encoder.*/
  122. #define VEN_ENTROPY_MODEL_CAVLC 1
  123. #define VEN_ENTROPY_MODEL_CABAC 2
  124. /*Cabac model number (0,1,2) for encoder.*/
  125. #define VEN_CABAC_MODEL_0 1/* CABAC Model 0. */
  126. #define VEN_CABAC_MODEL_1 2/* CABAC Model 1. */
  127. #define VEN_CABAC_MODEL_2 3/* CABAC Model 2. */
  128. /*Deblocking filter control type for encoder.*/
  129. #define VEN_DB_DISABLE 1/* 1 - Disable deblocking filter*/
  130. #define VEN_DB_ALL_BLKG_BNDRY 2/* 2 - All blocking boundary filtering*/
  131. #define VEN_DB_SKIP_SLICE_BNDRY 3/* 3 - Filtering except sliceboundary*/
  132. /*Different methods of Multi slice selection.*/
  133. #define VEN_MSLICE_OFF 1
  134. #define VEN_MSLICE_CNT_MB 2 /*number of MBscount per slice*/
  135. #define VEN_MSLICE_CNT_BYTE 3 /*number of bytes count per slice.*/
  136. #define VEN_MSLICE_GOB 4 /*Multi slice by GOB for H.263 only.*/
  137. /*Different modes for Rate Control.*/
  138. #define VEN_RC_OFF 1
  139. #define VEN_RC_VBR_VFR 2
  140. #define VEN_RC_VBR_CFR 3
  141. #define VEN_RC_CBR_VFR 4
  142. #define VEN_RC_CBR_CFR 5
  143. /*Different modes for flushing buffers*/
  144. #define VEN_FLUSH_INPUT 1
  145. #define VEN_FLUSH_OUTPUT 2
  146. #define VEN_FLUSH_ALL 3
  147. /*Different input formats for YUV data.*/
  148. #define VEN_INPUTFMT_NV12 1/* NV12 Linear */
  149. #define VEN_INPUTFMT_NV21 2/* NV21 Linear */
  150. #define VEN_INPUTFMT_NV12_16M2KA 3/* NV12 Linear */
  151. /*Different allowed rotation modes.*/
  152. #define VEN_ROTATION_0 1/* 0 degrees */
  153. #define VEN_ROTATION_90 2/* 90 degrees */
  154. #define VEN_ROTATION_180 3/* 180 degrees */
  155. #define VEN_ROTATION_270 4/* 270 degrees */
  156. /*IOCTL timeout values*/
  157. #define VEN_TIMEOUT_INFINITE 0xffffffff
  158. /*Different allowed intra refresh modes.*/
  159. #define VEN_IR_OFF 1
  160. #define VEN_IR_CYCLIC 2
  161. #define VEN_IR_RANDOM 3
  162. /*IOCTL BASE CODES Not to be used directly by the client.*/
  163. /* Base value for ioctls that are not related to encoder configuration.*/
  164. #define VEN_IOCTLBASE_NENC 0x800
  165. /* Base value for encoder configuration ioctls*/
  166. #define VEN_IOCTLBASE_ENC 0x850
  167. struct venc_ioctl_msg{
  168. void __user *in;
  169. void __user *out;
  170. };
  171. /*NON ENCODER CONFIGURATION IOCTLs*/
  172. /*IOCTL params:SET: InputData - unsigned long, OutputData - NULL*/
  173. #define VEN_IOCTL_SET_INTF_VERSION \
  174. _IOW(VEN_IOCTLBASE_NENC, 0, struct venc_ioctl_msg)
  175. /*IOCTL params:CMD: InputData - venc_timeout, OutputData - venc_msg*/
  176. #define VEN_IOCTL_CMD_READ_NEXT_MSG \
  177. _IOWR(VEN_IOCTLBASE_NENC, 1, struct venc_ioctl_msg)
  178. /*IOCTL params:CMD: InputData - NULL, OutputData - NULL*/
  179. #define VEN_IOCTL_CMD_STOP_READ_MSG _IO(VEN_IOCTLBASE_NENC, 2)
  180. /*IOCTL params:SET: InputData - venc_allocatorproperty, OutputData - NULL
  181. GET: InputData - NULL, OutputData - venc_allocatorproperty*/
  182. #define VEN_IOCTL_SET_INPUT_BUFFER_REQ \
  183. _IOW(VEN_IOCTLBASE_NENC, 3, struct venc_ioctl_msg)
  184. #define VEN_IOCTL_GET_INPUT_BUFFER_REQ \
  185. _IOR(VEN_IOCTLBASE_NENC, 4, struct venc_ioctl_msg)
  186. /*IOCTL params:CMD: InputData - venc_bufferpayload, OutputData - NULL*/
  187. #define VEN_IOCTL_CMD_ALLOC_INPUT_BUFFER \
  188. _IOW(VEN_IOCTLBASE_NENC, 5, struct venc_ioctl_msg)
  189. /*IOCTL params:CMD: InputData - venc_bufferpayload, OutputData - NULL*/
  190. #define VEN_IOCTL_SET_INPUT_BUFFER \
  191. _IOW(VEN_IOCTLBASE_NENC, 6, struct venc_ioctl_msg)
  192. /*IOCTL params: CMD: InputData - venc_bufferpayload, OutputData - NULL*/
  193. #define VEN_IOCTL_CMD_FREE_INPUT_BUFFER \
  194. _IOW(VEN_IOCTLBASE_NENC, 7, struct venc_ioctl_msg)
  195. /*IOCTL params:SET: InputData - venc_allocatorproperty, OutputData - NULL
  196. GET: InputData - NULL, OutputData - venc_allocatorproperty*/
  197. #define VEN_IOCTL_SET_OUTPUT_BUFFER_REQ \
  198. _IOW(VEN_IOCTLBASE_NENC, 8, struct venc_ioctl_msg)
  199. #define VEN_IOCTL_GET_OUTPUT_BUFFER_REQ \
  200. _IOR(VEN_IOCTLBASE_NENC, 9, struct venc_ioctl_msg)
  201. /*IOCTL params:CMD: InputData - venc_bufferpayload, OutputData - NULL*/
  202. #define VEN_IOCTL_CMD_ALLOC_OUTPUT_BUFFER \
  203. _IOW(VEN_IOCTLBASE_NENC, 10, struct venc_ioctl_msg)
  204. /*IOCTL params:CMD: InputData - venc_bufferpayload, OutputData - NULL*/
  205. #define VEN_IOCTL_SET_OUTPUT_BUFFER \
  206. _IOW(VEN_IOCTLBASE_NENC, 11, struct venc_ioctl_msg)
  207. /*IOCTL params:CMD: InputData - venc_bufferpayload, OutputData - NULL.*/
  208. #define VEN_IOCTL_CMD_FREE_OUTPUT_BUFFER \
  209. _IOW(VEN_IOCTLBASE_NENC, 12, struct venc_ioctl_msg)
  210. /* Asynchronous respone message code:* VEN_MSG_START*/
  211. #define VEN_IOCTL_CMD_START _IO(VEN_IOCTLBASE_NENC, 13)
  212. /*IOCTL params:CMD: InputData - venc_buffer, OutputData - NULL
  213. Asynchronous respone message code:VEN_MSG_INPUT_BUFFER_DONE*/
  214. #define VEN_IOCTL_CMD_ENCODE_FRAME \
  215. _IOW(VEN_IOCTLBASE_NENC, 14, struct venc_ioctl_msg)
  216. /*IOCTL params:CMD: InputData - venc_buffer, OutputData - NULL
  217. Asynchronous response message code:VEN_MSG_OUTPUT_BUFFER_DONE*/
  218. #define VEN_IOCTL_CMD_FILL_OUTPUT_BUFFER \
  219. _IOW(VEN_IOCTLBASE_NENC, 15, struct venc_ioctl_msg)
  220. /*IOCTL params:CMD: InputData - venc_bufferflush, OutputData - NULL
  221. * Asynchronous response message code:VEN_MSG_INPUT_BUFFER_DONE*/
  222. #define VEN_IOCTL_CMD_FLUSH \
  223. _IOW(VEN_IOCTLBASE_NENC, 16, struct venc_ioctl_msg)
  224. /*Asynchronous respone message code:VEN_MSG_PAUSE*/
  225. #define VEN_IOCTL_CMD_PAUSE _IO(VEN_IOCTLBASE_NENC, 17)
  226. /*Asynchronous respone message code:VEN_MSG_RESUME*/
  227. #define VEN_IOCTL_CMD_RESUME _IO(VEN_IOCTLBASE_NENC, 18)
  228. /* Asynchronous respone message code:VEN_MSG_STOP*/
  229. #define VEN_IOCTL_CMD_STOP _IO(VEN_IOCTLBASE_NENC, 19)
  230. #define VEN_IOCTL_SET_RECON_BUFFER \
  231. _IOW(VEN_IOCTLBASE_NENC, 20, struct venc_ioctl_msg)
  232. #define VEN_IOCTL_FREE_RECON_BUFFER \
  233. _IOW(VEN_IOCTLBASE_NENC, 21, struct venc_ioctl_msg)
  234. #define VEN_IOCTL_GET_RECON_BUFFER_SIZE \
  235. _IOW(VEN_IOCTLBASE_NENC, 22, struct venc_ioctl_msg)
  236. /*ENCODER PROPERTY CONFIGURATION & CAPABILITY IOCTLs*/
  237. /*IOCTL params:SET: InputData - venc_basecfg, OutputData - NULL
  238. GET: InputData - NULL, OutputData - venc_basecfg*/
  239. #define VEN_IOCTL_SET_BASE_CFG \
  240. _IOW(VEN_IOCTLBASE_ENC, 1, struct venc_ioctl_msg)
  241. #define VEN_IOCTL_GET_BASE_CFG \
  242. _IOR(VEN_IOCTLBASE_ENC, 2, struct venc_ioctl_msg)
  243. /*IOCTL params:SET: InputData - venc_switch, OutputData - NULL
  244. GET: InputData - NULL, OutputData - venc_switch*/
  245. #define VEN_IOCTL_SET_LIVE_MODE \
  246. _IOW(VEN_IOCTLBASE_ENC, 3, struct venc_ioctl_msg)
  247. #define VEN_IOCTL_GET_LIVE_MODE \
  248. _IOR(VEN_IOCTLBASE_ENC, 4, struct venc_ioctl_msg)
  249. /*IOCTL params:SET: InputData - venc_profile, OutputData - NULL
  250. GET: InputData - NULL, OutputData - venc_profile*/
  251. #define VEN_IOCTL_SET_CODEC_PROFILE \
  252. _IOW(VEN_IOCTLBASE_ENC, 5, struct venc_ioctl_msg)
  253. #define VEN_IOCTL_GET_CODEC_PROFILE \
  254. _IOR(VEN_IOCTLBASE_ENC, 6, struct venc_ioctl_msg)
  255. /*IOCTL params:SET: InputData - ven_profilelevel, OutputData - NULL
  256. GET: InputData - NULL, OutputData - ven_profilelevel*/
  257. #define VEN_IOCTL_SET_PROFILE_LEVEL \
  258. _IOW(VEN_IOCTLBASE_ENC, 7, struct venc_ioctl_msg)
  259. #define VEN_IOCTL_GET_PROFILE_LEVEL \
  260. _IOR(VEN_IOCTLBASE_ENC, 8, struct venc_ioctl_msg)
  261. /*IOCTL params:SET: InputData - venc_switch, OutputData - NULL
  262. GET: InputData - NULL, OutputData - venc_switch*/
  263. #define VEN_IOCTL_SET_SHORT_HDR \
  264. _IOW(VEN_IOCTLBASE_ENC, 9, struct venc_ioctl_msg)
  265. #define VEN_IOCTL_GET_SHORT_HDR \
  266. _IOR(VEN_IOCTLBASE_ENC, 10, struct venc_ioctl_msg)
  267. /*IOCTL params: SET: InputData - venc_sessionqp, OutputData - NULL
  268. GET: InputData - NULL, OutputData - venc_sessionqp*/
  269. #define VEN_IOCTL_SET_SESSION_QP \
  270. _IOW(VEN_IOCTLBASE_ENC, 11, struct venc_ioctl_msg)
  271. #define VEN_IOCTL_GET_SESSION_QP \
  272. _IOR(VEN_IOCTLBASE_ENC, 12, struct venc_ioctl_msg)
  273. /*IOCTL params:SET: InputData - venc_intraperiod, OutputData - NULL
  274. GET: InputData - NULL, OutputData - venc_intraperiod*/
  275. #define VEN_IOCTL_SET_INTRA_PERIOD \
  276. _IOW(VEN_IOCTLBASE_ENC, 13, struct venc_ioctl_msg)
  277. #define VEN_IOCTL_GET_INTRA_PERIOD \
  278. _IOR(VEN_IOCTLBASE_ENC, 14, struct venc_ioctl_msg)
  279. /* Request an Iframe*/
  280. #define VEN_IOCTL_CMD_REQUEST_IFRAME _IO(VEN_IOCTLBASE_ENC, 15)
  281. /*IOCTL params:GET: InputData - NULL, OutputData - venc_capability*/
  282. #define VEN_IOCTL_GET_CAPABILITY \
  283. _IOR(VEN_IOCTLBASE_ENC, 16, struct venc_ioctl_msg)
  284. /*IOCTL params:GET: InputData - NULL, OutputData - venc_seqheader*/
  285. #define VEN_IOCTL_GET_SEQUENCE_HDR \
  286. _IOR(VEN_IOCTLBASE_ENC, 17, struct venc_ioctl_msg)
  287. /*IOCTL params:SET: InputData - venc_entropycfg, OutputData - NULL
  288. GET: InputData - NULL, OutputData - venc_entropycfg*/
  289. #define VEN_IOCTL_SET_ENTROPY_CFG \
  290. _IOW(VEN_IOCTLBASE_ENC, 18, struct venc_ioctl_msg)
  291. #define VEN_IOCTL_GET_ENTROPY_CFG \
  292. _IOR(VEN_IOCTLBASE_ENC, 19, struct venc_ioctl_msg)
  293. /*IOCTL params:SET: InputData - venc_dbcfg, OutputData - NULL
  294. GET: InputData - NULL, OutputData - venc_dbcfg*/
  295. #define VEN_IOCTL_SET_DEBLOCKING_CFG \
  296. _IOW(VEN_IOCTLBASE_ENC, 20, struct venc_ioctl_msg)
  297. #define VEN_IOCTL_GET_DEBLOCKING_CFG \
  298. _IOR(VEN_IOCTLBASE_ENC, 21, struct venc_ioctl_msg)
  299. /*IOCTL params:SET: InputData - venc_intrarefresh, OutputData - NULL
  300. GET: InputData - NULL, OutputData - venc_intrarefresh*/
  301. #define VEN_IOCTL_SET_INTRA_REFRESH \
  302. _IOW(VEN_IOCTLBASE_ENC, 22, struct venc_ioctl_msg)
  303. #define VEN_IOCTL_GET_INTRA_REFRESH \
  304. _IOR(VEN_IOCTLBASE_ENC, 23, struct venc_ioctl_msg)
  305. /*IOCTL params:SET: InputData - venc_multiclicecfg, OutputData - NULL
  306. GET: InputData - NULL, OutputData - venc_multiclicecfg*/
  307. #define VEN_IOCTL_SET_MULTI_SLICE_CFG \
  308. _IOW(VEN_IOCTLBASE_ENC, 24, struct venc_ioctl_msg)
  309. #define VEN_IOCTL_GET_MULTI_SLICE_CFG \
  310. _IOR(VEN_IOCTLBASE_ENC, 25, struct venc_ioctl_msg)
  311. /*IOCTL params:SET: InputData - venc_ratectrlcfg, OutputData - NULL
  312. GET: InputData - NULL, OutputData - venc_ratectrlcfg*/
  313. #define VEN_IOCTL_SET_RATE_CTRL_CFG \
  314. _IOW(VEN_IOCTLBASE_ENC, 26, struct venc_ioctl_msg)
  315. #define VEN_IOCTL_GET_RATE_CTRL_CFG \
  316. _IOR(VEN_IOCTLBASE_ENC, 27, struct venc_ioctl_msg)
  317. /*IOCTL params:SET: InputData - venc_voptimingcfg, OutputData - NULL
  318. GET: InputData - NULL, OutputData - venc_voptimingcfg*/
  319. #define VEN_IOCTL_SET_VOP_TIMING_CFG \
  320. _IOW(VEN_IOCTLBASE_ENC, 28, struct venc_ioctl_msg)
  321. #define VEN_IOCTL_GET_VOP_TIMING_CFG \
  322. _IOR(VEN_IOCTLBASE_ENC, 29, struct venc_ioctl_msg)
  323. /*IOCTL params:SET: InputData - venc_framerate, OutputData - NULL
  324. GET: InputData - NULL, OutputData - venc_framerate*/
  325. #define VEN_IOCTL_SET_FRAME_RATE \
  326. _IOW(VEN_IOCTLBASE_ENC, 30, struct venc_ioctl_msg)
  327. #define VEN_IOCTL_GET_FRAME_RATE \
  328. _IOR(VEN_IOCTLBASE_ENC, 31, struct venc_ioctl_msg)
  329. /*IOCTL params:SET: InputData - venc_targetbitrate, OutputData - NULL
  330. GET: InputData - NULL, OutputData - venc_targetbitrate*/
  331. #define VEN_IOCTL_SET_TARGET_BITRATE \
  332. _IOW(VEN_IOCTLBASE_ENC, 32, struct venc_ioctl_msg)
  333. #define VEN_IOCTL_GET_TARGET_BITRATE \
  334. _IOR(VEN_IOCTLBASE_ENC, 33, struct venc_ioctl_msg)
  335. /*IOCTL params:SET: InputData - venc_rotation, OutputData - NULL
  336. GET: InputData - NULL, OutputData - venc_rotation*/
  337. #define VEN_IOCTL_SET_ROTATION \
  338. _IOW(VEN_IOCTLBASE_ENC, 34, struct venc_ioctl_msg)
  339. #define VEN_IOCTL_GET_ROTATION \
  340. _IOR(VEN_IOCTLBASE_ENC, 35, struct venc_ioctl_msg)
  341. /*IOCTL params:SET: InputData - venc_headerextension, OutputData - NULL
  342. GET: InputData - NULL, OutputData - venc_headerextension*/
  343. #define VEN_IOCTL_SET_HEC \
  344. _IOW(VEN_IOCTLBASE_ENC, 36, struct venc_ioctl_msg)
  345. #define VEN_IOCTL_GET_HEC \
  346. _IOR(VEN_IOCTLBASE_ENC, 37, struct venc_ioctl_msg)
  347. /*IOCTL params:SET: InputData - venc_switch, OutputData - NULL
  348. GET: InputData - NULL, OutputData - venc_switch*/
  349. #define VEN_IOCTL_SET_DATA_PARTITION \
  350. _IOW(VEN_IOCTLBASE_ENC, 38, struct venc_ioctl_msg)
  351. #define VEN_IOCTL_GET_DATA_PARTITION \
  352. _IOR(VEN_IOCTLBASE_ENC, 39, struct venc_ioctl_msg)
  353. /*IOCTL params:SET: InputData - venc_switch, OutputData - NULL
  354. GET: InputData - NULL, OutputData - venc_switch*/
  355. #define VEN_IOCTL_SET_RVLC \
  356. _IOW(VEN_IOCTLBASE_ENC, 40, struct venc_ioctl_msg)
  357. #define VEN_IOCTL_GET_RVLC \
  358. _IOR(VEN_IOCTLBASE_ENC, 41, struct venc_ioctl_msg)
  359. /*IOCTL params:SET: InputData - venc_switch, OutputData - NULL
  360. GET: InputData - NULL, OutputData - venc_switch*/
  361. #define VEN_IOCTL_SET_AC_PREDICTION \
  362. _IOW(VEN_IOCTLBASE_ENC, 42, struct venc_ioctl_msg)
  363. #define VEN_IOCTL_GET_AC_PREDICTION \
  364. _IOR(VEN_IOCTLBASE_ENC, 43, struct venc_ioctl_msg)
  365. /*IOCTL params:SET: InputData - venc_qprange, OutputData - NULL
  366. GET: InputData - NULL, OutputData - venc_qprange*/
  367. #define VEN_IOCTL_SET_QP_RANGE \
  368. _IOW(VEN_IOCTLBASE_ENC, 44, struct venc_ioctl_msg)
  369. #define VEN_IOCTL_GET_QP_RANGE \
  370. _IOR(VEN_IOCTLBASE_ENC, 45, struct venc_ioctl_msg)
  371. #define VEN_IOCTL_GET_NUMBER_INSTANCES \
  372. _IOR(VEN_IOCTLBASE_ENC, 46, struct venc_ioctl_msg)
  373. struct venc_switch{
  374. unsigned char status;
  375. };
  376. struct venc_allocatorproperty{
  377. unsigned long mincount;
  378. unsigned long maxcount;
  379. unsigned long actualcount;
  380. unsigned long datasize;
  381. unsigned long suffixsize;
  382. unsigned long alignment;
  383. unsigned long bufpoolid;
  384. };
  385. struct venc_bufferpayload{
  386. unsigned char *pbuffer;
  387. size_t sz;
  388. int fd;
  389. unsigned int offset;
  390. unsigned int maped_size;
  391. unsigned long filled_len;
  392. };
  393. struct venc_buffer{
  394. unsigned char *ptrbuffer;
  395. unsigned long sz;
  396. unsigned long len;
  397. unsigned long offset;
  398. long long timestamp;
  399. unsigned long flags;
  400. void *clientdata;
  401. };
  402. struct venc_basecfg{
  403. unsigned long input_width;
  404. unsigned long input_height;
  405. unsigned long dvs_width;
  406. unsigned long dvs_height;
  407. unsigned long codectype;
  408. unsigned long fps_num;
  409. unsigned long fps_den;
  410. unsigned long targetbitrate;
  411. unsigned long inputformat;
  412. };
  413. struct venc_profile{
  414. unsigned long profile;
  415. };
  416. struct ven_profilelevel{
  417. unsigned long level;
  418. };
  419. struct venc_sessionqp{
  420. unsigned long iframeqp;
  421. unsigned long pframqp;
  422. };
  423. struct venc_qprange{
  424. unsigned long maxqp;
  425. unsigned long minqp;
  426. };
  427. struct venc_intraperiod{
  428. unsigned long num_pframes;
  429. unsigned long num_bframes;
  430. };
  431. struct venc_seqheader{
  432. unsigned char *hdrbufptr;
  433. unsigned long bufsize;
  434. unsigned long hdrlen;
  435. };
  436. struct venc_capability{
  437. unsigned long codec_types;
  438. unsigned long maxframe_width;
  439. unsigned long maxframe_height;
  440. unsigned long maxtarget_bitrate;
  441. unsigned long maxframe_rate;
  442. unsigned long input_formats;
  443. unsigned char dvs;
  444. };
  445. struct venc_entropycfg{
  446. unsigned longentropysel;
  447. unsigned long cabacmodel;
  448. };
  449. struct venc_dbcfg{
  450. unsigned long db_mode;
  451. unsigned long slicealpha_offset;
  452. unsigned long slicebeta_offset;
  453. };
  454. struct venc_intrarefresh{
  455. unsigned long irmode;
  456. unsigned long mbcount;
  457. };
  458. struct venc_multiclicecfg{
  459. unsigned long mslice_mode;
  460. unsigned long mslice_size;
  461. };
  462. struct venc_bufferflush{
  463. unsigned long flush_mode;
  464. };
  465. struct venc_ratectrlcfg{
  466. unsigned long rcmode;
  467. };
  468. struct venc_voptimingcfg{
  469. unsigned long voptime_resolution;
  470. };
  471. struct venc_framerate{
  472. unsigned long fps_denominator;
  473. unsigned long fps_numerator;
  474. };
  475. struct venc_targetbitrate{
  476. unsigned long target_bitrate;
  477. };
  478. struct venc_rotation{
  479. unsigned long rotation;
  480. };
  481. struct venc_timeout{
  482. unsigned long millisec;
  483. };
  484. struct venc_headerextension{
  485. unsigned long header_extension;
  486. };
  487. struct venc_msg{
  488. unsigned long statuscode;
  489. unsigned long msgcode;
  490. struct venc_buffer buf;
  491. unsigned long msgdata_size;
  492. };
  493. struct venc_recon_addr{
  494. unsigned long buffer_size;
  495. unsigned long pmem_fd;
  496. unsigned long offset;
  497. };
  498. struct venc_recon_buff_size{
  499. int width;
  500. int height;
  501. int size;
  502. int alignment;
  503. };
  504. #endif /* _MSM_VIDC_ENC_H_ */