[hal_h265d]: modify reg_cxt to reg_ctx

Signed-off-by: Yandong Lin <yandong.lin@rock-chips.com>
Change-Id: Ic182b046054e84f88695136b40c9b6c9243cc434
This commit is contained in:
Yandong Lin
2023-06-02 11:38:29 +08:00
committed by Herman Chen
parent e4554e2b84
commit a76ad475db
4 changed files with 444 additions and 444 deletions

View File

@@ -695,11 +695,11 @@ void hal_h265d_output_scalinglist_packet(void *hal, void *ptr, void *dxva)
scalingList_t sl; scalingList_t sl;
RK_U32 i, j, pos; RK_U32 i, j, pos;
h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva; h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
if (!dxva_cxt->pp.scaling_list_enabled_flag) { if (!dxva_cxt->pp.scaling_list_enabled_flag) {
return; return;
} }
if (memcmp((void*)&dxva_cxt->qm, reg_cxt->scaling_qm, sizeof(DXVA_Qmatrix_HEVC))) { if (memcmp((void*)&dxva_cxt->qm, reg_ctx->scaling_qm, sizeof(DXVA_Qmatrix_HEVC))) {
memset(&sl, 0, sizeof(scalingList_t)); memset(&sl, 0, sizeof(scalingList_t));
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
for (j = 0; j < 16; j++) { for (j = 0; j < 16; j++) {
@@ -720,9 +720,9 @@ void hal_h265d_output_scalinglist_packet(void *hal, void *ptr, void *dxva)
if (i < 2) if (i < 2)
sl.sl_dc[1][i] = dxva_cxt->qm.ucScalingListDCCoefSizeID3[i]; sl.sl_dc[1][i] = dxva_cxt->qm.ucScalingListDCCoefSizeID3[i];
} }
hal_record_scaling_list((scalingFactor_t *)reg_cxt->scaling_rk, &sl); hal_record_scaling_list((scalingFactor_t *)reg_ctx->scaling_rk, &sl);
} }
memcpy(ptr, reg_cxt->scaling_rk, sizeof(scalingFactor_t)); memcpy(ptr, reg_ctx->scaling_rk, sizeof(scalingFactor_t));
} }
RK_U8 cabac_table[27456] = { RK_U8 cabac_table[27456] = {

View File

@@ -42,27 +42,27 @@ static MPP_RET hal_h265d_alloc_res(void *hal)
{ {
RK_S32 i = 0; RK_S32 i = 0;
RK_S32 ret = 0; RK_S32 ret = 0;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
for (i = 0; i < MAX_GEN_REG; i++) { for (i = 0; i < MAX_GEN_REG; i++) {
reg_cxt->g_buf[i].hw_regs = reg_ctx->g_buf[i].hw_regs =
mpp_calloc_size(void, sizeof(H265d_REGS_t)); mpp_calloc_size(void, sizeof(H265d_REGS_t));
ret = mpp_buffer_get(reg_cxt->group, ret = mpp_buffer_get(reg_ctx->group,
&reg_cxt->g_buf[i].scaling_list_data, &reg_ctx->g_buf[i].scaling_list_data,
SCALING_LIST_SIZE); SCALING_LIST_SIZE);
if (ret) { if (ret) {
mpp_err("h265d scaling_list_data get buffer failed\n"); mpp_err("h265d scaling_list_data get buffer failed\n");
return ret; return ret;
} }
ret = mpp_buffer_get(reg_cxt->group, &reg_cxt->g_buf[i].pps_data, ret = mpp_buffer_get(reg_ctx->group, &reg_ctx->g_buf[i].pps_data,
PPS_SIZE); PPS_SIZE);
if (ret) { if (ret) {
mpp_err("h265d pps_data get buffer failed\n"); mpp_err("h265d pps_data get buffer failed\n");
return ret; return ret;
} }
ret = mpp_buffer_get(reg_cxt->group, &reg_cxt->g_buf[i].rps_data, ret = mpp_buffer_get(reg_ctx->group, &reg_ctx->g_buf[i].rps_data,
RPS_SIZE); RPS_SIZE);
if (ret) { if (ret) {
mpp_err("h265d rps_data get buffer failed\n"); mpp_err("h265d rps_data get buffer failed\n");
@@ -70,21 +70,21 @@ static MPP_RET hal_h265d_alloc_res(void *hal)
} }
} }
} else { } else {
reg_cxt->hw_regs = mpp_calloc_size(void, sizeof(H265d_REGS_t)); reg_ctx->hw_regs = mpp_calloc_size(void, sizeof(H265d_REGS_t));
ret = mpp_buffer_get(reg_cxt->group, &reg_cxt->scaling_list_data, ret = mpp_buffer_get(reg_ctx->group, &reg_ctx->scaling_list_data,
SCALING_LIST_SIZE); SCALING_LIST_SIZE);
if (ret) { if (ret) {
mpp_err("h265d scaling_list_data get buffer failed\n"); mpp_err("h265d scaling_list_data get buffer failed\n");
return ret; return ret;
} }
ret = mpp_buffer_get(reg_cxt->group, &reg_cxt->pps_data, PPS_SIZE); ret = mpp_buffer_get(reg_ctx->group, &reg_ctx->pps_data, PPS_SIZE);
if (ret) { if (ret) {
mpp_err("h265d pps_data get buffer failed\n"); mpp_err("h265d pps_data get buffer failed\n");
return ret; return ret;
} }
ret = mpp_buffer_get(reg_cxt->group, &reg_cxt->rps_data, RPS_SIZE); ret = mpp_buffer_get(reg_ctx->group, &reg_ctx->rps_data, RPS_SIZE);
if (ret) { if (ret) {
mpp_err("h265d rps_data get buffer failed\n"); mpp_err("h265d rps_data get buffer failed\n");
return ret; return ret;
@@ -97,65 +97,65 @@ static MPP_RET hal_h265d_alloc_res(void *hal)
static MPP_RET hal_h265d_release_res(void *hal) static MPP_RET hal_h265d_release_res(void *hal)
{ {
RK_S32 ret = 0; RK_S32 ret = 0;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
RK_S32 i = 0; RK_S32 i = 0;
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
for (i = 0; i < MAX_GEN_REG; i++) { for (i = 0; i < MAX_GEN_REG; i++) {
if (reg_cxt->g_buf[i].scaling_list_data) { if (reg_ctx->g_buf[i].scaling_list_data) {
ret = mpp_buffer_put(reg_cxt->g_buf[i].scaling_list_data); ret = mpp_buffer_put(reg_ctx->g_buf[i].scaling_list_data);
if (ret) { if (ret) {
mpp_err("h265d scaling_list_data free buffer failed\n"); mpp_err("h265d scaling_list_data free buffer failed\n");
return ret; return ret;
} }
} }
if (reg_cxt->g_buf[i].pps_data) { if (reg_ctx->g_buf[i].pps_data) {
ret = mpp_buffer_put(reg_cxt->g_buf[i].pps_data); ret = mpp_buffer_put(reg_ctx->g_buf[i].pps_data);
if (ret) { if (ret) {
mpp_err("h265d pps_data free buffer failed\n"); mpp_err("h265d pps_data free buffer failed\n");
return ret; return ret;
} }
} }
if (reg_cxt->g_buf[i].rps_data) { if (reg_ctx->g_buf[i].rps_data) {
ret = mpp_buffer_put(reg_cxt->g_buf[i].rps_data); ret = mpp_buffer_put(reg_ctx->g_buf[i].rps_data);
if (ret) { if (ret) {
mpp_err("h265d rps_data free buffer failed\n"); mpp_err("h265d rps_data free buffer failed\n");
return ret; return ret;
} }
} }
if (reg_cxt->g_buf[i].hw_regs) { if (reg_ctx->g_buf[i].hw_regs) {
mpp_free(reg_cxt->g_buf[i].hw_regs); mpp_free(reg_ctx->g_buf[i].hw_regs);
reg_cxt->g_buf[i].hw_regs = NULL; reg_ctx->g_buf[i].hw_regs = NULL;
} }
} }
} else { } else {
if (reg_cxt->scaling_list_data) { if (reg_ctx->scaling_list_data) {
ret = mpp_buffer_put(reg_cxt->scaling_list_data); ret = mpp_buffer_put(reg_ctx->scaling_list_data);
if (ret) { if (ret) {
mpp_err("h265d scaling_list_data free buffer failed\n"); mpp_err("h265d scaling_list_data free buffer failed\n");
return ret; return ret;
} }
} }
if (reg_cxt->pps_data) { if (reg_ctx->pps_data) {
ret = mpp_buffer_put(reg_cxt->pps_data); ret = mpp_buffer_put(reg_ctx->pps_data);
if (ret) { if (ret) {
mpp_err("h265d pps_data free buffer failed\n"); mpp_err("h265d pps_data free buffer failed\n");
return ret; return ret;
} }
} }
if (reg_cxt->rps_data) { if (reg_ctx->rps_data) {
ret = mpp_buffer_put(reg_cxt->rps_data); ret = mpp_buffer_put(reg_ctx->rps_data);
if (ret) { if (ret) {
mpp_err("h265d rps_data free buffer failed\n"); mpp_err("h265d rps_data free buffer failed\n");
return ret; return ret;
} }
} }
if (reg_cxt->hw_regs) { if (reg_ctx->hw_regs) {
mpp_free(reg_cxt->hw_regs); mpp_free(reg_ctx->hw_regs);
reg_cxt->hw_regs = NULL; reg_ctx->hw_regs = NULL;
} }
} }
return MPP_OK; return MPP_OK;
@@ -164,40 +164,40 @@ static MPP_RET hal_h265d_release_res(void *hal)
MPP_RET hal_h265d_rkv_init(void *hal, MppHalCfg *cfg) MPP_RET hal_h265d_rkv_init(void *hal, MppHalCfg *cfg)
{ {
MPP_RET ret = MPP_NOK; MPP_RET ret = MPP_NOK;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
mpp_slots_set_prop(reg_cxt->slots, SLOTS_HOR_ALIGN, hevc_hor_align); mpp_slots_set_prop(reg_ctx->slots, SLOTS_HOR_ALIGN, hevc_hor_align);
mpp_slots_set_prop(reg_cxt->slots, SLOTS_VER_ALIGN, hevc_ver_align); mpp_slots_set_prop(reg_ctx->slots, SLOTS_VER_ALIGN, hevc_ver_align);
reg_cxt->scaling_qm = mpp_calloc(DXVA_Qmatrix_HEVC, 1); reg_ctx->scaling_qm = mpp_calloc(DXVA_Qmatrix_HEVC, 1);
reg_cxt->sw_rps_buf = mpp_calloc(RK_U64, 400); reg_ctx->sw_rps_buf = mpp_calloc(RK_U64, 400);
if (reg_cxt->scaling_qm == NULL) { if (reg_ctx->scaling_qm == NULL) {
mpp_err("scaling_org alloc fail"); mpp_err("scaling_org alloc fail");
return MPP_ERR_MALLOC; return MPP_ERR_MALLOC;
} }
reg_cxt->scaling_rk = mpp_calloc(scalingFactor_t, 1); reg_ctx->scaling_rk = mpp_calloc(scalingFactor_t, 1);
if (reg_cxt->scaling_rk == NULL) { if (reg_ctx->scaling_rk == NULL) {
mpp_err("scaling_rk alloc fail"); mpp_err("scaling_rk alloc fail");
return MPP_ERR_MALLOC; return MPP_ERR_MALLOC;
} }
if (reg_cxt->group == NULL) { if (reg_ctx->group == NULL) {
ret = mpp_buffer_group_get_internal(&reg_cxt->group, MPP_BUFFER_TYPE_ION); ret = mpp_buffer_group_get_internal(&reg_ctx->group, MPP_BUFFER_TYPE_ION);
if (ret) { if (ret) {
mpp_err("h265d mpp_buffer_group_get failed\n"); mpp_err("h265d mpp_buffer_group_get failed\n");
return ret; return ret;
} }
} }
ret = mpp_buffer_get(reg_cxt->group, &reg_cxt->cabac_table_data, sizeof(cabac_table)); ret = mpp_buffer_get(reg_ctx->group, &reg_ctx->cabac_table_data, sizeof(cabac_table));
if (ret) { if (ret) {
mpp_err("h265d cabac_table get buffer failed\n"); mpp_err("h265d cabac_table get buffer failed\n");
return ret; return ret;
} }
ret = mpp_buffer_write(reg_cxt->cabac_table_data, 0, (void*)cabac_table, sizeof(cabac_table)); ret = mpp_buffer_write(reg_ctx->cabac_table_data, 0, (void*)cabac_table, sizeof(cabac_table));
if (ret) { if (ret) {
mpp_err("h265d write cabac_table data failed\n"); mpp_err("h265d write cabac_table data failed\n");
return ret; return ret;
@@ -238,30 +238,30 @@ MPP_RET hal_h265d_rkv_init(void *hal, MppHalCfg *cfg)
MPP_RET hal_h265d_rkv_deinit(void *hal) MPP_RET hal_h265d_rkv_deinit(void *hal)
{ {
RK_S32 ret = 0; RK_S32 ret = 0;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
ret = mpp_buffer_put(reg_cxt->cabac_table_data); ret = mpp_buffer_put(reg_ctx->cabac_table_data);
if (ret) { if (ret) {
mpp_err("h265d cabac_table free buffer failed\n"); mpp_err("h265d cabac_table free buffer failed\n");
return ret; return ret;
} }
if (reg_cxt->scaling_qm) { if (reg_ctx->scaling_qm) {
mpp_free(reg_cxt->scaling_qm); mpp_free(reg_ctx->scaling_qm);
} }
if (reg_cxt->sw_rps_buf) { if (reg_ctx->sw_rps_buf) {
mpp_free(reg_cxt->sw_rps_buf); mpp_free(reg_ctx->sw_rps_buf);
} }
if (reg_cxt->scaling_rk) { if (reg_ctx->scaling_rk) {
mpp_free(reg_cxt->scaling_rk); mpp_free(reg_ctx->scaling_rk);
} }
hal_h265d_release_res(hal); hal_h265d_release_res(hal);
if (reg_cxt->group) { if (reg_ctx->group) {
ret = mpp_buffer_group_put(reg_cxt->group); ret = mpp_buffer_group_put(reg_ctx->group);
if (ret) { if (ret) {
mpp_err("h265d group free buffer failed\n"); mpp_err("h265d group free buffer failed\n");
return ret; return ret;
@@ -276,19 +276,19 @@ static RK_S32 hal_h265d_v345_output_pps_packet(void *hal, void *dxva)
RK_S32 i, j; RK_S32 i, j;
RK_U32 log2_min_cb_size; RK_U32 log2_min_cb_size;
RK_S32 width, height; RK_S32 width, height;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva; h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva;
BitputCtx_t bp; BitputCtx_t bp;
RK_U64 *pps_packet = mpp_calloc(RK_U64, fifo_len + 1); RK_U64 *pps_packet = mpp_calloc(RK_U64, fifo_len + 1);
if (NULL == reg_cxt || dxva_cxt == NULL) { if (NULL == reg_ctx || dxva_cxt == NULL) {
mpp_err("%s:%s:%d reg_cxt or dxva_cxt is NULL", mpp_err("%s:%s:%d reg_ctx or dxva_cxt is NULL",
__FILE__, __FUNCTION__, __LINE__); __FILE__, __FUNCTION__, __LINE__);
MPP_FREE(pps_packet); MPP_FREE(pps_packet);
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
void *pps_ptr = mpp_buffer_get_ptr(reg_cxt->pps_data); void *pps_ptr = mpp_buffer_get_ptr(reg_ctx->pps_data);
if (NULL == pps_ptr) { if (NULL == pps_ptr) {
mpp_err("pps_data get ptr error"); mpp_err("pps_data get ptr error");
return MPP_ERR_NOMEM; return MPP_ERR_NOMEM;
@@ -461,8 +461,8 @@ static RK_S32 hal_h265d_v345_output_pps_packet(void *hal, void *dxva)
} }
{ {
RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_cxt->scaling_list_data); RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_ctx->scaling_list_data);
RK_U32 fd = mpp_buffer_get_fd(reg_cxt->scaling_list_data); RK_U32 fd = mpp_buffer_get_fd(reg_ctx->scaling_list_data);
hal_h265d_output_scalinglist_packet(hal, ptr_scaling, dxva); hal_h265d_output_scalinglist_packet(hal, ptr_scaling, dxva);
mpp_put_bits(&bp, fd, 32); mpp_put_bits(&bp, fd, 32);
@@ -490,19 +490,19 @@ static RK_S32 hal_h265d_output_pps_packet(void *hal, void *dxva)
RK_S32 i, j; RK_S32 i, j;
RK_U32 log2_min_cb_size; RK_U32 log2_min_cb_size;
RK_S32 width, height; RK_S32 width, height;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva; h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva;
BitputCtx_t bp; BitputCtx_t bp;
RK_U64 *pps_packet = mpp_calloc(RK_U64, fifo_len + 1); RK_U64 *pps_packet = mpp_calloc(RK_U64, fifo_len + 1);
if (NULL == reg_cxt || dxva_cxt == NULL) { if (NULL == reg_ctx || dxva_cxt == NULL) {
mpp_err("%s:%s:%d reg_cxt or dxva_cxt is NULL", mpp_err("%s:%s:%d reg_ctx or dxva_cxt is NULL",
__FILE__, __FUNCTION__, __LINE__); __FILE__, __FUNCTION__, __LINE__);
MPP_FREE(pps_packet); MPP_FREE(pps_packet);
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
void *pps_ptr = mpp_buffer_get_ptr(reg_cxt->pps_data); void *pps_ptr = mpp_buffer_get_ptr(reg_ctx->pps_data);
if (NULL == pps_ptr) { if (NULL == pps_ptr) {
mpp_err("pps_data get ptr error"); mpp_err("pps_data get ptr error");
return MPP_ERR_NOMEM; return MPP_ERR_NOMEM;
@@ -674,8 +674,8 @@ static RK_S32 hal_h265d_output_pps_packet(void *hal, void *dxva)
} }
{ {
RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_cxt->scaling_list_data); RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_ctx->scaling_list_data);
RK_U32 fd = mpp_buffer_get_fd(reg_cxt->scaling_list_data); RK_U32 fd = mpp_buffer_get_fd(reg_ctx->scaling_list_data);
hal_h265d_output_scalinglist_packet(hal, ptr_scaling, dxva); hal_h265d_output_scalinglist_packet(hal, ptr_scaling, dxva);
mpp_put_bits(&bp, fd, 32); mpp_put_bits(&bp, fd, 32);
@@ -765,19 +765,19 @@ MPP_RET hal_h265d_rkv_gen_regs(void *hal, HalTaskInfo *syn)
h265d_dxva2_picture_context_t *dxva_cxt = h265d_dxva2_picture_context_t *dxva_cxt =
(h265d_dxva2_picture_context_t *)syn->dec.syntax.data; (h265d_dxva2_picture_context_t *)syn->dec.syntax.data;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
void *rps_ptr = NULL; void *rps_ptr = NULL;
if (reg_cxt ->fast_mode) { if (reg_ctx ->fast_mode) {
for (i = 0; i < MAX_GEN_REG; i++) { for (i = 0; i < MAX_GEN_REG; i++) {
if (!reg_cxt->g_buf[i].use_flag) { if (!reg_ctx->g_buf[i].use_flag) {
syn->dec.reg_index = i; syn->dec.reg_index = i;
reg_cxt->rps_data = reg_cxt->g_buf[i].rps_data; reg_ctx->rps_data = reg_ctx->g_buf[i].rps_data;
reg_cxt->scaling_list_data = reg_ctx->scaling_list_data =
reg_cxt->g_buf[i].scaling_list_data; reg_ctx->g_buf[i].scaling_list_data;
reg_cxt->pps_data = reg_cxt->g_buf[i].pps_data; reg_ctx->pps_data = reg_ctx->g_buf[i].pps_data;
reg_cxt->hw_regs = reg_cxt->g_buf[i].hw_regs; reg_ctx->hw_regs = reg_ctx->g_buf[i].hw_regs;
reg_cxt->g_buf[i].use_flag = 1; reg_ctx->g_buf[i].use_flag = 1;
break; break;
} }
} }
@@ -786,7 +786,7 @@ MPP_RET hal_h265d_rkv_gen_regs(void *hal, HalTaskInfo *syn)
return MPP_ERR_NOMEM; return MPP_ERR_NOMEM;
} }
} }
rps_ptr = mpp_buffer_get_ptr(reg_cxt->rps_data); rps_ptr = mpp_buffer_get_ptr(reg_ctx->rps_data);
if (NULL == rps_ptr) { if (NULL == rps_ptr) {
mpp_err("rps_data get ptr error"); mpp_err("rps_data get ptr error");
@@ -800,17 +800,17 @@ MPP_RET hal_h265d_rkv_gen_regs(void *hal, HalTaskInfo *syn)
} }
/* output pps */ /* output pps */
if (reg_cxt->is_v345) { if (reg_ctx->is_v345) {
hal_h265d_v345_output_pps_packet(hal, syn->dec.syntax.data); hal_h265d_v345_output_pps_packet(hal, syn->dec.syntax.data);
} else { } else {
hal_h265d_output_pps_packet(hal, syn->dec.syntax.data); hal_h265d_output_pps_packet(hal, syn->dec.syntax.data);
} }
if (NULL == reg_cxt->hw_regs) { if (NULL == reg_ctx->hw_regs) {
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
hw_regs = (H265d_REGS_t*)reg_cxt->hw_regs; hw_regs = (H265d_REGS_t*)reg_ctx->hw_regs;
memset(hw_regs, 0, sizeof(H265d_REGS_t)); memset(hw_regs, 0, sizeof(H265d_REGS_t));
log2_min_cb_size = dxva_cxt->pp.log2_min_luma_coding_block_size_minus3 + 3; log2_min_cb_size = dxva_cxt->pp.log2_min_luma_coding_block_size_minus3 + 3;
@@ -834,7 +834,7 @@ MPP_RET hal_h265d_rkv_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->sw_y_virstride = virstrid_y >> 4; hw_regs->sw_y_virstride = virstrid_y >> 4;
hw_regs->sw_yuv_virstride = virstrid_yuv >> 4; hw_regs->sw_yuv_virstride = virstrid_yuv >> 4;
hw_regs->sw_sysctrl.sw_h26x_rps_mode = 0; hw_regs->sw_sysctrl.sw_h26x_rps_mode = 0;
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.CurrPic.Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.CurrPic.Index7Bits,
SLOT_BUFFER, &framebuf); SLOT_BUFFER, &framebuf);
hw_regs->sw_decout_base = mpp_buffer_get_fd(framebuf); //just index need map hw_regs->sw_decout_base = mpp_buffer_get_fd(framebuf); //just index need map
@@ -847,17 +847,17 @@ MPP_RET hal_h265d_rkv_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->sw_cur_poc = dxva_cxt->pp.CurrPicOrderCntVal; hw_regs->sw_cur_poc = dxva_cxt->pp.CurrPicOrderCntVal;
mpp_buf_slot_get_prop(reg_cxt->packet_slots, syn->dec.input, SLOT_BUFFER, mpp_buf_slot_get_prop(reg_ctx->packet_slots, syn->dec.input, SLOT_BUFFER,
&streambuf); &streambuf);
if ( dxva_cxt->bitstream == NULL) { if ( dxva_cxt->bitstream == NULL) {
dxva_cxt->bitstream = mpp_buffer_get_ptr(streambuf); dxva_cxt->bitstream = mpp_buffer_get_ptr(streambuf);
} }
if (reg_cxt->is_v345) { if (reg_ctx->is_v345) {
#ifdef HW_RPS #ifdef HW_RPS
hw_regs->sw_sysctrl.sw_wait_reset_en = 1; hw_regs->sw_sysctrl.sw_wait_reset_en = 1;
hw_regs->v345_reg_ends.reg064_mvc0.refp_layer_same_with_cur = 0xffff; hw_regs->v345_reg_ends.reg064_mvc0.refp_layer_same_with_cur = 0xffff;
hal_h265d_slice_hw_rps(syn->dec.syntax.data, rps_ptr, reg_cxt->sw_rps_buf, reg_cxt->fast_mode); hal_h265d_slice_hw_rps(syn->dec.syntax.data, rps_ptr, reg_ctx->sw_rps_buf, reg_ctx->fast_mode);
#else #else
hw_regs->sw_sysctrl.sw_h26x_rps_mode = 1; hw_regs->sw_sysctrl.sw_h26x_rps_mode = 1;
hal_h265d_slice_output_rps(syn->dec.syntax.data, rps_ptr); hal_h265d_slice_output_rps(syn->dec.syntax.data, rps_ptr);
@@ -866,13 +866,13 @@ MPP_RET hal_h265d_rkv_gen_regs(void *hal, HalTaskInfo *syn)
hal_h265d_slice_output_rps(syn->dec.syntax.data, rps_ptr); hal_h265d_slice_output_rps(syn->dec.syntax.data, rps_ptr);
} }
if (dxva_cxt->pp.slice_segment_header_extension_present_flag && !reg_cxt->is_v345) { if (dxva_cxt->pp.slice_segment_header_extension_present_flag && !reg_ctx->is_v345) {
update_stream_buffer(streambuf, syn); update_stream_buffer(streambuf, syn);
} }
hw_regs->sw_cabactbl_base = mpp_buffer_get_fd(reg_cxt->cabac_table_data); hw_regs->sw_cabactbl_base = mpp_buffer_get_fd(reg_ctx->cabac_table_data);
hw_regs->sw_pps_base = mpp_buffer_get_fd(reg_cxt->pps_data); hw_regs->sw_pps_base = mpp_buffer_get_fd(reg_ctx->pps_data);
hw_regs->sw_rps_base = mpp_buffer_get_fd(reg_cxt->rps_data); hw_regs->sw_rps_base = mpp_buffer_get_fd(reg_ctx->rps_data);
hw_regs->sw_strm_rlc_base = mpp_buffer_get_fd(streambuf); hw_regs->sw_strm_rlc_base = mpp_buffer_get_fd(streambuf);
stream_buf_size = mpp_buffer_get_size(streambuf); stream_buf_size = mpp_buffer_get_size(streambuf);
@@ -900,7 +900,7 @@ MPP_RET hal_h265d_rkv_gen_regs(void *hal, HalTaskInfo *syn)
if (dxva_cxt->pp.RefPicList[i].bPicEntry != 0xff && if (dxva_cxt->pp.RefPicList[i].bPicEntry != 0xff &&
dxva_cxt->pp.RefPicList[i].bPicEntry != 0x7f) { dxva_cxt->pp.RefPicList[i].bPicEntry != 0x7f) {
hw_regs->sw_refer_poc[i] = dxva_cxt->pp.PicOrderCntValList[i]; hw_regs->sw_refer_poc[i] = dxva_cxt->pp.PicOrderCntValList[i];
mpp_buf_slot_get_prop(reg_cxt->slots, mpp_buf_slot_get_prop(reg_ctx->slots,
dxva_cxt->pp.RefPicList[i].Index7Bits, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_BUFFER, &framebuf); SLOT_BUFFER, &framebuf);
if (framebuf != NULL) { if (framebuf != NULL) {
@@ -916,10 +916,10 @@ MPP_RET hal_h265d_rkv_gen_regs(void *hal, HalTaskInfo *syn)
} }
if (sw_ref_valid) { if (sw_ref_valid) {
mpp_dev_set_reg_offset(reg_cxt->dev, 10, sw_ref_valid & 0xf); mpp_dev_set_reg_offset(reg_ctx->dev, 10, sw_ref_valid & 0xf);
mpp_dev_set_reg_offset(reg_cxt->dev, 11, ((sw_ref_valid >> 4) & 0xf)); mpp_dev_set_reg_offset(reg_ctx->dev, 11, ((sw_ref_valid >> 4) & 0xf));
mpp_dev_set_reg_offset(reg_cxt->dev, 12, ((sw_ref_valid >> 8) & 0xf)); mpp_dev_set_reg_offset(reg_ctx->dev, 12, ((sw_ref_valid >> 8) & 0xf));
mpp_dev_set_reg_offset(reg_cxt->dev, 13, ((sw_ref_valid >> 12) & 0xf)); mpp_dev_set_reg_offset(reg_ctx->dev, 13, ((sw_ref_valid >> 12) & 0xf));
} }
return ret; return ret;
@@ -929,7 +929,7 @@ MPP_RET hal_h265d_rkv_start(void *hal, HalTaskInfo *task)
{ {
MPP_RET ret = MPP_OK; MPP_RET ret = MPP_OK;
H265d_REGS_t *hw_regs = NULL; H265d_REGS_t *hw_regs = NULL;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
RK_S32 index = task->dec.reg_index; RK_S32 index = task->dec.reg_index;
RK_U32 i; RK_U32 i;
@@ -940,10 +940,10 @@ MPP_RET hal_h265d_rkv_start(void *hal, HalTaskInfo *task)
return MPP_OK; return MPP_OK;
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
hw_regs = ( H265d_REGS_t *)reg_cxt->g_buf[index].hw_regs; hw_regs = ( H265d_REGS_t *)reg_ctx->g_buf[index].hw_regs;
} else { } else {
hw_regs = ( H265d_REGS_t *)reg_cxt->hw_regs; hw_regs = ( H265d_REGS_t *)reg_ctx->hw_regs;
} }
if (hw_regs == NULL) { if (hw_regs == NULL) {
@@ -954,8 +954,8 @@ MPP_RET hal_h265d_rkv_start(void *hal, HalTaskInfo *task)
do { do {
MppDevRegWrCfg wr_cfg; MppDevRegWrCfg wr_cfg;
MppDevRegRdCfg rd_cfg; MppDevRegRdCfg rd_cfg;
RK_U32 reg_size = (reg_cxt->is_v345) ? V345_HEVC_REGISTERS : RK_U32 reg_size = (reg_ctx->is_v345) ? V345_HEVC_REGISTERS :
(reg_cxt->client_type == VPU_CLIENT_RKVDEC) ? (reg_ctx->client_type == VPU_CLIENT_RKVDEC) ?
RKVDEC_V1_REGISTERS : RKVDEC_HEVC_REGISTERS; RKVDEC_V1_REGISTERS : RKVDEC_HEVC_REGISTERS;
reg_size *= sizeof(RK_U32); reg_size *= sizeof(RK_U32);
@@ -969,7 +969,7 @@ MPP_RET hal_h265d_rkv_start(void *hal, HalTaskInfo *task)
h265h_dbg(H265H_DBG_REG, "RK_HEVC_DEC: regs[%02d]=%08X\n", i, ((RK_U32 *)hw_regs)[i]); h265h_dbg(H265H_DBG_REG, "RK_HEVC_DEC: regs[%02d]=%08X\n", i, ((RK_U32 *)hw_regs)[i]);
} }
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -979,13 +979,13 @@ MPP_RET hal_h265d_rkv_start(void *hal, HalTaskInfo *task)
rd_cfg.size = reg_size; rd_cfg.size = reg_size;
rd_cfg.offset = 0; rd_cfg.offset = 0;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_RD, &rd_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_RD, &rd_cfg);
if (ret) { if (ret) {
mpp_err_f("set register read failed %d\n", ret); mpp_err_f("set register read failed %d\n", ret);
break; break;
} }
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_CMD_SEND, NULL); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_CMD_SEND, NULL);
if (ret) { if (ret) {
mpp_err_f("send cmd failed %d\n", ret); mpp_err_f("send cmd failed %d\n", ret);
break; break;
@@ -999,7 +999,7 @@ MPP_RET hal_h265d_rkv_wait(void *hal, HalTaskInfo *task)
{ {
MPP_RET ret = MPP_OK; MPP_RET ret = MPP_OK;
RK_S32 index = task->dec.reg_index; RK_S32 index = task->dec.reg_index;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
H265d_REGS_t *hw_regs = NULL; H265d_REGS_t *hw_regs = NULL;
RK_S32 i; RK_S32 i;
@@ -1009,13 +1009,13 @@ MPP_RET hal_h265d_rkv_wait(void *hal, HalTaskInfo *task)
goto ERR_PROC; goto ERR_PROC;
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
hw_regs = ( H265d_REGS_t *)reg_cxt->g_buf[index].hw_regs; hw_regs = ( H265d_REGS_t *)reg_ctx->g_buf[index].hw_regs;
} else { } else {
hw_regs = ( H265d_REGS_t *)reg_cxt->hw_regs; hw_regs = ( H265d_REGS_t *)reg_ctx->hw_regs;
} }
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_CMD_POLL, NULL); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_CMD_POLL, NULL);
if (ret) if (ret)
mpp_err_f("poll cmd failed %d\n", ret); mpp_err_f("poll cmd failed %d\n", ret);
@@ -1025,31 +1025,31 @@ ERR_PROC:
hw_regs->sw_interrupt.sw_dec_error_sta || hw_regs->sw_interrupt.sw_dec_error_sta ||
hw_regs->sw_interrupt.sw_dec_timeout_sta || hw_regs->sw_interrupt.sw_dec_timeout_sta ||
hw_regs->sw_interrupt.sw_dec_empty_sta) { hw_regs->sw_interrupt.sw_dec_empty_sta) {
if (!reg_cxt->fast_mode) { if (!reg_ctx->fast_mode) {
if (reg_cxt->dec_cb) if (reg_ctx->dec_cb)
mpp_callback(reg_cxt->dec_cb, &task->dec); mpp_callback(reg_ctx->dec_cb, &task->dec);
} else { } else {
MppFrame mframe = NULL; MppFrame mframe = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.output, mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.output,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
if (mframe) { if (mframe) {
reg_cxt->fast_mode_err_found = 1; reg_ctx->fast_mode_err_found = 1;
mpp_frame_set_errinfo(mframe, 1); mpp_frame_set_errinfo(mframe, 1);
} }
} }
} else { } else {
if (reg_cxt->fast_mode && reg_cxt->fast_mode_err_found) { if (reg_ctx->fast_mode && reg_ctx->fast_mode_err_found) {
for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(task->dec.refer); i++) { for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(task->dec.refer); i++) {
if (task->dec.refer[i] >= 0) { if (task->dec.refer[i] >= 0) {
MppFrame frame_ref = NULL; MppFrame frame_ref = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.refer[i], mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.refer[i],
SLOT_FRAME_PTR, &frame_ref); SLOT_FRAME_PTR, &frame_ref);
h265h_dbg(H265H_DBG_FAST_ERR, "refer[%d] %d frame %p\n", h265h_dbg(H265H_DBG_FAST_ERR, "refer[%d] %d frame %p\n",
i, task->dec.refer[i], frame_ref); i, task->dec.refer[i], frame_ref);
if (frame_ref && mpp_frame_get_errinfo(frame_ref)) { if (frame_ref && mpp_frame_get_errinfo(frame_ref)) {
MppFrame frame_out = NULL; MppFrame frame_out = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.output, mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.output,
SLOT_FRAME_PTR, &frame_out); SLOT_FRAME_PTR, &frame_out);
mpp_frame_set_errinfo(frame_out, 1); mpp_frame_set_errinfo(frame_out, 1);
break; break;
@@ -1063,8 +1063,8 @@ ERR_PROC:
h265h_dbg(H265H_DBG_REG, "RK_HEVC_DEC: regs[1]=0x%08X, regs[45]=0x%08x\n", ((RK_U32 *)hw_regs)[1], ((RK_U32 *)hw_regs)[45]); h265h_dbg(H265H_DBG_REG, "RK_HEVC_DEC: regs[1]=0x%08X, regs[45]=0x%08x\n", ((RK_U32 *)hw_regs)[1], ((RK_U32 *)hw_regs)[45]);
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
reg_cxt->g_buf[index].use_flag = 0; reg_ctx->g_buf[index].use_flag = 0;
} }
return ret; return ret;

View File

@@ -98,28 +98,28 @@ static const FilterdColBufRatio filterd_fbc_off[CTU][FMT] = {
static MPP_RET hal_h265d_vdpu34x_init(void *hal, MppHalCfg *cfg) static MPP_RET hal_h265d_vdpu34x_init(void *hal, MppHalCfg *cfg)
{ {
RK_S32 ret = 0; RK_S32 ret = 0;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
mpp_slots_set_prop(reg_cxt->slots, SLOTS_HOR_ALIGN, hevc_hor_align); mpp_slots_set_prop(reg_ctx->slots, SLOTS_HOR_ALIGN, hevc_hor_align);
mpp_slots_set_prop(reg_cxt->slots, SLOTS_VER_ALIGN, hevc_ver_align); mpp_slots_set_prop(reg_ctx->slots, SLOTS_VER_ALIGN, hevc_ver_align);
reg_cxt->scaling_qm = mpp_calloc(DXVA_Qmatrix_HEVC, 1); reg_ctx->scaling_qm = mpp_calloc(DXVA_Qmatrix_HEVC, 1);
if (reg_cxt->scaling_qm == NULL) { if (reg_ctx->scaling_qm == NULL) {
mpp_err("scaling_org alloc fail"); mpp_err("scaling_org alloc fail");
return MPP_ERR_MALLOC; return MPP_ERR_MALLOC;
} }
reg_cxt->scaling_rk = mpp_calloc(scalingFactor_t, 1); reg_ctx->scaling_rk = mpp_calloc(scalingFactor_t, 1);
reg_cxt->pps_buf = mpp_calloc(RK_U64, 15); reg_ctx->pps_buf = mpp_calloc(RK_U64, 15);
reg_cxt->sw_rps_buf = mpp_calloc(RK_U64, 400); reg_ctx->sw_rps_buf = mpp_calloc(RK_U64, 400);
if (reg_cxt->scaling_rk == NULL) { if (reg_ctx->scaling_rk == NULL) {
mpp_err("scaling_rk alloc fail"); mpp_err("scaling_rk alloc fail");
return MPP_ERR_MALLOC; return MPP_ERR_MALLOC;
} }
if (reg_cxt->group == NULL) { if (reg_ctx->group == NULL) {
ret = mpp_buffer_group_get_internal(&reg_cxt->group, MPP_BUFFER_TYPE_ION); ret = mpp_buffer_group_get_internal(&reg_ctx->group, MPP_BUFFER_TYPE_ION);
if (ret) { if (ret) {
mpp_err("h265d mpp_buffer_group_get failed\n"); mpp_err("h265d mpp_buffer_group_get failed\n");
return ret; return ret;
@@ -128,33 +128,33 @@ static MPP_RET hal_h265d_vdpu34x_init(void *hal, MppHalCfg *cfg)
{ {
RK_U32 i = 0; RK_U32 i = 0;
RK_U32 max_cnt = reg_cxt->fast_mode ? MAX_GEN_REG : 1; RK_U32 max_cnt = reg_ctx->fast_mode ? MAX_GEN_REG : 1;
//!< malloc buffers //!< malloc buffers
ret = mpp_buffer_get(reg_cxt->group, &reg_cxt->bufs, ALL_BUFFER_SIZE(max_cnt)); ret = mpp_buffer_get(reg_ctx->group, &reg_ctx->bufs, ALL_BUFFER_SIZE(max_cnt));
if (ret) { if (ret) {
mpp_err("h265d mpp_buffer_get failed\n"); mpp_err("h265d mpp_buffer_get failed\n");
return ret; return ret;
} }
reg_cxt->bufs_fd = mpp_buffer_get_fd(reg_cxt->bufs); reg_ctx->bufs_fd = mpp_buffer_get_fd(reg_ctx->bufs);
reg_cxt->offset_cabac = CABAC_TAB_OFFSET; reg_ctx->offset_cabac = CABAC_TAB_OFFSET;
for (i = 0; i < max_cnt; i++) { for (i = 0; i < max_cnt; i++) {
reg_cxt->g_buf[i].hw_regs = mpp_calloc_size(void, sizeof(Vdpu34xH265dRegSet)); reg_ctx->g_buf[i].hw_regs = mpp_calloc_size(void, sizeof(Vdpu34xH265dRegSet));
reg_cxt->offset_spspps[i] = SPSPPS_OFFSET(i); reg_ctx->offset_spspps[i] = SPSPPS_OFFSET(i);
reg_cxt->offset_rps[i] = RPS_OFFSET(i); reg_ctx->offset_rps[i] = RPS_OFFSET(i);
reg_cxt->offset_sclst[i] = SCALIST_OFFSET(i); reg_ctx->offset_sclst[i] = SCALIST_OFFSET(i);
} }
} }
if (!reg_cxt->fast_mode) { if (!reg_ctx->fast_mode) {
reg_cxt->hw_regs = reg_cxt->g_buf[0].hw_regs; reg_ctx->hw_regs = reg_ctx->g_buf[0].hw_regs;
reg_cxt->spspps_offset = reg_cxt->offset_spspps[0]; reg_ctx->spspps_offset = reg_ctx->offset_spspps[0];
reg_cxt->rps_offset = reg_cxt->offset_rps[0]; reg_ctx->rps_offset = reg_ctx->offset_rps[0];
reg_cxt->sclst_offset = reg_cxt->offset_sclst[0]; reg_ctx->sclst_offset = reg_ctx->offset_sclst[0];
} }
ret = mpp_buffer_write(reg_cxt->bufs, 0, (void*)cabac_table, sizeof(cabac_table)); ret = mpp_buffer_write(reg_ctx->bufs, 0, (void*)cabac_table, sizeof(cabac_table));
if (ret) { if (ret) {
mpp_err("h265d write cabac_table data failed\n"); mpp_err("h265d write cabac_table data failed\n");
return ret; return ret;
@@ -185,39 +185,39 @@ static MPP_RET hal_h265d_vdpu34x_init(void *hal, MppHalCfg *cfg)
static MPP_RET hal_h265d_vdpu34x_deinit(void *hal) static MPP_RET hal_h265d_vdpu34x_deinit(void *hal)
{ {
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
RK_U32 loop = reg_cxt->fast_mode ? MPP_ARRAY_ELEMS(reg_cxt->g_buf) : 1; RK_U32 loop = reg_ctx->fast_mode ? MPP_ARRAY_ELEMS(reg_ctx->g_buf) : 1;
RK_U32 i; RK_U32 i;
if (reg_cxt->bufs) { if (reg_ctx->bufs) {
mpp_buffer_put(reg_cxt->bufs); mpp_buffer_put(reg_ctx->bufs);
reg_cxt->bufs = NULL; reg_ctx->bufs = NULL;
} }
loop = reg_cxt->fast_mode ? MPP_ARRAY_ELEMS(reg_cxt->rcb_buf) : 1; loop = reg_ctx->fast_mode ? MPP_ARRAY_ELEMS(reg_ctx->rcb_buf) : 1;
for (i = 0; i < loop; i++) { for (i = 0; i < loop; i++) {
if (reg_cxt->rcb_buf[i]) { if (reg_ctx->rcb_buf[i]) {
mpp_buffer_put(reg_cxt->rcb_buf[i]); mpp_buffer_put(reg_ctx->rcb_buf[i]);
reg_cxt->rcb_buf[i] = NULL; reg_ctx->rcb_buf[i] = NULL;
} }
} }
if (reg_cxt->group) { if (reg_ctx->group) {
mpp_buffer_group_put(reg_cxt->group); mpp_buffer_group_put(reg_ctx->group);
reg_cxt->group = NULL; reg_ctx->group = NULL;
} }
for (i = 0; i < loop; i++) for (i = 0; i < loop; i++)
MPP_FREE(reg_cxt->g_buf[i].hw_regs); MPP_FREE(reg_ctx->g_buf[i].hw_regs);
MPP_FREE(reg_cxt->scaling_qm); MPP_FREE(reg_ctx->scaling_qm);
MPP_FREE(reg_cxt->scaling_rk); MPP_FREE(reg_ctx->scaling_rk);
MPP_FREE(reg_cxt->pps_buf); MPP_FREE(reg_ctx->pps_buf);
MPP_FREE(reg_cxt->sw_rps_buf); MPP_FREE(reg_ctx->sw_rps_buf);
if (reg_cxt->cmv_bufs) { if (reg_ctx->cmv_bufs) {
hal_bufs_deinit(reg_cxt->cmv_bufs); hal_bufs_deinit(reg_ctx->cmv_bufs);
reg_cxt->cmv_bufs = NULL; reg_ctx->cmv_bufs = NULL;
} }
return MPP_OK; return MPP_OK;
@@ -230,19 +230,19 @@ static RK_S32 hal_h265d_v345_output_pps_packet(void *hal, void *dxva)
RK_U32 addr; RK_U32 addr;
RK_U32 log2_min_cb_size; RK_U32 log2_min_cb_size;
RK_S32 width, height; RK_S32 width, height;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
Vdpu34xH265dRegSet *hw_reg = (Vdpu34xH265dRegSet*)(reg_cxt->hw_regs); Vdpu34xH265dRegSet *hw_reg = (Vdpu34xH265dRegSet*)(reg_ctx->hw_regs);
h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva; h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva;
BitputCtx_t bp; BitputCtx_t bp;
if (NULL == reg_cxt || dxva_cxt == NULL) { if (NULL == reg_ctx || dxva_cxt == NULL) {
mpp_err("%s:%s:%d reg_cxt or dxva_cxt is NULL", mpp_err("%s:%s:%d reg_ctx or dxva_cxt is NULL",
__FILE__, __FUNCTION__, __LINE__); __FILE__, __FUNCTION__, __LINE__);
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
void *pps_ptr = mpp_buffer_get_ptr(reg_cxt->bufs) + reg_cxt->spspps_offset; void *pps_ptr = mpp_buffer_get_ptr(reg_ctx->bufs) + reg_ctx->spspps_offset;
if (dxva_cxt->pp.ps_update_flag) { if (dxva_cxt->pp.ps_update_flag) {
RK_U64 *pps_packet = reg_cxt->pps_buf; RK_U64 *pps_packet = reg_ctx->pps_buf;
if (NULL == pps_ptr) { if (NULL == pps_ptr) {
mpp_err("pps_data get ptr error"); mpp_err("pps_data get ptr error");
return MPP_ERR_NOMEM; return MPP_ERR_NOMEM;
@@ -417,7 +417,7 @@ static RK_S32 hal_h265d_v345_output_pps_packet(void *hal, void *dxva)
if (dxva_cxt->pp.scaling_list_enabled_flag) { if (dxva_cxt->pp.scaling_list_enabled_flag) {
MppDevRegOffsetCfg trans_cfg; MppDevRegOffsetCfg trans_cfg;
RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_cxt->bufs) + reg_cxt->sclst_offset; RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_ctx->bufs) + reg_ctx->sclst_offset;
if (dxva_cxt->pp.scaling_list_data_present_flag) { if (dxva_cxt->pp.scaling_list_data_present_flag) {
addr = (dxva_cxt->pp.pps_id + 16) * 1360; addr = (dxva_cxt->pp.pps_id + 16) * 1360;
@@ -429,17 +429,17 @@ static RK_S32 hal_h265d_v345_output_pps_packet(void *hal, void *dxva)
hal_h265d_output_scalinglist_packet(hal, ptr_scaling + addr, dxva); hal_h265d_output_scalinglist_packet(hal, ptr_scaling + addr, dxva);
hw_reg->h265d_addr.reg180_scanlist_addr = reg_cxt->bufs_fd; hw_reg->h265d_addr.reg180_scanlist_addr = reg_ctx->bufs_fd;
hw_reg->common.reg012.scanlist_addr_valid_en = 1; hw_reg->common.reg012.scanlist_addr_valid_en = 1;
/* need to config addr */ /* need to config addr */
trans_cfg.reg_idx = 180; trans_cfg.reg_idx = 180;
trans_cfg.offset = addr + reg_cxt->sclst_offset; trans_cfg.offset = addr + reg_ctx->sclst_offset;
mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_OFFSET, &trans_cfg); mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_OFFSET, &trans_cfg);
} }
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
memcpy(pps_ptr + i * 112, reg_cxt->pps_buf, 112); memcpy(pps_ptr + i * 112, reg_ctx->pps_buf, 112);
#ifdef dump #ifdef dump
fwrite(pps_ptr, 1, 80 * 64, fp); fwrite(pps_ptr, 1, 80 * 64, fp);
RK_U32 *tmp = (RK_U32 *)pps_ptr; RK_U32 *tmp = (RK_U32 *)pps_ptr;
@@ -457,20 +457,20 @@ static RK_S32 hal_h265d_output_pps_packet(void *hal, void *dxva)
RK_U32 addr; RK_U32 addr;
RK_U32 log2_min_cb_size; RK_U32 log2_min_cb_size;
RK_S32 width, height; RK_S32 width, height;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva; h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva;
BitputCtx_t bp; BitputCtx_t bp;
if (NULL == reg_cxt || dxva_cxt == NULL) { if (NULL == reg_ctx || dxva_cxt == NULL) {
mpp_err("%s:%s:%d reg_cxt or dxva_cxt is NULL", mpp_err("%s:%s:%d reg_ctx or dxva_cxt is NULL",
__FILE__, __FUNCTION__, __LINE__); __FILE__, __FUNCTION__, __LINE__);
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
void *pps_ptr = mpp_buffer_get_ptr(reg_cxt->bufs) + reg_cxt->spspps_offset; void *pps_ptr = mpp_buffer_get_ptr(reg_ctx->bufs) + reg_ctx->spspps_offset;
if (dxva_cxt->pp.ps_update_flag || dxva_cxt->pp.scaling_list_enabled_flag) { if (dxva_cxt->pp.ps_update_flag || dxva_cxt->pp.scaling_list_enabled_flag) {
RK_U64 *pps_packet = reg_cxt->pps_buf; RK_U64 *pps_packet = reg_ctx->pps_buf;
if (NULL == pps_ptr) { if (NULL == pps_ptr) {
mpp_err("pps_data get ptr error"); mpp_err("pps_data get ptr error");
@@ -640,7 +640,7 @@ static RK_S32 hal_h265d_output_pps_packet(void *hal, void *dxva)
} }
{ {
RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_cxt->scaling_list_data); RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_ctx->scaling_list_data);
if (dxva_cxt->pp.scaling_list_data_present_flag) { if (dxva_cxt->pp.scaling_list_data_present_flag) {
addr = (dxva_cxt->pp.pps_id + 16) * 1360; addr = (dxva_cxt->pp.pps_id + 16) * 1360;
} else if (dxva_cxt->pp.scaling_list_enabled_flag) { } else if (dxva_cxt->pp.scaling_list_enabled_flag) {
@@ -651,7 +651,7 @@ static RK_S32 hal_h265d_output_pps_packet(void *hal, void *dxva)
hal_h265d_output_scalinglist_packet(hal, ptr_scaling + addr, dxva); hal_h265d_output_scalinglist_packet(hal, ptr_scaling + addr, dxva);
RK_U32 fd = mpp_buffer_get_fd(reg_cxt->scaling_list_data); RK_U32 fd = mpp_buffer_get_fd(reg_ctx->scaling_list_data);
/* need to config addr */ /* need to config addr */
addr = fd | (addr << 10); addr = fd | (addr << 10);
@@ -659,10 +659,10 @@ static RK_S32 hal_h265d_output_pps_packet(void *hal, void *dxva)
mpp_put_align(&bp, 64, 0xf); mpp_put_align(&bp, 64, 0xf);
} }
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
memcpy(pps_ptr + i * 80, reg_cxt->pps_buf, 80); memcpy(pps_ptr + i * 80, reg_ctx->pps_buf, 80);
} else if (reg_cxt->fast_mode) { } else if (reg_ctx->fast_mode) {
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
memcpy(pps_ptr + i * 80, reg_cxt->pps_buf, 80); memcpy(pps_ptr + i * 80, reg_ctx->pps_buf, 80);
} }
#ifdef dump #ifdef dump
@@ -766,7 +766,7 @@ static void hal_h265d_rcb_info_update(void *hal, void *dxva,
Vdpu34xH265dRegSet *hw_regs, Vdpu34xH265dRegSet *hw_regs,
RK_S32 width, RK_S32 height) RK_S32 width, RK_S32 height)
{ {
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva; h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva;
DXVA_PicParams_HEVC *pp = &dxva_cxt->pp; DXVA_PicParams_HEVC *pp = &dxva_cxt->pp;
RK_U32 chroma_fmt_idc = pp->chroma_format_idc;//0 400,1 4202 ,422,3 444 RK_U32 chroma_fmt_idc = pp->chroma_format_idc;//0 400,1 4202 ,422,3 444
@@ -774,35 +774,35 @@ static void hal_h265d_rcb_info_update(void *hal, void *dxva,
RK_U8 ctu_size = 1 << (pp->log2_diff_max_min_luma_coding_block_size + pp->log2_min_luma_coding_block_size_minus3 + 3); RK_U8 ctu_size = 1 << (pp->log2_diff_max_min_luma_coding_block_size + pp->log2_min_luma_coding_block_size_minus3 + 3);
RK_U32 num_tiles = pp->num_tile_rows_minus1 + 1; RK_U32 num_tiles = pp->num_tile_rows_minus1 + 1;
if (reg_cxt->num_row_tiles != num_tiles || if (reg_ctx->num_row_tiles != num_tiles ||
reg_cxt->bit_depth != bit_depth || reg_ctx->bit_depth != bit_depth ||
reg_cxt->chroma_fmt_idc != chroma_fmt_idc || reg_ctx->chroma_fmt_idc != chroma_fmt_idc ||
reg_cxt->ctu_size != ctu_size || reg_ctx->ctu_size != ctu_size ||
reg_cxt->width != width || reg_ctx->width != width ||
reg_cxt->height != height) { reg_ctx->height != height) {
RK_U32 i = 0; RK_U32 i = 0;
RK_U32 loop = reg_cxt->fast_mode ? MPP_ARRAY_ELEMS(reg_cxt->g_buf) : 1; RK_U32 loop = reg_ctx->fast_mode ? MPP_ARRAY_ELEMS(reg_ctx->g_buf) : 1;
reg_cxt->rcb_buf_size = vdpu34x_get_rcb_buf_size((Vdpu34xRcbInfo*)reg_cxt->rcb_info, width, height); reg_ctx->rcb_buf_size = vdpu34x_get_rcb_buf_size((Vdpu34xRcbInfo*)reg_ctx->rcb_info, width, height);
h265d_refine_rcb_size((Vdpu34xRcbInfo*)reg_cxt->rcb_info, hw_regs, width, height, dxva_cxt); h265d_refine_rcb_size((Vdpu34xRcbInfo*)reg_ctx->rcb_info, hw_regs, width, height, dxva_cxt);
for (i = 0; i < loop; i++) { for (i = 0; i < loop; i++) {
MppBuffer rcb_buf; MppBuffer rcb_buf;
if (reg_cxt->rcb_buf[i]) { if (reg_ctx->rcb_buf[i]) {
mpp_buffer_put(reg_cxt->rcb_buf[i]); mpp_buffer_put(reg_ctx->rcb_buf[i]);
reg_cxt->rcb_buf[i] = NULL; reg_ctx->rcb_buf[i] = NULL;
} }
mpp_buffer_get(reg_cxt->group, &rcb_buf, reg_cxt->rcb_buf_size); mpp_buffer_get(reg_ctx->group, &rcb_buf, reg_ctx->rcb_buf_size);
reg_cxt->rcb_buf[i] = rcb_buf; reg_ctx->rcb_buf[i] = rcb_buf;
} }
reg_cxt->num_row_tiles = num_tiles; reg_ctx->num_row_tiles = num_tiles;
reg_cxt->bit_depth = bit_depth; reg_ctx->bit_depth = bit_depth;
reg_cxt->chroma_fmt_idc = chroma_fmt_idc; reg_ctx->chroma_fmt_idc = chroma_fmt_idc;
reg_cxt->ctu_size = ctu_size; reg_ctx->ctu_size = ctu_size;
reg_cxt->width = width; reg_ctx->width = width;
reg_cxt->height = height; reg_ctx->height = height;
} }
} }
@@ -849,7 +849,7 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
RK_S32 distance = MAX_INT; RK_S32 distance = MAX_INT;
h265d_dxva2_picture_context_t *dxva_cxt = h265d_dxva2_picture_context_t *dxva_cxt =
(h265d_dxva2_picture_context_t *)syn->dec.syntax.data; (h265d_dxva2_picture_context_t *)syn->dec.syntax.data;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
void *rps_ptr = NULL; void *rps_ptr = NULL;
RK_U32 stream_buf_size = 0; RK_U32 stream_buf_size = 0;
@@ -859,17 +859,17 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
return MPP_OK; return MPP_OK;
} }
if (reg_cxt ->fast_mode) { if (reg_ctx ->fast_mode) {
for (i = 0; i < MAX_GEN_REG; i++) { for (i = 0; i < MAX_GEN_REG; i++) {
if (!reg_cxt->g_buf[i].use_flag) { if (!reg_ctx->g_buf[i].use_flag) {
syn->dec.reg_index = i; syn->dec.reg_index = i;
reg_cxt->spspps_offset = reg_cxt->offset_spspps[i]; reg_ctx->spspps_offset = reg_ctx->offset_spspps[i];
reg_cxt->rps_offset = reg_cxt->offset_rps[i]; reg_ctx->rps_offset = reg_ctx->offset_rps[i];
reg_cxt->sclst_offset = reg_cxt->offset_sclst[i]; reg_ctx->sclst_offset = reg_ctx->offset_sclst[i];
reg_cxt->hw_regs = reg_cxt->g_buf[i].hw_regs; reg_ctx->hw_regs = reg_ctx->g_buf[i].hw_regs;
reg_cxt->g_buf[i].use_flag = 1; reg_ctx->g_buf[i].use_flag = 1;
break; break;
} }
} }
@@ -878,7 +878,7 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
return MPP_ERR_NOMEM; return MPP_ERR_NOMEM;
} }
} }
rps_ptr = mpp_buffer_get_ptr(reg_cxt->bufs) + reg_cxt->rps_offset; rps_ptr = mpp_buffer_get_ptr(reg_ctx->bufs) + reg_ctx->rps_offset;
if (NULL == rps_ptr) { if (NULL == rps_ptr) {
mpp_err("rps_data get ptr error"); mpp_err("rps_data get ptr error");
@@ -892,16 +892,16 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
} }
/* output pps */ /* output pps */
hw_regs = (Vdpu34xH265dRegSet*)reg_cxt->hw_regs; hw_regs = (Vdpu34xH265dRegSet*)reg_ctx->hw_regs;
memset(hw_regs, 0, sizeof(Vdpu34xH265dRegSet)); memset(hw_regs, 0, sizeof(Vdpu34xH265dRegSet));
if (reg_cxt->is_v34x) { if (reg_ctx->is_v34x) {
hal_h265d_v345_output_pps_packet(hal, syn->dec.syntax.data); hal_h265d_v345_output_pps_packet(hal, syn->dec.syntax.data);
} else { } else {
hal_h265d_output_pps_packet(hal, syn->dec.syntax.data); hal_h265d_output_pps_packet(hal, syn->dec.syntax.data);
} }
if (NULL == reg_cxt->hw_regs) { if (NULL == reg_ctx->hw_regs) {
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
@@ -911,30 +911,30 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
width = (dxva_cxt->pp.PicWidthInMinCbsY << log2_min_cb_size); width = (dxva_cxt->pp.PicWidthInMinCbsY << log2_min_cb_size);
height = (dxva_cxt->pp.PicHeightInMinCbsY << log2_min_cb_size); height = (dxva_cxt->pp.PicHeightInMinCbsY << log2_min_cb_size);
mv_size = (MPP_ALIGN(width, 64) * MPP_ALIGN(height, 64)) >> 3; mv_size = (MPP_ALIGN(width, 64) * MPP_ALIGN(height, 64)) >> 3;
if (reg_cxt->cmv_bufs == NULL || reg_cxt->mv_size < mv_size) { if (reg_ctx->cmv_bufs == NULL || reg_ctx->mv_size < mv_size) {
size_t size = mv_size; size_t size = mv_size;
if (reg_cxt->cmv_bufs) { if (reg_ctx->cmv_bufs) {
hal_bufs_deinit(reg_cxt->cmv_bufs); hal_bufs_deinit(reg_ctx->cmv_bufs);
reg_cxt->cmv_bufs = NULL; reg_ctx->cmv_bufs = NULL;
} }
hal_bufs_init(&reg_cxt->cmv_bufs); hal_bufs_init(&reg_ctx->cmv_bufs);
if (reg_cxt->cmv_bufs == NULL) { if (reg_ctx->cmv_bufs == NULL) {
mpp_err_f("colmv bufs init fail"); mpp_err_f("colmv bufs init fail");
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
reg_cxt->mv_size = mv_size; reg_ctx->mv_size = mv_size;
reg_cxt->mv_count = mpp_buf_slot_get_count(reg_cxt->slots); reg_ctx->mv_count = mpp_buf_slot_get_count(reg_ctx->slots);
hal_bufs_setup(reg_cxt->cmv_bufs, reg_cxt->mv_count, 1, &size); hal_bufs_setup(reg_ctx->cmv_bufs, reg_ctx->mv_count, 1, &size);
} }
{ {
MppFrame mframe = NULL; MppFrame mframe = NULL;
RK_U32 ver_virstride; RK_U32 ver_virstride;
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.CurrPic.Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.CurrPic.Index7Bits,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
stride_y = mpp_frame_get_hor_stride(mframe); stride_y = mpp_frame_get_hor_stride(mframe);
ver_virstride = mpp_frame_get_ver_stride(mframe); ver_virstride = mpp_frame_get_ver_stride(mframe);
@@ -967,10 +967,10 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->common.reg020_y_virstride.y_virstride = virstrid_y >> 4; hw_regs->common.reg020_y_virstride.y_virstride = virstrid_y >> 4;
} }
if (MPP_FRAME_FMT_IS_HDR(mpp_frame_get_fmt(mframe)) && reg_cxt->cfg->base.enable_hdr_meta) if (MPP_FRAME_FMT_IS_HDR(mpp_frame_get_fmt(mframe)) && reg_ctx->cfg->base.enable_hdr_meta)
fill_hdr_meta_to_frame(mframe, HDR_HEVC); fill_hdr_meta_to_frame(mframe, HDR_HEVC);
} }
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.CurrPic.Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.CurrPic.Index7Bits,
SLOT_BUFFER, &framebuf); SLOT_BUFFER, &framebuf);
hw_regs->common_addr.reg130_decout_base = mpp_buffer_get_fd(framebuf); //just index need map hw_regs->common_addr.reg130_decout_base = mpp_buffer_get_fd(framebuf); //just index need map
/*if out_base is equal to zero it means this frame may error /*if out_base is equal to zero it means this frame may error
@@ -981,21 +981,21 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
} }
fd = mpp_buffer_get_fd(framebuf); fd = mpp_buffer_get_fd(framebuf);
hw_regs->common_addr.reg130_decout_base = fd; hw_regs->common_addr.reg130_decout_base = fd;
mv_buf = hal_bufs_get_buf(reg_cxt->cmv_bufs, dxva_cxt->pp.CurrPic.Index7Bits); mv_buf = hal_bufs_get_buf(reg_ctx->cmv_bufs, dxva_cxt->pp.CurrPic.Index7Bits);
hw_regs->common_addr.reg131_colmv_cur_base = mpp_buffer_get_fd(mv_buf->buf[0]); hw_regs->common_addr.reg131_colmv_cur_base = mpp_buffer_get_fd(mv_buf->buf[0]);
hw_regs->h265d_param.reg65.cur_top_poc = dxva_cxt->pp.CurrPicOrderCntVal; hw_regs->h265d_param.reg65.cur_top_poc = dxva_cxt->pp.CurrPicOrderCntVal;
mpp_buf_slot_get_prop(reg_cxt->packet_slots, syn->dec.input, SLOT_BUFFER, mpp_buf_slot_get_prop(reg_ctx->packet_slots, syn->dec.input, SLOT_BUFFER,
&streambuf); &streambuf);
if ( dxva_cxt->bitstream == NULL) { if ( dxva_cxt->bitstream == NULL) {
dxva_cxt->bitstream = mpp_buffer_get_ptr(streambuf); dxva_cxt->bitstream = mpp_buffer_get_ptr(streambuf);
} }
if (reg_cxt->is_v34x) { if (reg_ctx->is_v34x) {
#ifdef HW_RPS #ifdef HW_RPS
hw_regs->common.reg012.wait_reset_en = 1; hw_regs->common.reg012.wait_reset_en = 1;
hw_regs->h265d_param.reg103.ref_pic_layer_same_with_cur = 0xffff; hw_regs->h265d_param.reg103.ref_pic_layer_same_with_cur = 0xffff;
hal_h265d_slice_hw_rps(syn->dec.syntax.data, rps_ptr, reg_cxt->sw_rps_buf, reg_cxt->fast_mode); hal_h265d_slice_hw_rps(syn->dec.syntax.data, rps_ptr, reg_ctx->sw_rps_buf, reg_ctx->fast_mode);
#else #else
hw_regs->sw_sysctrl.sw_h26x_rps_mode = 1; hw_regs->sw_sysctrl.sw_h26x_rps_mode = 1;
hal_h265d_slice_output_rps(syn->dec.syntax.data, rps_ptr); hal_h265d_slice_output_rps(syn->dec.syntax.data, rps_ptr);
@@ -1006,10 +1006,10 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
MppDevRegOffsetCfg trans_cfg; MppDevRegOffsetCfg trans_cfg;
/* cabac table */ /* cabac table */
hw_regs->h265d_addr.reg197_cabactbl_base = reg_cxt->bufs_fd; hw_regs->h265d_addr.reg197_cabactbl_base = reg_ctx->bufs_fd;
/* pps */ /* pps */
hw_regs->h265d_addr.reg161_pps_base = reg_cxt->bufs_fd; hw_regs->h265d_addr.reg161_pps_base = reg_ctx->bufs_fd;
hw_regs->h265d_addr.reg163_rps_base = reg_cxt->bufs_fd; hw_regs->h265d_addr.reg163_rps_base = reg_ctx->bufs_fd;
hw_regs->common_addr.reg128_rlc_base = mpp_buffer_get_fd(streambuf); hw_regs->common_addr.reg128_rlc_base = mpp_buffer_get_fd(streambuf);
hw_regs->common_addr.reg129_rlcwrite_base = mpp_buffer_get_fd(streambuf); hw_regs->common_addr.reg129_rlcwrite_base = mpp_buffer_get_fd(streambuf);
@@ -1041,7 +1041,7 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->common.reg032_timeout_threshold = 0x3ffff; hw_regs->common.reg032_timeout_threshold = 0x3ffff;
valid_ref = hw_regs->common_addr.reg130_decout_base; valid_ref = hw_regs->common_addr.reg130_decout_base;
reg_cxt->error_index = dxva_cxt->pp.CurrPic.Index7Bits; reg_ctx->error_index = dxva_cxt->pp.CurrPic.Index7Bits;
hw_regs->common_addr.reg132_error_ref_base = valid_ref; hw_regs->common_addr.reg132_error_ref_base = valid_ref;
for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(dxva_cxt->pp.RefPicList); i++) { for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(dxva_cxt->pp.RefPicList); i++) {
@@ -1050,10 +1050,10 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
MppFrame mframe = NULL; MppFrame mframe = NULL;
hw_regs->h265d_param.reg67_82_ref_poc[i] = dxva_cxt->pp.PicOrderCntValList[i]; hw_regs->h265d_param.reg67_82_ref_poc[i] = dxva_cxt->pp.PicOrderCntValList[i];
mpp_buf_slot_get_prop(reg_cxt->slots, mpp_buf_slot_get_prop(reg_ctx->slots,
dxva_cxt->pp.RefPicList[i].Index7Bits, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_BUFFER, &framebuf); SLOT_BUFFER, &framebuf);
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.RefPicList[i].Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
if (framebuf != NULL) { if (framebuf != NULL) {
hw_regs->h265d_addr.reg164_179_ref_base[i] = mpp_buffer_get_fd(framebuf); hw_regs->h265d_addr.reg164_179_ref_base[i] = mpp_buffer_get_fd(framebuf);
@@ -1063,21 +1063,21 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
&& (!mpp_frame_get_errinfo(mframe))) { && (!mpp_frame_get_errinfo(mframe))) {
distance = pocdistance(dxva_cxt->pp.PicOrderCntValList[i], dxva_cxt->pp.current_poc); distance = pocdistance(dxva_cxt->pp.PicOrderCntValList[i], dxva_cxt->pp.current_poc);
hw_regs->common_addr.reg132_error_ref_base = hw_regs->h265d_addr.reg164_179_ref_base[i]; hw_regs->common_addr.reg132_error_ref_base = hw_regs->h265d_addr.reg164_179_ref_base[i];
reg_cxt->error_index = dxva_cxt->pp.RefPicList[i].Index7Bits; reg_ctx->error_index = dxva_cxt->pp.RefPicList[i].Index7Bits;
hw_regs->common.reg021.error_intra_mode = 0; hw_regs->common.reg021.error_intra_mode = 0;
} }
} else { } else {
hw_regs->h265d_addr.reg164_179_ref_base[i] = valid_ref; hw_regs->h265d_addr.reg164_179_ref_base[i] = valid_ref;
} }
mv_buf = hal_bufs_get_buf(reg_cxt->cmv_bufs, dxva_cxt->pp.RefPicList[i].Index7Bits); mv_buf = hal_bufs_get_buf(reg_ctx->cmv_bufs, dxva_cxt->pp.RefPicList[i].Index7Bits);
hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]); hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]);
SET_REF_VALID(hw_regs->h265d_param, i, 1); SET_REF_VALID(hw_regs->h265d_param, i, 1);
} }
} }
if ((reg_cxt->error_index == dxva_cxt->pp.CurrPic.Index7Bits) && !dxva_cxt->pp.IntraPicFlag) { if ((reg_ctx->error_index == dxva_cxt->pp.CurrPic.Index7Bits) && !dxva_cxt->pp.IntraPicFlag) {
// mpp_err("current frm may be err, should skip process"); // mpp_err("current frm may be err, should skip process");
syn->dec.flags.ref_err = 1; syn->dec.flags.ref_err = 1;
return MPP_OK; return MPP_OK;
@@ -1090,36 +1090,36 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
if (!hw_regs->common.reg021.error_intra_mode) { if (!hw_regs->common.reg021.error_intra_mode) {
MppFrame mframe = NULL; MppFrame mframe = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, mpp_buf_slot_get_prop(reg_ctx->slots,
dxva_cxt->pp.RefPicList[i].Index7Bits, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_BUFFER, &framebuf); SLOT_BUFFER, &framebuf);
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.RefPicList[i].Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
if (framebuf == NULL || mpp_frame_get_errinfo(mframe)) { if (framebuf == NULL || mpp_frame_get_errinfo(mframe)) {
mv_buf = hal_bufs_get_buf(reg_cxt->cmv_bufs, reg_cxt->error_index); mv_buf = hal_bufs_get_buf(reg_ctx->cmv_bufs, reg_ctx->error_index);
hw_regs->h265d_addr.reg164_179_ref_base[i] = hw_regs->common_addr.reg132_error_ref_base; hw_regs->h265d_addr.reg164_179_ref_base[i] = hw_regs->common_addr.reg132_error_ref_base;
hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]); hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]);
} }
} }
} else { } else {
mv_buf = hal_bufs_get_buf(reg_cxt->cmv_bufs, reg_cxt->error_index); mv_buf = hal_bufs_get_buf(reg_ctx->cmv_bufs, reg_ctx->error_index);
hw_regs->h265d_addr.reg164_179_ref_base[i] = hw_regs->common_addr.reg132_error_ref_base; hw_regs->h265d_addr.reg164_179_ref_base[i] = hw_regs->common_addr.reg132_error_ref_base;
hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]); hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]);
/* mark 3 to differ from current frame */ /* mark 3 to differ from current frame */
if (reg_cxt->error_index == dxva_cxt->pp.CurrPic.Index7Bits) if (reg_ctx->error_index == dxva_cxt->pp.CurrPic.Index7Bits)
SET_POC_HIGNBIT_INFO(hw_regs->highpoc, i, poc_highbit, 3); SET_POC_HIGNBIT_INFO(hw_regs->highpoc, i, poc_highbit, 3);
} }
} }
trans_cfg.reg_idx = 161; trans_cfg.reg_idx = 161;
trans_cfg.offset = reg_cxt->spspps_offset; trans_cfg.offset = reg_ctx->spspps_offset;
mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_OFFSET, &trans_cfg); mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_OFFSET, &trans_cfg);
/* rps */ /* rps */
trans_cfg.reg_idx = 163; trans_cfg.reg_idx = 163;
trans_cfg.offset = reg_cxt->rps_offset; trans_cfg.offset = reg_ctx->rps_offset;
mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_OFFSET, &trans_cfg); mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_OFFSET, &trans_cfg);
hw_regs->common.reg013.timeout_mode = 1; hw_regs->common.reg013.timeout_mode = 1;
hw_regs->common.reg013.cur_pic_is_idr = dxva_cxt->pp.IdrPicFlag;//p_hal->slice_long->idr_flag; hw_regs->common.reg013.cur_pic_is_idr = dxva_cxt->pp.IdrPicFlag;//p_hal->slice_long->idr_flag;
@@ -1127,9 +1127,9 @@ static MPP_RET hal_h265d_vdpu34x_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->common.reg011.buf_empty_en = 1; hw_regs->common.reg011.buf_empty_en = 1;
hal_h265d_rcb_info_update(hal, dxva_cxt, hw_regs, width, height); hal_h265d_rcb_info_update(hal, dxva_cxt, hw_regs, width, height);
vdpu34x_setup_rcb(&hw_regs->common_addr, reg_cxt->dev, reg_cxt->fast_mode ? vdpu34x_setup_rcb(&hw_regs->common_addr, reg_ctx->dev, reg_ctx->fast_mode ?
reg_cxt->rcb_buf[syn->dec.reg_index] : reg_cxt->rcb_buf[0], reg_ctx->rcb_buf[syn->dec.reg_index] : reg_ctx->rcb_buf[0],
(Vdpu34xRcbInfo*)reg_cxt->rcb_info); (Vdpu34xRcbInfo*)reg_ctx->rcb_info);
vdpu34x_setup_statistic(&hw_regs->common, &hw_regs->statistic); vdpu34x_setup_statistic(&hw_regs->common, &hw_regs->statistic);
return ret; return ret;
@@ -1140,7 +1140,7 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
MPP_RET ret = MPP_OK; MPP_RET ret = MPP_OK;
RK_U8* p = NULL; RK_U8* p = NULL;
Vdpu34xH265dRegSet *hw_regs = NULL; Vdpu34xH265dRegSet *hw_regs = NULL;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
RK_S32 index = task->dec.reg_index; RK_S32 index = task->dec.reg_index;
RK_U32 i; RK_U32 i;
@@ -1151,12 +1151,12 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
return MPP_OK; return MPP_OK;
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
p = (RK_U8*)reg_cxt->g_buf[index].hw_regs; p = (RK_U8*)reg_ctx->g_buf[index].hw_regs;
hw_regs = ( Vdpu34xH265dRegSet *)reg_cxt->g_buf[index].hw_regs; hw_regs = ( Vdpu34xH265dRegSet *)reg_ctx->g_buf[index].hw_regs;
} else { } else {
p = (RK_U8*)reg_cxt->hw_regs; p = (RK_U8*)reg_ctx->hw_regs;
hw_regs = ( Vdpu34xH265dRegSet *)reg_cxt->hw_regs; hw_regs = ( Vdpu34xH265dRegSet *)reg_ctx->hw_regs;
} }
if (hw_regs == NULL) { if (hw_regs == NULL) {
@@ -1178,7 +1178,7 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->common); wr_cfg.size = sizeof(hw_regs->common);
wr_cfg.offset = OFFSET_COMMON_REGS; wr_cfg.offset = OFFSET_COMMON_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1188,7 +1188,7 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->h265d_param); wr_cfg.size = sizeof(hw_regs->h265d_param);
wr_cfg.offset = OFFSET_CODEC_PARAMS_REGS; wr_cfg.offset = OFFSET_CODEC_PARAMS_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1198,7 +1198,7 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->common_addr); wr_cfg.size = sizeof(hw_regs->common_addr);
wr_cfg.offset = OFFSET_COMMON_ADDR_REGS; wr_cfg.offset = OFFSET_COMMON_ADDR_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1208,7 +1208,7 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->h265d_addr); wr_cfg.size = sizeof(hw_regs->h265d_addr);
wr_cfg.offset = OFFSET_CODEC_ADDR_REGS; wr_cfg.offset = OFFSET_CODEC_ADDR_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1218,7 +1218,7 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->statistic); wr_cfg.size = sizeof(hw_regs->statistic);
wr_cfg.offset = OFFSET_STATISTIC_REGS; wr_cfg.offset = OFFSET_STATISTIC_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1229,7 +1229,7 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->highpoc); wr_cfg.size = sizeof(hw_regs->highpoc);
wr_cfg.offset = OFFSET_POC_HIGHBIT_REGS; wr_cfg.offset = OFFSET_POC_HIGHBIT_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1240,16 +1240,16 @@ static MPP_RET hal_h265d_vdpu34x_start(void *hal, HalTaskInfo *task)
rd_cfg.size = sizeof(hw_regs->irq_status); rd_cfg.size = sizeof(hw_regs->irq_status);
rd_cfg.offset = OFFSET_INTERRUPT_REGS; rd_cfg.offset = OFFSET_INTERRUPT_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_RD, &rd_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_RD, &rd_cfg);
if (ret) { if (ret) {
mpp_err_f("set register read failed %d\n", ret); mpp_err_f("set register read failed %d\n", ret);
break; break;
} }
/* rcb info for sram */ /* rcb info for sram */
vdpu34x_set_rcbinfo(reg_cxt->dev, (Vdpu34xRcbInfo*)reg_cxt->rcb_info); vdpu34x_set_rcbinfo(reg_ctx->dev, (Vdpu34xRcbInfo*)reg_ctx->rcb_info);
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_CMD_SEND, NULL); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_CMD_SEND, NULL);
if (ret) { if (ret) {
mpp_err_f("send cmd failed %d\n", ret); mpp_err_f("send cmd failed %d\n", ret);
break; break;
@@ -1264,7 +1264,7 @@ static MPP_RET hal_h265d_vdpu34x_wait(void *hal, HalTaskInfo *task)
{ {
MPP_RET ret = MPP_OK; MPP_RET ret = MPP_OK;
RK_S32 index = task->dec.reg_index; RK_S32 index = task->dec.reg_index;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
RK_U8* p = NULL; RK_U8* p = NULL;
Vdpu34xH265dRegSet *hw_regs = NULL; Vdpu34xH265dRegSet *hw_regs = NULL;
RK_S32 i; RK_S32 i;
@@ -1275,15 +1275,15 @@ static MPP_RET hal_h265d_vdpu34x_wait(void *hal, HalTaskInfo *task)
goto ERR_PROC; goto ERR_PROC;
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
hw_regs = ( Vdpu34xH265dRegSet *)reg_cxt->g_buf[index].hw_regs; hw_regs = ( Vdpu34xH265dRegSet *)reg_ctx->g_buf[index].hw_regs;
} else { } else {
hw_regs = ( Vdpu34xH265dRegSet *)reg_cxt->hw_regs; hw_regs = ( Vdpu34xH265dRegSet *)reg_ctx->hw_regs;
} }
p = (RK_U8*)hw_regs; p = (RK_U8*)hw_regs;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_CMD_POLL, NULL); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_CMD_POLL, NULL);
if (ret) if (ret)
mpp_err_f("poll cmd failed %d\n", ret); mpp_err_f("poll cmd failed %d\n", ret);
@@ -1294,31 +1294,31 @@ ERR_PROC:
hw_regs->irq_status.reg224.buf_empty_sta || hw_regs->irq_status.reg224.buf_empty_sta ||
hw_regs->irq_status.reg224.dec_bus_sta || hw_regs->irq_status.reg224.dec_bus_sta ||
!hw_regs->irq_status.reg224.dec_rdy_sta) { !hw_regs->irq_status.reg224.dec_rdy_sta) {
if (!reg_cxt->fast_mode) { if (!reg_ctx->fast_mode) {
if (reg_cxt->dec_cb) if (reg_ctx->dec_cb)
mpp_callback(reg_cxt->dec_cb, &task->dec); mpp_callback(reg_ctx->dec_cb, &task->dec);
} else { } else {
MppFrame mframe = NULL; MppFrame mframe = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.output, mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.output,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
if (mframe) { if (mframe) {
reg_cxt->fast_mode_err_found = 1; reg_ctx->fast_mode_err_found = 1;
mpp_frame_set_errinfo(mframe, 1); mpp_frame_set_errinfo(mframe, 1);
} }
} }
} else { } else {
if (reg_cxt->fast_mode && reg_cxt->fast_mode_err_found) { if (reg_ctx->fast_mode && reg_ctx->fast_mode_err_found) {
for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(task->dec.refer); i++) { for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(task->dec.refer); i++) {
if (task->dec.refer[i] >= 0) { if (task->dec.refer[i] >= 0) {
MppFrame frame_ref = NULL; MppFrame frame_ref = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.refer[i], mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.refer[i],
SLOT_FRAME_PTR, &frame_ref); SLOT_FRAME_PTR, &frame_ref);
h265h_dbg(H265H_DBG_FAST_ERR, "refer[%d] %d frame %p\n", h265h_dbg(H265H_DBG_FAST_ERR, "refer[%d] %d frame %p\n",
i, task->dec.refer[i], frame_ref); i, task->dec.refer[i], frame_ref);
if (frame_ref && mpp_frame_get_errinfo(frame_ref)) { if (frame_ref && mpp_frame_get_errinfo(frame_ref)) {
MppFrame frame_out = NULL; MppFrame frame_out = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.output, mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.output,
SLOT_FRAME_PTR, &frame_out); SLOT_FRAME_PTR, &frame_out);
mpp_frame_set_errinfo(frame_out, 1); mpp_frame_set_errinfo(frame_out, 1);
break; break;
@@ -1341,8 +1341,8 @@ ERR_PROC:
p += 4; p += 4;
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
reg_cxt->g_buf[index].use_flag = 0; reg_ctx->g_buf[index].use_flag = 0;
} }
return ret; return ret;

View File

@@ -98,28 +98,28 @@ static const FilterdColBufRatio filterd_fbc_off[CTU][FMT] = {
static MPP_RET hal_h265d_vdpu382_init(void *hal, MppHalCfg *cfg) static MPP_RET hal_h265d_vdpu382_init(void *hal, MppHalCfg *cfg)
{ {
RK_S32 ret = 0; RK_S32 ret = 0;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
mpp_slots_set_prop(reg_cxt->slots, SLOTS_HOR_ALIGN, hevc_hor_align); mpp_slots_set_prop(reg_ctx->slots, SLOTS_HOR_ALIGN, hevc_hor_align);
mpp_slots_set_prop(reg_cxt->slots, SLOTS_VER_ALIGN, hevc_ver_align); mpp_slots_set_prop(reg_ctx->slots, SLOTS_VER_ALIGN, hevc_ver_align);
reg_cxt->scaling_qm = mpp_calloc(DXVA_Qmatrix_HEVC, 1); reg_ctx->scaling_qm = mpp_calloc(DXVA_Qmatrix_HEVC, 1);
if (reg_cxt->scaling_qm == NULL) { if (reg_ctx->scaling_qm == NULL) {
mpp_err("scaling_org alloc fail"); mpp_err("scaling_org alloc fail");
return MPP_ERR_MALLOC; return MPP_ERR_MALLOC;
} }
reg_cxt->scaling_rk = mpp_calloc(scalingFactor_t, 1); reg_ctx->scaling_rk = mpp_calloc(scalingFactor_t, 1);
reg_cxt->pps_buf = mpp_calloc(RK_U64, 15); reg_ctx->pps_buf = mpp_calloc(RK_U64, 15);
reg_cxt->sw_rps_buf = mpp_calloc(RK_U64, 400); reg_ctx->sw_rps_buf = mpp_calloc(RK_U64, 400);
if (reg_cxt->scaling_rk == NULL) { if (reg_ctx->scaling_rk == NULL) {
mpp_err("scaling_rk alloc fail"); mpp_err("scaling_rk alloc fail");
return MPP_ERR_MALLOC; return MPP_ERR_MALLOC;
} }
if (reg_cxt->group == NULL) { if (reg_ctx->group == NULL) {
ret = mpp_buffer_group_get_internal(&reg_cxt->group, MPP_BUFFER_TYPE_ION); ret = mpp_buffer_group_get_internal(&reg_ctx->group, MPP_BUFFER_TYPE_ION);
if (ret) { if (ret) {
mpp_err("h265d mpp_buffer_group_get failed\n"); mpp_err("h265d mpp_buffer_group_get failed\n");
return ret; return ret;
@@ -128,33 +128,33 @@ static MPP_RET hal_h265d_vdpu382_init(void *hal, MppHalCfg *cfg)
{ {
RK_U32 i = 0; RK_U32 i = 0;
RK_U32 max_cnt = reg_cxt->fast_mode ? MAX_GEN_REG : 1; RK_U32 max_cnt = reg_ctx->fast_mode ? MAX_GEN_REG : 1;
//!< malloc buffers //!< malloc buffers
ret = mpp_buffer_get(reg_cxt->group, &reg_cxt->bufs, ALL_BUFFER_SIZE(max_cnt)); ret = mpp_buffer_get(reg_ctx->group, &reg_ctx->bufs, ALL_BUFFER_SIZE(max_cnt));
if (ret) { if (ret) {
mpp_err("h265d mpp_buffer_get failed\n"); mpp_err("h265d mpp_buffer_get failed\n");
return ret; return ret;
} }
reg_cxt->bufs_fd = mpp_buffer_get_fd(reg_cxt->bufs); reg_ctx->bufs_fd = mpp_buffer_get_fd(reg_ctx->bufs);
reg_cxt->offset_cabac = CABAC_TAB_OFFSET; reg_ctx->offset_cabac = CABAC_TAB_OFFSET;
for (i = 0; i < max_cnt; i++) { for (i = 0; i < max_cnt; i++) {
reg_cxt->g_buf[i].hw_regs = mpp_calloc_size(void, sizeof(Vdpu382H265dRegSet)); reg_ctx->g_buf[i].hw_regs = mpp_calloc_size(void, sizeof(Vdpu382H265dRegSet));
reg_cxt->offset_spspps[i] = SPSPPS_OFFSET(i); reg_ctx->offset_spspps[i] = SPSPPS_OFFSET(i);
reg_cxt->offset_rps[i] = RPS_OFFSET(i); reg_ctx->offset_rps[i] = RPS_OFFSET(i);
reg_cxt->offset_sclst[i] = SCALIST_OFFSET(i); reg_ctx->offset_sclst[i] = SCALIST_OFFSET(i);
} }
} }
if (!reg_cxt->fast_mode) { if (!reg_ctx->fast_mode) {
reg_cxt->hw_regs = reg_cxt->g_buf[0].hw_regs; reg_ctx->hw_regs = reg_ctx->g_buf[0].hw_regs;
reg_cxt->spspps_offset = reg_cxt->offset_spspps[0]; reg_ctx->spspps_offset = reg_ctx->offset_spspps[0];
reg_cxt->rps_offset = reg_cxt->offset_rps[0]; reg_ctx->rps_offset = reg_ctx->offset_rps[0];
reg_cxt->sclst_offset = reg_cxt->offset_sclst[0]; reg_ctx->sclst_offset = reg_ctx->offset_sclst[0];
} }
ret = mpp_buffer_write(reg_cxt->bufs, 0, (void*)cabac_table, sizeof(cabac_table)); ret = mpp_buffer_write(reg_ctx->bufs, 0, (void*)cabac_table, sizeof(cabac_table));
if (ret) { if (ret) {
mpp_err("h265d write cabac_table data failed\n"); mpp_err("h265d write cabac_table data failed\n");
return ret; return ret;
@@ -177,7 +177,7 @@ static MPP_RET hal_h265d_vdpu382_init(void *hal, MppHalCfg *cfg)
cfg->hw_info = hw_info; cfg->hw_info = hw_info;
//save hw_info to context //save hw_info to context
reg_cxt->hw_info = hw_info; reg_ctx->hw_info = hw_info;
} }
#ifdef dump #ifdef dump
@@ -189,39 +189,39 @@ static MPP_RET hal_h265d_vdpu382_init(void *hal, MppHalCfg *cfg)
static MPP_RET hal_h265d_vdpu382_deinit(void *hal) static MPP_RET hal_h265d_vdpu382_deinit(void *hal)
{ {
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
RK_U32 loop = reg_cxt->fast_mode ? MPP_ARRAY_ELEMS(reg_cxt->g_buf) : 1; RK_U32 loop = reg_ctx->fast_mode ? MPP_ARRAY_ELEMS(reg_ctx->g_buf) : 1;
RK_U32 i; RK_U32 i;
if (reg_cxt->bufs) { if (reg_ctx->bufs) {
mpp_buffer_put(reg_cxt->bufs); mpp_buffer_put(reg_ctx->bufs);
reg_cxt->bufs = NULL; reg_ctx->bufs = NULL;
} }
loop = reg_cxt->fast_mode ? MPP_ARRAY_ELEMS(reg_cxt->rcb_buf) : 1; loop = reg_ctx->fast_mode ? MPP_ARRAY_ELEMS(reg_ctx->rcb_buf) : 1;
for (i = 0; i < loop; i++) { for (i = 0; i < loop; i++) {
if (reg_cxt->rcb_buf[i]) { if (reg_ctx->rcb_buf[i]) {
mpp_buffer_put(reg_cxt->rcb_buf[i]); mpp_buffer_put(reg_ctx->rcb_buf[i]);
reg_cxt->rcb_buf[i] = NULL; reg_ctx->rcb_buf[i] = NULL;
} }
} }
if (reg_cxt->group) { if (reg_ctx->group) {
mpp_buffer_group_put(reg_cxt->group); mpp_buffer_group_put(reg_ctx->group);
reg_cxt->group = NULL; reg_ctx->group = NULL;
} }
for (i = 0; i < loop; i++) for (i = 0; i < loop; i++)
MPP_FREE(reg_cxt->g_buf[i].hw_regs); MPP_FREE(reg_ctx->g_buf[i].hw_regs);
MPP_FREE(reg_cxt->scaling_qm); MPP_FREE(reg_ctx->scaling_qm);
MPP_FREE(reg_cxt->scaling_rk); MPP_FREE(reg_ctx->scaling_rk);
MPP_FREE(reg_cxt->pps_buf); MPP_FREE(reg_ctx->pps_buf);
MPP_FREE(reg_cxt->sw_rps_buf); MPP_FREE(reg_ctx->sw_rps_buf);
if (reg_cxt->cmv_bufs) { if (reg_ctx->cmv_bufs) {
hal_bufs_deinit(reg_cxt->cmv_bufs); hal_bufs_deinit(reg_ctx->cmv_bufs);
reg_cxt->cmv_bufs = NULL; reg_ctx->cmv_bufs = NULL;
} }
return MPP_OK; return MPP_OK;
@@ -234,19 +234,19 @@ static RK_S32 hal_h265d_v382_output_pps_packet(void *hal, void *dxva)
RK_U32 addr; RK_U32 addr;
RK_U32 log2_min_cb_size; RK_U32 log2_min_cb_size;
RK_S32 width, height; RK_S32 width, height;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
Vdpu382H265dRegSet *hw_reg = (Vdpu382H265dRegSet*)(reg_cxt->hw_regs); Vdpu382H265dRegSet *hw_reg = (Vdpu382H265dRegSet*)(reg_ctx->hw_regs);
h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva; h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva;
BitputCtx_t bp; BitputCtx_t bp;
if (NULL == reg_cxt || dxva_cxt == NULL) { if (NULL == reg_ctx || dxva_cxt == NULL) {
mpp_err("%s:%s:%d reg_cxt or dxva_cxt is NULL", mpp_err("%s:%s:%d reg_ctx or dxva_cxt is NULL",
__FILE__, __FUNCTION__, __LINE__); __FILE__, __FUNCTION__, __LINE__);
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
void *pps_ptr = mpp_buffer_get_ptr(reg_cxt->bufs) + reg_cxt->spspps_offset; void *pps_ptr = mpp_buffer_get_ptr(reg_ctx->bufs) + reg_ctx->spspps_offset;
if (dxva_cxt->pp.ps_update_flag) { if (dxva_cxt->pp.ps_update_flag) {
RK_U64 *pps_packet = reg_cxt->pps_buf; RK_U64 *pps_packet = reg_ctx->pps_buf;
if (NULL == pps_ptr) { if (NULL == pps_ptr) {
mpp_err("pps_data get ptr error"); mpp_err("pps_data get ptr error");
return MPP_ERR_NOMEM; return MPP_ERR_NOMEM;
@@ -421,7 +421,7 @@ static RK_S32 hal_h265d_v382_output_pps_packet(void *hal, void *dxva)
if (dxva_cxt->pp.scaling_list_enabled_flag) { if (dxva_cxt->pp.scaling_list_enabled_flag) {
MppDevRegOffsetCfg trans_cfg; MppDevRegOffsetCfg trans_cfg;
RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_cxt->bufs) + reg_cxt->sclst_offset; RK_U8 *ptr_scaling = (RK_U8 *)mpp_buffer_get_ptr(reg_ctx->bufs) + reg_ctx->sclst_offset;
if (dxva_cxt->pp.scaling_list_data_present_flag) { if (dxva_cxt->pp.scaling_list_data_present_flag) {
addr = (dxva_cxt->pp.pps_id + 16) * 1360; addr = (dxva_cxt->pp.pps_id + 16) * 1360;
@@ -433,17 +433,17 @@ static RK_S32 hal_h265d_v382_output_pps_packet(void *hal, void *dxva)
hal_h265d_output_scalinglist_packet(hal, ptr_scaling + addr, dxva); hal_h265d_output_scalinglist_packet(hal, ptr_scaling + addr, dxva);
hw_reg->h265d_addr.reg180_scanlist_addr = reg_cxt->bufs_fd; hw_reg->h265d_addr.reg180_scanlist_addr = reg_ctx->bufs_fd;
hw_reg->common.reg012.scanlist_addr_valid_en = 1; hw_reg->common.reg012.scanlist_addr_valid_en = 1;
/* need to config addr */ /* need to config addr */
trans_cfg.reg_idx = 180; trans_cfg.reg_idx = 180;
trans_cfg.offset = addr + reg_cxt->sclst_offset; trans_cfg.offset = addr + reg_ctx->sclst_offset;
mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_OFFSET, &trans_cfg); mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_OFFSET, &trans_cfg);
} }
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
memcpy(pps_ptr + i * 112, reg_cxt->pps_buf, 112); memcpy(pps_ptr + i * 112, reg_ctx->pps_buf, 112);
#ifdef dump #ifdef dump
fwrite(pps_ptr, 1, 80 * 64, fp); fwrite(pps_ptr, 1, 80 * 64, fp);
RK_U32 *tmp = (RK_U32 *)pps_ptr; RK_U32 *tmp = (RK_U32 *)pps_ptr;
@@ -561,7 +561,7 @@ static void hal_h265d_rcb_info_update(void *hal, void *dxva,
Vdpu382H265dRegSet *hw_regs, Vdpu382H265dRegSet *hw_regs,
RK_S32 width, RK_S32 height) RK_S32 width, RK_S32 height)
{ {
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva; h265d_dxva2_picture_context_t *dxva_cxt = (h265d_dxva2_picture_context_t*)dxva;
DXVA_PicParams_HEVC *pp = &dxva_cxt->pp; DXVA_PicParams_HEVC *pp = &dxva_cxt->pp;
RK_U32 chroma_fmt_idc = pp->chroma_format_idc;//0 400,1 4202 ,422,3 444 RK_U32 chroma_fmt_idc = pp->chroma_format_idc;//0 400,1 4202 ,422,3 444
@@ -569,35 +569,35 @@ static void hal_h265d_rcb_info_update(void *hal, void *dxva,
RK_U8 ctu_size = 1 << (pp->log2_diff_max_min_luma_coding_block_size + pp->log2_min_luma_coding_block_size_minus3 + 3); RK_U8 ctu_size = 1 << (pp->log2_diff_max_min_luma_coding_block_size + pp->log2_min_luma_coding_block_size_minus3 + 3);
RK_U32 num_tiles = pp->num_tile_rows_minus1 + 1; RK_U32 num_tiles = pp->num_tile_rows_minus1 + 1;
if (reg_cxt->num_row_tiles != num_tiles || if (reg_ctx->num_row_tiles != num_tiles ||
reg_cxt->bit_depth != bit_depth || reg_ctx->bit_depth != bit_depth ||
reg_cxt->chroma_fmt_idc != chroma_fmt_idc || reg_ctx->chroma_fmt_idc != chroma_fmt_idc ||
reg_cxt->ctu_size != ctu_size || reg_ctx->ctu_size != ctu_size ||
reg_cxt->width != width || reg_ctx->width != width ||
reg_cxt->height != height) { reg_ctx->height != height) {
RK_U32 i = 0; RK_U32 i = 0;
RK_U32 loop = reg_cxt->fast_mode ? MPP_ARRAY_ELEMS(reg_cxt->g_buf) : 1; RK_U32 loop = reg_ctx->fast_mode ? MPP_ARRAY_ELEMS(reg_ctx->g_buf) : 1;
reg_cxt->rcb_buf_size = vdpu382_get_rcb_buf_size((Vdpu382RcbInfo*)reg_cxt->rcb_info, width, height); reg_ctx->rcb_buf_size = vdpu382_get_rcb_buf_size((Vdpu382RcbInfo*)reg_ctx->rcb_info, width, height);
h265d_refine_rcb_size((Vdpu382RcbInfo*)reg_cxt->rcb_info, hw_regs, width, height, dxva_cxt); h265d_refine_rcb_size((Vdpu382RcbInfo*)reg_ctx->rcb_info, hw_regs, width, height, dxva_cxt);
for (i = 0; i < loop; i++) { for (i = 0; i < loop; i++) {
MppBuffer rcb_buf; MppBuffer rcb_buf;
if (reg_cxt->rcb_buf[i]) { if (reg_ctx->rcb_buf[i]) {
mpp_buffer_put(reg_cxt->rcb_buf[i]); mpp_buffer_put(reg_ctx->rcb_buf[i]);
reg_cxt->rcb_buf[i] = NULL; reg_ctx->rcb_buf[i] = NULL;
} }
mpp_buffer_get(reg_cxt->group, &rcb_buf, reg_cxt->rcb_buf_size); mpp_buffer_get(reg_ctx->group, &rcb_buf, reg_ctx->rcb_buf_size);
reg_cxt->rcb_buf[i] = rcb_buf; reg_ctx->rcb_buf[i] = rcb_buf;
} }
reg_cxt->num_row_tiles = num_tiles; reg_ctx->num_row_tiles = num_tiles;
reg_cxt->bit_depth = bit_depth; reg_ctx->bit_depth = bit_depth;
reg_cxt->chroma_fmt_idc = chroma_fmt_idc; reg_ctx->chroma_fmt_idc = chroma_fmt_idc;
reg_cxt->ctu_size = ctu_size; reg_ctx->ctu_size = ctu_size;
reg_cxt->width = width; reg_ctx->width = width;
reg_cxt->height = height; reg_ctx->height = height;
} }
} }
@@ -644,7 +644,7 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
RK_S32 distance = MAX_INT; RK_S32 distance = MAX_INT;
h265d_dxva2_picture_context_t *dxva_cxt = h265d_dxva2_picture_context_t *dxva_cxt =
(h265d_dxva2_picture_context_t *)syn->dec.syntax.data; (h265d_dxva2_picture_context_t *)syn->dec.syntax.data;
HalH265dCtx *reg_cxt = ( HalH265dCtx *)hal; HalH265dCtx *reg_ctx = ( HalH265dCtx *)hal;
void *rps_ptr = NULL; void *rps_ptr = NULL;
RK_U32 stream_buf_size = 0; RK_U32 stream_buf_size = 0;
@@ -654,17 +654,17 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
return MPP_OK; return MPP_OK;
} }
if (reg_cxt ->fast_mode) { if (reg_ctx ->fast_mode) {
for (i = 0; i < MAX_GEN_REG; i++) { for (i = 0; i < MAX_GEN_REG; i++) {
if (!reg_cxt->g_buf[i].use_flag) { if (!reg_ctx->g_buf[i].use_flag) {
syn->dec.reg_index = i; syn->dec.reg_index = i;
reg_cxt->spspps_offset = reg_cxt->offset_spspps[i]; reg_ctx->spspps_offset = reg_ctx->offset_spspps[i];
reg_cxt->rps_offset = reg_cxt->offset_rps[i]; reg_ctx->rps_offset = reg_ctx->offset_rps[i];
reg_cxt->sclst_offset = reg_cxt->offset_sclst[i]; reg_ctx->sclst_offset = reg_ctx->offset_sclst[i];
reg_cxt->hw_regs = reg_cxt->g_buf[i].hw_regs; reg_ctx->hw_regs = reg_ctx->g_buf[i].hw_regs;
reg_cxt->g_buf[i].use_flag = 1; reg_ctx->g_buf[i].use_flag = 1;
break; break;
} }
} }
@@ -673,7 +673,7 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
return MPP_ERR_NOMEM; return MPP_ERR_NOMEM;
} }
} }
rps_ptr = mpp_buffer_get_ptr(reg_cxt->bufs) + reg_cxt->rps_offset; rps_ptr = mpp_buffer_get_ptr(reg_ctx->bufs) + reg_ctx->rps_offset;
if (NULL == rps_ptr) { if (NULL == rps_ptr) {
mpp_err("rps_data get ptr error"); mpp_err("rps_data get ptr error");
@@ -687,12 +687,12 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
} }
/* output pps */ /* output pps */
hw_regs = (Vdpu382H265dRegSet*)reg_cxt->hw_regs; hw_regs = (Vdpu382H265dRegSet*)reg_ctx->hw_regs;
memset(hw_regs, 0, sizeof(Vdpu382H265dRegSet)); memset(hw_regs, 0, sizeof(Vdpu382H265dRegSet));
hal_h265d_v382_output_pps_packet(hal, syn->dec.syntax.data); hal_h265d_v382_output_pps_packet(hal, syn->dec.syntax.data);
if (NULL == reg_cxt->hw_regs) { if (NULL == reg_ctx->hw_regs) {
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
@@ -702,30 +702,30 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
width = (dxva_cxt->pp.PicWidthInMinCbsY << log2_min_cb_size); width = (dxva_cxt->pp.PicWidthInMinCbsY << log2_min_cb_size);
height = (dxva_cxt->pp.PicHeightInMinCbsY << log2_min_cb_size); height = (dxva_cxt->pp.PicHeightInMinCbsY << log2_min_cb_size);
mv_size = (MPP_ALIGN(width, 64) * MPP_ALIGN(height, 64)) >> 3; mv_size = (MPP_ALIGN(width, 64) * MPP_ALIGN(height, 64)) >> 3;
if (reg_cxt->cmv_bufs == NULL || reg_cxt->mv_size < mv_size) { if (reg_ctx->cmv_bufs == NULL || reg_ctx->mv_size < mv_size) {
size_t size = mv_size; size_t size = mv_size;
if (reg_cxt->cmv_bufs) { if (reg_ctx->cmv_bufs) {
hal_bufs_deinit(reg_cxt->cmv_bufs); hal_bufs_deinit(reg_ctx->cmv_bufs);
reg_cxt->cmv_bufs = NULL; reg_ctx->cmv_bufs = NULL;
} }
hal_bufs_init(&reg_cxt->cmv_bufs); hal_bufs_init(&reg_ctx->cmv_bufs);
if (reg_cxt->cmv_bufs == NULL) { if (reg_ctx->cmv_bufs == NULL) {
mpp_err_f("colmv bufs init fail"); mpp_err_f("colmv bufs init fail");
return MPP_ERR_NULL_PTR; return MPP_ERR_NULL_PTR;
} }
reg_cxt->mv_size = mv_size; reg_ctx->mv_size = mv_size;
reg_cxt->mv_count = mpp_buf_slot_get_count(reg_cxt->slots); reg_ctx->mv_count = mpp_buf_slot_get_count(reg_ctx->slots);
hal_bufs_setup(reg_cxt->cmv_bufs, reg_cxt->mv_count, 1, &size); hal_bufs_setup(reg_ctx->cmv_bufs, reg_ctx->mv_count, 1, &size);
} }
{ {
MppFrame mframe = NULL; MppFrame mframe = NULL;
RK_U32 ver_virstride; RK_U32 ver_virstride;
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.CurrPic.Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.CurrPic.Index7Bits,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
stride_y = mpp_frame_get_hor_stride(mframe); stride_y = mpp_frame_get_hor_stride(mframe);
ver_virstride = mpp_frame_get_ver_stride(mframe); ver_virstride = mpp_frame_get_ver_stride(mframe);
@@ -756,10 +756,10 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->common.reg020_y_virstride.y_virstride = virstrid_y >> 4; hw_regs->common.reg020_y_virstride.y_virstride = virstrid_y >> 4;
} }
if (MPP_FRAME_FMT_IS_HDR(mpp_frame_get_fmt(mframe)) && reg_cxt->cfg->base.enable_hdr_meta) if (MPP_FRAME_FMT_IS_HDR(mpp_frame_get_fmt(mframe)) && reg_ctx->cfg->base.enable_hdr_meta)
fill_hdr_meta_to_frame(mframe, HDR_HEVC); fill_hdr_meta_to_frame(mframe, HDR_HEVC);
} }
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.CurrPic.Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.CurrPic.Index7Bits,
SLOT_BUFFER, &framebuf); SLOT_BUFFER, &framebuf);
hw_regs->common_addr.reg130_decout_base = mpp_buffer_get_fd(framebuf); //just index need map hw_regs->common_addr.reg130_decout_base = mpp_buffer_get_fd(framebuf); //just index need map
/*if out_base is equal to zero it means this frame may error /*if out_base is equal to zero it means this frame may error
@@ -770,19 +770,19 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
} }
fd = mpp_buffer_get_fd(framebuf); fd = mpp_buffer_get_fd(framebuf);
hw_regs->common_addr.reg130_decout_base = fd; hw_regs->common_addr.reg130_decout_base = fd;
mv_buf = hal_bufs_get_buf(reg_cxt->cmv_bufs, dxva_cxt->pp.CurrPic.Index7Bits); mv_buf = hal_bufs_get_buf(reg_ctx->cmv_bufs, dxva_cxt->pp.CurrPic.Index7Bits);
hw_regs->common_addr.reg131_colmv_cur_base = mpp_buffer_get_fd(mv_buf->buf[0]); hw_regs->common_addr.reg131_colmv_cur_base = mpp_buffer_get_fd(mv_buf->buf[0]);
hw_regs->h265d_param.reg65.cur_top_poc = dxva_cxt->pp.CurrPicOrderCntVal; hw_regs->h265d_param.reg65.cur_top_poc = dxva_cxt->pp.CurrPicOrderCntVal;
mpp_buf_slot_get_prop(reg_cxt->packet_slots, syn->dec.input, SLOT_BUFFER, mpp_buf_slot_get_prop(reg_ctx->packet_slots, syn->dec.input, SLOT_BUFFER,
&streambuf); &streambuf);
if ( dxva_cxt->bitstream == NULL) { if ( dxva_cxt->bitstream == NULL) {
dxva_cxt->bitstream = mpp_buffer_get_ptr(streambuf); dxva_cxt->bitstream = mpp_buffer_get_ptr(streambuf);
} }
#ifdef HW_RPS #ifdef HW_RPS
hw_regs->h265d_param.reg103.ref_pic_layer_same_with_cur = 0xffff; hw_regs->h265d_param.reg103.ref_pic_layer_same_with_cur = 0xffff;
hal_h265d_slice_hw_rps(syn->dec.syntax.data, rps_ptr, reg_cxt->sw_rps_buf, reg_cxt->fast_mode); hal_h265d_slice_hw_rps(syn->dec.syntax.data, rps_ptr, reg_ctx->sw_rps_buf, reg_ctx->fast_mode);
#else #else
hw_regs->sw_sysctrl.sw_h26x_rps_mode = 1; hw_regs->sw_sysctrl.sw_h26x_rps_mode = 1;
hal_h265d_slice_output_rps(syn->dec.syntax.data, rps_ptr); hal_h265d_slice_output_rps(syn->dec.syntax.data, rps_ptr);
@@ -790,10 +790,10 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
MppDevRegOffsetCfg trans_cfg; MppDevRegOffsetCfg trans_cfg;
/* cabac table */ /* cabac table */
hw_regs->h265d_addr.reg197_cabactbl_base = reg_cxt->bufs_fd; hw_regs->h265d_addr.reg197_cabactbl_base = reg_ctx->bufs_fd;
/* pps */ /* pps */
hw_regs->h265d_addr.reg161_pps_base = reg_cxt->bufs_fd; hw_regs->h265d_addr.reg161_pps_base = reg_ctx->bufs_fd;
hw_regs->h265d_addr.reg163_rps_base = reg_cxt->bufs_fd; hw_regs->h265d_addr.reg163_rps_base = reg_ctx->bufs_fd;
hw_regs->common_addr.reg128_rlc_base = mpp_buffer_get_fd(streambuf); hw_regs->common_addr.reg128_rlc_base = mpp_buffer_get_fd(streambuf);
hw_regs->common_addr.reg129_rlcwrite_base = mpp_buffer_get_fd(streambuf); hw_regs->common_addr.reg129_rlcwrite_base = mpp_buffer_get_fd(streambuf);
@@ -809,8 +809,8 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
aglin_offset); aglin_offset);
} }
hw_regs->common.reg010.dec_e = 1; hw_regs->common.reg010.dec_e = 1;
hw_regs->common.reg012.colmv_compress_en = reg_cxt->hw_info ? hw_regs->common.reg012.colmv_compress_en = reg_ctx->hw_info ?
reg_cxt->hw_info->cap_colmv_compress : 0; reg_ctx->hw_info->cap_colmv_compress : 0;
hw_regs->common.reg024.cabac_err_en_lowbits = 0xffffdfff; hw_regs->common.reg024.cabac_err_en_lowbits = 0xffffdfff;
hw_regs->common.reg025.cabac_err_en_highbits = 0x3ffbf9ff; hw_regs->common.reg025.cabac_err_en_highbits = 0x3ffbf9ff;
@@ -834,7 +834,7 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->common.reg032_timeout_threshold = 0x3ffff; hw_regs->common.reg032_timeout_threshold = 0x3ffff;
valid_ref = hw_regs->common_addr.reg130_decout_base; valid_ref = hw_regs->common_addr.reg130_decout_base;
reg_cxt->error_index = dxva_cxt->pp.CurrPic.Index7Bits; reg_ctx->error_index = dxva_cxt->pp.CurrPic.Index7Bits;
hw_regs->common_addr.reg132_error_ref_base = valid_ref; hw_regs->common_addr.reg132_error_ref_base = valid_ref;
memset(&hw_regs->highpoc.reg205, 0, sizeof(RK_U32)); memset(&hw_regs->highpoc.reg205, 0, sizeof(RK_U32));
@@ -845,10 +845,10 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
MppFrame mframe = NULL; MppFrame mframe = NULL;
hw_regs->h265d_param.reg67_82_ref_poc[i] = dxva_cxt->pp.PicOrderCntValList[i]; hw_regs->h265d_param.reg67_82_ref_poc[i] = dxva_cxt->pp.PicOrderCntValList[i];
mpp_buf_slot_get_prop(reg_cxt->slots, mpp_buf_slot_get_prop(reg_ctx->slots,
dxva_cxt->pp.RefPicList[i].Index7Bits, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_BUFFER, &framebuf); SLOT_BUFFER, &framebuf);
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.RefPicList[i].Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
if (framebuf != NULL) { if (framebuf != NULL) {
hw_regs->h265d_addr.reg164_179_ref_base[i] = mpp_buffer_get_fd(framebuf); hw_regs->h265d_addr.reg164_179_ref_base[i] = mpp_buffer_get_fd(framebuf);
@@ -858,7 +858,7 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
&& (!mpp_frame_get_errinfo(mframe))) { && (!mpp_frame_get_errinfo(mframe))) {
distance = pocdistance(dxva_cxt->pp.PicOrderCntValList[i], dxva_cxt->pp.current_poc); distance = pocdistance(dxva_cxt->pp.PicOrderCntValList[i], dxva_cxt->pp.current_poc);
hw_regs->common_addr.reg132_error_ref_base = hw_regs->h265d_addr.reg164_179_ref_base[i]; hw_regs->common_addr.reg132_error_ref_base = hw_regs->h265d_addr.reg164_179_ref_base[i];
reg_cxt->error_index = dxva_cxt->pp.RefPicList[i].Index7Bits; reg_ctx->error_index = dxva_cxt->pp.RefPicList[i].Index7Bits;
hw_regs->common.reg021.error_intra_mode = 0; hw_regs->common.reg021.error_intra_mode = 0;
} }
@@ -866,14 +866,14 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->h265d_addr.reg164_179_ref_base[i] = valid_ref; hw_regs->h265d_addr.reg164_179_ref_base[i] = valid_ref;
} }
mv_buf = hal_bufs_get_buf(reg_cxt->cmv_bufs, dxva_cxt->pp.RefPicList[i].Index7Bits); mv_buf = hal_bufs_get_buf(reg_ctx->cmv_bufs, dxva_cxt->pp.RefPicList[i].Index7Bits);
hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]); hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]);
SET_REF_VALID(hw_regs->h265d_param, i, 1); SET_REF_VALID(hw_regs->h265d_param, i, 1);
} }
} }
if ((reg_cxt->error_index == dxva_cxt->pp.CurrPic.Index7Bits) && !dxva_cxt->pp.IntraPicFlag) { if ((reg_ctx->error_index == dxva_cxt->pp.CurrPic.Index7Bits) && !dxva_cxt->pp.IntraPicFlag) {
// mpp_err("current frm may be err, should skip process"); // mpp_err("current frm may be err, should skip process");
syn->dec.flags.ref_err = 1; syn->dec.flags.ref_err = 1;
return MPP_OK; return MPP_OK;
@@ -885,48 +885,48 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
dxva_cxt->pp.RefPicList[i].bPicEntry != 0x7f) { dxva_cxt->pp.RefPicList[i].bPicEntry != 0x7f) {
MppFrame mframe = NULL; MppFrame mframe = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, mpp_buf_slot_get_prop(reg_ctx->slots,
dxva_cxt->pp.RefPicList[i].Index7Bits, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_BUFFER, &framebuf); SLOT_BUFFER, &framebuf);
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.RefPicList[i].Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.RefPicList[i].Index7Bits,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
if (framebuf == NULL || mpp_frame_get_errinfo(mframe)) { if (framebuf == NULL || mpp_frame_get_errinfo(mframe)) {
mv_buf = hal_bufs_get_buf(reg_cxt->cmv_bufs, reg_cxt->error_index); mv_buf = hal_bufs_get_buf(reg_ctx->cmv_bufs, reg_ctx->error_index);
hw_regs->h265d_addr.reg164_179_ref_base[i] = hw_regs->common_addr.reg132_error_ref_base; hw_regs->h265d_addr.reg164_179_ref_base[i] = hw_regs->common_addr.reg132_error_ref_base;
hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]); hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]);
} }
} else { } else {
mv_buf = hal_bufs_get_buf(reg_cxt->cmv_bufs, reg_cxt->error_index); mv_buf = hal_bufs_get_buf(reg_ctx->cmv_bufs, reg_ctx->error_index);
hw_regs->h265d_addr.reg164_179_ref_base[i] = hw_regs->common_addr.reg132_error_ref_base; hw_regs->h265d_addr.reg164_179_ref_base[i] = hw_regs->common_addr.reg132_error_ref_base;
hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]); hw_regs->h265d_addr.reg181_196_colmv_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]);
/* mark 3 to differ from current frame */ /* mark 3 to differ from current frame */
if (reg_cxt->error_index == dxva_cxt->pp.CurrPic.Index7Bits) if (reg_ctx->error_index == dxva_cxt->pp.CurrPic.Index7Bits)
SET_POC_HIGNBIT_INFO(hw_regs->highpoc, i, poc_highbit, 3); SET_POC_HIGNBIT_INFO(hw_regs->highpoc, i, poc_highbit, 3);
} }
} }
trans_cfg.reg_idx = 161; trans_cfg.reg_idx = 161;
trans_cfg.offset = reg_cxt->spspps_offset; trans_cfg.offset = reg_ctx->spspps_offset;
mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_OFFSET, &trans_cfg); mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_OFFSET, &trans_cfg);
/* rps */ /* rps */
trans_cfg.reg_idx = 163; trans_cfg.reg_idx = 163;
trans_cfg.offset = reg_cxt->rps_offset; trans_cfg.offset = reg_ctx->rps_offset;
mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_OFFSET, &trans_cfg); mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_OFFSET, &trans_cfg);
hw_regs->common.reg013.cur_pic_is_idr = dxva_cxt->pp.IdrPicFlag;//p_hal->slice_long->idr_flag; hw_regs->common.reg013.cur_pic_is_idr = dxva_cxt->pp.IdrPicFlag;//p_hal->slice_long->idr_flag;
hw_regs->common.reg011.buf_empty_en = 1; hw_regs->common.reg011.buf_empty_en = 1;
hal_h265d_rcb_info_update(hal, dxva_cxt, hw_regs, width, height); hal_h265d_rcb_info_update(hal, dxva_cxt, hw_regs, width, height);
vdpu382_setup_rcb(&hw_regs->common_addr, reg_cxt->dev, reg_cxt->fast_mode ? vdpu382_setup_rcb(&hw_regs->common_addr, reg_ctx->dev, reg_ctx->fast_mode ?
reg_cxt->rcb_buf[syn->dec.reg_index] : reg_cxt->rcb_buf[0], reg_ctx->rcb_buf[syn->dec.reg_index] : reg_ctx->rcb_buf[0],
(Vdpu382RcbInfo*)reg_cxt->rcb_info); (Vdpu382RcbInfo*)reg_ctx->rcb_info);
{ {
MppFrame mframe = NULL; MppFrame mframe = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, dxva_cxt->pp.CurrPic.Index7Bits, mpp_buf_slot_get_prop(reg_ctx->slots, dxva_cxt->pp.CurrPic.Index7Bits,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
if (mpp_frame_get_thumbnail_en(mframe)) { if (mpp_frame_get_thumbnail_en(mframe)) {
@@ -934,7 +934,7 @@ static MPP_RET hal_h265d_vdpu382_gen_regs(void *hal, HalTaskInfo *syn)
hw_regs->common_addr.reg130_decout_base; hw_regs->common_addr.reg130_decout_base;
hw_regs->h265d_addr.reg199_scale_down_chorme_base = hw_regs->h265d_addr.reg199_scale_down_chorme_base =
hw_regs->common_addr.reg130_decout_base; hw_regs->common_addr.reg130_decout_base;
vdpu382_setup_down_scale(mframe, reg_cxt->dev, &hw_regs->common); vdpu382_setup_down_scale(mframe, reg_ctx->dev, &hw_regs->common);
} else { } else {
hw_regs->h265d_addr.reg198_scale_down_luma_base = 0; hw_regs->h265d_addr.reg198_scale_down_luma_base = 0;
hw_regs->h265d_addr.reg199_scale_down_chorme_base = 0; hw_regs->h265d_addr.reg199_scale_down_chorme_base = 0;
@@ -951,7 +951,7 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
MPP_RET ret = MPP_OK; MPP_RET ret = MPP_OK;
RK_U8* p = NULL; RK_U8* p = NULL;
Vdpu382H265dRegSet *hw_regs = NULL; Vdpu382H265dRegSet *hw_regs = NULL;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
RK_S32 index = task->dec.reg_index; RK_S32 index = task->dec.reg_index;
RK_U32 i; RK_U32 i;
@@ -962,12 +962,12 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
return MPP_OK; return MPP_OK;
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
p = (RK_U8*)reg_cxt->g_buf[index].hw_regs; p = (RK_U8*)reg_ctx->g_buf[index].hw_regs;
hw_regs = ( Vdpu382H265dRegSet *)reg_cxt->g_buf[index].hw_regs; hw_regs = ( Vdpu382H265dRegSet *)reg_ctx->g_buf[index].hw_regs;
} else { } else {
p = (RK_U8*)reg_cxt->hw_regs; p = (RK_U8*)reg_ctx->hw_regs;
hw_regs = ( Vdpu382H265dRegSet *)reg_cxt->hw_regs; hw_regs = ( Vdpu382H265dRegSet *)reg_ctx->hw_regs;
} }
if (hw_regs == NULL) { if (hw_regs == NULL) {
@@ -989,7 +989,7 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->common); wr_cfg.size = sizeof(hw_regs->common);
wr_cfg.offset = OFFSET_COMMON_REGS; wr_cfg.offset = OFFSET_COMMON_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -999,7 +999,7 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->h265d_param); wr_cfg.size = sizeof(hw_regs->h265d_param);
wr_cfg.offset = OFFSET_CODEC_PARAMS_REGS; wr_cfg.offset = OFFSET_CODEC_PARAMS_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1009,7 +1009,7 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->common_addr); wr_cfg.size = sizeof(hw_regs->common_addr);
wr_cfg.offset = OFFSET_COMMON_ADDR_REGS; wr_cfg.offset = OFFSET_COMMON_ADDR_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1019,7 +1019,7 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->h265d_addr); wr_cfg.size = sizeof(hw_regs->h265d_addr);
wr_cfg.offset = OFFSET_CODEC_ADDR_REGS; wr_cfg.offset = OFFSET_CODEC_ADDR_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1029,7 +1029,7 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->statistic); wr_cfg.size = sizeof(hw_regs->statistic);
wr_cfg.offset = OFFSET_STATISTIC_REGS; wr_cfg.offset = OFFSET_STATISTIC_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1039,7 +1039,7 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
wr_cfg.size = sizeof(hw_regs->highpoc); wr_cfg.size = sizeof(hw_regs->highpoc);
wr_cfg.offset = OFFSET_POC_HIGHBIT_REGS; wr_cfg.offset = OFFSET_POC_HIGHBIT_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_WR, &wr_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
if (ret) { if (ret) {
mpp_err_f("set register write failed %d\n", ret); mpp_err_f("set register write failed %d\n", ret);
break; break;
@@ -1049,15 +1049,15 @@ static MPP_RET hal_h265d_vdpu382_start(void *hal, HalTaskInfo *task)
rd_cfg.size = sizeof(hw_regs->irq_status); rd_cfg.size = sizeof(hw_regs->irq_status);
rd_cfg.offset = OFFSET_INTERRUPT_REGS; rd_cfg.offset = OFFSET_INTERRUPT_REGS;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_REG_RD, &rd_cfg); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_REG_RD, &rd_cfg);
if (ret) { if (ret) {
mpp_err_f("set register read failed %d\n", ret); mpp_err_f("set register read failed %d\n", ret);
break; break;
} }
/* rcb info for sram */ /* rcb info for sram */
vdpu382_set_rcbinfo(reg_cxt->dev, (Vdpu382RcbInfo*)reg_cxt->rcb_info); vdpu382_set_rcbinfo(reg_ctx->dev, (Vdpu382RcbInfo*)reg_ctx->rcb_info);
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_CMD_SEND, NULL); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_CMD_SEND, NULL);
if (ret) { if (ret) {
mpp_err_f("send cmd failed %d\n", ret); mpp_err_f("send cmd failed %d\n", ret);
break; break;
@@ -1072,7 +1072,7 @@ static MPP_RET hal_h265d_vdpu382_wait(void *hal, HalTaskInfo *task)
{ {
MPP_RET ret = MPP_OK; MPP_RET ret = MPP_OK;
RK_S32 index = task->dec.reg_index; RK_S32 index = task->dec.reg_index;
HalH265dCtx *reg_cxt = (HalH265dCtx *)hal; HalH265dCtx *reg_ctx = (HalH265dCtx *)hal;
RK_U8* p = NULL; RK_U8* p = NULL;
Vdpu382H265dRegSet *hw_regs = NULL; Vdpu382H265dRegSet *hw_regs = NULL;
RK_S32 i; RK_S32 i;
@@ -1083,15 +1083,15 @@ static MPP_RET hal_h265d_vdpu382_wait(void *hal, HalTaskInfo *task)
goto ERR_PROC; goto ERR_PROC;
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
hw_regs = ( Vdpu382H265dRegSet *)reg_cxt->g_buf[index].hw_regs; hw_regs = ( Vdpu382H265dRegSet *)reg_ctx->g_buf[index].hw_regs;
} else { } else {
hw_regs = ( Vdpu382H265dRegSet *)reg_cxt->hw_regs; hw_regs = ( Vdpu382H265dRegSet *)reg_ctx->hw_regs;
} }
p = (RK_U8*)hw_regs; p = (RK_U8*)hw_regs;
ret = mpp_dev_ioctl(reg_cxt->dev, MPP_DEV_CMD_POLL, NULL); ret = mpp_dev_ioctl(reg_ctx->dev, MPP_DEV_CMD_POLL, NULL);
if (ret) if (ret)
mpp_err_f("poll cmd failed %d\n", ret); mpp_err_f("poll cmd failed %d\n", ret);
@@ -1102,31 +1102,31 @@ ERR_PROC:
hw_regs->irq_status.reg224.buf_empty_sta || hw_regs->irq_status.reg224.buf_empty_sta ||
hw_regs->irq_status.reg224.dec_bus_sta || hw_regs->irq_status.reg224.dec_bus_sta ||
!hw_regs->irq_status.reg224.dec_rdy_sta) { !hw_regs->irq_status.reg224.dec_rdy_sta) {
if (!reg_cxt->fast_mode) { if (!reg_ctx->fast_mode) {
if (reg_cxt->dec_cb) if (reg_ctx->dec_cb)
mpp_callback(reg_cxt->dec_cb, &task->dec); mpp_callback(reg_ctx->dec_cb, &task->dec);
} else { } else {
MppFrame mframe = NULL; MppFrame mframe = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.output, mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.output,
SLOT_FRAME_PTR, &mframe); SLOT_FRAME_PTR, &mframe);
if (mframe) { if (mframe) {
reg_cxt->fast_mode_err_found = 1; reg_ctx->fast_mode_err_found = 1;
mpp_frame_set_errinfo(mframe, 1); mpp_frame_set_errinfo(mframe, 1);
} }
} }
} else { } else {
if (reg_cxt->fast_mode && reg_cxt->fast_mode_err_found) { if (reg_ctx->fast_mode && reg_ctx->fast_mode_err_found) {
for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(task->dec.refer); i++) { for (i = 0; i < (RK_S32)MPP_ARRAY_ELEMS(task->dec.refer); i++) {
if (task->dec.refer[i] >= 0) { if (task->dec.refer[i] >= 0) {
MppFrame frame_ref = NULL; MppFrame frame_ref = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.refer[i], mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.refer[i],
SLOT_FRAME_PTR, &frame_ref); SLOT_FRAME_PTR, &frame_ref);
h265h_dbg(H265H_DBG_FAST_ERR, "refer[%d] %d frame %p\n", h265h_dbg(H265H_DBG_FAST_ERR, "refer[%d] %d frame %p\n",
i, task->dec.refer[i], frame_ref); i, task->dec.refer[i], frame_ref);
if (frame_ref && mpp_frame_get_errinfo(frame_ref)) { if (frame_ref && mpp_frame_get_errinfo(frame_ref)) {
MppFrame frame_out = NULL; MppFrame frame_out = NULL;
mpp_buf_slot_get_prop(reg_cxt->slots, task->dec.output, mpp_buf_slot_get_prop(reg_ctx->slots, task->dec.output,
SLOT_FRAME_PTR, &frame_out); SLOT_FRAME_PTR, &frame_out);
mpp_frame_set_errinfo(frame_out, 1); mpp_frame_set_errinfo(frame_out, 1);
break; break;
@@ -1149,8 +1149,8 @@ ERR_PROC:
p += 4; p += 4;
} }
if (reg_cxt->fast_mode) { if (reg_ctx->fast_mode) {
reg_cxt->g_buf[index].use_flag = 0; reg_ctx->g_buf[index].use_flag = 0;
} }
return ret; return ret;