forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.5 KiB
120 lines
2.5 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* Copyright (C) 2018 Linaro Ltd. */ |
|
#ifndef __VENUS_HFI_PARSER_H__ |
|
#define __VENUS_HFI_PARSER_H__ |
|
|
|
#include "core.h" |
|
|
|
u32 hfi_parser(struct venus_core *core, struct venus_inst *inst, |
|
void *buf, u32 size); |
|
|
|
#define WHICH_CAP_MIN 0 |
|
#define WHICH_CAP_MAX 1 |
|
#define WHICH_CAP_STEP 2 |
|
|
|
static inline u32 get_cap(struct venus_inst *inst, u32 type, u32 which) |
|
{ |
|
struct venus_core *core = inst->core; |
|
struct hfi_capability *cap = NULL; |
|
struct hfi_plat_caps *caps; |
|
unsigned int i; |
|
|
|
caps = venus_caps_by_codec(core, inst->hfi_codec, inst->session_type); |
|
if (!caps) |
|
return 0; |
|
|
|
for (i = 0; i < caps->num_caps; i++) { |
|
if (caps->caps[i].capability_type == type) { |
|
cap = &caps->caps[i]; |
|
break; |
|
} |
|
} |
|
|
|
if (!cap) |
|
return 0; |
|
|
|
switch (which) { |
|
case WHICH_CAP_MIN: |
|
return cap->min; |
|
case WHICH_CAP_MAX: |
|
return cap->max; |
|
case WHICH_CAP_STEP: |
|
return cap->step_size; |
|
default: |
|
break; |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
static inline u32 cap_min(struct venus_inst *inst, u32 type) |
|
{ |
|
return get_cap(inst, type, WHICH_CAP_MIN); |
|
} |
|
|
|
static inline u32 cap_max(struct venus_inst *inst, u32 type) |
|
{ |
|
return get_cap(inst, type, WHICH_CAP_MAX); |
|
} |
|
|
|
static inline u32 cap_step(struct venus_inst *inst, u32 type) |
|
{ |
|
return get_cap(inst, type, WHICH_CAP_STEP); |
|
} |
|
|
|
static inline u32 frame_width_min(struct venus_inst *inst) |
|
{ |
|
return cap_min(inst, HFI_CAPABILITY_FRAME_WIDTH); |
|
} |
|
|
|
static inline u32 frame_width_max(struct venus_inst *inst) |
|
{ |
|
return cap_max(inst, HFI_CAPABILITY_FRAME_WIDTH); |
|
} |
|
|
|
static inline u32 frame_width_step(struct venus_inst *inst) |
|
{ |
|
return cap_step(inst, HFI_CAPABILITY_FRAME_WIDTH); |
|
} |
|
|
|
static inline u32 frame_height_min(struct venus_inst *inst) |
|
{ |
|
return cap_min(inst, HFI_CAPABILITY_FRAME_HEIGHT); |
|
} |
|
|
|
static inline u32 frame_height_max(struct venus_inst *inst) |
|
{ |
|
return cap_max(inst, HFI_CAPABILITY_FRAME_HEIGHT); |
|
} |
|
|
|
static inline u32 frame_height_step(struct venus_inst *inst) |
|
{ |
|
return cap_step(inst, HFI_CAPABILITY_FRAME_HEIGHT); |
|
} |
|
|
|
static inline u32 frate_min(struct venus_inst *inst) |
|
{ |
|
return cap_min(inst, HFI_CAPABILITY_FRAMERATE); |
|
} |
|
|
|
static inline u32 frate_max(struct venus_inst *inst) |
|
{ |
|
return cap_max(inst, HFI_CAPABILITY_FRAMERATE); |
|
} |
|
|
|
static inline u32 frate_step(struct venus_inst *inst) |
|
{ |
|
return cap_step(inst, HFI_CAPABILITY_FRAMERATE); |
|
} |
|
|
|
static inline u32 core_num_max(struct venus_inst *inst) |
|
{ |
|
return cap_max(inst, HFI_CAPABILITY_MAX_VIDEOCORES); |
|
} |
|
|
|
static inline u32 mbs_per_frame_max(struct venus_inst *inst) |
|
{ |
|
return cap_max(inst, HFI_CAPABILITY_MBS_PER_FRAME); |
|
} |
|
|
|
#endif
|
|
|