pineapple.c 46 KB

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