Lines Matching refs:ctx

94 static void mpi_rc_deinit(MpiRc2TestCtx *ctx)  in mpi_rc_deinit()  argument
96 MpiRcFile *file = &ctx->file; in mpi_rc_deinit()
113 if (ctx->reader) { in mpi_rc_deinit()
114 reader_deinit(ctx->reader); in mpi_rc_deinit()
115 ctx->reader = NULL; in mpi_rc_deinit()
118 MPP_FREE(ctx->com_buf); in mpi_rc_deinit()
121 static MPP_RET mpi_rc_init(MpiRc2TestCtx *ctx) in mpi_rc_init() argument
123 MpiEncTestArgs* enc_cmd = ctx->enc_cmd; in mpi_rc_init()
126 reader_init(&ctx->reader, enc_cmd->file_input, enc_cmd->type_src); in mpi_rc_init()
128 if (NULL == ctx->reader) { in mpi_rc_init()
133 mpp_log("input file %s size %ld\n", enc_cmd->file_input, reader_size(ctx->reader)); in mpi_rc_init()
134 ctx->dec_type = enc_cmd->type_src; in mpi_rc_init()
137 MpiRcFile *file = &ctx->file; in mpi_rc_init()
326 static void mpi_rc_calc_ssim(MpiRc2TestCtx *ctx, MppFrame frame_in, MppFrame frame_out) in mpi_rc_calc_ssim() argument
330 MpiRcStat *stat = &ctx->stat; in mpi_rc_calc_ssim()
342 if (NULL == ctx->com_buf) in mpi_rc_calc_ssim()
343 ctx->com_buf = mpp_malloc(RK_U8, enc_hor_stride * mpp_frame_get_ver_stride(frame_out) * 2); in mpi_rc_calc_ssim()
346 width - 2, height - 2, ctx->com_buf, &cnt); in mpi_rc_calc_ssim()
352 static MPP_RET mpi_rc_calc_stat(MpiRc2TestCtx *ctx, in mpi_rc_calc_stat() argument
356 MpiRcStat *stat = &ctx->stat; in mpi_rc_calc_stat()
364 if (ctx->enc_cmd->psnr_en) { in mpi_rc_calc_stat()
366 ctx->total_psnrs += stat->psnr_y; in mpi_rc_calc_stat()
368 if (ctx->enc_cmd->ssim_en) { in mpi_rc_calc_stat()
369 mpi_rc_calc_ssim(ctx, frame_in, frame_out); in mpi_rc_calc_stat()
370 ctx->total_ssims += stat->ssim_y; in mpi_rc_calc_stat()
376 static void mpi_rc_log_stat(MpiRc2TestCtx *ctx, RK_U32 frame_count, in mpi_rc_log_stat() argument
380 MpiRcStat *stat = &ctx->stat; in mpi_rc_log_stat()
381 MpiRcFile *file = &ctx->file; in mpi_rc_log_stat()
399 static MPP_RET mpi_rc_enc_init(MpiRc2TestCtx *ctx) in mpi_rc_enc_init() argument
401 MpiEncTestArgs* enc_cmd = ctx->enc_cmd; in mpi_rc_enc_init()
405 MppEncRcCfg *rc_cfg = &ctx->rc_cfg; in mpi_rc_enc_init()
407 MppEncCfg cfg = ctx->cfg; in mpi_rc_enc_init()
413 ret = mpp_create(&ctx->enc_ctx, &ctx->enc_mpi); in mpi_rc_enc_init()
419 enc_mpi = ctx->enc_mpi; in mpi_rc_enc_init()
420 enc_ctx = ctx->enc_ctx; in mpi_rc_enc_init()
581 static MPP_RET mpi_rc_post_dec_init(MpiRc2TestCtx *ctx) in mpi_rc_post_dec_init() argument
583 MpiEncTestArgs *enc_cmd = ctx->enc_cmd; in mpi_rc_post_dec_init()
591 ret = mpp_create(&ctx->dec_ctx_post, &ctx->dec_mpi_post); in mpi_rc_post_dec_init()
597 dec_mpi = ctx->dec_mpi_post; in mpi_rc_post_dec_init()
598 dec_ctx = ctx->dec_ctx_post; in mpi_rc_post_dec_init()
600 ret = mpp_packet_init(&ctx->dec_pkt_post, in mpi_rc_post_dec_init()
601 ctx->dec_in_buf_post, ctx->dec_in_buf_post_size); in mpi_rc_post_dec_init()
636 static MPP_RET mpi_rc_dec_post_decode(MpiRc2TestCtx *ctx, MppFrame orig_frm) in mpi_rc_dec_post_decode() argument
643 if (ctx->pkt_eos) in mpi_rc_dec_post_decode()
644 mpp_packet_set_eos(ctx->dec_pkt_post); in mpi_rc_dec_post_decode()
648 ret = ctx->dec_mpi_post->decode_put_packet(ctx->dec_ctx_post, in mpi_rc_dec_post_decode()
649 ctx->dec_pkt_post); in mpi_rc_dec_post_decode()
659 ret = ctx->dec_mpi_post->decode_get_frame(ctx->dec_ctx_post, in mpi_rc_dec_post_decode()
669 ctx->dec_mpi_post->control(ctx->dec_ctx_post, in mpi_rc_dec_post_decode()
673 mpi_rc_calc_stat(ctx, orig_frm, out_frm); in mpi_rc_dec_post_decode()
674 mpi_rc_log_stat(ctx, ctx->frm_idx, in mpi_rc_dec_post_decode()
675 !((ctx->frm_idx - ctx->calc_base_idx + 1) % in mpi_rc_dec_post_decode()
676 ctx->rc_cfg.fps_in_num), in mpi_rc_dec_post_decode()
686 if (ctx->pkt_eos && dec_pkt_done && !dec_frm_eos) in mpi_rc_dec_post_decode()
702 static MPP_RET mpi_rc_pre_dec_init(MpiRc2TestCtx *ctx) in mpi_rc_pre_dec_init() argument
720 ret = mpp_create(&ctx->dec_ctx_pre, &ctx->dec_mpi_pre); in mpi_rc_pre_dec_init()
726 dec_mpi = ctx->dec_mpi_pre; in mpi_rc_pre_dec_init()
727 dec_ctx = ctx->dec_ctx_pre; in mpi_rc_pre_dec_init()
729 ret = mpp_packet_init(&ctx->dec_pkt_pre, ctx->dec_in_buf_pre, ctx->dec_in_buf_pre_size); in mpi_rc_pre_dec_init()
760 ret = mpp_init(dec_ctx, MPP_CTX_DEC, ctx->dec_type); in mpi_rc_pre_dec_init()
776 static MPP_RET mpi_rc_info_change(MpiRc2TestCtx *ctx, MppFrame frm) in mpi_rc_info_change() argument
780 mpp_enc_cfg_set_s32(ctx->cfg, "prep:width", mpp_frame_get_width(frm)); in mpi_rc_info_change()
781 mpp_enc_cfg_set_s32(ctx->cfg, "prep:height", mpp_frame_get_height(frm)); in mpi_rc_info_change()
782 mpp_enc_cfg_set_s32(ctx->cfg, "prep:hor_stride", mpp_frame_get_hor_stride(frm)); in mpi_rc_info_change()
783 mpp_enc_cfg_set_s32(ctx->cfg, "prep:ver_stride", mpp_frame_get_ver_stride(frm)); in mpi_rc_info_change()
784 mpp_enc_cfg_set_s32(ctx->cfg, "prep:format", mpp_frame_get_fmt(frm)); in mpi_rc_info_change()
786 ret = ctx->enc_mpi->control(ctx->enc_ctx, MPP_ENC_SET_CFG, ctx->cfg); in mpi_rc_info_change()
788 ctx->dec_mpi_post->control(ctx->dec_ctx_post, MPP_DEC_SET_FRAME_INFO, (MppParam)frm); in mpi_rc_info_change()
793 static MPP_RET mpi_rc_enc(MpiRc2TestCtx *ctx) in mpi_rc_enc() argument
796 MppApi *mpi = ctx->dec_mpi_pre; in mpi_rc_enc()
797 MppCtx dec_ctx = ctx->dec_ctx_pre; in mpi_rc_enc()
808 ctx->frm_eos = mpp_frame_get_eos(frm); in mpi_rc_enc()
812 mpi_rc_info_change(ctx, frm); in mpi_rc_enc()
813 ctx->start_enc = mpp_time(); in mpi_rc_enc()
818 if ((ctx->enc_cmd->frame_num > 0) && (ctx->frm_idx > ctx->enc_cmd->frame_num)) { in mpi_rc_enc()
819 ctx->loop_end = 1; in mpi_rc_enc()
821 ctx->frm_eos = mpp_frame_get_eos(frm); in mpi_rc_enc()
824 ctx->enc_mpi->encode_put_frame(ctx->enc_ctx, frm); in mpi_rc_enc()
825 ctx->enc_mpi->encode_get_packet(ctx->enc_ctx, &ctx->enc_pkt); in mpi_rc_enc()
828 ctx->enc_mpi->encode(ctx->enc_ctx, frm, &ctx->enc_pkt); in mpi_rc_enc()
831 if (ctx->enc_pkt) { in mpi_rc_enc()
832 len = mpp_packet_get_length(ctx->enc_pkt); in mpi_rc_enc()
833 ctx->stat.frame_size = len; in mpi_rc_enc()
834 ctx->stream_size_1s += len; in mpi_rc_enc()
835 ctx->total_bits += len * 8; in mpi_rc_enc()
836 if ((ctx->frm_idx - ctx->calc_base_idx + 1) % in mpi_rc_enc()
837 ctx->rc_cfg.fps_in_num == 0) { in mpi_rc_enc()
838 ctx->stat.ins_bitrate = ctx->stream_size_1s; in mpi_rc_enc()
839 ctx->stream_size_1s = 0; in mpi_rc_enc()
842 ptr = mpp_packet_get_pos(ctx->enc_pkt); in mpi_rc_enc()
843 if (ctx->file.fp_enc_out) in mpi_rc_enc()
844 fwrite(ptr, 1, len, ctx->file.fp_enc_out); in mpi_rc_enc()
847 if (len > ctx->dec_in_buf_post_size) { in mpi_rc_enc()
850 ctx->dec_in_buf_post = mpp_realloc(ctx->dec_in_buf_post, RK_U8, buf_size); in mpi_rc_enc()
851 ctx->dec_in_buf_post_size = buf_size; in mpi_rc_enc()
853 mpp_packet_set_data(ctx->dec_pkt_post, ctx->dec_in_buf_post); in mpi_rc_enc()
854 mpp_packet_set_size(ctx->dec_pkt_post, buf_size); in mpi_rc_enc()
855 mpp_packet_set_pos(ctx->dec_pkt_post, ctx->dec_in_buf_post); in mpi_rc_enc()
856 mpp_packet_set_length(ctx->dec_pkt_post, 0); in mpi_rc_enc()
861 mpp_packet_write(ctx->dec_pkt_post, 0, ptr, len); in mpi_rc_enc()
863 mpp_packet_set_pos(ctx->dec_pkt_post, ctx->dec_in_buf_post); in mpi_rc_enc()
864 mpp_packet_set_length(ctx->dec_pkt_post, len); in mpi_rc_enc()
865 mpp_packet_set_size(ctx->dec_pkt_post, len); in mpi_rc_enc()
867 if (mpp_packet_has_meta(ctx->enc_pkt)) { in mpi_rc_enc()
869 MppMeta meta = mpp_packet_get_meta(ctx->enc_pkt); in mpi_rc_enc()
871 if (ctx->enc_cmd->ssim_en || ctx->enc_cmd->psnr_en) { in mpi_rc_enc()
872 mpp_packet_write(ctx->dec_pkt_post, 0, ptr, len); in mpi_rc_enc()
873 mpi_rc_dec_post_decode(ctx, frame); in mpi_rc_enc()
879 if (ctx->enc_cmd->ssim_en || ctx->enc_cmd->psnr_en) { in mpi_rc_enc()
880 mpp_packet_write(ctx->dec_pkt_post, 0, ptr, len); in mpi_rc_enc()
881 mpi_rc_dec_post_decode(ctx, frm); in mpi_rc_enc()
884 ctx->enc_pkt_eos = mpp_packet_get_eos(ctx->enc_pkt); in mpi_rc_enc()
885 ctx->frm_idx++; in mpi_rc_enc()
886 mpp_packet_deinit(&ctx->enc_pkt); in mpi_rc_enc()
897 if (ctx->frm_eos && !ctx->enc_pkt_eos) { in mpi_rc_enc()
901 if (ctx->enc_pkt_eos) { in mpi_rc_enc()
908 static MPP_RET mpi_rc_buffer_init(MpiRc2TestCtx *ctx) in mpi_rc_buffer_init() argument
914 ret = mpp_buffer_group_get_internal(&ctx->pkt_grp, MPP_BUFFER_TYPE_ION); in mpi_rc_buffer_init()
920 ctx->dec_in_buf_post = mpp_calloc(RK_U8, packet_size); in mpi_rc_buffer_init()
921 if (NULL == ctx->dec_in_buf_post) { in mpi_rc_buffer_init()
926 ctx->dec_in_buf_post_size = packet_size; in mpi_rc_buffer_init()
928 ctx->frm_idx = 0; in mpi_rc_buffer_init()
929 ctx->calc_base_idx = 0; in mpi_rc_buffer_init()
930 ctx->stream_size_1s = 0; in mpi_rc_buffer_init()
934 ctx->dec_ctx_pre = NULL; in mpi_rc_buffer_init()
935 ctx->dec_ctx_post = NULL; in mpi_rc_buffer_init()
936 MPP_FREE(ctx->dec_in_buf_post); in mpi_rc_buffer_init()
938 if (ctx->pkt_grp) { in mpi_rc_buffer_init()
939 mpp_buffer_group_put(ctx->pkt_grp); in mpi_rc_buffer_init()
940 ctx->pkt_grp = NULL; in mpi_rc_buffer_init()
955 MpiRc2TestCtx *ctx = (MpiRc2TestCtx *)param; in rc2_pre_dec_thread() local
956 FileReader reader = ctx->reader; in rc2_pre_dec_thread()
958 MppPacket packet = ctx->dec_pkt_pre; in rc2_pre_dec_thread()
959 MppApi *mpi = ctx->dec_mpi_pre; in rc2_pre_dec_thread()
960 MppCtx dec_ctx = ctx->dec_ctx_pre; in rc2_pre_dec_thread()
964 while (!ctx->loop_end) { in rc2_pre_dec_thread()
967 ret = reader_index_read(reader, ctx->pre_pkt_idx++, &slot); in rc2_pre_dec_thread()
970 if (ctx->enc_cmd->frame_num < 0) { in rc2_pre_dec_thread()
971 ctx->pre_pkt_idx = 0; in rc2_pre_dec_thread()
973 } else if (!ctx->enc_cmd->frame_num) { in rc2_pre_dec_thread()
974 ctx->loop_end = 1; in rc2_pre_dec_thread()
976 ctx->pre_pkt_idx = 0; in rc2_pre_dec_thread()
981 if ((ctx->enc_cmd->frame_num > 0) && (ctx->frm_idx > ctx->enc_cmd->frame_num)) { in rc2_pre_dec_thread()
983 ctx->frm_idx, ctx->enc_cmd->frame_num); in rc2_pre_dec_thread()
984 ctx->loop_end = 1; in rc2_pre_dec_thread()
991 if (ctx->loop_end) { in rc2_pre_dec_thread()
993 ctx->pkt_eos = 1; in rc2_pre_dec_thread()
1002 if (ctx->loop_end) { in rc2_pre_dec_thread()
1007 if (ctx->pkt_eos) { in rc2_pre_dec_thread()
1016 static MPP_RET mpi_rc_codec(MpiRc2TestCtx *ctx) in mpi_rc_codec() argument
1021 CHECK_RET(mpi_rc_buffer_init(ctx)); in mpi_rc_codec()
1022 CHECK_RET(mpi_rc_post_dec_init(ctx)); in mpi_rc_codec()
1023 CHECK_RET(mpi_rc_pre_dec_init(ctx)); in mpi_rc_codec()
1024 CHECK_RET(mpp_enc_cfg_init(&ctx->cfg)); in mpi_rc_codec()
1025 CHECK_RET(mpi_rc_enc_init(ctx)); in mpi_rc_codec()
1027 pthread_create(&ctx->dec_thr, NULL, rc2_pre_dec_thread, ctx); in mpi_rc_codec()
1030 mpi_rc_enc(ctx); in mpi_rc_codec()
1031 if (ctx->enc_pkt_eos) { in mpi_rc_codec()
1038 RK_U64 elapsed_time = t_e - ctx->start_enc; in mpi_rc_codec()
1039 float frame_rate = (float)ctx->frm_idx * 1000000 / elapsed_time; in mpi_rc_codec()
1041 ctx->frm_idx, elapsed_time / 1000, frame_rate); in mpi_rc_codec()
1043 if (ctx->frm_idx) { in mpi_rc_codec()
1044 MpiEncTestArgs* enc_cmd = ctx->enc_cmd; in mpi_rc_codec()
1048 30 * (RK_U32)(ctx->total_bits / ctx->frm_idx), in mpi_rc_codec()
1049 ctx->total_psnrs / ctx->frm_idx, ctx->total_ssims / ctx->frm_idx); in mpi_rc_codec()
1050 if (ctx->file.fp_stat) in mpi_rc_codec()
1051 fprintf(ctx->file.fp_stat, "%s: %s: average: bps %dk | psnr %5.2f | ssim %5.5f \n", in mpi_rc_codec()
1053 30 * (RK_U32)(ctx->total_bits / ctx->frm_idx) / 1000, in mpi_rc_codec()
1054 ctx->total_psnrs / ctx->frm_idx, ctx->total_ssims / ctx->frm_idx); in mpi_rc_codec()
1057 CHECK_RET(ctx->enc_mpi->reset(ctx->enc_ctx)); in mpi_rc_codec()
1058 CHECK_RET(ctx->dec_mpi_pre->reset(ctx->dec_ctx_pre)); in mpi_rc_codec()
1059 CHECK_RET(ctx->dec_mpi_post->reset(ctx->dec_ctx_post)); in mpi_rc_codec()
1064 pthread_join(ctx->dec_thr, NULL); in mpi_rc_codec()
1066 if (ctx->enc_ctx) { in mpi_rc_codec()
1067 mpp_destroy(ctx->enc_ctx); in mpi_rc_codec()
1068 ctx->enc_ctx = NULL; in mpi_rc_codec()
1071 if (ctx->pkt_grp) { in mpi_rc_codec()
1072 mpp_buffer_group_put(ctx->pkt_grp); in mpi_rc_codec()
1073 ctx->pkt_grp = NULL; in mpi_rc_codec()
1077 if (ctx->dec_pkt_post) { in mpi_rc_codec()
1078 mpp_packet_deinit(&ctx->dec_pkt_post); in mpi_rc_codec()
1079 ctx->dec_pkt_post = NULL; in mpi_rc_codec()
1082 if (ctx->dec_pkt_pre) { in mpi_rc_codec()
1083 mpp_packet_deinit(&ctx->dec_pkt_pre); in mpi_rc_codec()
1084 ctx->dec_pkt_pre = NULL; in mpi_rc_codec()
1087 if (ctx->cfg) { in mpi_rc_codec()
1088 mpp_enc_cfg_deinit(ctx->cfg); in mpi_rc_codec()
1089 ctx->cfg = NULL; in mpi_rc_codec()
1092 if (ctx->dec_ctx_post) { in mpi_rc_codec()
1093 mpp_destroy(ctx->dec_ctx_post); in mpi_rc_codec()
1094 ctx->dec_ctx_post = NULL; in mpi_rc_codec()
1097 if (ctx->dec_ctx_pre) { in mpi_rc_codec()
1098 mpp_destroy(ctx->dec_ctx_pre); in mpi_rc_codec()
1099 ctx->dec_ctx_pre = NULL; in mpi_rc_codec()
1102 MPP_FREE(ctx->dec_in_buf_post); in mpi_rc_codec()
1103 MPP_FREE(ctx->dec_in_buf_pre); in mpi_rc_codec()
1111 MpiRc2TestCtx *ctx = NULL; in main() local
1120 ctx = mpp_calloc(MpiRc2TestCtx, 1); in main()
1121 if (NULL == ctx) { in main()
1126 ctx->enc_cmd = enc_cmd; in main()
1128 ret = mpi_rc_init(ctx); in main()
1134 ret = mpi_rc_codec(ctx); in main()
1139 if (ctx) { in main()
1140 mpi_rc_deinit(ctx); in main()
1141 ctx = NULL; in main()