Lines Matching refs:enc
81 static MPP_RET enc_async_wait_task(MppEncImpl *enc, EncAsyncTaskInfo *info);
92 static void reset_enc_task(MppEncImpl *enc) in reset_enc_task() argument
94 enc->task_in = NULL; in reset_enc_task()
95 enc->task_out = NULL; in reset_enc_task()
96 enc->packet = NULL; in reset_enc_task()
97 enc->frame = NULL; in reset_enc_task()
99 enc->frm_buf = NULL; in reset_enc_task()
100 enc->pkt_buf = NULL; in reset_enc_task()
103 enc->hdr_status.val = enc->hdr_status.ready; in reset_enc_task()
106 static void update_enc_hal_info(MppEncImpl *enc) in update_enc_hal_info() argument
112 if (NULL == enc->hal_info || NULL == enc->dev) in update_enc_hal_info()
115 hal_info_from_enc_cfg(enc->hal_info, enc->cfg); in update_enc_hal_info()
116 hal_info_get(enc->hal_info, data, &size); in update_enc_hal_info()
121 mpp_dev_ioctl(enc->dev, MPP_DEV_SET_INFO, &data[i]); in update_enc_hal_info()
125 static void update_hal_info_fps(MppEncImpl *enc) in update_hal_info_fps() argument
129 RK_S32 time_diff = ((RK_S32)(enc->time_end - enc->time_base) / 1000); in update_hal_info_fps()
130 RK_U64 fps = hal_info_to_float(enc->frame_count * 1000, time_diff); in update_hal_info_fps()
136 mpp_dev_ioctl(enc->dev, MPP_DEV_SET_INFO, &cfg); in update_hal_info_fps()
138 enc->time_base = enc->time_end; in update_hal_info_fps()
139 enc->frame_count = 0; in update_hal_info_fps()
190 static MPP_RET check_enc_task_wait(MppEncImpl *enc, EncAsyncWait *wait) in check_enc_task_wait() argument
193 RK_U32 notify = enc->notify_flag; in check_enc_task_wait()
194 RK_U32 last_wait = enc->status_flag; in check_enc_task_wait()
200 if (enc->reset_flag) in check_enc_task_wait()
216 enc_dbg_status("%p %08x -> %08x [%08x] notify %08x -> %s\n", enc, in check_enc_task_wait()
219 enc->status_flag = wait->val; in check_enc_task_wait()
220 enc->notify_flag = keep_notify; in check_enc_task_wait()
223 enc->wait_count++; in check_enc_task_wait()
225 enc->work_count++; in check_enc_task_wait()
241 static void check_low_delay_part_mode(MppEncImpl *enc) in check_low_delay_part_mode() argument
243 MppEncCfgSet *cfg = enc->cfg; in check_low_delay_part_mode()
245 enc->low_delay_part_mode = 0; in check_low_delay_part_mode()
253 if (mpp_enc_hal_check_part_mode(enc->enc_hal)) in check_low_delay_part_mode()
256 enc->low_delay_part_mode = 1; in check_low_delay_part_mode()
259 static void check_low_delay_output(MppEncImpl *enc) in check_low_delay_output() argument
261 MppEncCfgSet *cfg = enc->cfg; in check_low_delay_output()
263 enc->low_delay_output = 0; in check_low_delay_output()
283 enc->low_delay_output = 1; in check_low_delay_output()
288 MppEncImpl *enc = (MppEncImpl *)ctx; in mpp_enc_callback() local
297 Mpp *mpp = (Mpp*)enc->mpp; in mpp_enc_callback()
300 if (!enc->low_delay_output) in mpp_enc_callback()
377 mpp_task_meta_set_packet(enc->task_out, KEY_OUTPUT_PACKET, impl); in mpp_enc_callback()
378 mpp_port_enqueue(enc->output, enc->task_out); in mpp_enc_callback()
380 ret = mpp_port_poll(enc->output, MPP_POLL_BLOCK); in mpp_enc_callback()
382 ret = mpp_port_dequeue(enc->output, &enc->task_out); in mpp_enc_callback()
383 mpp_assert(enc->task_out); in mpp_enc_callback()
403 static void enc_set_rc_updated(MppEncImpl *enc, const char *log_str) in enc_set_rc_updated() argument
405 if (!enc->rc_status.rc_api_user_cfg) { in enc_set_rc_updated()
406 enc->rc_status.rc_api_user_cfg = 1; in enc_set_rc_updated()
412 static void enc_set_resend_hdr(MppEncImpl *enc, const char *log_str) in enc_set_resend_hdr() argument
414 if (enc->coding != MPP_VIDEO_CodingAVC && enc->coding != MPP_VIDEO_CodingHEVC) in enc_set_resend_hdr()
417 if (!(enc->frm_cfg.force_flag & ENC_FORCE_IDR)) { in enc_set_resend_hdr()
418 enc->frm_cfg.force_flag |= ENC_FORCE_IDR; in enc_set_resend_hdr()
422 enc->hdr_status.val = 0; in enc_set_resend_hdr()
470 static void proc_prep_cfg(MppEncImpl *enc) in proc_prep_cfg() argument
472 MppEncPrepCfg *cfg = &enc->cfg->prep; in proc_prep_cfg()
473 MppEncPrepCfg *set = &enc->set->prep; in proc_prep_cfg()
474 rk_u32 flag = *mpp_enc_cfg_prep_change(enc->set); in proc_prep_cfg()
494 def = kmpp_obj_to_objdef(enc->set_obj); in proc_prep_cfg()
505 if (kmpp_obj_tbl_test(enc->set_obj, tbl_input) || in proc_prep_cfg()
506 kmpp_obj_tbl_test(enc->set_obj, tbl_format)) { in proc_prep_cfg()
509 if (kmpp_obj_tbl_test(enc->set_obj, tbl_input) || in proc_prep_cfg()
510 kmpp_obj_tbl_test(enc->set_obj, tbl_rotation)) { in proc_prep_cfg()
601 enc_set_resend_hdr(enc, "change prep cfg"); in proc_prep_cfg()
615 static MPP_RET mpp_enc_control_set_ref_cfg(MppEncImpl *enc, void *param);
675 static void proc_rc_cfg(MppEncImpl *enc) in proc_rc_cfg() argument
677 MppEncRcCfg *cfg = &enc->cfg->rc; in proc_rc_cfg()
678 MppEncRcCfg *set = &enc->set->rc; in proc_rc_cfg()
679 rk_u32 flag = *mpp_enc_cfg_rc_change(enc->set); in proc_rc_cfg()
813 enc_set_resend_hdr(enc, "change rc_mode/fps/gop"); in proc_rc_cfg()
817 enc_set_rc_updated(enc, "rc cfg changed"); in proc_rc_cfg()
823 mpp_enc_refs_set_rc_igop(enc->refs, cfg->gop); in proc_rc_cfg()
826 mpp_enc_control_set_ref_cfg(enc, set->ref_cfg); in proc_rc_cfg()
846 static void proc_hw_cfg(MppEncImpl *enc) in proc_hw_cfg() argument
848 MppEncHwCfg *cfg = &enc->cfg->hw; in proc_hw_cfg()
849 MppEncHwCfg *set = &enc->set->hw; in proc_hw_cfg()
850 rk_u32 flag = *mpp_enc_cfg_hw_change(enc->set); in proc_hw_cfg()
887 static void proc_tune_cfg(MppEncImpl *enc) in proc_tune_cfg() argument
889 MppEncFineTuneCfg *cfg = &enc->cfg->tune; in proc_tune_cfg()
890 MppEncFineTuneCfg *set = &enc->set->tune; in proc_tune_cfg()
891 rk_u32 flag = *mpp_enc_cfg_tune_change(enc->set); in proc_tune_cfg()
1001 enc_set_rc_updated(enc, "tune cfg changed"); in proc_tune_cfg()
1006 static void proc_h264_cfg(MppEncImpl *enc) in proc_h264_cfg() argument
1008 MppEncH264Cfg *cfg = &enc->cfg->h264; in proc_h264_cfg()
1009 MppEncH264Cfg *set = &enc->set->h264; in proc_h264_cfg()
1010 rk_u32 flag = *mpp_enc_cfg_h264_change(enc->set); in proc_h264_cfg()
1021 if (enc->cfg->rc.refresh_en) { in proc_h264_cfg()
1024 if (!enc->cfg->rc.refresh_mode) in proc_h264_cfg()
1025 mb_rows = MPP_ALIGN(enc->cfg->prep.height, 16) / 16; in proc_h264_cfg()
1027 mb_rows = MPP_ALIGN(enc->cfg->prep.width, 16) / 16; in proc_h264_cfg()
1029 enc->cfg->rc.refresh_length = (mb_rows + enc->cfg->rc.refresh_num - 1) / in proc_h264_cfg()
1030 enc->cfg->rc.refresh_num; in proc_h264_cfg()
1031 if (enc->cfg->rc.gop < enc->cfg->rc.refresh_length) in proc_h264_cfg()
1032 enc->cfg->rc.refresh_length = enc->cfg->rc.gop; in proc_h264_cfg()
1066 enc_set_resend_hdr(enc, "h264 cfg changed"); in proc_h264_cfg()
1069 static void proc_h265_cfg(MppEncImpl *enc) in proc_h265_cfg() argument
1071 MppEncH265Cfg *cfg = &enc->cfg->h265; in proc_h265_cfg()
1072 MppEncH265Cfg *set = &enc->set->h265; in proc_h265_cfg()
1073 rk_u32 flag = *mpp_enc_cfg_h265_change(enc->set); in proc_h265_cfg()
1077 if (enc->cfg->rc.refresh_en) { in proc_h265_cfg()
1080 if (!enc->cfg->rc.refresh_mode) in proc_h265_cfg()
1081 mb_rows = MPP_ALIGN(enc->cfg->prep.height, 32) / 32; in proc_h265_cfg()
1083 mb_rows = MPP_ALIGN(enc->cfg->prep.width, 32) / 32; in proc_h265_cfg()
1085 enc->cfg->rc.refresh_length = (mb_rows + enc->cfg->rc.refresh_num - 1) / in proc_h265_cfg()
1086 enc->cfg->rc.refresh_num; in proc_h265_cfg()
1087 if (enc->cfg->rc.gop < enc->cfg->rc.refresh_length) in proc_h265_cfg()
1088 enc->cfg->rc.refresh_length = enc->cfg->rc.gop; in proc_h265_cfg()
1117 enc_set_resend_hdr(enc, "h265 cfg changed"); in proc_h265_cfg()
1120 static void proc_jpeg_cfg(MppEncImpl *enc) in proc_jpeg_cfg() argument
1122 MppEncRcCfg *rc_cfg = &enc->cfg->rc; in proc_jpeg_cfg()
1123 MppEncRcCfg *rc_set = &enc->set->rc; in proc_jpeg_cfg()
1124 MppEncJpegCfg *cfg = &enc->cfg->jpeg; in proc_jpeg_cfg()
1125 MppEncJpegCfg *set = &enc->set->jpeg; in proc_jpeg_cfg()
1126 rk_u32 flag = *mpp_enc_cfg_jpeg_change(enc->set); in proc_jpeg_cfg()
1177 def = kmpp_obj_to_objdef(enc->set_obj); in proc_jpeg_cfg()
1186 if (kmpp_obj_tbl_test(enc->set_obj, tbl_qtable)) { in proc_jpeg_cfg()
1211 static void proc_vp8_cfg(MppEncImpl *enc) in proc_vp8_cfg() argument
1213 MppEncH265Cfg *cfg = &enc->cfg->h265; in proc_vp8_cfg()
1214 MppEncH265Cfg *set = &enc->set->h265; in proc_vp8_cfg()
1215 rk_u32 flag = *mpp_enc_cfg_vp8_change(enc->set); in proc_vp8_cfg()
1225 static MPP_RET mpp_enc_control_set_ref_cfg(MppEncImpl *enc, void *param) in mpp_enc_control_set_ref_cfg() argument
1229 MppEncRefCfg dst = enc->cfg->ref_cfg; in mpp_enc_control_set_ref_cfg()
1236 enc->cfg->ref_cfg = dst; in mpp_enc_control_set_ref_cfg()
1244 ret = mpp_enc_refs_set_cfg(enc->refs, dst); in mpp_enc_control_set_ref_cfg()
1249 if (mpp_enc_refs_update_hdr(enc->refs)) in mpp_enc_control_set_ref_cfg()
1250 enc->hdr_status.val = 0; in mpp_enc_control_set_ref_cfg()
1255 MPP_RET mpp_enc_proc_cfg(MppEncImpl *enc, MpiCmd cmd, void *param) in mpp_enc_proc_cfg() argument
1257 MppEncCfgSet *cfg = enc->cfg; in mpp_enc_proc_cfg()
1263 MppEncCfgSet *set = enc->set; in mpp_enc_proc_cfg()
1267 ret = (MPP_RET)kmpp_obj_update(enc->set_obj, in_obj); in mpp_enc_proc_cfg()
1274 if (set->base.coding != enc->coding) { in mpp_enc_proc_cfg()
1275 set->base.coding = enc->coding; in mpp_enc_proc_cfg()
1283 proc_prep_cfg(enc); in mpp_enc_proc_cfg()
1286 proc_rc_cfg(enc); in mpp_enc_proc_cfg()
1292 proc_hw_cfg(enc); in mpp_enc_proc_cfg()
1295 proc_tune_cfg(enc); in mpp_enc_proc_cfg()
1298 switch (enc->coding) { in mpp_enc_proc_cfg()
1300 proc_h264_cfg(enc); in mpp_enc_proc_cfg()
1303 proc_h265_cfg(enc); in mpp_enc_proc_cfg()
1306 proc_jpeg_cfg(enc); in mpp_enc_proc_cfg()
1309 proc_vp8_cfg(enc); in mpp_enc_proc_cfg()
1312 mpp_loge_f("unsupport coding %d\n", enc->coding); in mpp_enc_proc_cfg()
1316 if (enc->cfg->rc.refresh_en) in mpp_enc_proc_cfg()
1317 mpp_enc_refs_set_refresh_length(enc->refs, enc->cfg->rc.refresh_length); in mpp_enc_proc_cfg()
1320 ret_tmp = enc_impl_proc_cfg(enc->impl, cmd, param); in mpp_enc_proc_cfg()
1325 enc->frm_cfg.force_idr++; in mpp_enc_proc_cfg()
1336 if (!enc->hdr_status.ready) { in mpp_enc_proc_cfg()
1337 enc_impl_gen_hdr(enc->impl, enc->hdr_pkt); in mpp_enc_proc_cfg()
1338 enc->hdr_len = mpp_packet_get_length(enc->hdr_pkt); in mpp_enc_proc_cfg()
1339 enc->hdr_status.ready = 1; in mpp_enc_proc_cfg()
1346 *(MppPacket *)param = enc->hdr_pkt; in mpp_enc_proc_cfg()
1348 mpp_packet_copy((MppPacket)param, enc->hdr_pkt); in mpp_enc_proc_cfg()
1351 if (enc->hdr_pkt) { in mpp_enc_proc_cfg()
1352 Mpp *mpp = (Mpp *)enc->mpp; in mpp_enc_proc_cfg()
1354 mpp_ops_enc_get_pkt(mpp->mDump, enc->hdr_pkt); in mpp_enc_proc_cfg()
1357 enc->hdr_status.added_by_ctrl = 1; in mpp_enc_proc_cfg()
1381 *dst = enc->rc_brief; in mpp_enc_proc_cfg()
1386 mpp_assert(src->type == enc->coding); in mpp_enc_proc_cfg()
1387 enc->rc_brief = *src; in mpp_enc_proc_cfg()
1388 enc->rc_status.rc_api_user_cfg = 1; in mpp_enc_proc_cfg()
1389 enc->rc_status.rc_api_updated = 1; in mpp_enc_proc_cfg()
1396 enc->hdr_mode = mode; in mpp_enc_proc_cfg()
1412 enc->sei_mode = mode; in mpp_enc_proc_cfg()
1424 ret = mpp_enc_control_set_ref_cfg(enc, param); in mpp_enc_proc_cfg()
1425 enc_set_rc_updated(enc, "ref cfg update"); in mpp_enc_proc_cfg()
1429 MppEncOSDPltCfg *dst = &enc->cfg->plt_cfg; in mpp_enc_proc_cfg()
1457 ret = enc_impl_proc_cfg(enc->impl, cmd, param); in mpp_enc_proc_cfg()
1462 enc->hal_info_updated = 0; in mpp_enc_proc_cfg()
1464 check_low_delay_part_mode(enc); in mpp_enc_proc_cfg()
1465 check_low_delay_output(enc); in mpp_enc_proc_cfg()
1675 MPP_RET mpp_enc_proc_rc_update(MppEncImpl *enc) in mpp_enc_proc_rc_update() argument
1680 if (!enc->rc_status.rc_api_inited || enc->rc_status.rc_api_updated) { in mpp_enc_proc_rc_update()
1681 RcApiBrief *brief = &enc->rc_brief; in mpp_enc_proc_rc_update()
1683 if (enc->rc_ctx) { in mpp_enc_proc_rc_update()
1684 enc_dbg_detail("rc deinit %p\n", enc->rc_ctx); in mpp_enc_proc_rc_update()
1685 rc_deinit(enc->rc_ctx); in mpp_enc_proc_rc_update()
1686 enc->rc_ctx = NULL; in mpp_enc_proc_rc_update()
1690 ret = rc_init(&enc->rc_ctx, enc->coding, &brief->name); in mpp_enc_proc_rc_update()
1692 mpp_err("enc %p fail to init rc %s\n", enc, brief->name); in mpp_enc_proc_rc_update()
1694 enc->rc_status.rc_api_inited = 1; in mpp_enc_proc_rc_update()
1696 enc_dbg_detail("rc init %p name %s ret %d\n", enc->rc_ctx, brief->name, ret); in mpp_enc_proc_rc_update()
1697 enc->rc_status.rc_api_updated = 0; in mpp_enc_proc_rc_update()
1699 enc->rc_cfg_length = 0; in mpp_enc_proc_rc_update()
1700 update_rc_cfg_log(enc, "%s:", brief->name); in mpp_enc_proc_rc_update()
1701 enc->rc_cfg_pos = enc->rc_cfg_length; in mpp_enc_proc_rc_update()
1705 if (enc->rc_status.rc_api_user_cfg) { in mpp_enc_proc_rc_update()
1706 MppEncCfgSet *cfg = enc->cfg; in mpp_enc_proc_rc_update()
1713 ret = rc_update_usr_cfg(enc->rc_ctx, &usr_cfg); in mpp_enc_proc_rc_update()
1716 enc->rc_status.rc_api_user_cfg = 0; in mpp_enc_proc_rc_update()
1718 enc->rc_cfg_length = enc->rc_cfg_pos; in mpp_enc_proc_rc_update()
1719 update_rc_cfg_log(enc, "%s-b:%d[%d:%d]-g:%d-q:%d:[%d:%d]:[%d:%d]:%d\n", in mpp_enc_proc_rc_update()
1740 static MPP_RET mpp_enc_check_frm_pkt(MppEncImpl *enc) in mpp_enc_check_frm_pkt() argument
1742 enc->frm_buf = NULL; in mpp_enc_check_frm_pkt()
1743 enc->pkt_buf = NULL; in mpp_enc_check_frm_pkt()
1745 if (enc->packet) in mpp_enc_check_frm_pkt()
1746 enc->pkt_buf = mpp_packet_get_buffer(enc->packet); in mpp_enc_check_frm_pkt()
1748 mpp_packet_new(&enc->packet); in mpp_enc_check_frm_pkt()
1750 if (enc->frame) { in mpp_enc_check_frm_pkt()
1751 RK_S64 pts = mpp_frame_get_pts(enc->frame); in mpp_enc_check_frm_pkt()
1752 MppBuffer frm_buf = mpp_frame_get_buffer(enc->frame); in mpp_enc_check_frm_pkt()
1754 enc->task_pts = pts; in mpp_enc_check_frm_pkt()
1755 enc->frm_buf = frm_buf; in mpp_enc_check_frm_pkt()
1757 mpp_packet_set_pts(enc->packet, pts); in mpp_enc_check_frm_pkt()
1758 mpp_packet_set_dts(enc->packet, mpp_frame_get_dts(enc->frame)); in mpp_enc_check_frm_pkt()
1760 if (mpp_frame_get_eos(enc->frame)) in mpp_enc_check_frm_pkt()
1761 mpp_packet_set_eos(enc->packet); in mpp_enc_check_frm_pkt()
1763 mpp_packet_clr_eos(enc->packet); in mpp_enc_check_frm_pkt()
1766 return (NULL == enc->frame || NULL == enc->frm_buf) ? MPP_NOK : MPP_OK; in mpp_enc_check_frm_pkt()
1769 static MPP_RET mpp_enc_check_pkt_buf(MppEncImpl *enc) in mpp_enc_check_pkt_buf() argument
1771 if (NULL == enc->pkt_buf) { in mpp_enc_check_pkt_buf()
1773 Mpp *mpp = (Mpp *)enc->mpp; in mpp_enc_check_pkt_buf()
1774 MppEncPrepCfg *prep = &enc->cfg->prep; in mpp_enc_check_pkt_buf()
1777 RK_U32 size = (enc->coding == MPP_VIDEO_CodingMJPEG) ? in mpp_enc_check_pkt_buf()
1779 MppPacketImpl *pkt = (MppPacketImpl *)enc->packet; in mpp_enc_check_pkt_buf()
1784 mpp_buffer_attach_dev(buffer, enc->dev); in mpp_enc_check_pkt_buf()
1786 enc->pkt_buf = buffer; in mpp_enc_check_pkt_buf()
1793 enc_dbg_detail("create output pkt %p buf %p\n", enc->packet, buffer); in mpp_enc_check_pkt_buf()
1796 enc->packet, enc->pkt_buf, in mpp_enc_check_pkt_buf()
1797 mpp_packet_get_pos(enc->packet), in mpp_enc_check_pkt_buf()
1798 mpp_packet_get_length(enc->packet)); in mpp_enc_check_pkt_buf()
1806 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_proc_two_pass() local
1809 if (mpp_enc_refs_next_frm_is_intra(enc->refs)) { in mpp_enc_proc_two_pass()
1816 EncImpl impl = enc->impl; in mpp_enc_proc_two_pass()
1817 MppEncHal hal = enc->enc_hal; in mpp_enc_proc_two_pass()
1824 rc_task->info = enc->rc_info_prev; in mpp_enc_proc_two_pass()
1828 mpp_enc_refs_get_cpb_pass1(enc->refs, cpb); in mpp_enc_proc_two_pass()
1866 static void mpp_enc_rc_info_backup(MppEncImpl *enc, EncAsyncTaskInfo *task) in mpp_enc_rc_info_backup() argument
1868 if (!enc->support_hw_deflicker || !enc->cfg->rc.debreath_en) in mpp_enc_rc_info_backup()
1871 enc->rc_info_prev = task->rc.info; in mpp_enc_rc_info_backup()
1876 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_force_pskip_check() local
1884 mpp_enc_refs_get_cpb_info(enc->refs, &cpb_info); in mpp_enc_force_pskip_check()
1913 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_force_pskip() local
1914 EncImpl impl = enc->impl; in mpp_enc_force_pskip()
1931 mpp_enc_refs_set_usr_cfg(enc->refs, frm_cfg); in mpp_enc_force_pskip()
1934 mpp_enc_refs_get_cpb(enc->refs, cpb); in mpp_enc_force_pskip()
1939 mpp_enc_refs_rollback(enc->refs); in mpp_enc_force_pskip()
1952 ENC_RUN_FUNC2(rc_frm_start, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_force_pskip()
1955 ENC_RUN_FUNC2(rc_hal_start, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_force_pskip()
1961 ENC_RUN_FUNC2(rc_hal_end, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_force_pskip()
1964 ENC_RUN_FUNC2(rc_frm_end, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_force_pskip()
1973 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_get_pskip_mode() local
1981 enc->frame = hal_task->frame; in mpp_enc_get_pskip_mode()
1983 if (mpp_frame_has_meta(enc->frame)) { in mpp_enc_get_pskip_mode()
1984 MppMeta frm_meta = mpp_frame_get_meta(enc->frame); in mpp_enc_get_pskip_mode()
2004 static void mpp_enc_add_sw_header(MppEncImpl *enc, HalEncTask *hal_task) in mpp_enc_add_sw_header() argument
2006 EncImpl impl = enc->impl; in mpp_enc_add_sw_header()
2007 MppEncHeaderStatus *hdr_status = &enc->hdr_status; in mpp_enc_add_sw_header()
2016 if (enc->hdr_mode == MPP_ENC_HEADER_MODE_EACH_IDR && frm->is_intra) in mpp_enc_add_sw_header()
2019 if (enc->cfg->rc.refresh_en && frm->is_i_recovery && !frm->is_idr) in mpp_enc_add_sw_header()
2024 frm->seq_idx, enc->hdr_len); in mpp_enc_add_sw_header()
2026 mpp_packet_append(packet, enc->hdr_pkt); in mpp_enc_add_sw_header()
2028 hal_task->header_length = enc->hdr_len; in mpp_enc_add_sw_header()
2029 hal_task->length += enc->hdr_len; in mpp_enc_add_sw_header()
2033 if ((add_header & 2) && enc->sei_mode >= MPP_ENC_SEI_MODE_ONE_SEQ) { in mpp_enc_add_sw_header()
2037 &enc->cfg->rc.refresh_length, 0); in mpp_enc_add_sw_header()
2041 frm->seq_idx, enc->hdr_len); in mpp_enc_add_sw_header()
2053 if (frm->is_idr && enc->sei_mode >= MPP_ENC_SEI_MODE_ONE_SEQ) { in mpp_enc_add_sw_header()
2057 enc->version_info, enc->version_length); in mpp_enc_add_sw_header()
2064 enc->rc_cfg_info, enc->rc_cfg_length); in mpp_enc_add_sw_header()
2080 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_normal() local
2081 EncImpl impl = enc->impl; in mpp_enc_normal()
2082 MppEncHal hal = enc->enc_hal; in mpp_enc_normal()
2090 if (enc->support_hw_deflicker && enc->cfg->rc.debreath_en) { in mpp_enc_normal()
2101 mpp_enc_get_pskip_mode((Mpp*)enc->mpp, task, &skip_mode); in mpp_enc_normal()
2103 ret = mpp_enc_force_pskip((Mpp*)enc->mpp, task); in mpp_enc_normal()
2112 mpp_enc_refs_get_cpb(enc->refs, cpb); in mpp_enc_normal()
2128 ENC_RUN_FUNC2(rc_frm_start, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_normal()
2131 mpp_enc_add_sw_header(enc, hal_task); in mpp_enc_normal()
2140 ENC_RUN_FUNC2(rc_hal_start, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_normal()
2156 ENC_RUN_FUNC2(rc_hal_end, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_normal()
2162 ENC_RUN_FUNC2(rc_check_reenc, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_normal()
2186 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_reenc_simple() local
2187 MppEncHal hal = enc->enc_hal; in mpp_enc_reenc_simple()
2198 ENC_RUN_FUNC2(enc_impl_proc_hal, enc->impl, hal_task, mpp, ret); in mpp_enc_reenc_simple()
2204 ENC_RUN_FUNC2(rc_hal_start, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_reenc_simple()
2216 ENC_RUN_FUNC2(rc_hal_end, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_reenc_simple()
2222 ENC_RUN_FUNC2(rc_check_reenc, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_reenc_simple()
2233 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_reenc_drop() local
2241 mpp_enc_refs_rollback(enc->refs); in mpp_enc_reenc_drop()
2247 ENC_RUN_FUNC2(rc_frm_end, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_reenc_drop()
2256 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_reenc_force_pskip() local
2257 EncImpl impl = enc->impl; in mpp_enc_reenc_force_pskip()
2272 mpp_enc_refs_rollback(enc->refs); in mpp_enc_reenc_force_pskip()
2273 mpp_enc_refs_set_usr_cfg(enc->refs, frm_cfg); in mpp_enc_reenc_force_pskip()
2276 mpp_enc_refs_get_cpb(enc->refs, cpb); in mpp_enc_reenc_force_pskip()
2285 ENC_RUN_FUNC2(rc_frm_end, enc->rc_ctx, rc_task, mpp, ret); in mpp_enc_reenc_force_pskip()
2292 static void mpp_enc_terminate_task(MppEncImpl *enc, EncAsyncTaskInfo *task) in mpp_enc_terminate_task() argument
2299 if (enc->packet) { in mpp_enc_terminate_task()
2301 mpp_packet_set_length(enc->packet, hal_task->length); in mpp_enc_terminate_task()
2308 enc_dbg_detail("task %d enqueue packet pts %lld\n", frm->seq_idx, enc->task_pts); in mpp_enc_terminate_task()
2310 mpp_task_meta_set_packet(enc->task_out, KEY_OUTPUT_PACKET, enc->packet); in mpp_enc_terminate_task()
2311 mpp_port_enqueue(enc->output, enc->task_out); in mpp_enc_terminate_task()
2314 if (enc->task_in) { in mpp_enc_terminate_task()
2315 enc_dbg_detail("task %d enqueue frame pts %lld\n", frm->seq_idx, enc->task_pts); in mpp_enc_terminate_task()
2317 mpp_task_meta_set_frame(enc->task_in, KEY_INPUT_FRAME, enc->frame); in mpp_enc_terminate_task()
2318 mpp_port_enqueue(enc->input, enc->task_in); in mpp_enc_terminate_task()
2321 reset_enc_task(enc); in mpp_enc_terminate_task()
2325 static MPP_RET try_get_enc_task(MppEncImpl *enc, EncAsyncTaskInfo *task, EncAsyncWait *wait) in try_get_enc_task() argument
2330 MppEncHeaderStatus *hdr_status = &enc->hdr_status; in try_get_enc_task()
2337 ret = mpp_port_poll(enc->input, MPP_POLL_NON_BLOCK); in try_get_enc_task()
2350 ret = mpp_port_poll(enc->output, MPP_POLL_NON_BLOCK); in try_get_enc_task()
2367 ret = mpp_port_dequeue(enc->input, &enc->task_in); in try_get_enc_task()
2368 mpp_assert(enc->task_in); in try_get_enc_task()
2370 ret = mpp_port_dequeue(enc->output, &enc->task_out); in try_get_enc_task()
2371 mpp_assert(enc->task_out); in try_get_enc_task()
2377 mpp_task_meta_get_frame (enc->task_in, KEY_INPUT_FRAME, &enc->frame); in try_get_enc_task()
2378 mpp_task_meta_get_packet(enc->task_in, KEY_OUTPUT_PACKET, &enc->packet); in try_get_enc_task()
2379 mpp_task_meta_get_buffer(enc->task_in, KEY_MOTION_INFO, &enc->md_info); in try_get_enc_task()
2381 enc_dbg_detail("task dequeue done frm %p pkt %p\n", enc->frame, enc->packet); in try_get_enc_task()
2383 stopwatch = mpp_frame_get_stopwatch(enc->frame); in try_get_enc_task()
2386 if (mpp_enc_check_frm_pkt(enc)) { in try_get_enc_task()
2401 task->usr = enc->frm_cfg; in try_get_enc_task()
2402 enc->frm_cfg.force_flag = 0; in try_get_enc_task()
2406 hal_task->frame = enc->frame; in try_get_enc_task()
2407 hal_task->input = enc->frm_buf; in try_get_enc_task()
2408 hal_task->packet = enc->packet; in try_get_enc_task()
2409 hal_task->output = enc->pkt_buf; in try_get_enc_task()
2410 hal_task->md_info = enc->md_info; in try_get_enc_task()
2414 rc_task->frame = enc->frame; in try_get_enc_task()
2420 ENC_RUN_FUNC2(rc_frm_check_drop, enc->rc_ctx, rc_task, enc->mpp, ret); in try_get_enc_task()
2433 mpp_enc_refs_set_usr_cfg(enc->refs, frm_cfg); in try_get_enc_task()
2447 mpp_enc_check_pkt_buf(enc); in try_get_enc_task()
2450 hal_task->output = enc->pkt_buf; in try_get_enc_task()
2452 mpp_assert(enc->packet); in try_get_enc_task()
2453 mpp_assert(enc->pkt_buf); in try_get_enc_task()
2456 if (!enc->hal_info_updated) { in try_get_enc_task()
2457 update_enc_hal_info(enc); in try_get_enc_task()
2458 enc->hal_info_updated = 1; in try_get_enc_task()
2464 enc_impl_gen_hdr(enc->impl, enc->hdr_pkt); in try_get_enc_task()
2465 enc->hdr_len = mpp_packet_get_length(enc->hdr_pkt); in try_get_enc_task()
2469 frm->seq_idx, enc->hdr_len); in try_get_enc_task()
2471 mpp_packet_append(enc->packet, enc->hdr_pkt); in try_get_enc_task()
2472 hal_task->header_length = enc->hdr_len; in try_get_enc_task()
2473 hal_task->length += enc->hdr_len; in try_get_enc_task()
2482 ENC_RUN_FUNC2(enc_impl_start, enc->impl, hal_task, enc->mpp, ret); in try_get_enc_task()
2489 mpp_enc_refs_set_usr_cfg(enc->refs, frm_cfg); in try_get_enc_task()
2496 mpp_enc_refs_stash(enc->refs); in try_get_enc_task()
2502 mpp_enc_terminate_task(enc, task); in try_get_enc_task()
2508 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in try_proc_low_deley_task() local
2509 EncImpl impl = enc->impl; in try_proc_low_deley_task()
2510 MppEncHal hal = enc->enc_hal; in try_proc_low_deley_task()
2530 mpp_enc_get_pskip_mode((Mpp*)enc->mpp, task, &skip_mode); in try_proc_low_deley_task()
2532 ret = mpp_enc_force_pskip((Mpp*)enc->mpp, task); in try_proc_low_deley_task()
2541 mpp_enc_refs_get_cpb(enc->refs, cpb); in try_proc_low_deley_task()
2547 ENC_RUN_FUNC2(rc_frm_start, enc->rc_ctx, rc_task, mpp, ret); in try_proc_low_deley_task()
2550 mpp_enc_add_sw_header(enc, hal_task); in try_proc_low_deley_task()
2559 ENC_RUN_FUNC2(rc_hal_start, enc->rc_ctx, rc_task, mpp, ret); in try_proc_low_deley_task()
2584 enc_dbg_detail("task %d task_out %p\n", frm->seq_idx, enc->task_out); in try_proc_low_deley_task()
2588 if (NULL == enc->task_out) { in try_proc_low_deley_task()
2590 ret = mpp_port_poll(enc->output, MPP_POLL_NON_BLOCK); in try_proc_low_deley_task()
2601 ret = mpp_port_dequeue(enc->output, &enc->task_out); in try_proc_low_deley_task()
2604 mpp_assert(enc->task_out); in try_proc_low_deley_task()
2634 frm->seq_idx, enc->task_pts, hal_task->part_count); in try_proc_low_deley_task()
2635 mpp_task_meta_set_packet(enc->task_out, KEY_OUTPUT_PACKET, part_pkt); in try_proc_low_deley_task()
2636 mpp_port_enqueue(enc->output, enc->task_out); in try_proc_low_deley_task()
2637 enc->task_out = NULL; in try_proc_low_deley_task()
2673 frm->seq_idx, enc->task_pts, hal_task->part_count); in try_proc_low_deley_task()
2674 mpp_task_meta_set_packet(enc->task_out, KEY_OUTPUT_PACKET, packet); in try_proc_low_deley_task()
2675 mpp_port_enqueue(enc->output, enc->task_out); in try_proc_low_deley_task()
2676 enc->task_out = NULL; in try_proc_low_deley_task()
2681 enc->time_end = mpp_time(); in try_proc_low_deley_task()
2682 enc->frame_count++; in try_proc_low_deley_task()
2684 if (enc->dev && enc->time_base && enc->time_end && in try_proc_low_deley_task()
2685 ((enc->time_end - enc->time_base) >= (RK_S64)(1000 * 1000))) in try_proc_low_deley_task()
2686 update_hal_info_fps(enc); in try_proc_low_deley_task()
2689 ENC_RUN_FUNC2(rc_hal_end, enc->rc_ctx, rc_task, mpp, ret); in try_proc_low_deley_task()
2691 enc_dbg_detail("task %d enqueue frame pts %lld\n", frm->seq_idx, enc->task_pts); in try_proc_low_deley_task()
2693 mpp_task_meta_set_frame(enc->task_in, KEY_INPUT_FRAME, enc->frame); in try_proc_low_deley_task()
2694 mpp_port_enqueue(enc->input, enc->task_in); in try_proc_low_deley_task()
2696 reset_enc_task(enc); in try_proc_low_deley_task()
2703 static MPP_RET set_enc_info_to_packet(MppEncImpl *enc, HalEncTask *hal_task) in set_enc_info_to_packet() argument
2705 Mpp *mpp = (Mpp*)enc->mpp; in set_enc_info_to_packet()
2716 if (enc->coding == MPP_VIDEO_CodingHEVC || enc->coding == MPP_VIDEO_CodingAVC) { in set_enc_info_to_packet()
2760 static MPP_RET try_proc_normal_task(MppEncImpl *enc, EncAsyncTaskInfo *task) in try_proc_normal_task() argument
2762 Mpp *mpp = (Mpp*)enc->mpp; in try_proc_normal_task()
2777 while (frm->reencode && frm->reencode_times < enc->cfg->rc.max_reenc_times) { in try_proc_normal_task()
2798 ENC_RUN_FUNC2(rc_frm_end, enc->rc_ctx, rc_task, mpp, ret); in try_proc_normal_task()
2800 enc->time_end = mpp_time(); in try_proc_normal_task()
2801 enc->frame_count++; in try_proc_normal_task()
2803 if (enc->dev && enc->time_base && enc->time_end && in try_proc_normal_task()
2804 ((enc->time_end - enc->time_base) >= (RK_S64)(1000 * 1000))) in try_proc_normal_task()
2805 update_hal_info_fps(enc); in try_proc_normal_task()
2821 enc->frm_cfg.force_flag |= ENC_FORCE_IDR; in try_proc_normal_task()
2822 enc->hdr_status.val = 0; in try_proc_normal_task()
2826 set_enc_info_to_packet(enc, hal_task); in try_proc_normal_task()
2832 enc_dbg_detail("task %d enqueue packet pts %lld\n", frm->seq_idx, enc->task_pts); in try_proc_normal_task()
2834 mpp_task_meta_set_packet(enc->task_out, KEY_OUTPUT_PACKET, packet); in try_proc_normal_task()
2835 mpp_port_enqueue(enc->output, enc->task_out); in try_proc_normal_task()
2837 enc_dbg_detail("task %d enqueue frame pts %lld\n", frm->seq_idx, enc->task_pts); in try_proc_normal_task()
2839 mpp_task_meta_set_frame(enc->task_in, KEY_INPUT_FRAME, enc->frame); in try_proc_normal_task()
2840 mpp_port_enqueue(enc->input, enc->task_in); in try_proc_normal_task()
2842 mpp_enc_rc_info_backup(enc, task); in try_proc_normal_task()
2843 reset_enc_task(enc); in try_proc_normal_task()
2852 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_thread() local
2853 MppThread *thd_enc = enc->thread_enc; in mpp_enc_thread()
2862 enc->time_base = mpp_time(); in mpp_enc_thread()
2872 if (check_enc_task_wait(enc, &wait)) in mpp_enc_thread()
2880 if (enc->cmd_send != enc->cmd_recv) { in mpp_enc_thread()
2881 enc_dbg_detail("ctrl proc %d cmd %08x\n", enc->cmd_recv, enc->cmd); in mpp_enc_thread()
2882 sem_wait(&enc->cmd_start); in mpp_enc_thread()
2883 ret = mpp_enc_proc_cfg(enc, enc->cmd, enc->param); in mpp_enc_thread()
2885 *enc->cmd_ret = ret; in mpp_enc_thread()
2886 enc->cmd_recv++; in mpp_enc_thread()
2887 enc_dbg_detail("ctrl proc %d done send %d\n", enc->cmd_recv, in mpp_enc_thread()
2888 enc->cmd_send); in mpp_enc_thread()
2889 mpp_assert(enc->cmd_send == enc->cmd_send); in mpp_enc_thread()
2890 enc->param = NULL; in mpp_enc_thread()
2891 enc->cmd = (MpiCmd)0; in mpp_enc_thread()
2892 sem_post(&enc->cmd_done); in mpp_enc_thread()
2896 mpp_enc_hal_prepare(enc->enc_hal); in mpp_enc_thread()
2899 mpp_enc_proc_rc_update(enc); in mpp_enc_thread()
2905 if (enc->reset_flag) { in mpp_enc_thread()
2909 enc->status_flag = 0; in mpp_enc_thread()
2912 enc->frm_cfg.force_flag |= ENC_FORCE_IDR; in mpp_enc_thread()
2913 enc->frm_cfg.force_idr++; in mpp_enc_thread()
2916 enc->reset_flag = 0; in mpp_enc_thread()
2917 sem_post(&enc->enc_reset); in mpp_enc_thread()
2925 ret = try_get_enc_task(enc, &task, &wait); in mpp_enc_thread()
2939 if (enc->low_delay_part_mode) in mpp_enc_thread()
2942 try_proc_normal_task(enc, &task); in mpp_enc_thread()
2946 release_task_in_port(enc->input); in mpp_enc_thread()
2960 static void async_task_terminate(MppEncImpl *enc, EncAsyncTaskInfo *async) in async_task_terminate() argument
2964 Mpp *mpp = (Mpp *)enc->mpp; in async_task_terminate()
2979 enc_dbg_detail("task %d enqueue packet pts %lld\n", frm->seq_idx, enc->task_pts); in async_task_terminate()
2984 if (enc->frame) { in async_task_terminate()
2986 MppStopwatch stopwatch = mpp_frame_get_stopwatch(enc->frame); in async_task_terminate()
2990 mpp_meta_set_frame(meta, KEY_INPUT_FRAME, enc->frame); in async_task_terminate()
2991 enc->frame = NULL; in async_task_terminate()
3009 static void async_task_skip(MppEncImpl *enc) in async_task_skip() argument
3011 Mpp *mpp = (Mpp*)enc->mpp; in async_task_skip()
3100 static MPP_RET check_async_pkt_buf(MppEncImpl *enc, EncAsyncTaskInfo *async) in check_async_pkt_buf() argument
3106 Mpp *mpp = (Mpp *)enc->mpp; in check_async_pkt_buf()
3107 MppEncPrepCfg *prep = &enc->cfg->prep; in check_async_pkt_buf()
3110 RK_U32 size = (enc->coding == MPP_VIDEO_CodingMJPEG) ? in check_async_pkt_buf()
3117 mpp_buffer_attach_dev(buffer, enc->dev); in check_async_pkt_buf()
3119 enc->pkt_buf = buffer; in check_async_pkt_buf()
3138 static MPP_RET try_get_async_task(MppEncImpl *enc, EncAsyncWait *wait) in try_get_async_task() argument
3140 Mpp *mpp = (Mpp *)enc->mpp; in try_get_async_task()
3141 EncAsyncTaskInfo *async = enc->async; in try_get_async_task()
3143 MppEncHeaderStatus *hdr_status = &enc->hdr_status; in try_get_async_task()
3152 if (NULL == enc->hnd) { in try_get_async_task()
3153 hal_task_get_hnd(enc->tasks, TASK_IDLE, &enc->hnd); in try_get_async_task()
3154 if (enc->hnd) { in try_get_async_task()
3158 mpp_assert(enc->async == NULL); in try_get_async_task()
3159 async = (EncAsyncTaskInfo *)hal_task_hnd_get_data(enc->hnd); in try_get_async_task()
3161 enc->async = async; in try_get_async_task()
3169 mpp_assert(enc->hnd); in try_get_async_task()
3170 mpp_assert(enc->async); in try_get_async_task()
3239 async->seq_idx = enc->task_idx++; in try_get_async_task()
3266 ENC_RUN_FUNC2(rc_frm_check_drop, enc->rc_ctx, rc_task, enc->mpp, ret); in try_get_async_task()
3280 *hal_task->frm_cfg = enc->frm_cfg; in try_get_async_task()
3281 enc->frm_cfg.force_flag = 0; in try_get_async_task()
3289 check_async_pkt_buf(enc, async); in try_get_async_task()
3298 if (!enc->hal_info_updated) { in try_get_async_task()
3299 update_enc_hal_info(enc); in try_get_async_task()
3300 enc->hal_info_updated = 1; in try_get_async_task()
3308 enc_impl_gen_hdr(enc->impl, enc->hdr_pkt); in try_get_async_task()
3309 enc->hdr_len = mpp_packet_get_length(enc->hdr_pkt); in try_get_async_task()
3313 seq_idx, enc->hdr_len); in try_get_async_task()
3315 mpp_packet_append(hal_task->packet, enc->hdr_pkt); in try_get_async_task()
3316 hal_task->header_length = enc->hdr_len; in try_get_async_task()
3317 hal_task->length += enc->hdr_len; in try_get_async_task()
3326 ENC_RUN_FUNC2(enc_impl_start, enc->impl, hal_task, enc->mpp, ret); in try_get_async_task()
3335 mpp_enc_refs_set_usr_cfg(enc->refs, frm_cfg); in try_get_async_task()
3345 mpp_enc_refs_stash(enc->refs); in try_get_async_task()
3353 async_task_terminate(enc, async); in try_get_async_task()
3359 static MPP_RET try_proc_processing_task(MppEncImpl *enc, EncAsyncWait *wait) in try_proc_processing_task() argument
3365 ret = hal_task_get_hnd(enc->tasks, TASK_PROCESSING, &hnd); in try_proc_processing_task()
3373 enc_async_wait_task(enc, info); in try_proc_processing_task()
3380 static MPP_RET proc_async_task(MppEncImpl *enc, EncAsyncWait *wait) in proc_async_task() argument
3382 Mpp *mpp = (Mpp*)enc->mpp; in proc_async_task()
3383 EncImpl impl = enc->impl; in proc_async_task()
3384 MppEncHal hal = enc->enc_hal; in proc_async_task()
3385 EncAsyncTaskInfo *async = enc->async; in proc_async_task()
3403 mpp_enc_get_pskip_mode((Mpp*)enc->mpp, async, &skip_mode); in proc_async_task()
3405 ret = mpp_enc_force_pskip((Mpp*)enc->mpp, async); in proc_async_task()
3413 if (enc->support_hw_deflicker && enc->cfg->rc.debreath_en) { in proc_async_task()
3414 bool two_pass_en = mpp_enc_refs_next_frm_is_intra(enc->refs); in proc_async_task()
3418 while (MPP_OK == try_proc_processing_task(enc, wait)); in proc_async_task()
3427 mpp_enc_refs_get_cpb(enc->refs, cpb); in proc_async_task()
3433 ENC_RUN_FUNC2(rc_frm_start, enc->rc_ctx, rc_task, mpp, ret); in proc_async_task()
3436 mpp_enc_add_sw_header(enc, hal_task); in proc_async_task()
3445 ENC_RUN_FUNC2(rc_hal_start, enc->rc_ctx, rc_task, mpp, ret); in proc_async_task()
3456 hal_task_hnd_set_status(enc->hnd, TASK_PROCESSING); in proc_async_task()
3459 enc->hnd = NULL; in proc_async_task()
3460 enc->async = NULL; in proc_async_task()
3465 enc->hdr_status.val = enc->hdr_status.ready; in proc_async_task()
3470 static MPP_RET check_enc_async_wait(MppEncImpl *enc, EncAsyncWait *wait) in check_enc_async_wait() argument
3473 RK_U32 notify = enc->notify_flag; in check_enc_async_wait()
3474 RK_U32 last_wait = enc->status_flag; in check_enc_async_wait()
3480 if (enc->reset_flag) in check_enc_async_wait()
3496 enc_dbg_status("%p %08x -> %08x [%08x] notify %08x -> %s\n", enc, in check_enc_async_wait()
3499 enc->status_flag = wait->val; in check_enc_async_wait()
3500 enc->notify_flag = keep_notify; in check_enc_async_wait()
3503 enc->wait_count++; in check_enc_async_wait()
3505 enc->work_count++; in check_enc_async_wait()
3511 static MPP_RET enc_async_wait_task(MppEncImpl *enc, EncAsyncTaskInfo *info) in enc_async_wait_task() argument
3513 Mpp *mpp = (Mpp*)enc->mpp; in enc_async_wait_task()
3514 MppEncHal hal = enc->enc_hal; in enc_async_wait_task()
3530 ENC_RUN_FUNC2(rc_hal_end, enc->rc_ctx, rc_task, mpp, ret); in enc_async_wait_task()
3536 ENC_RUN_FUNC2(rc_frm_end, enc->rc_ctx, rc_task, mpp, ret); in enc_async_wait_task()
3552 if (enc->enc_failed_drop && !hal_task->rc_task->frm.is_idr) { in enc_async_wait_task()
3555 enc->frm_cfg.force_flag |= ENC_FORCE_IDR; in enc_async_wait_task()
3556 enc->hdr_status.val = 0; in enc_async_wait_task()
3558 enc->enc_failed_drop = 0; in enc_async_wait_task()
3561 enc->frm_cfg.force_flag |= ENC_FORCE_IDR; in enc_async_wait_task()
3562 enc->hdr_status.val = 0; in enc_async_wait_task()
3564 enc->enc_failed_drop = 1; in enc_async_wait_task()
3568 set_enc_info_to_packet(enc, hal_task); in enc_async_wait_task()
3588 MppEncImpl *enc = (MppEncImpl *)mpp->mEnc; in mpp_enc_async_thread() local
3589 MppThread *thd_enc = enc->thread_enc; in mpp_enc_async_thread()
3604 if (check_enc_async_wait(enc, &wait)) { in mpp_enc_async_thread()
3613 if (enc->cmd_send != enc->cmd_recv || enc->reset_flag) { in mpp_enc_async_thread()
3619 enc_dbg_detail("ctrl proc %d cmd %08x\n", enc->cmd_recv, enc->cmd); in mpp_enc_async_thread()
3622 while (MPP_OK == try_proc_processing_task(enc, &wait)); in mpp_enc_async_thread()
3624 if (enc->cmd_send != enc->cmd_recv) { in mpp_enc_async_thread()
3625 sem_wait(&enc->cmd_start); in mpp_enc_async_thread()
3626 ret = mpp_enc_proc_cfg(enc, enc->cmd, enc->param); in mpp_enc_async_thread()
3628 *enc->cmd_ret = ret; in mpp_enc_async_thread()
3629 enc->cmd_recv++; in mpp_enc_async_thread()
3630 enc_dbg_detail("ctrl proc %d done send %d\n", enc->cmd_recv, in mpp_enc_async_thread()
3631 enc->cmd_send); in mpp_enc_async_thread()
3632 mpp_assert(enc->cmd_send == enc->cmd_send); in mpp_enc_async_thread()
3633 enc->param = NULL; in mpp_enc_async_thread()
3634 enc->cmd = (MpiCmd)0; in mpp_enc_async_thread()
3635 sem_post(&enc->cmd_done); in mpp_enc_async_thread()
3639 mpp_enc_hal_prepare(enc->enc_hal); in mpp_enc_async_thread()
3642 mpp_enc_proc_rc_update(enc); in mpp_enc_async_thread()
3646 if (enc->reset_flag) { in mpp_enc_async_thread()
3651 async_task_skip(enc); in mpp_enc_async_thread()
3655 enc->status_flag = 0; in mpp_enc_async_thread()
3659 enc->frm_cfg.force_flag |= ENC_FORCE_IDR; in mpp_enc_async_thread()
3660 enc->frm_cfg.force_idr++; in mpp_enc_async_thread()
3663 enc->reset_flag = 0; in mpp_enc_async_thread()
3664 sem_post(&enc->enc_reset); in mpp_enc_async_thread()
3675 ret = try_get_async_task(enc, &wait); in mpp_enc_async_thread()
3678 try_proc_processing_task(enc, &wait); in mpp_enc_async_thread()
3682 mpp_assert(enc->async); in mpp_enc_async_thread()
3683 mpp_assert(enc->async->task.valid); in mpp_enc_async_thread()
3685 proc_async_task(enc, &wait); in mpp_enc_async_thread()
3688 while (MPP_OK == try_proc_processing_task(enc, &wait)); in mpp_enc_async_thread()