pineapple.c 45 KB

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