volcano.c 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2020-2022, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #include <soc/qcom/of_common.h>
  7. #include "msm_vidc_control.h"
  8. #include "msm_vidc_volcano.h"
  9. #include "msm_vidc_platform.h"
  10. #include "msm_vidc_debug.h"
  11. #include "msm_vidc_iris2.h"
  12. #include "hfi_property.h"
  13. #include "hfi_command.h"
  14. #include "venus_hfi.h"
  15. /* version: major[24:31], minor[16:23], revision[0:15] */
  16. #define DRIVER_VERSION 0x04000000
  17. #define DEFAULT_VIDEO_CONCEAL_COLOR_BLACK 0x8020010
  18. #define MAX_BASE_LAYER_PRIORITY_ID 63
  19. #define MAX_OP_POINT 31
  20. #define MAX_BITRATE 160000000
  21. #define MAX_BITRATE_V1 100000000
  22. #define DEFAULT_BITRATE 20000000
  23. #define MINIMUM_FPS 1
  24. #define MAXIMUM_FPS 480
  25. #define MAX_QP 51
  26. #define DEFAULT_QP 20
  27. #define MAX_CONSTANT_QUALITY 100
  28. #define MIN_SLICE_BYTE_SIZE 512
  29. #define MAX_SLICE_BYTE_SIZE \
  30. ((MAX_BITRATE) >> 3)
  31. #define MAX_SLICE_BYTE_SIZE_V1 \
  32. ((MAX_BITRATE_V1) >> 3)
  33. #define MAX_SLICE_MB_SIZE \
  34. (((4096 + 15) >> 4) * ((2160 + 15) >> 4))
  35. #define MAX_LTR_FRAME_COUNT 2
  36. #define ENC MSM_VIDC_ENCODER
  37. #define DEC MSM_VIDC_DECODER
  38. #define H264 MSM_VIDC_H264
  39. #define HEVC MSM_VIDC_HEVC
  40. #define VP9 MSM_VIDC_VP9
  41. #define HEIC MSM_VIDC_HEIC
  42. #define CODECS_ALL (H264 | HEVC | VP9 | HEIC)
  43. #define MAXIMUM_OVERRIDE_VP9_FPS 200
  44. #ifndef V4L2_PIX_FMT_QC08C
  45. #define V4L2_PIX_FMT_QC08C v4l2_fourcc('Q', '0', '8', 'C')
  46. #endif
  47. #ifndef V4L2_PIX_FMT_QC10C
  48. #define V4L2_PIX_FMT_QC10C v4l2_fourcc('Q', '1', '0', 'C')
  49. #endif
  50. static struct codec_info codec_data_volcano[] = {
  51. {
  52. .v4l2_codec = V4L2_PIX_FMT_H264,
  53. .vidc_codec = MSM_VIDC_H264,
  54. .pixfmt_name = "AVC",
  55. },
  56. {
  57. .v4l2_codec = V4L2_PIX_FMT_HEVC,
  58. .vidc_codec = MSM_VIDC_HEVC,
  59. .pixfmt_name = "HEVC",
  60. },
  61. {
  62. .v4l2_codec = V4L2_PIX_FMT_VP9,
  63. .vidc_codec = MSM_VIDC_VP9,
  64. .pixfmt_name = "VP9",
  65. },
  66. };
  67. static struct color_format_info color_format_data_volcano[] = {
  68. {
  69. .v4l2_color_format = V4L2_PIX_FMT_NV12,
  70. .vidc_color_format = MSM_VIDC_FMT_NV12,
  71. .pixfmt_name = "NV12",
  72. },
  73. {
  74. .v4l2_color_format = V4L2_PIX_FMT_NV21,
  75. .vidc_color_format = MSM_VIDC_FMT_NV21,
  76. .pixfmt_name = "NV21",
  77. },
  78. {
  79. .v4l2_color_format = V4L2_PIX_FMT_QC08C,
  80. .vidc_color_format = MSM_VIDC_FMT_NV12C,
  81. .pixfmt_name = "NV12C",
  82. },
  83. {
  84. .v4l2_color_format = V4L2_PIX_FMT_QC10C,
  85. .vidc_color_format = MSM_VIDC_FMT_TP10C,
  86. .pixfmt_name = "TP10C",
  87. },
  88. {
  89. .v4l2_color_format = V4L2_PIX_FMT_RGBA32,
  90. .vidc_color_format = MSM_VIDC_FMT_RGBA8888,
  91. .pixfmt_name = "RGBA",
  92. },
  93. };
  94. static struct color_primaries_info color_primaries_data_volcano[] = {
  95. {
  96. .v4l2_color_primaries = V4L2_COLORSPACE_DEFAULT,
  97. .vidc_color_primaries = MSM_VIDC_PRIMARIES_RESERVED,
  98. },
  99. {
  100. .v4l2_color_primaries = V4L2_COLORSPACE_REC709,
  101. .vidc_color_primaries = MSM_VIDC_PRIMARIES_BT709,
  102. },
  103. {
  104. .v4l2_color_primaries = V4L2_COLORSPACE_470_SYSTEM_M,
  105. .vidc_color_primaries = MSM_VIDC_PRIMARIES_BT470_SYSTEM_M,
  106. },
  107. {
  108. .v4l2_color_primaries = V4L2_COLORSPACE_470_SYSTEM_BG,
  109. .vidc_color_primaries = MSM_VIDC_PRIMARIES_BT470_SYSTEM_BG,
  110. },
  111. {
  112. .v4l2_color_primaries = V4L2_COLORSPACE_SMPTE170M,
  113. .vidc_color_primaries = MSM_VIDC_PRIMARIES_BT601_525,
  114. },
  115. {
  116. .v4l2_color_primaries = V4L2_COLORSPACE_SMPTE240M,
  117. .vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_ST240M,
  118. },
  119. {
  120. .v4l2_color_primaries = V4L2_COLORSPACE_BT2020,
  121. .vidc_color_primaries = MSM_VIDC_PRIMARIES_BT2020,
  122. },
  123. {
  124. .v4l2_color_primaries = V4L2_COLORSPACE_DCI_P3,
  125. .vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_RP431_2,
  126. },
  127. };
  128. static struct transfer_char_info transfer_char_data_volcano[] = {
  129. {
  130. .v4l2_transfer_char = V4L2_XFER_FUNC_DEFAULT,
  131. .vidc_transfer_char = MSM_VIDC_TRANSFER_RESERVED,
  132. },
  133. {
  134. .v4l2_transfer_char = V4L2_XFER_FUNC_709,
  135. .vidc_transfer_char = MSM_VIDC_TRANSFER_BT709,
  136. },
  137. {
  138. .v4l2_transfer_char = V4L2_XFER_FUNC_SMPTE240M,
  139. .vidc_transfer_char = MSM_VIDC_TRANSFER_SMPTE_ST240M,
  140. },
  141. {
  142. .v4l2_transfer_char = V4L2_XFER_FUNC_SRGB,
  143. .vidc_transfer_char = MSM_VIDC_TRANSFER_SRGB_SYCC,
  144. },
  145. {
  146. .v4l2_transfer_char = V4L2_XFER_FUNC_SMPTE2084,
  147. .vidc_transfer_char = MSM_VIDC_TRANSFER_SMPTE_ST2084_PQ,
  148. },
  149. };
  150. static struct matrix_coeff_info matrix_coeff_data_volcano[] = {
  151. {
  152. .v4l2_matrix_coeff = V4L2_YCBCR_ENC_DEFAULT,
  153. .vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_RESERVED,
  154. },
  155. {
  156. .v4l2_matrix_coeff = V4L2_YCBCR_ENC_709,
  157. .vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT709,
  158. },
  159. {
  160. .v4l2_matrix_coeff = V4L2_YCBCR_ENC_XV709,
  161. .vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT709,
  162. },
  163. {
  164. .v4l2_matrix_coeff = V4L2_YCBCR_ENC_XV601,
  165. .vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT470_SYS_BG_OR_BT601_625,
  166. },
  167. {
  168. .v4l2_matrix_coeff = V4L2_YCBCR_ENC_601,
  169. .vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT601_525_BT1358_525_OR_625,
  170. },
  171. {
  172. .v4l2_matrix_coeff = V4L2_YCBCR_ENC_SMPTE240M,
  173. .vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_SMPTE_ST240,
  174. },
  175. {
  176. .v4l2_matrix_coeff = V4L2_YCBCR_ENC_BT2020,
  177. .vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT2020_NON_CONSTANT,
  178. },
  179. {
  180. .v4l2_matrix_coeff = V4L2_YCBCR_ENC_BT2020_CONST_LUM,
  181. .vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT2020_CONSTANT,
  182. },
  183. };
  184. static struct msm_platform_core_capability core_data_volcano_v0[] = {
  185. /* {type, value} */
  186. {ENC_CODECS, H264 | HEVC | HEIC},
  187. {DEC_CODECS, H264 | HEVC | VP9 | HEIC},
  188. {MAX_SESSION_COUNT, 16},
  189. {MAX_NUM_720P_SESSIONS, 16},
  190. {MAX_NUM_1080P_SESSIONS, 16},
  191. {MAX_NUM_4K_SESSIONS, 4},
  192. {MAX_SECURE_SESSION_COUNT, 3},
  193. {MAX_RT_MBPF, 130560}, /* (4 * ((3840*2176)/256)) */
  194. {MAX_MBPF, 139264}, /* (4 * ((4096*2176)/256)) */
  195. /* max_load 3840x2176@120fps*/
  196. /* Concurrency: UHD@30 decode + UHD@30 encode */
  197. {MAX_MBPS, 3916800},
  198. {MAX_IMAGE_MBPF, 1048576}, /* (16384x16384)/256 */
  199. {MAX_MBPF_HQ, 8160}, /* ((1920x1088)/256) */
  200. {MAX_MBPS_HQ, 244800}, /* ((1920x1088)/256)@30fps */
  201. {MAX_MBPF_B_FRAME, 32640}, /* 3840x2176/256 */
  202. {MAX_MBPS_B_FRAME, 979200}, /* 3840x2176/256 MBs@30fps */
  203. {MAX_MBPS_ALL_INTRA, 489600}, /* ((1920x1088)/256)@60fps */
  204. {MAX_ENH_LAYER_COUNT, 5},
  205. {NUM_VPP_PIPE, 2},
  206. {SW_PC, 1},
  207. {FW_UNLOAD, 0},
  208. {HW_RESPONSE_TIMEOUT, HW_RESPONSE_TIMEOUT_VALUE}, /* 1000 ms */
  209. {SW_PC_DELAY, SW_PC_DELAY_VALUE }, /* 1500 ms (>HW_RESPONSE_TIMEOUT)*/
  210. {FW_UNLOAD_DELAY, FW_UNLOAD_DELAY_VALUE }, /* 3000 ms (>SW_PC_DELAY)*/
  211. {PAGEFAULT_NON_FATAL, 1},
  212. {PAGETABLE_CACHING, 0},
  213. {DCVS, 1},
  214. {DECODE_BATCH, 1},
  215. {DECODE_BATCH_TIMEOUT, 200},
  216. {STATS_TIMEOUT_MS, 2000},
  217. {AV_SYNC_WINDOW_SIZE, 40},
  218. {NON_FATAL_FAULTS, 1},
  219. {ENC_AUTO_FRAMERATE, 0},
  220. {DEVICE_CAPS, V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_META_CAPTURE |
  221. V4L2_CAP_STREAMING},
  222. {SUPPORTS_SYNX_FENCE, 1},
  223. {SUPPORTS_REQUESTS, 0},
  224. };
  225. static struct msm_platform_inst_capability instance_cap_data_volcano_v0[] = {
  226. /* {cap, domain, codec,
  227. * min, max, step_or_mask, value,
  228. * v4l2_id,
  229. * hfi_id,
  230. * flags}
  231. */
  232. {FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
  233. {FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
  234. {FRAME_WIDTH, ENC, HEIC, 128, 16384, 1, 16384},
  235. {LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 4096, 1, 1920},
  236. {SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
  237. {SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
  238. {FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
  239. {FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
  240. {FRAME_HEIGHT, ENC, HEIC, 128, 16384, 1, 16384},
  241. {LOSSLESS_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
  242. {SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
  243. {SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
  244. {PIX_FMTS, ENC | DEC, H264,
  245. MSM_VIDC_FMT_NV12,
  246. MSM_VIDC_FMT_NV12C,
  247. MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C,
  248. MSM_VIDC_FMT_NV12C},
  249. {PIX_FMTS, ENC | DEC, HEVC,
  250. MSM_VIDC_FMT_NV12,
  251. MSM_VIDC_FMT_TP10C,
  252. MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C |
  253. MSM_VIDC_FMT_P010 | MSM_VIDC_FMT_TP10C,
  254. MSM_VIDC_FMT_NV12C},
  255. {PIX_FMTS, ENC, HEIC,
  256. MSM_VIDC_FMT_NV12,
  257. MSM_VIDC_FMT_P010,
  258. MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_P010,
  259. MSM_VIDC_FMT_NV12},
  260. {PIX_FMTS, DEC, HEIC,
  261. MSM_VIDC_FMT_NV12,
  262. MSM_VIDC_FMT_TP10C,
  263. MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C |
  264. MSM_VIDC_FMT_P010 | MSM_VIDC_FMT_TP10C,
  265. MSM_VIDC_FMT_NV12C},
  266. {PIX_FMTS, DEC, VP9,
  267. MSM_VIDC_FMT_NV12,
  268. MSM_VIDC_FMT_TP10C,
  269. MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C |
  270. MSM_VIDC_FMT_P010 | MSM_VIDC_FMT_TP10C,
  271. MSM_VIDC_FMT_NV12C},
  272. {MIN_BUFFERS_INPUT, ENC | DEC, CODECS_ALL, 0, 64, 1, 4,
  273. V4L2_CID_MIN_BUFFERS_FOR_OUTPUT,
  274. 0,
  275. CAP_FLAG_VOLATILE},
  276. {MIN_BUFFERS_INPUT, ENC | DEC, HEIC, 0, 64, 1, 1,
  277. V4L2_CID_MIN_BUFFERS_FOR_OUTPUT,
  278. 0,
  279. CAP_FLAG_VOLATILE},
  280. {MIN_BUFFERS_OUTPUT, ENC | DEC, CODECS_ALL,
  281. 0, 64, 1, 4,
  282. V4L2_CID_MIN_BUFFERS_FOR_CAPTURE,
  283. HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT,
  284. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_VOLATILE},
  285. /* (4096 * 2176) / 256 */
  286. {MBPF, ENC, CODECS_ALL, 64, 34816, 1, 34816},
  287. /* ((16384x16384)/256) */
  288. {MBPF, ENC, HEIC, 64, 1048576, 1, 1048576},
  289. /* (4 * ((4096 * 2176)/256) */
  290. {MBPF, DEC, CODECS_ALL, 36, 139264, 1, 139264},
  291. /* (4096 * 2176) / 256 */
  292. {MBPF, DEC, VP9, 36, 34816, 1, 34816},
  293. /* ((8192x8192)/256) */
  294. {MBPF, DEC, HEIC, 64, 262144, 1, 262144 },
  295. /* (4096 * 2176) / 256 */
  296. {LOSSLESS_MBPF, ENC, H264 | HEVC, 64, 34816, 1, 34816},
  297. /* Batch Mode Decode */
  298. /* BATCH_MBPF + 2 is done for chipsets other than lanai
  299. * due to timeline constraints since msm_vidc_allow_decode_batch
  300. * has checks to allow batching for less than BATCH_MBPF.
  301. * Same applies for BATCH_FPS.
  302. */
  303. /* (1920 * 1088) / 256 */
  304. {BATCH_MBPF, DEC, H264 | HEVC | VP9, 64, 8162, 1, 8162},
  305. {BATCH_FPS, DEC, H264 | HEVC | VP9, 1, 61, 1, 61},
  306. /* (4096 * 2176) / 256 */
  307. {SECURE_MBPF, ENC | DEC, H264 | HEVC | VP9, 64, 34816, 1, 34816},
  308. {FRAME_RATE, ENC, CODECS_ALL,
  309. (MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
  310. 1, (DEFAULT_FPS << 16),
  311. 0,
  312. HFI_PROP_FRAME_RATE,
  313. CAP_FLAG_OUTPUT_PORT},
  314. {OPERATING_RATE, ENC, CODECS_ALL,
  315. (MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
  316. 1, (DEFAULT_FPS << 16)},
  317. {INPUT_RATE, ENC | DEC, CODECS_ALL,
  318. (MINIMUM_FPS << 16), INT_MAX,
  319. 1, (DEFAULT_FPS << 16)},
  320. {TIMESTAMP_RATE, ENC | DEC, CODECS_ALL,
  321. (MINIMUM_FPS << 16), INT_MAX,
  322. 1, (DEFAULT_FPS << 16)},
  323. {SCALE_FACTOR, ENC, H264 | HEVC, 1, 8, 1, 8},
  324. {MB_CYCLES_VSP, ENC, CODECS_ALL, 25, 25, 1, 25},
  325. {MB_CYCLES_VSP, DEC, CODECS_ALL, 25, 25, 1, 25},
  326. {MB_CYCLES_VSP, DEC, VP9, 60, 60, 1, 60},
  327. {MB_CYCLES_VPP, ENC, CODECS_ALL, 675, 675, 1, 675},
  328. {MB_CYCLES_VPP, DEC, CODECS_ALL, 200, 200, 1, 200},
  329. {MB_CYCLES_LP, ENC, CODECS_ALL, 320, 320, 1, 320},
  330. {MB_CYCLES_LP, DEC, CODECS_ALL, 200, 200, 1, 200},
  331. {MB_CYCLES_FW, ENC | DEC, CODECS_ALL, 326389, 326389, 1, 326389},
  332. {MB_CYCLES_FW_VPP, ENC | DEC, CODECS_ALL, 44156, 44156, 1, 44156},
  333. {ENC_RING_BUFFER_COUNT, ENC, CODECS_ALL,
  334. 0, 0, 1, 0},
  335. {CLIENT_ID, ENC | DEC, CODECS_ALL,
  336. INVALID_CLIENT_ID, INT_MAX, 1, INVALID_CLIENT_ID,
  337. 0},
  338. {HFLIP, ENC, CODECS_ALL,
  339. 0, 1, 1, 0,
  340. V4L2_CID_HFLIP,
  341. HFI_PROP_FLIP,
  342. CAP_FLAG_OUTPUT_PORT |
  343. CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
  344. {VFLIP, ENC, CODECS_ALL,
  345. 0, 1, 1, 0,
  346. V4L2_CID_VFLIP,
  347. HFI_PROP_FLIP,
  348. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  349. CAP_FLAG_DYNAMIC_ALLOWED},
  350. {ROTATION, ENC, CODECS_ALL,
  351. 0, 270, 90, 0,
  352. V4L2_CID_ROTATE,
  353. HFI_PROP_ROTATION,
  354. CAP_FLAG_OUTPUT_PORT},
  355. {SUPER_FRAME, ENC, H264 | HEVC,
  356. 0, 32, 1, 0,
  357. 0, 0,
  358. CAP_FLAG_NONE},
  359. {SLICE_DECODE, DEC, CODECS_ALL,
  360. 0, 0, 0, 0,
  361. V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE,
  362. 0},
  363. {HEADER_MODE, ENC, CODECS_ALL,
  364. V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
  365. V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
  366. BIT(V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE) |
  367. BIT(V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME),
  368. V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
  369. V4L2_CID_MPEG_VIDEO_HEADER_MODE,
  370. HFI_PROP_SEQ_HEADER_MODE,
  371. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  372. {PREPEND_SPSPPS_TO_IDR, ENC, CODECS_ALL,
  373. 0, 1, 1, 0,
  374. V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR},
  375. {WITHOUT_STARTCODE, ENC, CODECS_ALL,
  376. 0, 1, 1, 0,
  377. V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE,
  378. HFI_PROP_NAL_LENGTH_FIELD,
  379. CAP_FLAG_OUTPUT_PORT},
  380. {NAL_LENGTH_FIELD, ENC, CODECS_ALL,
  381. V4L2_MPEG_VIDEO_HEVC_SIZE_0,
  382. V4L2_MPEG_VIDEO_HEVC_SIZE_4,
  383. BIT(V4L2_MPEG_VIDEO_HEVC_SIZE_0) |
  384. BIT(V4L2_MPEG_VIDEO_HEVC_SIZE_4),
  385. V4L2_MPEG_VIDEO_HEVC_SIZE_0,
  386. V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD,
  387. HFI_PROP_NAL_LENGTH_FIELD,
  388. CAP_FLAG_MENU | CAP_FLAG_OUTPUT_PORT},
  389. /* TODO: Firmware introduced enumeration type for this
  390. * with and without seq header.
  391. */
  392. {REQUEST_I_FRAME, ENC, H264 | HEVC,
  393. 0, 0, 0, 0,
  394. V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME,
  395. HFI_PROP_REQUEST_SYNC_FRAME,
  396. CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
  397. /* Enc: Keeping CABAC and CAVLC as same bitrate.
  398. * Dec: there's no use of Bitrate cap
  399. */
  400. {BIT_RATE, ENC, H264 | HEVC,
  401. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  402. V4L2_CID_MPEG_VIDEO_BITRATE,
  403. HFI_PROP_TOTAL_BITRATE,
  404. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  405. CAP_FLAG_DYNAMIC_ALLOWED},
  406. {BITRATE_MODE, ENC, H264,
  407. V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
  408. V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
  409. BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) |
  410. BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR),
  411. V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
  412. V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
  413. HFI_PROP_RATE_CONTROL,
  414. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  415. {BITRATE_MODE, ENC, HEVC,
  416. V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
  417. V4L2_MPEG_VIDEO_BITRATE_MODE_CQ,
  418. BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) |
  419. BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) |
  420. BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CQ),
  421. V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
  422. V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
  423. HFI_PROP_RATE_CONTROL,
  424. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  425. {CABAC_MAX_BITRATE, ENC, H264 | HEVC, 0,
  426. 160000000, 1, 160000000},
  427. {CAVLC_MAX_BITRATE, ENC, H264, 0,
  428. 160000000, 1, 160000000},
  429. {ALLINTRA_MAX_BITRATE, ENC, H264 | HEVC, 0,
  430. 160000000, 1, 160000000},
  431. {LOWLATENCY_MAX_BITRATE, ENC, H264 | HEVC, 0,
  432. 70000000, 1, 70000000},
  433. {LOSSLESS, ENC, HEVC,
  434. 0, 1, 1, 0,
  435. V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU},
  436. {FRAME_SKIP_MODE, ENC, H264 | HEVC | HEIC,
  437. V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
  438. V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT,
  439. BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED) |
  440. BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT) |
  441. BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT),
  442. V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
  443. V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE,
  444. 0,
  445. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  446. {FRAME_RC_ENABLE, ENC, H264 | HEVC | HEIC,
  447. 0, 1, 1, 1,
  448. V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE},
  449. {CONSTANT_QUALITY, ENC, HEVC,
  450. 1, MAX_CONSTANT_QUALITY, 1, 90,
  451. V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY,
  452. HFI_PROP_CONSTANT_QUALITY,
  453. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  454. CAP_FLAG_DYNAMIC_ALLOWED},
  455. {GOP_SIZE, ENC, CODECS_ALL,
  456. 0, INT_MAX, 1, 2 * DEFAULT_FPS - 1,
  457. V4L2_CID_MPEG_VIDEO_GOP_SIZE,
  458. HFI_PROP_MAX_GOP_FRAMES,
  459. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  460. CAP_FLAG_DYNAMIC_ALLOWED},
  461. {GOP_CLOSURE, ENC, H264 | HEVC,
  462. 0, 1, 1, 1,
  463. V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
  464. 0},
  465. {B_FRAME, ENC, H264 | HEVC,
  466. 0, 7, 1, 0,
  467. V4L2_CID_MPEG_VIDEO_B_FRAMES,
  468. HFI_PROP_MAX_B_FRAMES,
  469. CAP_FLAG_OUTPUT_PORT},
  470. {BLUR_TYPES, ENC, H264 | HEVC,
  471. MSM_VIDC_BLUR_NONE, MSM_VIDC_BLUR_EXTERNAL,
  472. BIT(MSM_VIDC_BLUR_NONE) | BIT(MSM_VIDC_BLUR_EXTERNAL),
  473. MSM_VIDC_BLUR_NONE,
  474. 0,
  475. HFI_PROP_BLUR_TYPES,
  476. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  477. {CSC, ENC, CODECS_ALL,
  478. 0, 1, 1, 0,
  479. 0,
  480. HFI_PROP_CSC,
  481. CAP_FLAG_OUTPUT_PORT},
  482. {LOWLATENCY_MODE, ENC, H264 | HEVC,
  483. 0, 1, 1, 0,
  484. 0,
  485. 0,
  486. CAP_FLAG_NONE},
  487. {LOWLATENCY_MODE, DEC, H264 | HEVC | VP9,
  488. 0, 1, 1, 0,
  489. 0,
  490. HFI_PROP_SEQ_CHANGE_AT_SYNC_FRAME,
  491. CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
  492. {LTR_COUNT, ENC, H264 | HEVC,
  493. 0, MAX_LTR_FRAME_COUNT, 1, 0,
  494. V4L2_CID_MPEG_VIDEO_LTR_COUNT,
  495. HFI_PROP_LTR_COUNT,
  496. CAP_FLAG_OUTPUT_PORT},
  497. {USE_LTR, ENC, H264 | HEVC,
  498. 0,
  499. ((1 << MAX_LTR_FRAME_COUNT) - 1),
  500. 0, 0,
  501. V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES,
  502. HFI_PROP_LTR_USE,
  503. CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
  504. {MARK_LTR, ENC, H264 | HEVC,
  505. INVALID_DEFAULT_MARK_OR_USE_LTR,
  506. (MAX_LTR_FRAME_COUNT - 1),
  507. 1, INVALID_DEFAULT_MARK_OR_USE_LTR,
  508. V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX,
  509. HFI_PROP_LTR_MARK,
  510. CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
  511. {BASELAYER_PRIORITY, ENC, H264,
  512. 0, MAX_BASE_LAYER_PRIORITY_ID, 1, 0,
  513. V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID,
  514. HFI_PROP_BASELAYER_PRIORITYID,
  515. CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
  516. {AU_DELIMITER, ENC, H264 | HEVC,
  517. 0, 1, 1, 0,
  518. V4L2_CID_MPEG_VIDEO_AU_DELIMITER,
  519. HFI_PROP_AUD,
  520. CAP_FLAG_OUTPUT_PORT},
  521. {CONTENT_ADAPTIVE_CODING, ENC, H264 | HEVC,
  522. 0, 1, 1, 1,
  523. 0,
  524. HFI_PROP_CONTENT_ADAPTIVE_CODING,
  525. CAP_FLAG_OUTPUT_PORT},
  526. {REQUEST_PREPROCESS, ENC, H264 | HEVC,
  527. MSM_VIDC_PREPROCESS_NONE,
  528. MSM_VIDC_PREPROCESS_TYPE0,
  529. BIT(MSM_VIDC_PREPROCESS_NONE) |
  530. BIT(MSM_VIDC_PREPROCESS_TYPE0),
  531. MSM_VIDC_PREPROCESS_NONE,
  532. 0, HFI_PROP_REQUEST_PREPROCESS,
  533. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  534. {MIN_QUALITY, ENC, H264 | HEVC,
  535. 0, MAX_SUPPORTED_MIN_QUALITY, 70, MAX_SUPPORTED_MIN_QUALITY,
  536. 0,
  537. HFI_PROP_MAINTAIN_MIN_QUALITY,
  538. CAP_FLAG_OUTPUT_PORT},
  539. {VBV_DELAY, ENC, H264 | HEVC,
  540. 200, 300, 100, 300,
  541. V4L2_CID_MPEG_VIDEO_VBV_DELAY,
  542. HFI_PROP_VBV_DELAY,
  543. CAP_FLAG_OUTPUT_PORT},
  544. {PEAK_BITRATE, ENC, H264 | HEVC,
  545. /* default peak bitrate is 10% larger than avg bitrate */
  546. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  547. V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
  548. HFI_PROP_TOTAL_PEAK_BITRATE,
  549. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  550. CAP_FLAG_DYNAMIC_ALLOWED},
  551. {MIN_FRAME_QP, ENC, H264,
  552. MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
  553. V4L2_CID_MPEG_VIDEO_H264_MIN_QP,
  554. HFI_PROP_MIN_QP_PACKED,
  555. CAP_FLAG_OUTPUT_PORT},
  556. {MIN_FRAME_QP, ENC, HEVC | HEIC,
  557. MIN_QP_10BIT, MAX_QP, 1, MIN_QP_10BIT,
  558. V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP,
  559. HFI_PROP_MIN_QP_PACKED,
  560. CAP_FLAG_OUTPUT_PORT},
  561. {I_FRAME_MIN_QP, ENC, H264,
  562. MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
  563. V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP},
  564. {I_FRAME_MIN_QP, ENC, HEVC | HEIC,
  565. MIN_QP_10BIT, MAX_QP, 1, MIN_QP_10BIT,
  566. V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MIN_QP},
  567. {P_FRAME_MIN_QP, ENC, H264,
  568. MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
  569. V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP},
  570. {P_FRAME_MIN_QP, ENC, HEVC | HEIC,
  571. MIN_QP_10BIT, MAX_QP, 1, MIN_QP_10BIT,
  572. V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MIN_QP},
  573. {B_FRAME_MIN_QP, ENC, H264,
  574. MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
  575. V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MIN_QP},
  576. {B_FRAME_MIN_QP, ENC, HEVC | HEIC,
  577. MIN_QP_10BIT, MAX_QP, 1, MIN_QP_10BIT,
  578. V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MIN_QP},
  579. {MAX_FRAME_QP, ENC, H264,
  580. MIN_QP_8BIT, MAX_QP, 1, MAX_QP,
  581. V4L2_CID_MPEG_VIDEO_H264_MAX_QP,
  582. HFI_PROP_MAX_QP_PACKED,
  583. CAP_FLAG_OUTPUT_PORT},
  584. {MAX_FRAME_QP, ENC, HEVC | HEIC,
  585. MIN_QP_10BIT, MAX_QP, 1, MAX_QP,
  586. V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP,
  587. HFI_PROP_MAX_QP_PACKED,
  588. CAP_FLAG_OUTPUT_PORT},
  589. {I_FRAME_MAX_QP, ENC, H264,
  590. MIN_QP_8BIT, MAX_QP, 1, MAX_QP,
  591. V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MAX_QP},
  592. {I_FRAME_MAX_QP, ENC, HEVC | HEIC,
  593. MIN_QP_10BIT, MAX_QP, 1, MAX_QP,
  594. V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MAX_QP},
  595. {P_FRAME_MAX_QP, ENC, H264,
  596. MIN_QP_8BIT, MAX_QP, 1, MAX_QP,
  597. V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MAX_QP},
  598. {P_FRAME_MAX_QP, ENC, HEVC | HEIC,
  599. MIN_QP_10BIT, MAX_QP, 1, MAX_QP,
  600. V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MAX_QP},
  601. {B_FRAME_MAX_QP, ENC, H264,
  602. MIN_QP_8BIT, MAX_QP, 1, MAX_QP,
  603. V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MAX_QP},
  604. {B_FRAME_MAX_QP, ENC, HEVC | HEIC,
  605. MIN_QP_10BIT, MAX_QP, 1, MAX_QP,
  606. V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MAX_QP},
  607. {I_FRAME_QP, ENC, HEVC,
  608. MIN_QP_10BIT, MAX_QP, 1, DEFAULT_QP,
  609. V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP,
  610. HFI_PROP_QP_PACKED,
  611. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  612. CAP_FLAG_DYNAMIC_ALLOWED},
  613. {I_FRAME_QP, ENC, H264,
  614. MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP,
  615. V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP,
  616. HFI_PROP_QP_PACKED,
  617. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  618. CAP_FLAG_DYNAMIC_ALLOWED},
  619. {P_FRAME_QP, ENC, HEVC,
  620. MIN_QP_10BIT, MAX_QP, 1, DEFAULT_QP,
  621. V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP,
  622. HFI_PROP_QP_PACKED,
  623. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  624. CAP_FLAG_DYNAMIC_ALLOWED},
  625. {P_FRAME_QP, ENC, H264,
  626. MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP,
  627. V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP,
  628. HFI_PROP_QP_PACKED,
  629. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  630. CAP_FLAG_DYNAMIC_ALLOWED},
  631. {B_FRAME_QP, ENC, HEVC,
  632. MIN_QP_10BIT, MAX_QP, 1, DEFAULT_QP,
  633. V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP,
  634. HFI_PROP_QP_PACKED,
  635. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  636. CAP_FLAG_DYNAMIC_ALLOWED},
  637. {B_FRAME_QP, ENC, H264,
  638. MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP,
  639. V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP,
  640. HFI_PROP_QP_PACKED,
  641. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  642. CAP_FLAG_DYNAMIC_ALLOWED},
  643. {LAYER_TYPE, ENC, HEVC,
  644. V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B,
  645. V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P,
  646. BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B) |
  647. BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P),
  648. V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P,
  649. V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE,
  650. HFI_PROP_LAYER_ENCODING_TYPE,
  651. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  652. {LAYER_TYPE, ENC, H264,
  653. V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B,
  654. V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P,
  655. BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B) |
  656. BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P),
  657. V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P,
  658. V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE,
  659. HFI_PROP_LAYER_ENCODING_TYPE,
  660. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  661. {LAYER_ENABLE, ENC, H264,
  662. 0, 1, 1, 0,
  663. V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING,
  664. HFI_PROP_LAYER_ENCODING_TYPE,
  665. CAP_FLAG_OUTPUT_PORT},
  666. {LAYER_ENABLE, ENC, HEVC,
  667. 0, 1, 1, 0,
  668. 0,
  669. 0,
  670. CAP_FLAG_OUTPUT_PORT},
  671. {ENH_LAYER_COUNT, ENC, HEVC,
  672. 0, 5, 1, 0,
  673. V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER,
  674. HFI_PROP_LAYER_COUNT,
  675. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  676. CAP_FLAG_DYNAMIC_ALLOWED},
  677. {ENH_LAYER_COUNT, ENC, H264,
  678. 0, 5, 1, 0,
  679. V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER,
  680. HFI_PROP_LAYER_COUNT,
  681. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  682. CAP_FLAG_DYNAMIC_ALLOWED},
  683. {L0_BR, ENC, H264,
  684. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  685. V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BR,
  686. HFI_PROP_BITRATE_LAYER1,
  687. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  688. CAP_FLAG_DYNAMIC_ALLOWED},
  689. {L0_BR, ENC, HEVC,
  690. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  691. V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR,
  692. HFI_PROP_BITRATE_LAYER1,
  693. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  694. CAP_FLAG_DYNAMIC_ALLOWED},
  695. {L1_BR, ENC, H264,
  696. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  697. V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BR,
  698. HFI_PROP_BITRATE_LAYER2,
  699. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  700. CAP_FLAG_DYNAMIC_ALLOWED},
  701. {L1_BR, ENC, HEVC,
  702. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  703. V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR,
  704. HFI_PROP_BITRATE_LAYER2,
  705. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  706. CAP_FLAG_DYNAMIC_ALLOWED},
  707. {L2_BR, ENC, H264,
  708. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  709. V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BR,
  710. HFI_PROP_BITRATE_LAYER3,
  711. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  712. CAP_FLAG_DYNAMIC_ALLOWED},
  713. {L2_BR, ENC, HEVC,
  714. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  715. V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR,
  716. HFI_PROP_BITRATE_LAYER3,
  717. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  718. CAP_FLAG_DYNAMIC_ALLOWED},
  719. {L3_BR, ENC, H264,
  720. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  721. V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BR,
  722. HFI_PROP_BITRATE_LAYER4,
  723. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  724. CAP_FLAG_DYNAMIC_ALLOWED},
  725. {L3_BR, ENC, HEVC,
  726. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  727. V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR,
  728. HFI_PROP_BITRATE_LAYER4,
  729. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  730. CAP_FLAG_DYNAMIC_ALLOWED},
  731. {L4_BR, ENC, H264,
  732. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  733. V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BR,
  734. HFI_PROP_BITRATE_LAYER5,
  735. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  736. CAP_FLAG_DYNAMIC_ALLOWED},
  737. {L4_BR, ENC, HEVC,
  738. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  739. V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR,
  740. HFI_PROP_BITRATE_LAYER5,
  741. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  742. CAP_FLAG_DYNAMIC_ALLOWED},
  743. {L5_BR, ENC, H264,
  744. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  745. V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BR,
  746. HFI_PROP_BITRATE_LAYER6,
  747. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  748. CAP_FLAG_DYNAMIC_ALLOWED},
  749. {L5_BR, ENC, HEVC,
  750. 1, MAX_BITRATE, 1, DEFAULT_BITRATE,
  751. V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR,
  752. HFI_PROP_BITRATE_LAYER6,
  753. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
  754. CAP_FLAG_DYNAMIC_ALLOWED},
  755. {ENTROPY_MODE, ENC, H264,
  756. V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
  757. V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
  758. BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) |
  759. BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC),
  760. V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
  761. V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE,
  762. HFI_PROP_CABAC_SESSION,
  763. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  764. {ENTROPY_MODE, DEC, H264 | HEVC | VP9,
  765. V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
  766. V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
  767. BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) |
  768. BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC),
  769. V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
  770. 0,
  771. HFI_PROP_CABAC_SESSION},
  772. {PROFILE, ENC | DEC, H264,
  773. V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
  774. V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH,
  775. BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
  776. BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH) |
  777. BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
  778. BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
  779. BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH),
  780. V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
  781. V4L2_CID_MPEG_VIDEO_H264_PROFILE,
  782. HFI_PROP_PROFILE,
  783. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  784. {PROFILE, ENC | DEC, HEVC | HEIC,
  785. V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
  786. V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10_STILL_PICTURE,
  787. BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) |
  788. BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) |
  789. BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10) |
  790. BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10_STILL_PICTURE),
  791. V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
  792. V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
  793. HFI_PROP_PROFILE,
  794. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  795. {PROFILE, DEC, VP9,
  796. V4L2_MPEG_VIDEO_VP9_PROFILE_0,
  797. V4L2_MPEG_VIDEO_VP9_PROFILE_2,
  798. BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_0) |
  799. BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_2),
  800. V4L2_MPEG_VIDEO_VP9_PROFILE_0,
  801. V4L2_CID_MPEG_VIDEO_VP9_PROFILE,
  802. HFI_PROP_PROFILE,
  803. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  804. {LEVEL, ENC, H264,
  805. V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
  806. V4L2_MPEG_VIDEO_H264_LEVEL_6_0,
  807. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
  808. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) |
  809. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) |
  810. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) |
  811. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) |
  812. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
  813. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) |
  814. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) |
  815. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
  816. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
  817. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
  818. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
  819. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
  820. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
  821. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
  822. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) |
  823. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) |
  824. BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0),
  825. V4L2_MPEG_VIDEO_H264_LEVEL_6_0,
  826. V4L2_CID_MPEG_VIDEO_H264_LEVEL,
  827. HFI_PROP_LEVEL,
  828. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  829. {LEVEL, DEC, HEVC | HEIC,
  830. V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
  831. V4L2_MPEG_VIDEO_HEVC_LEVEL_6,
  832. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) |
  833. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) |
  834. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) |
  835. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) |
  836. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) |
  837. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) |
  838. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) |
  839. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) |
  840. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) |
  841. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) |
  842. BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6),
  843. V4L2_MPEG_VIDEO_HEVC_LEVEL_6,
  844. V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
  845. HFI_PROP_LEVEL,
  846. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  847. {LEVEL, DEC, VP9,
  848. V4L2_MPEG_VIDEO_VP9_LEVEL_1_0,
  849. V4L2_MPEG_VIDEO_VP9_LEVEL_5_2,
  850. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_0) |
  851. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_1) |
  852. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_0) |
  853. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_1) |
  854. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_0) |
  855. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_1) |
  856. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_0) |
  857. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_1) |
  858. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_0) |
  859. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_1) |
  860. BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_2),
  861. V4L2_MPEG_VIDEO_VP9_LEVEL_5_2,
  862. V4L2_CID_MPEG_VIDEO_VP9_LEVEL,
  863. HFI_PROP_LEVEL,
  864. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  865. {HEVC_TIER, ENC | DEC, HEVC,
  866. V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
  867. V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
  868. BIT(V4L2_MPEG_VIDEO_HEVC_TIER_MAIN) |
  869. BIT(V4L2_MPEG_VIDEO_HEVC_TIER_HIGH),
  870. V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
  871. V4L2_CID_MPEG_VIDEO_HEVC_TIER,
  872. HFI_PROP_TIER,
  873. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  874. {LF_MODE, ENC, H264,
  875. V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED,
  876. DB_H264_DISABLE_SLICE_BOUNDARY,
  877. BIT(V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED) |
  878. BIT(V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED) |
  879. BIT(DB_H264_DISABLE_SLICE_BOUNDARY),
  880. V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED,
  881. V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE,
  882. HFI_PROP_DEBLOCKING_MODE,
  883. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  884. {LF_MODE, ENC, HEVC,
  885. V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED,
  886. DB_HEVC_DISABLE_SLICE_BOUNDARY,
  887. BIT(V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED) |
  888. BIT(V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_ENABLED) |
  889. BIT(DB_HEVC_DISABLE_SLICE_BOUNDARY),
  890. V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_ENABLED,
  891. V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE,
  892. HFI_PROP_DEBLOCKING_MODE,
  893. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  894. {LF_ALPHA, ENC, H264,
  895. -6, 6, 1, 0,
  896. V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA},
  897. {LF_ALPHA, ENC, HEVC | HEIC,
  898. -6, 6, 1, 0,
  899. V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2},
  900. {LF_BETA, ENC, H264,
  901. -6, 6, 1, 0,
  902. V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA},
  903. {LF_BETA, ENC, HEVC | HEIC,
  904. -6, 6, 1, 0,
  905. V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2},
  906. {SLICE_MODE, ENC, H264 | HEVC,
  907. V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
  908. V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES,
  909. BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE) |
  910. BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB) |
  911. BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES),
  912. V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
  913. V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
  914. 0,
  915. CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
  916. {SLICE_MAX_BYTES, ENC, H264 | HEVC,
  917. MIN_SLICE_BYTE_SIZE, MAX_SLICE_BYTE_SIZE,
  918. 1, MIN_SLICE_BYTE_SIZE,
  919. V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES,
  920. HFI_PROP_MULTI_SLICE_BYTES_COUNT,
  921. CAP_FLAG_OUTPUT_PORT},
  922. {SLICE_MAX_MB, ENC, H264 | HEVC,
  923. 1, MAX_SLICE_MB_SIZE, 1, 1,
  924. V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB,
  925. HFI_PROP_MULTI_SLICE_MB_COUNT,
  926. CAP_FLAG_OUTPUT_PORT},
  927. {MB_RC, ENC, H264 | HEVC,
  928. 0, 1, 1, 1,
  929. V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE,
  930. 0,
  931. CAP_FLAG_OUTPUT_PORT},
  932. {TRANSFORM_8X8, ENC, H264,
  933. 0, 1, 1, 1,
  934. V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM,
  935. HFI_PROP_8X8_TRANSFORM,
  936. CAP_FLAG_OUTPUT_PORT},
  937. {CHROMA_QP_INDEX_OFFSET, ENC, HEVC,
  938. MIN_CHROMA_QP_OFFSET, MAX_CHROMA_QP_OFFSET,
  939. 1, MAX_CHROMA_QP_OFFSET,
  940. V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET,
  941. HFI_PROP_CHROMA_QP_OFFSET,
  942. CAP_FLAG_OUTPUT_PORT},
  943. {DISPLAY_DELAY_ENABLE, DEC, H264 | HEVC | VP9,
  944. 0, 1, 1, 0,
  945. V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE,
  946. HFI_PROP_DECODE_ORDER_OUTPUT,
  947. CAP_FLAG_INPUT_PORT},
  948. {DISPLAY_DELAY, DEC, H264 | HEVC | VP9,
  949. 0, 1, 1, 0,
  950. V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY,
  951. HFI_PROP_DECODE_ORDER_OUTPUT,
  952. CAP_FLAG_INPUT_PORT},
  953. {OUTPUT_ORDER, DEC, H264 | HEVC | VP9,
  954. 0, 1, 1, 0,
  955. 0,
  956. HFI_PROP_DECODE_ORDER_OUTPUT,
  957. CAP_FLAG_INPUT_PORT},
  958. {INPUT_BUF_HOST_MAX_COUNT, ENC | DEC, CODECS_ALL,
  959. DEFAULT_MAX_HOST_BUF_COUNT, DEFAULT_MAX_HOST_BURST_BUF_COUNT,
  960. 1, DEFAULT_MAX_HOST_BUF_COUNT,
  961. 0,
  962. HFI_PROP_BUFFER_HOST_MAX_COUNT,
  963. CAP_FLAG_INPUT_PORT},
  964. {OUTPUT_BUF_HOST_MAX_COUNT, ENC | DEC, CODECS_ALL,
  965. DEFAULT_MAX_HOST_BUF_COUNT, DEFAULT_MAX_HOST_BURST_BUF_COUNT,
  966. 1, DEFAULT_MAX_HOST_BUF_COUNT,
  967. 0,
  968. HFI_PROP_BUFFER_HOST_MAX_COUNT,
  969. CAP_FLAG_OUTPUT_PORT},
  970. {CONCEAL_COLOR_8BIT, DEC, CODECS_ALL, 0x0, 0xff3fcff, 1,
  971. DEFAULT_VIDEO_CONCEAL_COLOR_BLACK,
  972. V4L2_CID_MPEG_VIDEO_MUTE_YUV,
  973. HFI_PROP_CONCEAL_COLOR_8BIT,
  974. CAP_FLAG_INPUT_PORT},
  975. {CONCEAL_COLOR_10BIT, DEC, CODECS_ALL, 0x0, 0x3fffffff, 1,
  976. DEFAULT_VIDEO_CONCEAL_COLOR_BLACK,
  977. V4L2_CID_MPEG_VIDEO_MUTE_YUV,
  978. HFI_PROP_CONCEAL_COLOR_10BIT,
  979. CAP_FLAG_INPUT_PORT},
  980. {STAGE, DEC|ENC, CODECS_ALL,
  981. MSM_VIDC_STAGE_1,
  982. MSM_VIDC_STAGE_2, 1,
  983. MSM_VIDC_STAGE_2,
  984. 0,
  985. HFI_PROP_STAGE},
  986. {PIPE, DEC|ENC, CODECS_ALL,
  987. MSM_VIDC_PIPE_1,
  988. MSM_VIDC_PIPE_2, 1,
  989. MSM_VIDC_PIPE_2,
  990. 0,
  991. HFI_PROP_PIPE},
  992. {POC, DEC, H264, 0, 2, 1, 1,
  993. 0,
  994. HFI_PROP_PIC_ORDER_CNT_TYPE},
  995. {QUALITY_MODE, ENC, CODECS_ALL,
  996. MSM_VIDC_MAX_QUALITY_MODE,
  997. MSM_VIDC_POWER_SAVE_MODE, 1,
  998. MSM_VIDC_POWER_SAVE_MODE},
  999. {CODED_FRAMES, DEC, H264 | HEVC,
  1000. CODED_FRAMES_PROGRESSIVE, CODED_FRAMES_INTERLACE,
  1001. 1, CODED_FRAMES_PROGRESSIVE,
  1002. 0,
  1003. HFI_PROP_CODED_FRAMES},
  1004. {BIT_DEPTH, DEC, CODECS_ALL, BIT_DEPTH_8, BIT_DEPTH_10, 1, BIT_DEPTH_8,
  1005. 0,
  1006. HFI_PROP_LUMA_CHROMA_BIT_DEPTH},
  1007. {CODEC_CONFIG, DEC, H264 | HEVC, 0, 1, 1, 0,
  1008. 0, 0,
  1009. CAP_FLAG_DYNAMIC_ALLOWED},
  1010. {BITSTREAM_SIZE_OVERWRITE, DEC, CODECS_ALL, 0, INT_MAX, 1, 0,
  1011. 0},
  1012. {THUMBNAIL_MODE, DEC, CODECS_ALL,
  1013. 0, 1, 1, 0,
  1014. 0,
  1015. HFI_PROP_THUMBNAIL_MODE,
  1016. CAP_FLAG_INPUT_PORT},
  1017. {DEFAULT_HEADER, DEC, CODECS_ALL,
  1018. 0, 1, 1, 0,
  1019. 0,
  1020. HFI_PROP_DEC_DEFAULT_HEADER},
  1021. {RAP_FRAME, DEC, CODECS_ALL,
  1022. 0, 1, 1, 1,
  1023. 0,
  1024. HFI_PROP_DEC_START_FROM_RAP_FRAME,
  1025. CAP_FLAG_INPUT_PORT},
  1026. {SEQ_CHANGE_AT_SYNC_FRAME, DEC, CODECS_ALL,
  1027. 0, 1, 1, 1,
  1028. 0,
  1029. HFI_PROP_SEQ_CHANGE_AT_SYNC_FRAME,
  1030. CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
  1031. {FIRMWARE_PRIORITY_OFFSET, DEC | ENC, CODECS_ALL,
  1032. 1, 1, 1, 1},
  1033. {ALL_INTRA, ENC, H264 | HEVC,
  1034. 0, 1, 1, 0,
  1035. 0,
  1036. 0,
  1037. CAP_FLAG_OUTPUT_PORT},
  1038. {COMPLEXITY, ENC, H264 | HEVC,
  1039. 0, 100,
  1040. 1, DEFAULT_COMPLEXITY,
  1041. 0},
  1042. };
  1043. static struct msm_platform_inst_cap_dependency instance_cap_dependency_data_volcano_v0[] = {
  1044. /* {cap, domain, codec,
  1045. * parents,
  1046. * children,
  1047. * adjust, set}
  1048. */
  1049. {PIX_FMTS, ENC, HEVC,
  1050. {PROFILE, MIN_FRAME_QP, MAX_FRAME_QP, I_FRAME_QP, P_FRAME_QP,
  1051. B_FRAME_QP, MIN_QUALITY, BLUR_TYPES, LTR_COUNT}},
  1052. {PIX_FMTS, DEC, HEVC,
  1053. {PROFILE}},
  1054. {FRAME_RATE, ENC, CODECS_ALL,
  1055. {0},
  1056. NULL,
  1057. msm_vidc_set_q16},
  1058. {HFLIP, ENC, CODECS_ALL,
  1059. {0},
  1060. NULL,
  1061. msm_vidc_set_flip},
  1062. {VFLIP, ENC, CODECS_ALL,
  1063. {0},
  1064. NULL,
  1065. msm_vidc_set_flip},
  1066. {ROTATION, ENC, CODECS_ALL,
  1067. {0},
  1068. NULL,
  1069. msm_vidc_set_rotation},
  1070. {SUPER_FRAME, ENC, H264 | HEVC,
  1071. {INPUT_BUF_HOST_MAX_COUNT, OUTPUT_BUF_HOST_MAX_COUNT},
  1072. NULL,
  1073. NULL},
  1074. {HEADER_MODE, ENC, CODECS_ALL,
  1075. {0},
  1076. NULL,
  1077. msm_vidc_set_header_mode},
  1078. {WITHOUT_STARTCODE, ENC, CODECS_ALL,
  1079. {0},
  1080. NULL,
  1081. msm_vidc_set_nal_length},
  1082. {REQUEST_I_FRAME, ENC, H264 | HEVC,
  1083. {0},
  1084. NULL,
  1085. msm_vidc_set_req_sync_frame},
  1086. {BIT_RATE, ENC, H264,
  1087. {PEAK_BITRATE, BITRATE_BOOST, L0_BR},
  1088. msm_vidc_adjust_bitrate,
  1089. msm_vidc_set_bitrate},
  1090. {BIT_RATE, ENC, HEVC,
  1091. {PEAK_BITRATE, BITRATE_BOOST, L0_BR},
  1092. msm_vidc_adjust_bitrate,
  1093. msm_vidc_set_bitrate},
  1094. {BITRATE_MODE, ENC, H264,
  1095. {LTR_COUNT, IR_PERIOD, TIME_DELTA_BASED_RC, I_FRAME_QP,
  1096. P_FRAME_QP, B_FRAME_QP, ENH_LAYER_COUNT, BIT_RATE,
  1097. META_ROI_INFO, MIN_QUALITY, BITRATE_BOOST, VBV_DELAY,
  1098. PEAK_BITRATE, SLICE_MODE, CONTENT_ADAPTIVE_CODING,
  1099. BLUR_TYPES, LOWLATENCY_MODE, META_TRANSCODING_STAT_INFO},
  1100. msm_vidc_adjust_bitrate_mode,
  1101. msm_vidc_set_u32_enum},
  1102. {BITRATE_MODE, ENC, HEVC,
  1103. {LTR_COUNT, IR_PERIOD, TIME_DELTA_BASED_RC, I_FRAME_QP,
  1104. P_FRAME_QP, B_FRAME_QP, CONSTANT_QUALITY, ENH_LAYER_COUNT,
  1105. BIT_RATE, META_ROI_INFO, MIN_QUALITY, BITRATE_BOOST, VBV_DELAY,
  1106. PEAK_BITRATE, SLICE_MODE, CONTENT_ADAPTIVE_CODING,
  1107. BLUR_TYPES, LOWLATENCY_MODE},
  1108. msm_vidc_adjust_bitrate_mode,
  1109. msm_vidc_set_u32_enum},
  1110. {CONSTANT_QUALITY, ENC, HEVC | HEIC,
  1111. {0},
  1112. NULL,
  1113. msm_vidc_set_constant_quality},
  1114. {GOP_SIZE, ENC, CODECS_ALL,
  1115. {ALL_INTRA},
  1116. msm_vidc_adjust_gop_size,
  1117. msm_vidc_set_gop_size},
  1118. {B_FRAME, ENC, H264 | HEVC,
  1119. {ALL_INTRA},
  1120. msm_vidc_adjust_b_frame,
  1121. msm_vidc_set_u32},
  1122. {B_FRAME, ENC, HEIC,
  1123. {0},
  1124. msm_vidc_adjust_blur_type,
  1125. msm_vidc_set_u32_enum},
  1126. {LOWLATENCY_MODE, ENC, H264 | HEVC,
  1127. {STAGE, BIT_RATE},
  1128. msm_vidc_adjust_enc_lowlatency_mode,
  1129. NULL},
  1130. {LOWLATENCY_MODE, DEC, H264 | HEVC | VP9,
  1131. {STAGE},
  1132. msm_vidc_adjust_dec_lowlatency_mode,
  1133. NULL},
  1134. {LTR_COUNT, ENC, H264 | HEVC,
  1135. {0},
  1136. msm_vidc_adjust_ltr_count,
  1137. msm_vidc_set_u32},
  1138. {USE_LTR, ENC, H264 | HEVC,
  1139. {0},
  1140. msm_vidc_adjust_use_ltr,
  1141. msm_vidc_set_use_and_mark_ltr},
  1142. {MARK_LTR, ENC, H264 | HEVC,
  1143. {0},
  1144. msm_vidc_adjust_mark_ltr,
  1145. msm_vidc_set_use_and_mark_ltr},
  1146. {AU_DELIMITER, ENC, H264 | HEVC,
  1147. {0},
  1148. NULL,
  1149. msm_vidc_set_u32},
  1150. {CONTENT_ADAPTIVE_CODING, ENC, H264 | HEVC,
  1151. {REQUEST_PREPROCESS},
  1152. msm_vidc_adjust_brs,
  1153. msm_vidc_set_vbr_related_properties},
  1154. {REQUEST_PREPROCESS, ENC, H264 | HEVC,
  1155. {0},
  1156. msm_vidc_adjust_preprocess,
  1157. msm_vidc_set_preprocess},
  1158. {MIN_QUALITY, ENC, H264,
  1159. {BLUR_TYPES},
  1160. msm_vidc_adjust_min_quality,
  1161. msm_vidc_set_u32},
  1162. {MIN_QUALITY, ENC, H264 | HEVC,
  1163. {BLUR_TYPES},
  1164. msm_vidc_adjust_min_quality,
  1165. msm_vidc_set_u32},
  1166. {VBV_DELAY, ENC, H264 | HEVC,
  1167. {0},
  1168. NULL,
  1169. msm_vidc_set_cbr_related_properties},
  1170. {PEAK_BITRATE, ENC, H264 | HEVC,
  1171. {0},
  1172. msm_vidc_adjust_peak_bitrate,
  1173. msm_vidc_set_cbr_related_properties},
  1174. {MIN_FRAME_QP, ENC, H264,
  1175. {0},
  1176. NULL,
  1177. msm_vidc_set_min_qp},
  1178. {MIN_FRAME_QP, ENC, HEVC,
  1179. {0},
  1180. msm_vidc_adjust_hevc_min_qp,
  1181. msm_vidc_set_min_qp},
  1182. {MAX_FRAME_QP, ENC, H264,
  1183. {0},
  1184. NULL,
  1185. msm_vidc_set_max_qp},
  1186. {MAX_FRAME_QP, ENC, HEVC,
  1187. {0},
  1188. msm_vidc_adjust_hevc_max_qp,
  1189. msm_vidc_set_max_qp},
  1190. {I_FRAME_QP, ENC, HEVC,
  1191. {0},
  1192. msm_vidc_adjust_hevc_i_frame_qp,
  1193. msm_vidc_set_frame_qp},
  1194. {I_FRAME_QP, ENC, H264,
  1195. {0},
  1196. NULL,
  1197. msm_vidc_set_frame_qp},
  1198. {P_FRAME_QP, ENC, HEVC,
  1199. {0},
  1200. msm_vidc_adjust_hevc_p_frame_qp,
  1201. msm_vidc_set_frame_qp},
  1202. {P_FRAME_QP, ENC, H264,
  1203. {0},
  1204. NULL,
  1205. msm_vidc_set_frame_qp},
  1206. {B_FRAME_QP, ENC, HEVC,
  1207. {0},
  1208. msm_vidc_adjust_hevc_b_frame_qp,
  1209. msm_vidc_set_frame_qp},
  1210. {B_FRAME_QP, ENC, H264,
  1211. {0},
  1212. NULL,
  1213. msm_vidc_set_frame_qp},
  1214. {LAYER_TYPE, ENC, H264 | HEVC,
  1215. {CONTENT_ADAPTIVE_CODING, LTR_COUNT}},
  1216. {LAYER_ENABLE, ENC, H264 | HEVC,
  1217. {CONTENT_ADAPTIVE_CODING}},
  1218. {ENH_LAYER_COUNT, ENC, H264 | HEVC,
  1219. {GOP_SIZE, B_FRAME, BIT_RATE, MIN_QUALITY, SLICE_MODE, LTR_COUNT},
  1220. msm_vidc_adjust_layer_count,
  1221. msm_vidc_set_layer_count_and_type},
  1222. {L0_BR, ENC, H264 | HEVC,
  1223. {L1_BR},
  1224. msm_vidc_adjust_layer_bitrate,
  1225. msm_vidc_set_layer_bitrate},
  1226. {L1_BR, ENC, H264 | HEVC,
  1227. {L2_BR},
  1228. msm_vidc_adjust_layer_bitrate,
  1229. msm_vidc_set_layer_bitrate},
  1230. {L2_BR, ENC, H264 | HEVC,
  1231. {L3_BR},
  1232. msm_vidc_adjust_layer_bitrate,
  1233. msm_vidc_set_layer_bitrate},
  1234. {L3_BR, ENC, H264 | HEVC,
  1235. {L4_BR},
  1236. msm_vidc_adjust_layer_bitrate,
  1237. msm_vidc_set_layer_bitrate},
  1238. {L4_BR, ENC, H264 | HEVC,
  1239. {L5_BR},
  1240. msm_vidc_adjust_layer_bitrate,
  1241. msm_vidc_set_layer_bitrate},
  1242. {L5_BR, ENC, H264 | HEVC,
  1243. {0},
  1244. msm_vidc_adjust_layer_bitrate,
  1245. msm_vidc_set_layer_bitrate},
  1246. {ENTROPY_MODE, ENC, H264,
  1247. {BIT_RATE},
  1248. msm_vidc_adjust_entropy_mode,
  1249. msm_vidc_set_u32},
  1250. {PROFILE, ENC, H264,
  1251. {ENTROPY_MODE, TRANSFORM_8X8},
  1252. NULL,
  1253. msm_vidc_set_u32_enum},
  1254. {PROFILE, DEC, H264,
  1255. {ENTROPY_MODE},
  1256. NULL,
  1257. msm_vidc_set_u32_enum},
  1258. {PROFILE, ENC | DEC, HEVC,
  1259. {0},
  1260. msm_vidc_adjust_profile,
  1261. msm_vidc_set_u32_enum},
  1262. {PROFILE, DEC, VP9,
  1263. {0},
  1264. NULL,
  1265. msm_vidc_set_u32_enum},
  1266. {LEVEL, DEC, CODECS_ALL,
  1267. {0},
  1268. NULL,
  1269. msm_vidc_set_u32_enum},
  1270. {LEVEL, ENC, CODECS_ALL,
  1271. {0},
  1272. NULL,
  1273. msm_vidc_set_level},
  1274. {HEVC_TIER, ENC | DEC, HEVC | HEIC,
  1275. {0},
  1276. NULL,
  1277. msm_vidc_set_u32_enum},
  1278. {LF_MODE, ENC, CODECS_ALL,
  1279. {0},
  1280. NULL,
  1281. msm_vidc_set_deblock_mode},
  1282. {SLICE_MODE, ENC, H264 | HEVC,
  1283. {STAGE, DELIVERY_MODE},
  1284. msm_vidc_adjust_slice_count,
  1285. msm_vidc_set_slice_count},
  1286. {TRANSFORM_8X8, ENC, H264,
  1287. {0},
  1288. msm_vidc_adjust_transform_8x8,
  1289. msm_vidc_set_u32},
  1290. {CHROMA_QP_INDEX_OFFSET, ENC, HEVC,
  1291. {0},
  1292. msm_vidc_adjust_chroma_qp_index_offset,
  1293. msm_vidc_set_chroma_qp_index_offset},
  1294. {DISPLAY_DELAY_ENABLE, DEC, H264 | HEVC | VP9,
  1295. {OUTPUT_ORDER},
  1296. NULL,
  1297. NULL},
  1298. {DISPLAY_DELAY, DEC, H264 | HEVC | VP9,
  1299. {OUTPUT_ORDER},
  1300. NULL,
  1301. NULL},
  1302. {OUTPUT_ORDER, DEC, H264 | HEVC | VP9,
  1303. {0},
  1304. msm_vidc_adjust_output_order,
  1305. msm_vidc_set_u32},
  1306. {INPUT_BUF_HOST_MAX_COUNT, ENC | DEC, CODECS_ALL,
  1307. {0},
  1308. msm_vidc_adjust_input_buf_host_max_count,
  1309. msm_vidc_set_u32},
  1310. {INPUT_BUF_HOST_MAX_COUNT, ENC, H264 | HEVC,
  1311. {0},
  1312. msm_vidc_adjust_input_buf_host_max_count,
  1313. msm_vidc_set_u32},
  1314. {OUTPUT_BUF_HOST_MAX_COUNT, ENC | DEC, CODECS_ALL,
  1315. {0},
  1316. msm_vidc_adjust_output_buf_host_max_count,
  1317. msm_vidc_set_u32},
  1318. {OUTPUT_BUF_HOST_MAX_COUNT, ENC, H264 | HEVC,
  1319. {0},
  1320. msm_vidc_adjust_output_buf_host_max_count,
  1321. msm_vidc_set_u32},
  1322. {CONCEAL_COLOR_8BIT, DEC, CODECS_ALL,
  1323. {0},
  1324. NULL,
  1325. msm_vidc_set_u32_packed},
  1326. {CONCEAL_COLOR_10BIT, DEC, CODECS_ALL,
  1327. {0},
  1328. NULL,
  1329. msm_vidc_set_u32_packed},
  1330. {STAGE, ENC | DEC, CODECS_ALL,
  1331. {0},
  1332. NULL,
  1333. msm_vidc_set_stage},
  1334. {PIPE, DEC|ENC, CODECS_ALL,
  1335. {0},
  1336. NULL,
  1337. msm_vidc_set_pipe},
  1338. {THUMBNAIL_MODE, DEC, H264 | HEVC | VP9,
  1339. {OUTPUT_ORDER},
  1340. NULL,
  1341. msm_vidc_set_u32},
  1342. {RAP_FRAME, DEC, CODECS_ALL,
  1343. {0},
  1344. NULL,
  1345. msm_vidc_set_u32},
  1346. {FIRMWARE_PRIORITY_OFFSET, DEC | ENC, CODECS_ALL,
  1347. {0},
  1348. NULL,
  1349. NULL},
  1350. {ALL_INTRA, ENC, H264 | HEVC,
  1351. {LTR_COUNT, IR_PERIOD, SLICE_MODE, BIT_RATE},
  1352. msm_vidc_adjust_all_intra,
  1353. NULL},
  1354. };
  1355. /* Default UBWC config for LPDDR5 */
  1356. static struct msm_vidc_ubwc_config_data ubwc_config_volcano[] = {
  1357. UBWC_CONFIG(8, 32, 15, 0, 1, 1, 1),
  1358. };
  1359. static struct msm_vidc_format_capability format_data_volcano = {
  1360. .codec_info = codec_data_volcano,
  1361. .codec_info_size = ARRAY_SIZE(codec_data_volcano),
  1362. .color_format_info = color_format_data_volcano,
  1363. .color_format_info_size = ARRAY_SIZE(color_format_data_volcano),
  1364. .color_prim_info = color_primaries_data_volcano,
  1365. .color_prim_info_size = ARRAY_SIZE(color_primaries_data_volcano),
  1366. .transfer_char_info = transfer_char_data_volcano,
  1367. .transfer_char_info_size = ARRAY_SIZE(transfer_char_data_volcano),
  1368. .matrix_coeff_info = matrix_coeff_data_volcano,
  1369. .matrix_coeff_info_size = ARRAY_SIZE(matrix_coeff_data_volcano),
  1370. };
  1371. static const struct msm_vidc_platform_data volcano_data_v0 = {
  1372. /* caps related resorces */
  1373. .core_data = core_data_volcano_v0,
  1374. .core_data_size = ARRAY_SIZE(core_data_volcano_v0),
  1375. .inst_cap_data = instance_cap_data_volcano_v0,
  1376. .inst_cap_data_size = ARRAY_SIZE(instance_cap_data_volcano_v0),
  1377. .inst_cap_dependency_data = instance_cap_dependency_data_volcano_v0,
  1378. .inst_cap_dependency_data_size = ARRAY_SIZE(instance_cap_dependency_data_volcano_v0),
  1379. .csc_data.vpe_csc_custom_bias_coeff = vpe_csc_custom_bias_coeff,
  1380. .csc_data.vpe_csc_custom_matrix_coeff = vpe_csc_custom_matrix_coeff,
  1381. .csc_data.vpe_csc_custom_limit_coeff = vpe_csc_custom_limit_coeff,
  1382. .ubwc_config = ubwc_config_volcano,
  1383. .format_data = &format_data_volcano,
  1384. };
  1385. int msm_vidc_volcano_check_ddr_type(
  1386. struct msm_vidc_platform_data *platform_data, u32 hbb_override_val)
  1387. {
  1388. u32 ddr_type;
  1389. ddr_type = of_fdt_get_ddrtype();
  1390. if (ddr_type != DDR_TYPE_LPDDR5 &&
  1391. ddr_type != DDR_TYPE_LPDDR5X) {
  1392. d_vpr_e("%s: wrong ddr type %d\n", __func__, ddr_type);
  1393. return -EINVAL;
  1394. }
  1395. d_vpr_h("%s: ddr type %d\n", __func__, ddr_type);
  1396. return 0;
  1397. }
  1398. static int msm_vidc_init_data(struct msm_vidc_core *core)
  1399. {
  1400. int rc = 0;
  1401. d_vpr_h("%s: initialize volcano", __func__);
  1402. core->platform->data = volcano_data_v0;
  1403. rc = msm_vidc_volcano_check_ddr_type(&core->platform->data, 0xe);
  1404. if (rc)
  1405. return rc;
  1406. return rc;
  1407. }
  1408. int msm_vidc_init_platform_volcano(struct msm_vidc_core *core)
  1409. {
  1410. int rc = 0;
  1411. rc = msm_vidc_init_data(core);
  1412. if (rc)
  1413. return rc;
  1414. return 0;
  1415. }