Lines Matching refs:dec

32 static MPP_RET check_task_wait(MppDecImpl *dec, DecTask *task)  in check_task_wait()  argument
35 RK_U32 notify = dec->parser_notify_flag; in check_task_wait()
36 RK_U32 last_wait = dec->parser_wait_flag; in check_task_wait()
42 if (dec->reset_flag) in check_task_wait()
59 dec_dbg_status("%p %08x -> %08x [%08x] notify %08x -> %s\n", dec, in check_task_wait()
62 dec->parser_status_flag = task->status.val; in check_task_wait()
63 dec->parser_wait_flag = task->wait.val; in check_task_wait()
64 dec->parser_notify_flag = keep_notify; in check_task_wait()
67 dec->parser_wait_count++; in check_task_wait()
69 dec->parser_work_count++; in check_task_wait()
111 static void dec_release_input_packet(MppDecImpl *dec, RK_S32 force) in dec_release_input_packet() argument
113 if (dec->mpp_pkt_in) { in dec_release_input_packet()
114 if (force || 0 == mpp_packet_get_length(dec->mpp_pkt_in)) { in dec_release_input_packet()
115 mpp_packet_deinit(&dec->mpp_pkt_in); in dec_release_input_packet()
117 mpp_dec_callback(dec, MPP_DEC_EVENT_ON_PKT_RELEASE, dec->mpp_pkt_in); in dec_release_input_packet()
118 dec->mpp_pkt_in = NULL; in dec_release_input_packet()
125 MppDecImpl *dec = (MppDecImpl *)mpp->mDec; in reset_parser_thread() local
126 MppThread *hal = dec->thread_hal; in reset_parser_thread()
127 HalTaskGroup tasks = dec->tasks; in reset_parser_thread()
128 MppBufSlots frame_slots = dec->frame_slots; in reset_parser_thread()
129 MppBufSlots packet_slots = dec->packet_slots; in reset_parser_thread()
130 HalDecTask *task_dec = &task->info.dec; in reset_parser_thread()
140 dec->hal_reset_post++; in reset_parser_thread()
144 sem_wait(&dec->hal_reset); in reset_parser_thread()
164 mpp_parser_reset(dec->parser); in reset_parser_thread()
165 mpp_hal_reset(dec->hal); in reset_parser_thread()
166 if (dec->vproc) { in reset_parser_thread()
168 dec_vproc_reset(dec->vproc); in reset_parser_thread()
185 dec_release_input_packet(dec, 1); in reset_parser_thread()
196 if (dec->cfg->base.sort_pts) { in reset_parser_thread()
200 mpp_spinlock_lock(&dec->ts_lock); in reset_parser_thread()
201 list_for_each_entry_safe(ts, pos, &dec->ts_link, MppPktTs, link) { in reset_parser_thread()
203 mpp_mem_pool_put_f(dec->ts_pool, ts); in reset_parser_thread()
205 mpp_spinlock_unlock(&dec->ts_lock); in reset_parser_thread()
220 dec->parser_status_flag = 0; in reset_parser_thread()
221 dec->parser_wait_flag = 0; in reset_parser_thread()
233 MppDecImpl *dec = (MppDecImpl *)mpp->mDec; in mpp_dec_put_task() local
236 mpp_thread_lock(dec->thread_hal, THREAD_WORK); in mpp_dec_put_task()
239 mpp_thread_signal(dec->thread_hal, THREAD_WORK); in mpp_dec_put_task()
240 mpp_thread_unlock(dec->thread_hal, THREAD_WORK); in mpp_dec_put_task()
246 MppDecImpl *dec = (MppDecImpl *)mpp->mDec; in reset_hal_thread() local
247 HalTaskGroup tasks = dec->tasks; in reset_hal_thread()
248 MppBufSlots frame_slots = dec->frame_slots; in reset_hal_thread()
255 mpp_dec_flush(dec); in reset_hal_thread()
257 mpp_thread_lock(dec->thread_hal, THREAD_OUTPUT); in reset_hal_thread()
271 mpp_thread_unlock(dec->thread_hal, THREAD_OUTPUT); in reset_hal_thread()
276 MppDecImpl *dec = (MppDecImpl *)mpp->mDec; in try_get_input_packet() local
297 dec->mpp_pkt_in = packet; in try_get_input_packet()
299 dec->dec_in_pkt_count++; in try_get_input_packet()
309 MppDecImpl *dec = (MppDecImpl *)mpp->mDec; in try_proc_dec_task() local
310 HalTaskGroup tasks = dec->tasks; in try_proc_dec_task()
311 MppBufSlots frame_slots = dec->frame_slots; in try_proc_dec_task()
312 MppBufSlots packet_slots = dec->packet_slots; in try_proc_dec_task()
313 HalDecTask *task_dec = &task->info.dec; in try_proc_dec_task()
335 if (!dec->mpp_pkt_in && !task->status.curr_task_rdy) { in try_proc_dec_task()
339 mpp_assert(dec->mpp_pkt_in); in try_proc_dec_task()
341 dec_dbg_detail("detail: %p get pkt pts %llu len %d\n", dec, in try_proc_dec_task()
342 mpp_packet_get_pts(dec->mpp_pkt_in), in try_proc_dec_task()
343 mpp_packet_get_length(dec->mpp_pkt_in)); in try_proc_dec_task()
372 mpp_dbg_pts("input packet pts %lld\n", mpp_packet_get_pts(dec->mpp_pkt_in)); in try_proc_dec_task()
374 mpp_clock_start(dec->clocks[DEC_PRS_PREPARE]); in try_proc_dec_task()
375 mpp_parser_prepare(dec->parser, dec->mpp_pkt_in, task_dec); in try_proc_dec_task()
376 mpp_clock_pause(dec->clocks[DEC_PRS_PREPARE]); in try_proc_dec_task()
377 if (dec->cfg->base.sort_pts && task_dec->valid) { in try_proc_dec_task()
378 task->ts_cur.pts = mpp_packet_get_pts(dec->mpp_pkt_in); in try_proc_dec_task()
379 task->ts_cur.dts = mpp_packet_get_dts(dec->mpp_pkt_in); in try_proc_dec_task()
381 dec_release_input_packet(dec, 0); in try_proc_dec_task()
420 mpp_buffer_attach_dev(hal_buf_in, dec->dev); in try_proc_dec_task()
447 if (!dec->parser_fast_mode) { in try_proc_dec_task()
466 if (!hal_task_check_empty(dec->tasks, TASK_PROCESSING)) in try_proc_dec_task()
472 dec_dbg_detail("detail: %p check prev task pass\n", dec); in try_proc_dec_task()
480 dec_dbg_detail("detail: %p check mframes pass\n", dec); in try_proc_dec_task()
502 mpp_clock_start(dec->clocks[DEC_PRS_PARSE]); in try_proc_dec_task()
503 mpp_parser_parse(dec->parser, task_dec); in try_proc_dec_task()
504 mpp_clock_pause(dec->clocks[DEC_PRS_PARSE]); in try_proc_dec_task()
531 dec_dbg_detail("detail: %p check output index pass\n", dec); in try_proc_dec_task()
551 dec->info_updated = 0; in try_proc_dec_task()
575 task->wait.dec_pic_unusd = (dec->vproc) ? (unused < 3) : (unused < 1); in try_proc_dec_task()
579 dec_dbg_detail("detail: %p check frame group count pass\n", dec); in try_proc_dec_task()
614 dec_dbg_detail("detail: %p check output buffer %p\n", dec, hal_buf_out); in try_proc_dec_task()
622 dec->cfg->base.enable_hdr_meta) { in try_proc_dec_task()
623 fill_hdr_meta_to_frame(mframe, dec->coding); in try_proc_dec_task()
628 if (!dec->info_updated && dec->dev) { in try_proc_dec_task()
632 update_dec_hal_info(dec, frame); in try_proc_dec_task()
633 dec->info_updated = 1; in try_proc_dec_task()
640 if (dec->cfg->base.sort_pts) { in try_proc_dec_task()
642 MppPktTs *pkt_ts = (MppPktTs *)mpp_mem_pool_get_f(dec->ts_pool); in try_proc_dec_task()
650 mpp_spinlock_lock(&dec->ts_lock); in try_proc_dec_task()
651 list_add_tail(&pkt_ts->link, &dec->ts_link); in try_proc_dec_task()
652 list_sort(NULL, &dec->ts_link, ts_cmp); in try_proc_dec_task()
653 mpp_spinlock_unlock(&dec->ts_lock); in try_proc_dec_task()
658 mpp_clock_start(dec->clocks[DEC_HAL_GEN_REG]); in try_proc_dec_task()
659 mpp_hal_reg_gen(dec->hal, &task->info); in try_proc_dec_task()
660 mpp_clock_pause(dec->clocks[DEC_HAL_GEN_REG]); in try_proc_dec_task()
663 mpp_clock_start(dec->clocks[DEC_HW_START]); in try_proc_dec_task()
664 mpp_hal_hw_start(dec->hal, &task->info); in try_proc_dec_task()
665 mpp_clock_pause(dec->clocks[DEC_HW_START]); in try_proc_dec_task()
673 task->wait.dec_all_done = (dec->parser_fast_mode && in try_proc_dec_task()
682 dec_dbg_detail("detail: %p one task ready\n", dec); in try_proc_dec_task()
690 MppDecImpl *dec = (MppDecImpl *)mpp->mDec; in mpp_dec_parser_thread() local
691 MppThread *parser = dec->thread_parser; in mpp_dec_parser_thread()
692 MppBufSlots packet_slots = dec->packet_slots; in mpp_dec_parser_thread()
695 HalDecTask *task_dec = &task.info.dec; in mpp_dec_parser_thread()
699 mpp_clock_start(dec->clocks[DEC_PRS_TOTAL]); in mpp_dec_parser_thread()
715 if (check_task_wait(dec, &task)) { in mpp_dec_parser_thread()
716 mpp_clock_start(dec->clocks[DEC_PRS_WAIT]); in mpp_dec_parser_thread()
718 mpp_clock_pause(dec->clocks[DEC_PRS_WAIT]); in mpp_dec_parser_thread()
723 if (dec->cmd_send != dec->cmd_recv) { in mpp_dec_parser_thread()
724 dec_dbg_detail("ctrl proc %d cmd %08x\n", dec->cmd_recv, dec->cmd); in mpp_dec_parser_thread()
725 sem_wait(&dec->cmd_start); in mpp_dec_parser_thread()
726 *dec->cmd_ret = mpp_dec_proc_cfg(dec, dec->cmd, dec->param); in mpp_dec_parser_thread()
727 dec->cmd_recv++; in mpp_dec_parser_thread()
728 dec_dbg_detail("ctrl proc %d done send %d\n", dec->cmd_recv, in mpp_dec_parser_thread()
729 dec->cmd_send); in mpp_dec_parser_thread()
730 mpp_assert(dec->cmd_send == dec->cmd_send); in mpp_dec_parser_thread()
731 dec->param = NULL; in mpp_dec_parser_thread()
732 dec->cmd = (MpiCmd)0; in mpp_dec_parser_thread()
733 dec->cmd_ret = NULL; in mpp_dec_parser_thread()
734 sem_post(&dec->cmd_done); in mpp_dec_parser_thread()
738 if (dec->reset_flag) { in mpp_dec_parser_thread()
742 dec->reset_flag = 0; in mpp_dec_parser_thread()
743 sem_post(&dec->parser_reset); in mpp_dec_parser_thread()
750 mpp_clock_start(dec->clocks[DEC_PRS_PROC]); in mpp_dec_parser_thread()
752 mpp_clock_pause(dec->clocks[DEC_PRS_PROC]); in mpp_dec_parser_thread()
755 mpp_clock_pause(dec->clocks[DEC_PRS_TOTAL]); in mpp_dec_parser_thread()
772 MppDecImpl *dec = (MppDecImpl *)mpp->mDec; in mpp_dec_hal_thread() local
773 MppThread *hal = dec->thread_hal; in mpp_dec_hal_thread()
774 HalTaskGroup tasks = dec->tasks; in mpp_dec_hal_thread()
775 MppBufSlots frame_slots = dec->frame_slots; in mpp_dec_hal_thread()
776 MppBufSlots packet_slots = dec->packet_slots; in mpp_dec_hal_thread()
780 HalDecTask *task_dec = &task_info.dec; in mpp_dec_hal_thread()
783 mpp_clock_start(dec->clocks[DEC_HAL_TOTAL]); in mpp_dec_hal_thread()
795 if (dec->hal_reset_post != dec->hal_reset_done) { in mpp_dec_hal_thread()
799 dec->hal_reset_done++; in mpp_dec_hal_thread()
800 sem_post(&dec->hal_reset); in mpp_dec_hal_thread()
805 mpp_dec_notify(dec, MPP_DEC_NOTIFY_TASK_ALL_DONE); in mpp_dec_hal_thread()
806 mpp_clock_start(dec->clocks[DEC_HAL_WAIT]); in mpp_dec_hal_thread()
808 mpp_clock_pause(dec->clocks[DEC_HAL_WAIT]); in mpp_dec_hal_thread()
817 mpp_clock_start(dec->clocks[DEC_HAL_PROC]); in mpp_dec_hal_thread()
828 mpp_dec_flush(dec); in mpp_dec_hal_thread()
834 mpp_dec_notify(dec, notify_flag); in mpp_dec_hal_thread()
835 mpp_clock_pause(dec->clocks[DEC_HAL_PROC]); in mpp_dec_hal_thread()
857 mpp_dec_notify(dec, notify_flag); in mpp_dec_hal_thread()
858 mpp_clock_pause(dec->clocks[DEC_HAL_PROC]); in mpp_dec_hal_thread()
862 mpp_clock_start(dec->clocks[DEC_HW_WAIT]); in mpp_dec_hal_thread()
863 mpp_hal_hw_wait(dec->hal, &task_info); in mpp_dec_hal_thread()
864 mpp_clock_pause(dec->clocks[DEC_HW_WAIT]); in mpp_dec_hal_thread()
865 dec->dec_hw_run_count++; in mpp_dec_hal_thread()
877 hal_task_hnd_set_status(task, (dec->parser_fast_mode) ? in mpp_dec_hal_thread()
880 if (dec->parser_fast_mode) in mpp_dec_hal_thread()
896 mpp_dec_flush(dec); in mpp_dec_hal_thread()
899 mpp_dec_notify(dec, notify_flag); in mpp_dec_hal_thread()
900 mpp_clock_pause(dec->clocks[DEC_HAL_PROC]); in mpp_dec_hal_thread()
904 mpp_clock_pause(dec->clocks[DEC_HAL_TOTAL]); in mpp_dec_hal_thread()
914 MppDecImpl *dec = (MppDecImpl *)mpp->mDec; in mpp_dec_advanced_thread() local
915 MppBufSlots frame_slots = dec->frame_slots; in mpp_dec_advanced_thread()
916 MppBufSlots packet_slots = dec->packet_slots; in mpp_dec_advanced_thread()
917 MppThread *thd_dec = dec->thread_parser; in mpp_dec_advanced_thread()
921 HalDecTask *task_dec = &pTask->info.dec; in mpp_dec_advanced_thread()
936 if (check_task_wait(dec, &task)) in mpp_dec_advanced_thread()
941 if (dec->cmd_send != dec->cmd_recv) { in mpp_dec_advanced_thread()
942 dec_dbg_detail("ctrl proc %d cmd %08x\n", dec->cmd_recv, dec->cmd); in mpp_dec_advanced_thread()
943 sem_wait(&dec->cmd_start); in mpp_dec_advanced_thread()
944 *dec->cmd_ret = mpp_dec_proc_cfg(dec, dec->cmd, dec->param); in mpp_dec_advanced_thread()
945 dec->cmd_recv++; in mpp_dec_advanced_thread()
946 dec_dbg_detail("ctrl proc %d done send %d\n", dec->cmd_recv, in mpp_dec_advanced_thread()
947 dec->cmd_send); in mpp_dec_advanced_thread()
948 mpp_assert(dec->cmd_send == dec->cmd_send); in mpp_dec_advanced_thread()
949 dec->param = NULL; in mpp_dec_advanced_thread()
950 dec->cmd = (MpiCmd)0; in mpp_dec_advanced_thread()
951 dec->cmd_ret = NULL; in mpp_dec_advanced_thread()
952 sem_post(&dec->cmd_done); in mpp_dec_advanced_thread()
1003 mpp_parser_prepare(dec->parser, packet, task_dec); in mpp_dec_advanced_thread()
1025 ret = mpp_parser_parse(dec->parser, task_dec); in mpp_dec_advanced_thread()
1053 if (!dec->info_updated && dec->dev) { in mpp_dec_advanced_thread()
1057 update_dec_hal_info(dec, tmp); in mpp_dec_advanced_thread()
1058 dec->info_updated = 1; in mpp_dec_advanced_thread()
1061 mpp_hal_reg_gen(dec->hal, &pTask->info); in mpp_dec_advanced_thread()
1062 mpp_hal_hw_start(dec->hal, &pTask->info); in mpp_dec_advanced_thread()
1063 mpp_hal_hw_wait(dec->hal, &pTask->info); in mpp_dec_advanced_thread()
1145 MPP_RET mpp_dec_start_normal(MppDecImpl *dec) in mpp_dec_start_normal() argument
1147 if (dec->coding != MPP_VIDEO_CodingMJPEG) { in mpp_dec_start_normal()
1148 dec->thread_parser = mpp_thread_create(mpp_dec_parser_thread, in mpp_dec_start_normal()
1149 dec->mpp, "mpp_dec_parser"); in mpp_dec_start_normal()
1150 mpp_thread_start(dec->thread_parser); in mpp_dec_start_normal()
1151 dec->thread_hal = mpp_thread_create(mpp_dec_hal_thread, in mpp_dec_start_normal()
1152 dec->mpp, "mpp_dec_hal"); in mpp_dec_start_normal()
1154 mpp_thread_start(dec->thread_hal); in mpp_dec_start_normal()
1156 dec->thread_parser = mpp_thread_create(mpp_dec_advanced_thread, in mpp_dec_start_normal()
1157 dec->mpp, "mpp_dec_parser"); in mpp_dec_start_normal()
1158 mpp_thread_start(dec->thread_parser); in mpp_dec_start_normal()
1164 MPP_RET mpp_dec_reset_normal(MppDecImpl *dec) in mpp_dec_reset_normal() argument
1166 MppThread *parser = dec->thread_parser; in mpp_dec_reset_normal()
1168 if (dec->coding != MPP_VIDEO_CodingMJPEG) { in mpp_dec_reset_normal()
1171 dec->reset_flag = 1; in mpp_dec_reset_normal()
1173 mpp_dec_notify(dec, MPP_DEC_RESET); in mpp_dec_reset_normal()
1175 sem_wait(&dec->parser_reset); in mpp_dec_reset_normal()
1178 dec->dec_in_pkt_count = 0; in mpp_dec_reset_normal()
1179 dec->dec_hw_run_count = 0; in mpp_dec_reset_normal()
1180 dec->dec_out_frame_count = 0; in mpp_dec_reset_normal()
1181 dec->info_updated = 0; in mpp_dec_reset_normal()
1186 MPP_RET mpp_dec_notify_normal(MppDecImpl *dec, RK_U32 flag) in mpp_dec_notify_normal() argument
1188 MppThread *thd_dec = dec->thread_parser; in mpp_dec_notify_normal()
1196 dec->parser_notify_flag |= flag; in mpp_dec_notify_normal()
1199 RK_U32 old_flag = dec->parser_notify_flag; in mpp_dec_notify_normal()
1201 dec->parser_notify_flag |= flag; in mpp_dec_notify_normal()
1202 if ((old_flag != dec->parser_notify_flag) && in mpp_dec_notify_normal()
1203 (dec->parser_notify_flag & dec->parser_wait_flag)) in mpp_dec_notify_normal()
1208 dec_dbg_notify("%p status %08x notify control signal\n", dec, in mpp_dec_notify_normal()
1209 dec->parser_wait_flag, dec->parser_notify_flag); in mpp_dec_notify_normal()
1217 MPP_RET mpp_dec_control_normal(MppDecImpl *dec, MpiCmd cmd, void *param) in mpp_dec_control_normal() argument
1220 mpp_mutex_cond_lock(&dec->cmd_lock); in mpp_dec_control_normal()
1222 dec->cmd = cmd; in mpp_dec_control_normal()
1223 dec->param = param; in mpp_dec_control_normal()
1224 dec->cmd_ret = &ret; in mpp_dec_control_normal()
1225 dec->cmd_send++; in mpp_dec_control_normal()
1228 dec, cmd, param, dec->cfg->base.disable_thread); in mpp_dec_control_normal()
1230 mpp_dec_notify_normal(dec, MPP_DEC_CONTROL); in mpp_dec_control_normal()
1231 sem_post(&dec->cmd_start); in mpp_dec_control_normal()
1232 sem_wait(&dec->cmd_done); in mpp_dec_control_normal()
1233 mpp_mutex_cond_unlock(&dec->cmd_lock); in mpp_dec_control_normal()