pineapple.c 46 KB

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