Merge 5796124eca on remote branch

Change-Id: I868406f1004f84830f50b0a25ccfaac715be143f
This commit is contained in:
Linux Build Service Account 2020-11-23 06:49:23 -08:00
commit 7cea43bf17
9 changed files with 190 additions and 108 deletions

View file

@ -116,6 +116,7 @@ enum v4l2_mpeg_vidc_extradata {
EXTRADATA_ENC_INPUT_ROI = 4,
EXTRADATA_ENC_INPUT_HDR10PLUS = 8,
EXTRADATA_ENC_INPUT_CVP = 16,
EXTRADATA_ENC_FRAME_QP = 32,
};
#define V4L2_CID_MPEG_VIDC_VIDEO_VUI_TIMING_INFO \
(V4L2_CID_MPEG_MSM_VIDC_BASE + 19)

View file

@ -440,8 +440,9 @@ static int alloc_dma_mem(size_t size, u32 align, u32 flags,
}
s_vpr_h(sid,
"%s: dma_buf = %pK, device_addr = %x, size = %d, kvaddr = %pK, buffer_type = %#x, flags = %#lx\n",
__func__, mem->dma_buf, mem->device_addr, mem->size,
"%s: dma_buf = %pK, inode = %lu, ref = %ld, device_addr = %x, size = %d, kvaddr = %pK, buffer_type = %#x, flags = %#lx\n",
__func__, mem->dma_buf, (dbuf ? file_inode(dbuf->file)->i_ino : -1),
(dbuf ? file_count(dbuf->file) : -1), mem->device_addr, mem->size,
mem->kvaddr, mem->buffer_type, mem->flags);
return rc;
@ -456,10 +457,14 @@ fail_shared_mem_alloc:
static int free_dma_mem(struct msm_smem *mem, u32 sid)
{
struct dma_buf *dbuf = NULL;
dbuf = (struct dma_buf *)mem->dma_buf;
s_vpr_h(sid,
"%s: dma_buf = %pK, device_addr = %x, size = %d, kvaddr = %pK, buffer_type = %#x\n",
__func__, mem->dma_buf, mem->device_addr, mem->size,
mem->kvaddr, mem->buffer_type);
"%s: dma_buf = %pK, inode = %lu, ref = %ld, device_addr = %x, size = %d, kvaddr = %pK, buffer_type = %#x\n",
__func__, dbuf, (dbuf ? file_inode(dbuf->file)->i_ino : -1),
(dbuf ? file_count(dbuf->file) : -1), mem->device_addr,
mem->size, mem->kvaddr, mem->buffer_type);
if (mem->device_addr) {
msm_dma_put_device_address(mem->flags,
@ -468,16 +473,16 @@ static int free_dma_mem(struct msm_smem *mem, u32 sid)
}
if (mem->kvaddr) {
dma_buf_vunmap(mem->dma_buf, mem->kvaddr);
dma_buf_vunmap(dbuf, mem->kvaddr);
mem->kvaddr = NULL;
dma_buf_end_cpu_access(mem->dma_buf, DMA_BIDIRECTIONAL);
dma_buf_end_cpu_access(dbuf, DMA_BIDIRECTIONAL);
}
if (mem->dma_buf) {
if (dbuf) {
trace_msm_smem_buffer_dma_op_start("FREE",
(u32)mem->buffer_type, -1, mem->size, -1,
mem->flags, -1);
dma_buf_put(mem->dma_buf);
dma_buf_put(dbuf);
mem->dma_buf = NULL;
trace_msm_smem_buffer_dma_op_end("FREE", (u32)mem->buffer_type,
-1, mem->size, -1, mem->flags, -1);

View file

@ -522,7 +522,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
.minimum = EXTRADATA_NONE,
.maximum = EXTRADATA_ADVANCED | EXTRADATA_ENC_INPUT_ROI |
EXTRADATA_ENC_INPUT_HDR10PLUS |
EXTRADATA_ENC_INPUT_CVP,
EXTRADATA_ENC_INPUT_CVP | EXTRADATA_ENC_FRAME_QP,
.default_value = EXTRADATA_NONE,
.menu_skip_mask = 0,
.qmenu = NULL,
@ -1555,7 +1555,7 @@ static int msm_venc_update_bitrate(struct msm_vidc_inst *inst)
u32 cabac_max_bitrate = 0;
if (!inst) {
d_vpr_e("%s: invalid params %pK\n", __func__);
d_vpr_e("%s: invalid params\n", __func__);
return -EINVAL;
}
@ -1782,7 +1782,8 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
msm_vidc_calculate_enc_input_extra_size(inst);
}
if (inst->prop.extradata_ctrls & EXTRADATA_ADVANCED) {
if ((inst->prop.extradata_ctrls & EXTRADATA_ADVANCED) ||
(inst->prop.extradata_ctrls & EXTRADATA_ENC_FRAME_QP)) {
f = &inst->fmts[OUTPUT_PORT].v4l2_fmt;
f->fmt.pix_mp.num_planes = 2;
f->fmt.pix_mp.plane_fmt[1].sizeimage =
@ -1908,17 +1909,17 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
}
} else if (inst->state == MSM_VIDC_START_DONE) {
if (!inst->external_blur) {
s_vpr_e(sid, "external blur not enabled");
s_vpr_e(sid, "%s: external blur not enabled", __func__);
break;
}
if (ctrl->val == MSM_VIDC_BLUR_EXTERNAL_DYNAMIC) {
s_vpr_h(sid,
"external blur setting already enabled\n",
"%s: external blur setting already enabled\n",
__func__);
break;
} else if (ctrl->val == MSM_VIDC_BLUR_INTERNAL) {
s_vpr_e(sid,
"cannot change to internal blur config dynamically\n",
"%s: cannot change to internal blur config dynamically\n",
__func__);
break;
} else {
@ -1970,6 +1971,9 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
case V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE:
inst->full_range = ctrl->val;
break;
case V4L2_CID_MPEG_VIDC_VENC_BITRATE_BOOST:
inst->boost_enabled = true;
break;
case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
inst->entropy_mode = msm_comm_v4l2_to_hfi(
V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE,
@ -2010,7 +2014,6 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
case V4L2_CID_MPEG_VIDEO_VBV_DELAY:
case V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET:
case V4L2_CID_MPEG_VIDC_VENC_BITRATE_SAVINGS:
case V4L2_CID_MPEG_VIDC_VENC_BITRATE_BOOST:
case V4L2_CID_MPEG_VIDC_VENC_QPRANGE_BOOST:
case V4L2_CID_MPEG_VIDC_SUPERFRAME:
s_vpr_h(sid, "Control set: ID : 0x%x Val : %d\n",
@ -3493,12 +3496,14 @@ int msm_venc_set_bitrate_boost_margin(struct msm_vidc_inst *inst, u32 enable)
struct v4l2_ctrl *ctrl = NULL;
struct hfi_bitrate_boost_margin boost_margin;
int minqp, maxqp;
uint32_t vpu;
if (!inst || !inst->core) {
d_vpr_e("%s: invalid params %pK\n", __func__, inst);
return -EINVAL;
}
hdev = inst->core->device;
vpu = inst->core->platform_data->vpu_ver;
if (!enable) {
boost_margin.margin = 0;
@ -3507,11 +3512,20 @@ int msm_venc_set_bitrate_boost_margin(struct msm_vidc_inst *inst, u32 enable)
ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VENC_BITRATE_BOOST);
/* Mapped value to 0, 25 or 50*/
/*
* For certain SOC, default value should be 0 unless client enabled
*/
if (!inst->boost_enabled && vpu == VPU_VERSION_AR50_LITE) {
ctrl->val = 0;
update_ctrl(ctrl, 0, inst->sid);
}
/* Mapped value to 0, 15, 25 or 50*/
if (ctrl->val >= 50)
boost_margin.margin = 50;
else
else if (ctrl->val >= 25)
boost_margin.margin = (u32)(ctrl->val/25) * 25;
else
boost_margin.margin = (u32)(ctrl->val/15) * 15;
setprop:
s_vpr_h(inst->sid, "%s: %d\n", __func__, boost_margin.margin);
@ -4591,6 +4605,11 @@ int msm_venc_set_extradata(struct msm_vidc_inst *inst)
msm_comm_set_extradata(inst,
HFI_PROPERTY_PARAM_VENC_LTR_INFO, 0x1);
if (inst->prop.extradata_ctrls & EXTRADATA_ENC_FRAME_QP)
// Enable AvgQP Extradata
msm_comm_set_extradata(inst,
HFI_PROPERTY_PARAM_VENC_FRAME_QP_EXTRADATA, 0x1);
if (inst->prop.extradata_ctrls & EXTRADATA_ENC_INPUT_ROI)
// Enable ROIQP Extradata
msm_comm_set_extradata(inst,

View file

@ -1267,7 +1267,9 @@ static void msm_vidc_buf_queue(struct vb2_buffer *vb2)
if (rc) {
print_vb2_buffer("failed vb2-qbuf", inst, vb2);
msm_comm_generate_session_error(inst);
vb2_buffer_done(vb2, VB2_BUF_STATE_DONE);
msm_vidc_queue_v4l2_event(inst,
V4L2_EVENT_MSM_VIDC_SYS_ERROR);
}
}

View file

@ -913,6 +913,8 @@ u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst, u32 buff
if (inst->core->platform_data->vpu_ver == VPU_VERSION_AR50_LITE) {
base_res_mbs = inst->capability.cap[CAP_MBS_PER_FRAME].max;
div_factor = 1;
if (num_mbs < NUM_MBS_720P)
base_res_mbs = base_res_mbs * 2;
}
/* For HEIF image, use the actual resolution to calc buffer size */
if (is_heif_decoder(inst)) {
@ -982,6 +984,7 @@ u32 msm_vidc_calculate_enc_output_frame_size(struct msm_vidc_inst *inst)
f = &inst->fmts[OUTPUT_PORT].v4l2_fmt;
/*
* Encoder output size calculation: 32 Align width/height
* For CQ or heic session : YUVsize * 2
* For resolution < 720p : YUVsize * 4
* For resolution > 720p & <= 4K : YUVsize / 2
* For resolution > 4k : YUVsize / 4
@ -996,6 +999,10 @@ u32 msm_vidc_calculate_enc_output_frame_size(struct msm_vidc_inst *inst)
mbs_per_frame = NUM_MBS_PER_FRAME(width, height);
frame_size = (width * height * 3);
if (inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ ||
is_grid_session(inst) || is_image_session(inst))
goto calc_done;
if (mbs_per_frame < NUM_MBS_720P)
frame_size = frame_size << 1;
else if (mbs_per_frame <= NUM_MBS_4k)
@ -1003,17 +1010,19 @@ u32 msm_vidc_calculate_enc_output_frame_size(struct msm_vidc_inst *inst)
else
frame_size = frame_size >> 3;
if ((inst->rc_type == RATE_CONTROL_OFF) ||
(inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ))
if (inst->rc_type == RATE_CONTROL_OFF)
frame_size = frame_size << 1;
if (inst->rc_type == RATE_CONTROL_LOSSLESS)
frame_size = (width * height * 9) >> 2;
/* multiply by 10/8 (1.25) to get size for 10 bit case */
if (f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC)
if (inst->core->platform_data->vpu_ver != VPU_VERSION_AR50_LITE &&
f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC) {
frame_size = frame_size + (frame_size >> 2);
}
calc_done:
return ALIGN(frame_size, SZ_4K);
}
@ -1076,6 +1085,9 @@ u32 msm_vidc_calculate_enc_output_extra_size(struct msm_vidc_inst *inst)
if (inst->prop.extradata_ctrls & EXTRADATA_ADVANCED)
size += sizeof(struct msm_vidc_metadata_ltr_payload);
if (inst->prop.extradata_ctrls & EXTRADATA_ENC_FRAME_QP)
size += sizeof(struct msm_vidc_frame_qp_payload);
/* Add size for extradata none */
if (size)
size += sizeof(struct msm_vidc_extradata_header);

View file

@ -1444,7 +1444,7 @@ static inline int msm_vidc_power_save_mode_enable(struct msm_vidc_inst *inst,
sizeof(hfi_perf_mode));
if (rc) {
s_vpr_e(inst->sid, "%s: Failed to set power save mode\n",
__func__, inst);
__func__);
return rc;
}
inst->flags = enable ?

View file

@ -1345,6 +1345,10 @@ static int msm_vidc_comm_update_ctrl(struct msm_vidc_inst *inst,
return -EINVAL;
}
/* For menu type, keep original menu_skip_mask(step) */
if (ctrl->type == V4L2_CTRL_TYPE_MENU)
cap->step_size = (u32)ctrl->step;
rc = v4l2_ctrl_modify_range(ctrl, cap->min, cap->max,
cap->step_size, cap->default_value);
if (rc) {
@ -2164,6 +2168,7 @@ static void handle_sys_error(enum hal_command_response cmd, void *data)
struct hfi_device *hdev = NULL;
struct msm_vidc_inst *inst = NULL;
int rc = 0;
bool panic = false;
subsystem_crashed("venus");
if (!response) {
@ -2199,12 +2204,11 @@ static void handle_sys_error(enum hal_command_response cmd, void *data)
}
/* handle the hw error before core released to get full debug info */
msm_vidc_handle_hw_error(core);
if ((response->status == VIDC_ERR_NOC_ERROR &&
(msm_vidc_err_recovery_disable &
VIDC_DISABLE_NOC_ERR_RECOV)) ||
(msm_vidc_err_recovery_disable &
VIDC_DISABLE_NON_NOC_ERR_RECOV)) {
if (response->status == VIDC_ERR_NOC_ERROR)
panic = !!(msm_vidc_err_recovery_disable & VIDC_DISABLE_NOC_ERR_RECOV);
else
panic = !!(msm_vidc_err_recovery_disable & VIDC_DISABLE_NON_NOC_ERR_RECOV);
if (panic) {
d_vpr_e("Got unrecoverable video fw error");
MSM_VIDC_ERROR(true);
}
@ -2652,6 +2656,9 @@ static void handle_fbd(enum hal_command_response cmd, void *data)
}
if (inst->core->resources.ubwc_stats_in_fbd == 1) {
u32 frame_size =
(msm_vidc_get_mbs_per_frame(inst) / (32 * 8) * 3) / 2;
mutex_lock(&inst->ubwc_stats_lock);
inst->ubwc_stats.is_valid =
fill_buf_done->ubwc_cr_stat.is_valid;
@ -2659,6 +2666,8 @@ static void handle_fbd(enum hal_command_response cmd, void *data)
fill_buf_done->ubwc_cr_stat.worst_cr;
inst->ubwc_stats.worst_cf =
fill_buf_done->ubwc_cr_stat.worst_cf;
if (frame_size)
inst->ubwc_stats.worst_cf /= frame_size;
mutex_unlock(&inst->ubwc_stats_lock);
}
@ -4756,6 +4765,7 @@ int msm_comm_qbufs_batch(struct msm_vidc_inst *inst,
{
int rc = 0;
struct msm_vidc_buffer *buf;
struct vb2_buffer *vb2;
int do_bw_calc = 0;
do_bw_calc = mbuf ? mbuf->vvb.vb2_buf.type == INPUT_MPLANE : 0;
@ -4780,6 +4790,11 @@ int msm_comm_qbufs_batch(struct msm_vidc_inst *inst,
if (rc) {
s_vpr_e(inst->sid, "%s: Failed batch qbuf to hfi: %d\n",
__func__, rc);
if (buf != mbuf) {
vb2 = &buf->vvb.vb2_buf;
vb2_buffer_done(vb2, VB2_BUF_STATE_DONE);
msm_vidc_queue_v4l2_event(inst, V4L2_EVENT_MSM_VIDC_SYS_ERROR);
}
break;
}
loop_end:
@ -6363,6 +6378,7 @@ int msm_comm_set_color_format(struct msm_vidc_inst *inst,
void msm_comm_print_inst_info(struct msm_vidc_inst *inst)
{
struct msm_vidc_buffer *mbuf;
struct dma_buf *dbuf;
struct internal_buf *buf;
bool is_decode = false;
enum vidc_ports port;
@ -6396,26 +6412,35 @@ void msm_comm_print_inst_info(struct msm_vidc_inst *inst)
mutex_lock(&inst->scratchbufs.lock);
s_vpr_e(inst->sid, "scratch buffer list:\n");
list_for_each_entry(buf, &inst->scratchbufs.list, list)
s_vpr_e(inst->sid, "type: %d addr: %x size: %u\n",
buf->buffer_type, buf->smem.device_addr,
buf->smem.size);
list_for_each_entry(buf, &inst->scratchbufs.list, list) {
dbuf = (struct dma_buf *)buf->smem.dma_buf;
s_vpr_e(inst->sid, "type: %d addr: %x size: %u inode: %lu ref: %ld\n",
buf->buffer_type, buf->smem.device_addr, buf->smem.size,
(dbuf ? file_inode(dbuf->file)->i_ino : -1),
(dbuf ? file_count(dbuf->file) : -1));
}
mutex_unlock(&inst->scratchbufs.lock);
mutex_lock(&inst->persistbufs.lock);
s_vpr_e(inst->sid, "persist buffer list:\n");
list_for_each_entry(buf, &inst->persistbufs.list, list)
s_vpr_e(inst->sid, "type: %d addr: %x size: %u\n",
buf->buffer_type, buf->smem.device_addr,
buf->smem.size);
list_for_each_entry(buf, &inst->persistbufs.list, list) {
dbuf = (struct dma_buf *)buf->smem.dma_buf;
s_vpr_e(inst->sid, "type: %d addr: %x size: %u inode: %lu ref: %ld\n",
buf->buffer_type, buf->smem.device_addr, buf->smem.size,
(dbuf ? file_inode(dbuf->file)->i_ino : -1),
(dbuf ? file_count(dbuf->file) : -1));
}
mutex_unlock(&inst->persistbufs.lock);
mutex_lock(&inst->outputbufs.lock);
s_vpr_e(inst->sid, "dpb buffer list:\n");
list_for_each_entry(buf, &inst->outputbufs.list, list)
s_vpr_e(inst->sid, "type: %d addr: %x size: %u\n",
buf->buffer_type, buf->smem.device_addr,
buf->smem.size);
list_for_each_entry(buf, &inst->outputbufs.list, list) {
dbuf = (struct dma_buf *)buf->smem.dma_buf;
s_vpr_e(inst->sid, "type: %d addr: %x size: %u inode: %lu ref: %ld\n",
buf->buffer_type, buf->smem.device_addr, buf->smem.size,
(dbuf ? file_inode(dbuf->file)->i_ino : -1),
(dbuf ? file_count(dbuf->file) : -1));
}
mutex_unlock(&inst->outputbufs.lock);
}
@ -6490,34 +6515,43 @@ void print_vidc_buffer(u32 tag, const char *str, struct msm_vidc_inst *inst,
struct msm_vidc_buffer *mbuf)
{
struct vb2_buffer *vb2 = NULL;
struct dma_buf *dbuf[2];
if (!(tag & msm_vidc_debug) || !inst || !mbuf)
return;
vb2 = &mbuf->vvb.vb2_buf;
dbuf[0] = (struct dma_buf *)mbuf->smem[0].dma_buf;
dbuf[1] = (struct dma_buf *)mbuf->smem[1].dma_buf;
if (vb2->num_planes == 1)
dprintk(tag, inst->sid,
"%s: %s: idx %2d fd %d off %d daddr %x size %d filled %d flags 0x%x ts %lld refcnt %d mflags 0x%x\n",
"%s: %s: idx %2d fd %d off %d daddr %x inode %lu ref %ld size %d filled %d flags 0x%x ts %lld refcnt %d mflags 0x%x\n",
str, vb2->type == INPUT_MPLANE ?
"OUTPUT" : "CAPTURE",
vb2->index, vb2->planes[0].m.fd,
vb2->planes[0].data_offset, mbuf->smem[0].device_addr,
(dbuf[0] ? file_inode(dbuf[0]->file)->i_ino : -1),
(dbuf[0] ? file_count(dbuf[0]->file) : -1),
vb2->planes[0].length, vb2->planes[0].bytesused,
mbuf->vvb.flags, mbuf->vvb.vb2_buf.timestamp,
mbuf->smem[0].refcount, mbuf->flags);
else
dprintk(tag, inst->sid,
"%s: %s: idx %2d fd %d off %d daddr %x size %d filled %d flags 0x%x ts %lld refcnt %d mflags 0x%x, extradata: fd %d off %d daddr %x size %d filled %d refcnt %d\n",
"%s: %s: idx %2d fd %d off %d daddr %x inode %lu ref %ld size %d filled %d flags 0x%x ts %lld refcnt %d mflags 0x%x, extradata: fd %d off %d daddr %x inode %lu ref %ld size %d filled %d refcnt %d\n",
str, vb2->type == INPUT_MPLANE ?
"OUTPUT" : "CAPTURE",
vb2->index, vb2->planes[0].m.fd,
vb2->planes[0].data_offset, mbuf->smem[0].device_addr,
(dbuf[0] ? file_inode(dbuf[0]->file)->i_ino : -1),
(dbuf[0] ? file_count(dbuf[0]->file) : -1),
vb2->planes[0].length, vb2->planes[0].bytesused,
mbuf->vvb.flags, mbuf->vvb.vb2_buf.timestamp,
mbuf->smem[0].refcount, mbuf->flags,
vb2->planes[1].m.fd, vb2->planes[1].data_offset,
mbuf->smem[1].device_addr, vb2->planes[1].length,
mbuf->smem[1].device_addr,
(dbuf[1] ? file_inode(dbuf[1]->file)->i_ino : -1),
(dbuf[1] ? file_count(dbuf[1]->file) : -1), vb2->planes[1].length,
vb2->planes[1].bytesused, mbuf->smem[1].refcount);
}

View file

@ -589,6 +589,7 @@ struct msm_vidc_inst {
u64 last_qbuf_time_ns;
bool active;
bool has_bframe;
bool boost_enabled;
bool boost_qp_enabled;
u32 boost_min_qp;
u32 boost_max_qp;

View file

@ -124,8 +124,10 @@ static struct msm_vidc_codec default_codecs[] = {
static struct msm_vidc_codec_capability bengal_capabilities_v0[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value} */
{CAP_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_FRAME_WIDTH, DEC, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 1920, 2, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 1920, 2, 1080},
/* ((1920 * 1088) / 256) */
{CAP_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 64, 8160, 1, 8160},
/* 1080@30 decode + 1080@30 encode */
@ -148,17 +150,19 @@ static struct msm_vidc_codec_capability bengal_capabilities_v0[] = {
{CAP_MAX_VIDEOCORES, DOMAINS_ALL, CODECS_ALL, 0, 1, 1, 1},
/* Secure usecase specific */
{CAP_SECURE_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 1920, 2, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 1920, 2, 1080},
/* (1920 * 1088) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 64, 8160, 1, 8160},
{CAP_SECURE_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 35000000, 1, 20000000},
/* Image specific */
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 1, 8192},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 1, 8192},
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 2, 8192},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 2, 8192},
/* Level for AVC and HEVC encoder specific.
* Default for levels is UNKNOWN value. But if we use unknown
@ -184,8 +188,10 @@ static struct msm_vidc_codec_capability bengal_capabilities_v0[] = {
static struct msm_vidc_codec_capability bengal_capabilities_v1[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value} */
{CAP_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_FRAME_WIDTH, DEC, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 1920, 2, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 1920, 2, 1080},
/* ((1920 * 1088) / 256) */
{CAP_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 64, 8160, 1, 8160},
/* 1920*1088 @30fps */
@ -208,17 +214,19 @@ static struct msm_vidc_codec_capability bengal_capabilities_v1[] = {
{CAP_MAX_VIDEOCORES, DOMAINS_ALL, CODECS_ALL, 0, 1, 1, 1},
/* Secure usecase specific */
{CAP_SECURE_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 1920, 2, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 1920, 2, 1080},
/* (1920 * 1088) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 64, 8160, 1, 8160},
{CAP_SECURE_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 35000000, 1, 20000000},
/* Image specific */
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 1, 8192},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 1, 8192},
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 2, 8192},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 2, 8192},
/* Level for AVC and HEVC encoder specific.
* Default for levels is UNKNOWN value. But if we use unknown
@ -246,8 +254,8 @@ static struct msm_vidc_codec_capability holi_capabilities[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value} */
{CAP_FRAME_WIDTH, DEC, CODECS_ALL, 96, 1920, 1, 1920},
{CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 1920, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 1920, 2, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 1920, 2, 1080},
/* ((1920 * 1088) / 256) */
{CAP_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 8160, 1, 8160},
{CAP_MBS_PER_FRAME, ENC, CODECS_ALL, 64, 8160, 1, 8160},
@ -274,8 +282,8 @@ static struct msm_vidc_codec_capability holi_capabilities[] = {
/* Secure usecase specific */
{CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 96, 1920, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 1920, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 1920, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 1920, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 1920, 2, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 1920, 2, 1080},
/* (1920 * 1088) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 64, 8160, 1, 8160},
{CAP_SECURE_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 35000000, 1, 20000000},
@ -284,10 +292,10 @@ static struct msm_vidc_codec_capability holi_capabilities[] = {
{CAP_ALLINTRA_MAX_FPS, ENC, H264|HEVC, 1, 30, 1, 30},
/* Image specific */
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 1, 8192},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 1, 8192},
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 2, 8192},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 2, 8192},
/* Level for AVC and HEVC encoder specific.
* Default for levels is UNKNOWN value. But if we use unknown
@ -315,8 +323,8 @@ static struct msm_vidc_codec_capability lahaina_capabilities[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value,} */
{CAP_FRAME_WIDTH, DEC, CODECS_ALL, 96, 8192, 1, 1920},
{CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 8192, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 8192, 1, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 8192, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 8192, 2, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 8192, 2, 1080},
/* (8192 * 4320) / 256 */
{CAP_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 138240, 1, 138240},
{CAP_MBS_PER_FRAME, ENC, CODECS_ALL, 64, 138240, 1, 138240},
@ -371,8 +379,8 @@ static struct msm_vidc_codec_capability lahaina_capabilities[] = {
/* Secure usecase specific */
{CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 2, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 2, 1080},
/* (4096 * 2304) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 36864, 1, 36864},
{CAP_SECURE_MBS_PER_FRAME, ENC, CODECS_ALL, 64, 36864, 1, 36864},
@ -384,8 +392,8 @@ static struct msm_vidc_codec_capability lahaina_capabilities[] = {
{CAP_BATCH_MAX_FPS, DEC, CODECS_ALL, 1, 120, 1, 120},
/* Lossless encoding usecase specific */
{CAP_LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 4096, 1, 1920},
{CAP_LOSSLESS_FRAME_HEIGHT, ENC, H264|HEVC, 128, 4096, 1, 1080},
{CAP_LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 4096, 2, 1920},
{CAP_LOSSLESS_FRAME_HEIGHT, ENC, H264|HEVC, 128, 4096, 2, 1080},
/* (4096 * 2304) / 256 */
{CAP_LOSSLESS_MBS_PER_FRAME, ENC, H264|HEVC, 64, 36864, 1, 36864},
@ -393,10 +401,10 @@ static struct msm_vidc_codec_capability lahaina_capabilities[] = {
{CAP_ALLINTRA_MAX_FPS, ENC, H264|HEVC, 1, 240, 1, 30},
/* Image specific */
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 16384, 1, 16384},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 16384, 1, 16384},
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 16384, 2, 16384},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 16384, 2, 16384},
/*
* Level for AVC and HEVC encoder specific.
@ -425,8 +433,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v0[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value,} */
{CAP_FRAME_WIDTH, DEC, CODECS_ALL, 96, 8192, 1, 1920},
{CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 8192, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 2, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 2, 1080},
/* (8192 * 4320) / 256 */
{CAP_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 138240, 1, 138240},
/* (4096 * 2176) / 256 */
@ -484,8 +492,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v0[] = {
/* Secure usecase specific */
{CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 2, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 2, 1080},
/* (3840 * 2176) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 34816, 1, 8160},
{CAP_SECURE_MBS_PER_FRAME, ENC, CODECS_ALL, 64, 34816, 1, 8160},
@ -497,8 +505,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v0[] = {
{CAP_BATCH_MAX_FPS, DEC, CODECS_ALL, 1, 60, 1, 60},
/* Lossless encoding usecase specific */
{CAP_LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 4096, 1, 1920},
{CAP_LOSSLESS_FRAME_HEIGHT, ENC, H264|HEVC, 128, 4096, 1, 1080},
{CAP_LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 4096, 2, 1920},
{CAP_LOSSLESS_FRAME_HEIGHT, ENC, H264|HEVC, 128, 4096, 2, 1080},
/* (4096 * 2176) / 256 */
{CAP_LOSSLESS_MBS_PER_FRAME, ENC, H264|HEVC, 64, 34816, 1, 8160},
@ -506,10 +514,10 @@ static struct msm_vidc_codec_capability shima_capabilities_v0[] = {
{CAP_ALLINTRA_MAX_FPS, ENC, H264|HEVC, 1, 120, 1, 30},
/* Image specific */
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 16384, 1, 16384},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 16384, 1, 16384},
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 16384, 2, 16384},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 16384, 2, 16384},
/*
* Level for AVC and HEVC encoder specific.
@ -538,8 +546,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v1[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value,} */
{CAP_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
{CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 2, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 2, 1080},
/* ((4096 * 2176) / 256) */
{CAP_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 34816, 1, 8160},
{CAP_MBS_PER_FRAME, ENC, CODECS_ALL, 64, 34816, 1, 8160},
@ -591,8 +599,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v1[] = {
/* Secure usecase specific */
{CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 128, 4096, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 128, 4096, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 2, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 2, 1080},
/* (4096 * 2176) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 34816, 1, 8160},
{CAP_SECURE_MBS_PER_FRAME, ENC, CODECS_ALL, 64, 34816, 1, 8160},
@ -604,8 +612,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v1[] = {
{CAP_BATCH_MAX_FPS, DEC, CODECS_ALL, 1, 30, 1, 30},
/* Lossless encoding usecase specific */
{CAP_LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 3840, 1, 1920},
{CAP_LOSSLESS_FRAME_HEIGHT, ENC, H264|HEVC, 128, 3840, 1, 1080},
{CAP_LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 3840, 2, 1920},
{CAP_LOSSLESS_FRAME_HEIGHT, ENC, H264|HEVC, 128, 3840, 2, 1080},
/* (3840 * 2176) / 256 */
{CAP_LOSSLESS_MBS_PER_FRAME, ENC, H264|HEVC, 64, 32640, 1, 8160},
@ -613,10 +621,10 @@ static struct msm_vidc_codec_capability shima_capabilities_v1[] = {
{CAP_ALLINTRA_MAX_FPS, ENC, H264|HEVC, 1, 120, 1, 30},
/* Image specific */
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 16384, 1, 16384},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 16384, 1, 16384},
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 16384, 2, 16384},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 16384, 2, 16384},
/*
* Level for AVC and HEVC encoder specific.
@ -645,8 +653,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v2[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value,} */
{CAP_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
{CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
{CAP_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 2, 1920},
{CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 2, 1080},
/* (4096 * 2176) / 256 */
{CAP_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 34816, 1, 8160},
{CAP_MBS_PER_FRAME, ENC, CODECS_ALL, 64, 34816, 1, 8160},
@ -697,8 +705,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v2[] = {
/* Secure usecase specific */
{CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 1, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 1, 1080},
{CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 128, 4096, 2, 1920},
{CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 128, 4096, 2, 1080},
/* (4096 * 2176) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DEC, CODECS_ALL, 36, 34816, 1, 8160},
{CAP_SECURE_MBS_PER_FRAME, ENC, CODECS_ALL, 64, 34816, 1, 8160},
@ -710,8 +718,8 @@ static struct msm_vidc_codec_capability shima_capabilities_v2[] = {
{CAP_BATCH_MAX_FPS, DEC, CODECS_ALL, 1, 30, 1, 30},
/* Lossless encoding usecase specific */
{CAP_LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 4096, 1, 1920},
{CAP_LOSSLESS_FRAME_HEIGHT, ENC, H264|HEVC, 128, 4096, 1, 1080},
{CAP_LOSSLESS_FRAME_WIDTH, ENC, H264|HEVC, 128, 4096, 2, 1920},
{CAP_LOSSLESS_FRAME_HEIGHT, ENC, H264|HEVC, 128, 4096, 2, 1080},
/* (4096 * 2176) / 256 */
{CAP_LOSSLESS_MBS_PER_FRAME, ENC, H264|HEVC, 64, 34816, 1, 8160},
@ -719,10 +727,10 @@ static struct msm_vidc_codec_capability shima_capabilities_v2[] = {
{CAP_ALLINTRA_MAX_FPS, ENC, H264|HEVC, 1, 120, 1, 30},
/* Image specific */
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 16384, 1, 16384},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 16384, 1, 16384},
{CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
{CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 16384, 2, 16384},
{CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 16384, 2, 16384},
/*
* Level for AVC and HEVC encoder specific.