int update_player_states(play_para_t *para, int force) { callback_t *cb = ¶->update_state; update_state_fun_t fn; para->state.last_sta = para->state.status; para->state.status = get_player_state(para); if (check_time_interrupt(&cb->callback_old_time, cb->update_interval) || force) { player_info_t state; MEMCPY(&state, ¶->state, sizeof(state)); //if(force == 1) log_print("**[update_state]pid:%d status=%s(last:%s) err=0x%x curtime=%d (ms:%d) fulltime=%d lsttime=%d\n", para->player_id, player_status2str(state.status), player_status2str(state.last_sta), (-state.error_no), state.current_time, state.current_ms, state.full_time, state.last_time); fn = cb->update_statue_callback; if (fn) { fn(para->player_id, &state); } send_event(para, PLAYER_EVENTS_PLAYER_INFO, &state, 0); para->state.error_no = 0; } return 0; }
int update_player_states(play_para_t *para, int force) { callback_t *cb = ¶->update_state; update_state_fun_t fn; para->state.last_sta = para->state.status; para->state.status = get_player_state(para); if (check_time_interrupt(&cb->callback_old_time, cb->update_interval) || force) { player_info_t state; MEMCPY(&state, ¶->state, sizeof(state)); //if(force == 1) log_print("**[update_state]pid:%d status=%s(tttlast:%s) err=0x%x curtime=%d (ms:%d) fulltime=%d lsttime=%d\n", para->player_id, player_status2str(state.status), player_status2str(state.last_sta), (-state.error_no), state.current_time, state.current_ms, state.full_time, state.last_time); log_print("**[update_state]abuflevel=%.08f vbublevel=%.08f abufrp=%x vbufrp=%x read_end=%d\n", state.audio_bufferlevel, state.video_bufferlevel, para->abuffer.buffer_rp, para->vbuffer.buffer_rp, para->playctrl_info.read_end_flag); fn = cb->update_statue_callback; if (fn) { fn(para->player_id, &state); } send_event(para, PLAYER_EVENTS_PLAYER_INFO, &state, 0); para->state.error_no = 0; player_hwbuflevel_update(para); } return 0; }
static void update_current_time(play_para_t *p_para) { #define REFRESH_CURTIME_INTERVAL (100) unsigned int time = p_para->state.current_time; if (check_time_interrupt(&p_para->state.curtime_old_time, REFRESH_CURTIME_INTERVAL) || !p_para->playctrl_info.pts_valid || (p_para->playctrl_info.end_flag && !p_para->playctrl_info.search_flag)) { if (p_para->playctrl_info.f_step > 0) { time = (unsigned int)p_para->playctrl_info.time_point; p_para->state.current_time = time; p_para->state.current_ms = (unsigned int)(p_para->playctrl_info.time_point * 1000); log_print("[update_current_time]ff/fb:time=%d\n", time); #ifdef DEBUG_VARIABLE_DUR if (p_para->playctrl_info.info_variable) { update_variable_info(p_para); } #endif } else if (!p_para->playctrl_info.end_flag) { time = get_current_time(p_para); p_para->state.current_pts = time; if (p_para->state.start_time == -1) { if (p_para->astream_info.start_time != -1) { p_para->state.start_time = p_para->astream_info.start_time; } else if (p_para->vstream_info.start_time != -1) { p_para->state.start_time = p_para->vstream_info.start_time; } } log_debug("[update_current_time]time=%d astart_time=%d vstart_time=%d last_time=%d\n", time / PTS_FREQ, ((unsigned int)p_para->astream_info.start_time / PTS_FREQ), ((unsigned int)p_para->vstream_info.start_time / PTS_FREQ), p_para->state.last_time); if (p_para->state.first_time == 0) { p_para->state.first_time = time; } if ((unsigned int)p_para->state.first_time > 0) { if ((unsigned int)p_para->state.first_time < (unsigned int)p_para->state.start_time) { log_print("[update_current_time:%d]time=0x%x start_time=0x%x\n", __LINE__, time, ((unsigned int)p_para->astream_info.start_time)); p_para->state.start_time = p_para->state.first_time; } else if (((unsigned int)p_para->state.first_time - (unsigned int)p_para->state.start_time) > 0 && (p_para->state.start_time == 0) && p_para->playctrl_info.time_point == 0) { p_para->state.start_time = p_para->state.first_time; log_print("[update_current_time:%d]reset start_time=0x%x time=0x%x\n", __LINE__, p_para->state.start_time, time); } } if ((unsigned int)time > 0 && (unsigned int)p_para->state.start_time > 0) { if ((unsigned int)p_para->state.start_time < (unsigned int)time) { log_debug("[update_current_time:%d]time=0x%x start_time=0x%x\n", __LINE__, time, p_para->state.start_time); time -= p_para->state.start_time; log_debug("[update_current_time:%d]time=0x%x (%d)\n", __LINE__, time, time / PTS_FREQ); } } log_debug("[update_current_time:%d]time=%d discontinue=%d\n", __LINE__, time / PTS_FREQ, p_para->discontinue_point); if (p_para->discontinue_point > 0) { log_debug("[update_current_time:%d]time=%d dpoint=%d ldpoint=%d\n", __LINE__, time / PTS_FREQ, p_para->discontinue_point, p_para->discontinue_last_point); if (p_para->pFormatCtx && p_para->pFormatCtx->pb && url_support_time_seek(p_para->pFormatCtx->pb) && (time / PTS_FREQ > 0) && (!p_para->discontinue_flag)) { if ((time / PTS_FREQ) < (p_para->discontinue_point - p_para->discontinue_last_point)) { p_para->discontinue_point = p_para->discontinue_point - time / PTS_FREQ; log_print("[update_current_time:%d]time<dpoint dpoint=%d\n", __LINE__, p_para->discontinue_point); } else if (time > p_para->discontinue_point * PTS_FREQ) { p_para->discontinue_point = 0; log_print("[update_current_time:%d]time>dpoint dpoint=%d\n", __LINE__, p_para->discontinue_point); } p_para->discontinue_flag = 1; } time += p_para->discontinue_point * PTS_FREQ; } log_debug("[update_current_time]time=%d curtime=%d lasttime=%d\n", time / PTS_FREQ, p_para->state.current_time, p_para->state.last_time); p_para->state.current_ms = time / PTS_FREQ_MS; time /= PTS_FREQ; } else if (!p_para->playctrl_info.reset_flag && !p_para->playctrl_info.search_flag){ time = p_para->state.full_time; log_print("[update_current_time:%d]play end, curtime: %d\n", __LINE__, time); } if (p_para->state.current_time != p_para->state.last_time) { p_para->state.last_time = p_para->state.current_time; } p_para->state.current_time = (int)time; log_debug("[update_current_time:%d]curtime=%d lasttime=%d tpos=%d full_time=%d\n", __LINE__, p_para->state.current_time, p_para->state.last_time, p_para->playctrl_info.time_point, p_para->state.full_time); if (p_para->state.current_time == 0 && p_para->playctrl_info.time_point > 0) { p_para->state.current_time = p_para->playctrl_info.time_point; p_para->state.current_ms = p_para->playctrl_info.time_point * 1000; log_print("[update_current_time:%d]curtime: 0->%d\n", __LINE__, p_para->playctrl_info.time_point); } if ((p_para->state.current_time > p_para->state.full_time) && (p_para->state.full_time > 0)) { //log_print("[update_current_time:%d]time=%d fulltime=%d\n", __LINE__, time, p_para->state.full_time); if (p_para->state.current_time > p_para->state.full_time) { p_para->state.current_time = p_para->state.full_time; p_para->state.current_ms = p_para->state.current_time * 1000; } } log_debug("[update_current_time:%d]time=%d last_time=%d time_point=%d\n", __LINE__, p_para->state.current_time, p_para->state.last_time, p_para->playctrl_info.time_point); #ifdef DEBUG_VARIABLE_DUR if (p_para->playctrl_info.info_variable) { update_variable_info(p_para); } #endif } }