hfi_parser.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /* Copyright (C) 2018 Linaro Ltd. */
  3. #ifndef __VENUS_HFI_PARSER_H__
  4. #define __VENUS_HFI_PARSER_H__
  5. #include "core.h"
  6. u32 hfi_parser(struct venus_core *core, struct venus_inst *inst,
  7. void *buf, u32 size);
  8. #define WHICH_CAP_MIN 0
  9. #define WHICH_CAP_MAX 1
  10. #define WHICH_CAP_STEP 2
  11. static inline u32 get_cap(struct venus_inst *inst, u32 type, u32 which)
  12. {
  13. struct venus_core *core = inst->core;
  14. struct hfi_capability *cap = NULL;
  15. struct venus_caps *caps;
  16. unsigned int i;
  17. caps = venus_caps_by_codec(core, inst->hfi_codec, inst->session_type);
  18. if (!caps)
  19. return 0;
  20. for (i = 0; i < caps->num_caps; i++) {
  21. if (caps->caps[i].capability_type == type) {
  22. cap = &caps->caps[i];
  23. break;
  24. }
  25. }
  26. if (!cap)
  27. return 0;
  28. switch (which) {
  29. case WHICH_CAP_MIN:
  30. return cap->min;
  31. case WHICH_CAP_MAX:
  32. return cap->max;
  33. case WHICH_CAP_STEP:
  34. return cap->step_size;
  35. default:
  36. break;
  37. }
  38. return 0;
  39. }
  40. static inline u32 cap_min(struct venus_inst *inst, u32 type)
  41. {
  42. return get_cap(inst, type, WHICH_CAP_MIN);
  43. }
  44. static inline u32 cap_max(struct venus_inst *inst, u32 type)
  45. {
  46. return get_cap(inst, type, WHICH_CAP_MAX);
  47. }
  48. static inline u32 cap_step(struct venus_inst *inst, u32 type)
  49. {
  50. return get_cap(inst, type, WHICH_CAP_STEP);
  51. }
  52. static inline u32 frame_width_min(struct venus_inst *inst)
  53. {
  54. return cap_min(inst, HFI_CAPABILITY_FRAME_WIDTH);
  55. }
  56. static inline u32 frame_width_max(struct venus_inst *inst)
  57. {
  58. return cap_max(inst, HFI_CAPABILITY_FRAME_WIDTH);
  59. }
  60. static inline u32 frame_width_step(struct venus_inst *inst)
  61. {
  62. return cap_step(inst, HFI_CAPABILITY_FRAME_WIDTH);
  63. }
  64. static inline u32 frame_height_min(struct venus_inst *inst)
  65. {
  66. return cap_min(inst, HFI_CAPABILITY_FRAME_HEIGHT);
  67. }
  68. static inline u32 frame_height_max(struct venus_inst *inst)
  69. {
  70. return cap_max(inst, HFI_CAPABILITY_FRAME_HEIGHT);
  71. }
  72. static inline u32 frame_height_step(struct venus_inst *inst)
  73. {
  74. return cap_step(inst, HFI_CAPABILITY_FRAME_HEIGHT);
  75. }
  76. static inline u32 frate_min(struct venus_inst *inst)
  77. {
  78. return cap_min(inst, HFI_CAPABILITY_FRAMERATE);
  79. }
  80. static inline u32 frate_max(struct venus_inst *inst)
  81. {
  82. return cap_max(inst, HFI_CAPABILITY_FRAMERATE);
  83. }
  84. static inline u32 frate_step(struct venus_inst *inst)
  85. {
  86. return cap_step(inst, HFI_CAPABILITY_FRAMERATE);
  87. }
  88. #endif