diff --git a/mpp/codec/dec/av1/av1d_parser.c b/mpp/codec/dec/av1/av1d_parser.c index aba2f901..d64ac139 100644 --- a/mpp/codec/dec/av1/av1d_parser.c +++ b/mpp/codec/dec/av1/av1d_parser.c @@ -206,9 +206,11 @@ static void read_global_param(AV1Context *s, RK_S32 type, RK_S32 ref, RK_S32 idx mx = 1 << abs_bits; r = (prev_gm_param >> prec_diff) - sub; + s->cur_frame.gm_params[ref].wmmat_val[idx] = + decode_signed_subexp_with_ref(s->raw_frame_header->gm_params[ref][idx], + -mx, mx + 1, r); s->cur_frame.gm_params[ref].wmmat[idx] = - (decode_signed_subexp_with_ref(s->raw_frame_header->gm_params[ref][idx], - -mx, mx + 1, r) << prec_diff) + round; + (s->cur_frame.gm_params[ref].wmmat_val[idx] << prec_diff) + round; } static RK_U16 round_two(RK_U64 x, RK_U16 n) diff --git a/mpp/codec/dec/av1/av1d_parser.h b/mpp/codec/dec/av1/av1d_parser.h index 806506bd..bc54616c 100644 --- a/mpp/codec/dec/av1/av1d_parser.h +++ b/mpp/codec/dec/av1/av1d_parser.h @@ -61,6 +61,7 @@ typedef struct RefInfo { typedef struct GlobalMtionParams { RK_U32 wmtype; RK_S32 wmmat[6]; + RK_S32 wmmat_val[6]; RK_S32 alpha, beta, gamma, delta; } GlobalMtionParams; diff --git a/mpp/codec/dec/av1/av1d_parser2_syntax.c b/mpp/codec/dec/av1/av1d_parser2_syntax.c index e8e0064a..8dfcb05a 100644 --- a/mpp/codec/dec/av1/av1d_parser2_syntax.c +++ b/mpp/codec/dec/av1/av1d_parser2_syntax.c @@ -131,6 +131,7 @@ static int av1d_fill_picparams(Av1CodecContext *ctx, DXVA_PicParams_AV1 *pp) pp->frame_refs[i].wmtype = h->cur_frame.gm_params[AV1_REF_FRAME_LAST + i].wmtype; for (j = 0; j < 6; ++j) { pp->frame_refs[i].wmmat[j] = h->cur_frame.gm_params[AV1_REF_FRAME_LAST + i].wmmat[j]; + pp->frame_refs[i].wmmat_val[j] = h->cur_frame.gm_params[AV1_REF_FRAME_LAST + i].wmmat_val[j]; } pp->frame_refs[i].alpha = h->cur_frame.gm_params[AV1_REF_FRAME_LAST + i].alpha; pp->frame_refs[i].beta = h->cur_frame.gm_params[AV1_REF_FRAME_LAST + i].beta; diff --git a/mpp/common/av1d_syntax.h b/mpp/common/av1d_syntax.h index 418235ab..e4203a22 100644 --- a/mpp/common/av1d_syntax.h +++ b/mpp/common/av1d_syntax.h @@ -221,6 +221,7 @@ typedef struct _DXVA_PicParams_AV1 { UCHAR wminvalid; UCHAR wmtype; RK_S32 wmmat[6]; + RK_S32 wmmat_val[6]; USHORT alpha, beta, gamma, delta; } frame_refs[8]; diff --git a/mpp/hal/vpu/av1d/hal_av1d_vdpu383.c b/mpp/hal/vpu/av1d/hal_av1d_vdpu383.c index b425a9b8..0a6674c3 100644 --- a/mpp/hal/vpu/av1d/hal_av1d_vdpu383.c +++ b/mpp/hal/vpu/av1d/hal_av1d_vdpu383.c @@ -121,29 +121,6 @@ default: break;}\ }while(0) - -#define SET_REF_COLMV_BASE(regs, ref_index, value)\ - do{ \ - switch(ref_index){\ - case 0: regs.reg217_colmv_ref0_base = value; break; \ - case 1: regs.reg218_colmv_ref1_base = value; break; \ - case 2: regs.reg219_colmv_ref2_base = value; break; \ - case 3: regs.reg220_colmv_ref3_base = value; break; \ - case 4: regs.reg221_colmv_ref4_base = value; break; \ - case 5: regs.reg222_colmv_ref5_base = value; break; \ - case 6: regs.reg223_colmv_ref6_base = value; break; \ - case 7: regs.reg224_colmv_ref7_base = value; break; \ - case 8: regs.reg225_colmv_ref8_base = value; break; \ - case 9: regs.reg226_colmv_ref9_base = value; break; \ - case 10: regs.reg227_colmv_ref10_base = value; break; \ - case 11: regs.reg228_colmv_ref11_base = value; break; \ - case 12: regs.reg229_colmv_ref12_base = value; break; \ - case 13: regs.reg230_colmv_ref13_base = value; break; \ - case 14: regs.reg231_colmv_ref14_base = value; break; \ - case 15: regs.reg232_colmv_ref15_base = value; break; \ - default: break;}\ - }while(0) - #define VDPU_FAST_REG_SET_CNT 3 #define OFFSET_CTRL_REGS (8 * sizeof(RK_U32)) @@ -264,7 +241,8 @@ static MPP_RET flip_string(char *str) return MPP_OK; } -static MPP_RET dump_data(char *fname_path, void *data, RK_U32 data_bit_size, RK_U32 line_bits, RK_U32 big_end) +static MPP_RET dump_data(char *fname_path, void *data, RK_U32 data_bit_size, + RK_U32 line_bits, RK_U32 big_end, RK_U32 append) { RK_U8 *buf_p = (RK_U8 *)data; RK_U8 cur_data; @@ -274,12 +252,16 @@ static MPP_RET dump_data(char *fname_path, void *data, RK_U32 data_bit_size, RK_ char line_tmp[256]; RK_U32 str_idx = 0; - dump_fp = fopen(fname_path, "w+"); + if (append) + dump_fp = fopen(fname_path, "aw+"); + else + dump_fp = fopen(fname_path, "w+"); if (!dump_fp) { mpp_err_f("open file: %s error!\n", fname_path); return MPP_NOK; } - fseek(dump_fp, 0, SEEK_END); + if (append) + fseek(dump_fp, 0, SEEK_END); if ((data_bit_size % 4 != 0) || (line_bits % 8 != 0)) { mpp_err_f("line bits not align to 4!\n"); @@ -331,6 +313,7 @@ static MPP_RET dump_data(char *fname_path, void *data, RK_U32 data_bit_size, RK_ fprintf(dump_fp, "%s\n", line_tmp); } + fflush(dump_fp); fclose(dump_fp); return MPP_OK; @@ -1659,13 +1642,9 @@ static MPP_RET prepare_uncompress_header(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 * for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; ++i) mpp_put_bits(&bp, dxva->frame_refs[i].wmtype, 2); - for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; ++i) { - for (j = 0; j < 6; j++) { - UINT32 wmmat_val = 0; - // TODO: fix here - mpp_put_bits(&bp, wmmat_val, 17); - } - } + for (i = 0; i < ALLOWED_REFS_PER_FRAME_EX; ++i) + for (j = 0; j < 6; j++) + mpp_put_bits(&bp, dxva->frame_refs[i].wmmat_val[j], 17); /* film_grain_params */ { @@ -1942,7 +1921,7 @@ static MPP_RET vdpu383_av1d_colmv_setup(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *d size_t mv_size; /* the worst case is the frame is error with whole frame */ - mv_size = MPP_ALIGN(dxva->width, 64) / 64 * MPP_ALIGN(dxva->height, 64) / 64 * 8192; + mv_size = MPP_ALIGN(dxva->width, 64) / 64 * MPP_ALIGN(dxva->height, 64) / 64 * 1024; if (reg_ctx->colmv_bufs == NULL || reg_ctx->colmv_size < mv_size) { if (reg_ctx->colmv_bufs) { hal_bufs_deinit(reg_ctx->colmv_bufs); @@ -2030,9 +2009,10 @@ static void vdpu383_av1d_set_cdf(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *dxva) #ifdef DUMP_DATA { dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(reg_ctx->cdf_rd_def_base), - 434 * 128, 128, 0); + 8 * NON_COEF_CDF_SIZE, 128, 0, 0); dump_data(dump_cur_fname_path, (RK_U8 *)mpp_buffer_get_ptr(reg_ctx->cdf_rd_def_base) - + NON_COEF_CDF_SIZE + COEF_CDF_SIZE * coeff_cdf_idx, 354 * 128, 128, 0); + + NON_COEF_CDF_SIZE + COEF_CDF_SIZE * coeff_cdf_idx, + 8 * COEF_CDF_SIZE, 128, 0, 1); } #endif } else { @@ -2045,9 +2025,10 @@ static void vdpu383_av1d_set_cdf(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *dxva) #ifdef DUMP_DATA { dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(cdf_buf->buf[0]), - 434 * 128, 128, 0); + 8 * NON_COEF_CDF_SIZE, 128, 0, 0); dump_data(dump_cur_fname_path, (RK_U8 *)mpp_buffer_get_ptr(cdf_buf->buf[0]) - + NON_COEF_CDF_SIZE + COEF_CDF_SIZE * coeff_cdf_idx, 354 * 128, 128, 0); + + NON_COEF_CDF_SIZE + COEF_CDF_SIZE * coeff_cdf_idx, + 8 * COEF_CDF_SIZE, 128, 0, 1); } #endif } @@ -2095,7 +2076,7 @@ static void vdpu383_av1d_set_cdf(Av1dHalCtx *p_hal, DXVA_PicParams_AV1 *dxva) memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path)); sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname); dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(reg_ctx->cdf_rd_def_base), - 8 * mpp_buffer_get_size(reg_ctx->cdf_rd_def_base), 128, 0); + (NON_COEF_CDF_SIZE + COEF_CDF_SIZE * 4) * 8, 128, 0, 0); } #endif @@ -2206,8 +2187,8 @@ MPP_RET vdpu383_av1d_gen_regs(void *hal, HalTaskInfo *task) char *cur_fname = "global_cfg.dat"; memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path)); sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname); - // dump_data(dump_cur_fname_path, ctx->bufs_ptr, - // 8 * regs->av1d_paras.reg67_global_len * 16, 64, 0); + dump_data(dump_cur_fname_path, ctx->bufs_ptr, + 8 * regs->av1d_paras.reg67_global_len * 16, 64, 0, 0); } #endif // input strm @@ -2224,9 +2205,16 @@ MPP_RET vdpu383_av1d_gen_regs(void *hal, HalTaskInfo *task) char *cur_fname = "stream_in.dat"; memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path)); sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname); - // dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mbuffer) - // + ctx->offset_uncomps, - // 8 * p_hal->strm_len, 128, 0); + dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mbuffer) + + ctx->offset_uncomps, + 8 * p_hal->strm_len, 128, 0, 0); + } + { + char *cur_fname = "stream_in_no_offset.dat"; + memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path)); + sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname); + dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mbuffer), + 8 * p_hal->strm_len, 128, 0, 0); } #endif } @@ -2345,10 +2333,22 @@ MPP_RET vdpu383_av1d_gen_regs(void *hal, HalTaskInfo *task) vdpu383_av1d_colmv_setup(p_hal, dxva); mv_buf = hal_bufs_get_buf(ctx->colmv_bufs, dxva->CurrPic.Index7Bits); regs->av1d_addrs.reg216_colmv_cur_base = mpp_buffer_get_fd(mv_buf->buf[0]); +#ifdef DUMP_DATA + memset(mpp_buffer_get_ptr(mv_buf->buf[0]), 0, mpp_buffer_get_size(mv_buf->buf[0])); +#endif for (i = 0; i < NUM_REF_FRAMES; i++) { if (dxva->frame_refs[i].Index != (CHAR)0xff && dxva->frame_refs[i].Index != 0x7f) { mv_buf = hal_bufs_get_buf(ctx->colmv_bufs, dxva->frame_refs[i].Index); regs->av1d_addrs.reg217_232_colmv_ref_base[i] = mpp_buffer_get_fd(mv_buf->buf[0]); +#ifdef DUMP_DATA + { + char *cur_fname = "colmv_ref_frame"; + memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path)); + sprintf(dump_cur_fname_path, "%s/%s%d.dat", dump_cur_dir, cur_fname, i); + dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mv_buf->buf[0]), + 8 * 5120 * 8, 64, 0, 0); + } +#endif } } } @@ -2475,6 +2475,27 @@ MPP_RET vdpu383_av1d_wait(void *hal, HalTaskInfo *task) reg_ctx->reg_buf[task->dec.reg_index].regs : reg_ctx->regs; (void) p_regs; +#ifdef DUMP_DATA + { + char *cur_fname = "colmv_cur_frame.dat"; + DXVA_PicParams_AV1 *dxva = (DXVA_PicParams_AV1*)task->dec.syntax.data; + HalBuf *mv_buf = NULL; + mv_buf = hal_bufs_get_buf(reg_ctx->colmv_bufs, dxva->CurrPic.Index7Bits); + memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path)); + sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname); + dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mv_buf->buf[0]), + 8 * 5120 * 8, 64, 0, 0); + } + { + char *cur_fname = "decout.dat"; + MppBuffer mbuffer = NULL; + mpp_buf_slot_get_prop(p_hal->slots, task->dec.output, SLOT_BUFFER, &mbuffer); + memset(dump_cur_fname_path, 0, sizeof(dump_cur_fname_path)); + sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname); + dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(mbuffer), + 8 * mpp_buffer_get_size(mbuffer), 64, 0, 0); + } +#endif if (task->dec.flags.parse_err || task->dec.flags.ref_err) { @@ -2500,7 +2521,7 @@ MPP_RET vdpu383_av1d_wait(void *hal, HalTaskInfo *task) sprintf(dump_cur_fname_path, "%s/%s", dump_cur_dir, cur_fname); cdf_buf = hal_bufs_get_buf(reg_ctx->cdf_bufs, dxva->CurrPic.Index7Bits); dump_data(dump_cur_fname_path, (void *)mpp_buffer_get_ptr(cdf_buf->buf[0]), - (NON_COEF_CDF_SIZE + COEF_CDF_SIZE * 4) * 8, 128, 0); + (NON_COEF_CDF_SIZE + COEF_CDF_SIZE) * 8, 128, 0, 0); } #endif #if DUMP_AV1_DATAS