static void win_tpsrch_set_search_param(UINT32 fta_only,UINT32 srch_chan,UINT32 nit_flag) { S_NODE s_node; T_NODE t_node; struct as_service_param param; OBJLIST* ol; UINT16 tp_idx; struct vdec_device *vdec; struct vdec_io_get_frm_para vfrm_param; UINT32 addr, len; ol = &tplst_olist; tp_idx = OSD_GetObjListCurPoint(ol); get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx, &s_node); get_tp_at(s_node.sat_id,tp_idx,&t_node); #ifdef NEW_DEMO_FRAME MEMSET(¶m, 0, sizeof(struct as_service_param)); param.as_frontend_type = FRONTEND_TYPE_S; param.as_prog_attr = fta_only |srch_chan; param.as_to = 0; param.as_sat_cnt = 1; param.sat_ids[0] = s_node.sat_id; param.as_from = t_node.tp_id; #else param.as_prog_attr = fta_only |srch_chan; param.as_to = 0; param.as_sat_id = s_node.sat_id; param.as_from = t_node.tp_id; #endif param.as_method = nit_flag? AS_METHOD_NIT_TP : AS_METHOD_TP; param.as_p_add_cfg = PROG_ADD_REPLACE_OLD; // set param win_search_set_param(¶m); update_data(); #if 0 vdec = (struct vdec_device *)dev_get_by_id(HLD_DEV_TYPE_DECV, 0); vfrm_param.ufrm_mode = VDEC_UN_DISPLAY; vdec_io_control(vdec, VDEC_IO_GET_FRM, (UINT32)&vfrm_param); addr = vfrm_param.tFrmInfo.uC_Addr; len = (vfrm_param.tFrmInfo.uHeight*vfrm_param.tFrmInfo.uWidth*3)/2; #else addr = __MM_AUTOSCAN_DB_BUFFER_ADDR; addr &= 0x8fffffff; len = __MM_AUTOSCAN_DB_BUFFER_LEN; #endif db_search_init((UINT8 *)addr, len); }
static void win_satsrch_set_search_param(void) { UINT32 search_mode; UINT32 prog_type; S_NODE s_node; struct as_service_param param; struct nim_device *nim; struct vdec_device *vdec; struct vdec_io_get_frm_para vfrm_param; UINT32 addr, len; UINT32 i; //tv/radio/all if(SATSRCH_CHAN_IDX==1) prog_type = P_SEARCH_TV; else if(SATSRCH_CHAN_IDX==2) prog_type = P_SEARCH_RADIO; else// if(SATSRCH_CHAN_IDX==0) prog_type = P_SEARCH_TV|P_SEARCH_RADIO; /* FTA Only */ if (SATSRCH_FTA_IDX == 1) search_mode = P_SEARCH_FTA; else// if (sSATSRCH_FTA_IDX == 1) search_mode = P_SEARCH_FTA|P_SEARCH_SCRAMBLED; param.as_from = AS_FREQ_MIN; param.as_to = AS_FREQ_MAX; param.as_prog_attr = prog_type|search_mode; #ifndef NEW_DEMO_FRAME if(single_multi_srch_flag == 0) { get_tuner_sat(TUNER_EITHER,SATSRCH_SAT_IDX,&s_node); param.as_sat_id = s_node.sat_id; if (s_node.lnb_type == LNB_CTRL_22K) { param.as_from = 950; param.as_to = 2150; } } else { param.as_sat_ids = sat_ids; } #else param.as_frontend_type = FRONTEND_TYPE; if(single_multi_srch_flag == 0) { get_tuner_sat(TUNER_EITHER,SATSRCH_SAT_IDX, &s_node); param.sat_ids[0] = s_node.sat_id; param.as_sat_cnt = 1; } else { param.as_sat_cnt = get_tuner_sat_cnt(TUNER_EITHER_SELECT); // multi-search max satellite number is 256 if(param.as_sat_cnt > 256) param.as_sat_cnt = 256; MEMCPY(param.sat_ids, sat_ids, param.as_sat_cnt * sizeof(UINT16)); } #endif #ifdef ORDER_GZ1011001 if(SATSRCH_MODE_IDX == 1) #else if(SATSRCH_MODE_IDX == IDX_SCAN_MODE_AUTO_SCAN ||SATSRCH_MODE_IDX == IDX_SCAN_MODE_ACCURATE_SCAN ) #endif { if(single_multi_srch_flag == 0) param.as_method = AS_METHOD_FFT; else param.as_method = AS_METHOD_MULTI_FFT; } else if (SATSRCH_MODE_IDX == IDX_SCAN_MODE_PRESET_SCAN) { if(single_multi_srch_flag == 0) param.as_method = (SATSRCH_NIT_IDX==0)? AS_METHOD_SAT_TP : AS_METHOD_NIT; else param.as_method = (SATSRCH_NIT_IDX==0)? AS_METHOD_MULTI_TP : AS_METHOD_MULTI_NIT; } for(i = 0;i < param.as_sat_cnt;i++) { get_sat_by_id(param.sat_ids[i], &s_node); if(s_node.tuner1_valid == 1) { nim= (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, 0); } else if(s_node.tuner2_valid == 1) { nim= (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, 1); } else continue; if(SATSRCH_MODE_IDX == IDX_SCAN_MODE_ACCURATE_SCAN) nim_io_control(nim, NIM_DRIVER_SET_BLSCAN_MODE, 1); else nim_io_control(nim, NIM_DRIVER_SET_BLSCAN_MODE, 0); } param.as_p_add_cfg = PROG_ADD_REPLACE_OLD; param.as_handler = NULL; // set param win_search_set_param(¶m); //update_data(); #if 0 vdec = (struct vdec_device *)dev_get_by_id(HLD_DEV_TYPE_DECV, 0); vfrm_param.ufrm_mode = VDEC_UN_DISPLAY; vdec_io_control(vdec, VDEC_IO_GET_FRM, (UINT32)&vfrm_param); addr = vfrm_param.tFrmInfo.uC_Addr; len = (vfrm_param.tFrmInfo.uHeight*vfrm_param.tFrmInfo.uWidth*3)/2; #else addr = __MM_AUTOSCAN_DB_BUFFER_ADDR; addr &= 0x8fffffff; len = __MM_AUTOSCAN_DB_BUFFER_LEN; #endif db_search_init((UINT8 *)addr, len); }
static PRESULT win_mpegYT_player_message_proc(POBJECT_HEAD pObj, UINT32 msg_type, UINT32 msg_code) { PRESULT ret = PROC_LOOP; struct VDec_StatusInfo vdec_status; switch (msg_type) { case CTRL_MSG_SUBTYPE_CMD_STO: if(msg_code == USB_STATUS_OVER) do{}while(0); break; case CTRL_MSG_SUBTYPE_CMD_TIMEDISPLAYUPDATE: //add on 2011-09-28 fixBUG42869 //if(!b_vdec_support && !b_audio_yt_support) //{ // StopProc(); // break; //} MPEGYTInfo.PlayTime = (UINT32)MPGFileDecoderGetPlayTime() + s_ytvideo_seektime; if(MPEGYTInfo.PlayTime >= MPEGYTInfo.TotalTime) { BarState.nPos = MPEGYTInfo.TotalTime - 1; } else BarState.nPos = MPEGYTInfo.PlayTime; if (!m_HideWindow) { win_mpegYT_player_draw(TRUE); } break; case CTRL_MSG_SUBTYPE_STATUS_VIDEO_OVER: //video over #if 0 vdec_io_control(dev_get_by_id(HLD_DEV_TYPE_DECV, 0), VDEC_IO_GET_STATUS, (UINT32)(&vdec_status)); if(MPEG_FB != MPEGYTInfo.PlayState && MPEG_SB != MPEGYTInfo.PlayState && vdec_status.api_play_direction == VDEC_FORWARD) { if((filelist_get_current_classifiedfile_count(MP_VIDEO)+1)<mpegYTlist_cnt) { mpegYTlist_idx = filelist_get_next_classifiedfile_index(MP_VIDEO, mpegYTlist_idx); } else { mpegYTlist_idx = (UINT16)(~0); } } if(mpegYTlist_idx != (UINT16)(~0)) { if(vdec_status.api_play_direction == VDEC_FORWARD) { libnet_download_abort(g_strf_cur_dl_rsrc); mpg_cmd_stop_proc(); } MPEGYTInfo.PlayState = MPEG_STOP; api_stop_timer(&mpegYT_refresh_id); m_mpegYT_player_working = FALSE; MPEGYT_player_init(); m_mpegYT_player_working = TRUE; } else ret = PROC_LEAVE; #else if(MPEGYTInfo.PlayState == MPEG_FB) { MPEGYTInfo.PlayState = MPEG_STOP; PlayProc_yt(); } else { ret = PROC_LEAVE; } #endif break; case CTRL_MSG_SUBTYPE_STATUS_TIMEOUT: //mpegYT player display timer out if (!m_HideWindow) { win_mpegYT_player_draw(FALSE); if (BarState.State == CURSOR_MOVING) { SyncBarPosAndCursor(POS_TO_CUR); } } else { if (m_bSetVol_YT)//if the volume bar is showing { //ShowVolumeBar(FALSE);//Close the volume bar } } break; case CTRL_MSG_SUBTYPE_STATUS_VIDEO_DEC_ERR: case CTRL_MSG_SUBTYPE_STATUS_PARSE_END: s_is_in_parsing = 0; // mpegYT_refresh_cnt = 0; MPEGYTInfo.TotalTime = get_video_total_time() + s_ytvideo_seektime; BarState.nRange = MPEGYTInfo.TotalTime; mpegYT_file_prompt(NULL, FALSE); //mpegYT_unsupport_detect(msg_code); #ifdef AV_DELAY_SUPPORT if(b_vdec_support && b_audio_yt_support) { SYSTEM_DATA *psys_data = sys_data_get(); if(psys_data->avset.avdelay_value > 500) MpgSetAVSyncDelay(1, psys_data->avset.avdelay_value-500); //0:video; 1:audio. else if(psys_data->avset.avdelay_value > 0 && psys_data->avset.avdelay_value < 500) MpgSetAVSyncDelay(0, psys_data->avset.avdelay_value); //0:video; 1:audio. } #endif break; } return ret; }
void win_ci_on_transport_connect(UINT8 slot) { UINT8 i; struct nim_device *nim_dev; struct dmx_device *dmx_dev; struct vdec_device *vdec_dev; UINT32 scrm_flag; UINT8 dmx_id, nim_id, slot_id; #ifdef CI_BYPASS_ENABLE BOOL ci_bypass = FALSE; UINT8 lock = 0; #endif #ifdef NEW_DEMO_FRAME struct ts_route_info ts_route; INT32 ts_route_id; #endif static UINT8 m_ci_inited; if (!m_ci_inited) { api_ci_set_mode(SYS_CI_MODE); api_ci_set_dev(g_nim_dev, g_dmx_dev, 0); #if (CI_SLOT_NS > 1) api_ci_set_dev(g_nim_dev, g_dmx_dev, 1); #endif api_set_nim_ts_type(2, 0xff); m_ci_inited = 1; } if (CAM_STACK_ATTACH == api_ci_check_status(slot)) { #ifdef DVR_PVR_SUPPORT #ifdef CI_SLOT_DYNAMIC_DETECT api_set_ci_slot_attached(slot, TRUE); #endif #endif extern UINT8 g_ca_prog_reset_flag; g_ca_prog_reset_flag = 0; nim_id = 0; dmx_id = 0; #ifdef NEW_DEMO_FRAME ts_route_id = ts_route_check_ci(slot); if((ts_route_id >= 0) && (ts_route_get_by_id(ts_route_id, &ts_route) != RET_FAILURE)) { nim_id = ts_route.nim_id; dmx_id = ts_route.dmx_id; } #endif nim_dev = (struct nim_device*)dev_get_by_id(HLD_DEV_TYPE_NIM, nim_id); dmx_dev = (struct dmx_device*)dev_get_by_id(HLD_DEV_TYPE_DMX, dmx_id); api_ci_set_mode(sys_data_get_ci_mode()); api_ci_set_dev(nim_dev, dmx_dev, slot); #ifdef CI_BYPASS_ENABLE //for not scrambled program, bypass cam! if ((screen_back_state != SCREEN_BACK_MENU/*play tv/radio*/) #ifdef DVR_PVR_SUPPORT || (api_pvr_check_tsg_state()/*tsg*/) #endif ) { #ifdef DVR_PVR_SUPPORT if (api_pvr_check_tsg_state()) { ; } else #endif { nim_get_lock(nim_dev, &lock); //!scrambled program if (lock && dmx_dev != NULL && SUCCESS != dmx_io_control(dmx_dev, IS_AV_SCRAMBLED, (UINT32)&scrm_flag)) { ci_bypass = TRUE; } } } if (!ci_bypass) { api_set_nim_ts_type(3, 1<<slot); api_send_ca_pmt(slot); } #else //CI_BYPASS_ENABLE //always pass cam! api_set_nim_ts_type(3, 1<<slot); //fix BUG15594 api_send_ca_pmt(slot); #endif //CI_BYPASS_ENABLE #ifdef NEW_DEMO_FRAME if((1) #else if((get_cc_crnt_state() != 0) #endif #ifdef DVR_PVR_SUPPORT || (api_pvr_check_tsg_state()) #endif ) // CC_STATE_STOP { //when card in, need stop vdec to avoid masic. vdec_dev = (struct vdec_device*)dev_get_by_id(HLD_DEV_TYPE_DECV, 0); if (vdec_dev != NULL && dmx_dev != NULL && SUCCESS == dmx_io_control(dmx_dev, IS_AV_SCRAMBLED, (UINT32)&scrm_flag)) { //libc_printf("%s: reset vdec!!!\n",__FUNCTION__); //to avoid mosaic #ifdef NEW_DEMO_FRAME vdec_io_control(vdec_dev,VDEC_IO_REST_VBV_BUF,0); #else vdec_stop(vdec_dev, FALSE, FALSE); vdec_start(vdec_dev); #endif } } }
static PRESULT win_mpeg_player_message_proc(POBJECT_HEAD pObj, UINT32 msg_type, UINT32 msg_code) { PRESULT ret = PROC_LOOP; struct VDec_StatusInfo vdec_status; switch (msg_type) { case CTRL_MSG_SUBTYPE_CMD_STO: if(msg_code == USB_STATUS_OVER) { storage_dev_mount_hint(1); file_list_check_storage_device(FALSE, FALSE); } break; case CTRL_MSG_SUBTYPE_CMD_TIMEDISPLAYUPDATE: MPEGInfo.PlayTime = (UINT32)MPGFileDecoderGetPlayTime(); if(MPEGInfo.PlayTime >= MPEGInfo.TotalTime) { BarState.nPos = MPEGInfo.TotalTime - 1; } else BarState.nPos = MPEGInfo.PlayTime; if (!m_HideWindow) { win_mpeg_player_draw(TRUE); } break; case CTRL_MSG_SUBTYPE_STATUS_VIDEO_OVER: //video over #if 0 vdec_io_control(dev_get_by_id(HLD_DEV_TYPE_DECV, 0), VDEC_IO_GET_STATUS, (UINT32)(&vdec_status)); if(MPEG_FB != MPEGInfo.PlayState && MPEG_SB != MPEGInfo.PlayState && vdec_status.api_play_direction == VDEC_FORWARD) { if((filelist_get_current_classifiedfile_count(MP_VIDEO)+1)<mpeglist_cnt) { mpeglist_idx = filelist_get_next_classifiedfile_index(MP_VIDEO, mpeglist_idx); } else { mpeglist_idx = (UINT16)(~0); } } if(mpeglist_idx != (UINT16)(~0)) { if(vdec_status.api_play_direction == VDEC_FORWARD) mpg_cmd_stop_proc(); MPEGInfo.PlayState = MPEG_STOP; api_stop_timer(&mpeg_refresh_id); m_mpeg_player_working = FALSE; MPEG_player_init(); m_mpeg_player_working = TRUE; } else ret = PROC_LEAVE; #else if(MPEGInfo.PlayState == MPEG_FB) { MPEGInfo.PlayState = MPEG_STOP; PlayProc(); } else { ret = PROC_LEAVE; } #endif break; case CTRL_MSG_SUBTYPE_STATUS_TIMEOUT: //mpeg player display timer out if (!m_HideWindow) { win_mpeg_player_draw(FALSE); if (BarState.State == CURSOR_MOVING) { SyncBarPosAndCursor(POS_TO_CUR); } } else { if (m_bSetVol)//if the volume bar is showing { //ShowVolumeBar(FALSE);//Close the volume bar } } break; } return ret; }
BOOL GetSignalStatus( signal_lock_status* lock_flag, signal_scramble_status* scramble_flag, signal_lnbshort_status* lnbshort_flag, signal_parentlock_status* parrentlock_flag) { UINT8 lock; struct dmx_device * dmx_dev; signal_lnbshort_status lnbshort; SYSTEM_DATA* sys_data; sys_data = sys_data_get(); UINT8 scrabled,scrable_typ; P_NODE p_node; UINT16 cur_channel; struct VDec_StatusInfo curStatus; static UINT16 prechan; static UINT32 descDetTime = 0; struct nim_device* nim_dev; #ifdef NEW_DEMO_FRAME static UINT32 unlock_times; INT32 ts_route_id; struct ts_route_info ts_route; struct nim_config nim_config; #endif if(cur_tuner_idx == 0) nim_dev = g_nim_dev; else nim_dev = g_nim_dev2; #ifdef NEW_DEMO_FRAME MEMSET(&ts_route, 0, sizeof(struct ts_route_info)); if(ts_route_get_by_type(TS_ROUTE_MAIN_PLAY, &ts_route_id, &ts_route) != RET_FAILURE) { nim_dev = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, ts_route.nim_id); } else { nim_dev = (cur_tuner_idx == 0) ? g_nim_dev : g_nim_dev2; } #endif lnbshort = SIGNAL_STATUS_LNBNORMAL; #if(SYS_LNB_SHORT_DET == SYS_FUNC_ON) /* if(sys_data->bLNB_power == LNB_POWER_ON) { if(LNB_state() == 1)//short { lnbshort = SIGNAL_STATUS_LNBSHORT; } } */ lnbshort = lnb_power_short; #elif(SYS_12V_SHORT_DET == SYS_FUNC_ON) lnbshort = v12_power_short; #endif if(lnbshort_flag != NULL) *lnbshort_flag = lnbshort; SetSignalLNBShortStatus(lnbshort); // if(*lnbshort_flag == SIGNAL_STATUS_LNBSHORT) // return TRUE; #ifdef NEW_DEMO_FRAME dmx_dev = (struct dmx_device *)dev_get_by_id(HLD_DEV_TYPE_DMX, ts_route.dmx_id); #else dmx_dev = g_dmx_dev; #endif #ifdef DVR_PVR_SUPPORT if(singal_play_chan_nim_busy) lock = SIGNAL_STATUS_UNLOCK; else #endif nim_get_lock(nim_dev,&lock); #if 0//def NEW_DEMO_FRAME //reset diseqc, but it may hold this process, if attached to UI flow maybe cause bug! if(!lock) unlock_times++; else unlock_times = 0; if((unlock_times > 10)&& sys_data->bLNB_power) { dev_get_nim_config(nim_dev, FRONTEND_TYPE_S, &nim_config); frontend_set_antenna(nim_dev, &nim_config.antenna, &nim_config.xpond, 1); if(frontend_lnb_22k_ctl(&nim_config.antenna) || (nim_dev == g_nim_dev2)) frontend_set_nim(nim_dev, &nim_config.antenna,&nim_config.xpond,1); nim_get_lock(nim_dev,&lock); unlock_times = 0; } #endif if (parrentlock_flag == NULL) lv_lock_status = lock? SIGNAL_STATUS_LOCK : SIGNAL_STATUS_UNLOCK; else SetSignalLockStatus( lock? SIGNAL_STATUS_LOCK : SIGNAL_STATUS_UNLOCK); cur_channel = sys_data_get_cur_group_cur_mode_channel(); get_prog_at(cur_channel,&p_node); #if 0 scrabled = 0; if(dmx_io_control(dmx_dev,IS_AV_SCRAMBLED,(UINT32)(&scrable_typ)) == RET_SUCCESS ) { if(scrable_typ & (VDE_TS_SCRBL|VDE_PES_SCRBL)) scrabled = 1; else { scrabled = 0; } } #else scrabled = key_get_dmx0_scramble(NULL); #endif #ifdef CI_SUPPORT2 if ((parrentlock_flag == NULL) && (p_node.ca_mode) && (!scrabled) && lock && (screen_back_state == SCREEN_BACK_VIDEO) && (VIEW_MODE_FULL == hde_get_mode()) #ifdef DVR_PVR_SUPPORT && !freeze_for_pvr //black screen result in pvr state trans! && api_pvr_is_live_playing() #endif ) { vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus); UINT32 freeze_flag = curStatus.display_idx; if((curStatus.uFirstPicShowed) && (curStatus.uCurStatus == VDEC_DECODING)) //for scramble prog and freeze screen (show black screen and scramble osd) { osal_task_sleep(100); //vdec_io_control(g_decv_dev, VDEC_IO_GET_STATUS, (UINT32)&curStatus); vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus); if(freeze_flag == curStatus.display_idx) { osal_task_sleep(100); //vdec_io_control(g_decv_dev, VDEC_IO_GET_STATUS, (UINT32)&curStatus); vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus); if(freeze_flag == curStatus.display_idx) // freeze screen state! { scrabled = 1; #ifdef DVR_PVR_SUPPORT //add to simulate monitor's function for video hold state because monitor is off under DVR project! if((!last_ca_pmt_cmd_time) || (last_ca_pmt_cmd_time && (osal_get_tick() > last_ca_pmt_cmd_time + 6000))) { if(ca_pmt_cmd_cnt >= 2) { UIChChgPlayProg(0,CC_CMD_RESET_CRNT_CH); ca_pmt_cmd_cnt = 0; } else { //cc_send_ca_pmt(); cc_send_ca_pmt(p_node.prog_id); ca_pmt_cmd_cnt++; } last_ca_pmt_cmd_time = osal_get_tick(); } #endif } else { ca_pmt_cmd_cnt = 0; } } else { ca_pmt_cmd_cnt = 0; } } else if(!curStatus.uFirstPicShowed) //for scramble prog and black screen { scrabled = 1; ca_pmt_cmd_cnt = 0; } } #endif #ifdef CTI_CA { UINT32 freeze_flag = curStatus.display_idx; vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus); freeze_flag = curStatus.display_idx; if((curStatus.uFirstPicShowed) && (curStatus.uCurStatus == VDEC_DECODING)) //for scramble prog and freeze screen (show black screen and scramble osd) { osal_task_sleep(100); vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus); if(freeze_flag == curStatus.display_idx) { osal_task_sleep(100); vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus); if(freeze_flag == curStatus.display_idx) // freeze screen state! { scrabled = 1; } } } else if(!curStatus.uFirstPicShowed) //for scramble prog and black screen { scrabled = 1; } /*qjzheng 2010.5.7 BUG2003 不能播放加锁节目时, 有时提示是CA错误*/ if( !lv_lock_status ) { scrabled = 0; } } #endif if (parrentlock_flag) { if (scrabled) { if (lv_scramble_fake) scrabled = 0; } SetSignalScrambleStatus(scrabled? SIGNAL_STATUS_SCRAMBLED : SIGNAL_STATUS_UNSCRAMBLED); } else { lv_scramble_status = scrabled? SIGNAL_STATUS_SCRAMBLED : SIGNAL_STATUS_UNSCRAMBLED; } /*Never in In multi-view mode*/ if(lock && !scrabled && hde_get_mode()!=VIEW_MODE_MULTI) { if(p_node.ca_mode && sys_data_get_cur_chan_mode() == TV_CHAN) { if(!curStatus.uFirstPicShowed && curStatus.uCurStatus!=VDEC_PAUSED) { descDetTime ++; if(descDetTime == 1) prechan = cur_channel; if(descDetTime >=3 && prechan == cur_channel) scrabled = 1; else descDetTime = 0; } else descDetTime = 0; } } if(lock_flag != NULL) *lock_flag = lv_lock_status; if(scramble_flag != NULL) *scramble_flag = lv_scramble_status; if(parrentlock_flag != NULL) *parrentlock_flag = lv_parrentlock_status; if(lv_lock_status == SIGNAL_STATUS_LOCK && lv_scramble_status == SIGNAL_STATUS_UNSCRAMBLED && lv_lnbshort_status == SIGNAL_STATUS_LNBNORMAL && lv_parrentlock_status == SIGNAL_STATUS_PARENT_UNLOCK) return FALSE; else { return TRUE; } }
/* Set the View Mode of VPO Window */ void hde_set_mode(UINT32 mode) { struct MPSource_CallBack MPCallBack; struct PIPSource_CallBack PIPCallBack; struct VDec_StatusInfo vdec_info; struct VDecPIPInfo tInitInfo; UINT32 waittime=0, wait_total_time = 0; struct vdec_device *pDecvDevice = (struct vdec_device *)get_selected_decoder(); BOOL need_to_wait = FALSE; BOOL need_to_set_output = FALSE; UINT8 ulock = 0; struct nim_device *nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, 0); struct vpo_device *pDisDevice = (struct vpo_device *)dev_get_by_type(NULL, HLD_DEV_TYPE_DIS); #ifdef DUAL_VIDEO_OUTPUT struct vpo_device *pDisDevice_O = (struct vpo_device *)dev_get_by_id(HLD_DEV_TYPE_DIS, 1); #endif struct vpo_io_get_info dis_info; switch(mode) { case VIEW_MODE_PREVIEW: if ((l_hde_mode != mode) || (l_hde_uIsPreviewResize == 1)) { ENTER_CCHDE_API(); #if( VDEC27_PREVIEW_SOLUTION == VDEC27_PREVIEW_VE_SCALE) #ifdef HDTV_SUPPORT /* Check Frame Size, If Input Frame is HD, Set VE to Dview Mode */ vpo_ioctl(pDisDevice, VPO_IO_GET_INFO, (UINT32) &dis_info); #ifdef DUAL_VIDEO_OUTPUT vpo_ioctl(pDisDevice_O, VPO_IO_GET_INFO, (UINT32) &dis_info); #endif if(is_cur_decoder_avc()) { vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); if(vdec_info.pic_width > 720 || vdec_info.pic_height > 576) { need_to_wait = TRUE; } else need_to_wait = FALSE; } else { need_to_wait = TRUE; vdec_stop(pDecvDevice,TRUE,TRUE); } if(need_to_wait) { tInitInfo.adv_setting.init_mode = 1; tInitInfo.adv_setting.out_sys = dis_info.tvsys; tInitInfo.adv_setting.bprogressive = dis_info.bprogressive; #ifdef DUAL_VIDEO_OUTPUT if(is_cur_decoder_avc()) #else if(0) #endif { vdec_set_output(pDecvDevice,DUAL_PREVIEW_MODE, &tInitInfo, &MPCallBack, &PIPCallBack); } else { vdec_set_output(pDecvDevice, DUAL_PREVIEW_MODE, &tInitInfo, &MPCallBack, &PIPCallBack); } } if(!is_cur_decoder_avc()) { vdec_start(pDecvDevice); } if(is_cur_decoder_avc() && need_to_wait) { struct dmx_device *dmx = (struct dmx_device *)dev_get_by_id(HLD_DEV_TYPE_DMX, 0); //For H264, we have to wait for 1st picture decoded, then call vpo_zoom, otherwise, it could cause below issue: //1. DE under run, because DE can scale down HD full size picture to preview size //2. In full screen mode, VE mapping is H264 mapping mode, in preview mode, VE mapping is MPEG2 mapping mode //--Michael Xie 2007/8/29 wait_total_time = VE_MODE_SWITCH_TIME; while(waittime<wait_total_time) { nim_get_lock(nim, &ulock); if(!ulock) break; if(RET_SUCCESS == dmx_io_control(dmx, IS_AV_SCRAMBLED, 0)) break; vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); if(vdec_info.uFirstPicShowed) { wait_total_time = H264_VE_MODE_SWITCH_TIME; } if(vdec_info.output_mode == PREVIEW_MODE) { osal_task_sleep(100); break; } osal_task_sleep(1); waittime++; } } vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview); #ifdef DUAL_VIDEO_OUTPUT vpo_zoom(pDisDevice_O, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview); #endif #else //Set Video Decoder Output Mode (PREVIEW_MODE) tInitInfo.src_rect.uStartX = l_hde_rectSrcFull_adjusted.uStartX>>1; tInitInfo.src_rect.uStartY= l_hde_rectSrcFull_adjusted.uStartY>>1; tInitInfo.src_rect.uWidth = PICTURE_WIDTH - 2*tInitInfo.src_rect.uStartX; tInitInfo.src_rect.uHeight = PICTURE_HEIGHT - 2*tInitInfo.src_rect.uStartY; tInitInfo.dst_rect.uStartX = l_hde_rectScrnPreview.uStartX; tInitInfo.dst_rect.uStartY= l_hde_rectScrnPreview.uStartY; tInitInfo.dst_rect.uWidth = l_hde_rectScrnPreview.uWidth; tInitInfo.dst_rect.uHeight = l_hde_rectScrnPreview.uHeight; vdec_set_output(pDecvDevice,PREVIEW_MODE, &tInitInfo, &MPCallBack,&PIPCallBack); //Wait Video Decoder Output Mode Switch to PREVIEW_MODE vdec_info.output_mode = VIEW_MODE_FULL; while((vdec_info.output_mode != PREVIEW_MODE)&&(waittime<VE_MODE_SWITCH_TIME)) { nim_get_lock(nim, &ulock); if(!ulock) break; osal_task_sleep(1); waittime++; vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); } //Switch Video Decoder Output Mode to PREVIEW_MODE Forcely if(vdec_info.output_mode != PREVIEW_MODE) { PRINTF("switch to preview forcely\n"); vdec_stop(pDecvDevice,sys_data_get_cur_chan_mode() == PROG_TV_MODE,FALSE); vdec_set_output(pDecvDevice,PREVIEW_MODE, &tInitInfo, &MPCallBack,&PIPCallBack); vdec_start(pDecvDevice); } #endif #elif(VDEC27_PREVIEW_SOLUTION == VDEC27_PREVIEW_DE_SCALE) //If is DE Scale Operation, then adjust VPO Full Srceen to Preview Screen directly if(0 == l_hde_preview_method) vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview); //If is VE Scale Operation, first set Video Decoder Output Mode(PIP_MODE), //then adjust VPO Full Srceen to Preview Screen else if(1 == l_hde_preview_method) { if(l_hde_mode == VIEW_MODE_PREVIEW) { vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview); } else { //Set Video Decoder Output Mode (IND_PIP_MODE) tInitInfo.src_rect.uStartX = l_hde_rectSrcFull_adjusted.uStartX>>1; tInitInfo.src_rect.uStartY= l_hde_rectSrcFull_adjusted.uStartY>>1; tInitInfo.src_rect.uWidth = PICTURE_WIDTH - 2*tInitInfo.src_rect.uStartX; tInitInfo.src_rect.uHeight = PICTURE_HEIGHT - 2*tInitInfo.src_rect.uStartY; tInitInfo.dst_rect.uStartX = l_hde_rectScrnPreview.uStartX; tInitInfo.dst_rect.uStartY= l_hde_rectScrnPreview.uStartY; tInitInfo.dst_rect.uWidth = l_hde_rectScrnPreview.uWidth; tInitInfo.dst_rect.uHeight = l_hde_rectScrnPreview.uHeight; tInitInfo.pipSize.uWidth=l_hde_rectScrnPreview.uWidth; tInitInfo.pipSize.uHeight=l_hde_rectScrnPreview.uHeight/5; vdec_set_output(pDecvDevice,IND_PIP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack); //After Video Decoder Output Mode switch to PIP_MODE, then adjust VPO vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); if(VDEC27_STOPPED == vdec_info.uCurStatus) { vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview); } else { waittime = 0; while((vdec_info.output_mode != PIP_MODE)&&(waittime<VE_MODE_SWITCH_TIME_29E)) { nim_get_lock(nim, &ulock); if(!ulock) break; osal_task_sleep(20); waittime += 20; vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); } if(vdec_info.output_mode != PIP_MODE) { vdec_stop(pDecvDevice,TRUE,FALSE); vdec_set_output(pDecvDevice,IND_PIP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack); vdec_start(pDecvDevice); vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview); } else { vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview); } } vpo_ioctl(pDisDevice, VPO_IO_ADJUST_LM_IN_PREVIEW, 1); } } #endif } l_hde_uIsPreviewResize = 0; LEAVE_CCHDE_API(); break; case VIEW_MODE_MULTI: break; case VIEW_MODE_FULL: default: if (l_hde_mode != mode) { ENTER_CCHDE_API(); #if( VDEC27_PREVIEW_SOLUTION == VDEC27_PREVIEW_VE_SCALE) #ifdef HDTV_SUPPORT // convert VE to MP mode vpo_ioctl(pDisDevice, VPO_IO_GET_INFO, (UINT32) &dis_info); #ifdef DUAL_VIDEO_OUTPUT vpo_ioctl(pDisDevice_O, VPO_IO_GET_INFO, (UINT32) &dis_info); #endif need_to_set_output = FALSE; if(is_cur_decoder_avc()) { vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); if(vdec_info.pic_width > 720 || vdec_info.pic_height > 576) { need_to_wait = TRUE; } else if(vdec_info.pic_width == 0 || vdec_info.pic_height == 0) { need_to_set_output = TRUE; } else need_to_wait = FALSE; } else { need_to_wait = TRUE; vdec_stop(pDecvDevice,TRUE,TRUE); } if(need_to_wait || need_to_set_output) { tInitInfo.adv_setting.init_mode = 0; tInitInfo.adv_setting.out_sys = dis_info.tvsys; tInitInfo.adv_setting.bprogressive = dis_info.bprogressive; #ifdef DUAL_VIDEO_OUTPUT if(is_cur_decoder_avc()) #else if(0) #endif { vdec_set_output(pDecvDevice,DUAL_MODE, &tInitInfo, &MPCallBack, &PIPCallBack); } else { vdec_set_output(pDecvDevice,DUAL_MODE, &tInitInfo, &MPCallBack, &PIPCallBack); } } if(!is_cur_decoder_avc()) { vdec_start(pDecvDevice); } vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull); #ifdef DUAL_VIDEO_OUTPUT vpo_zoom(pDisDevice_O, &l_hde_rectSrcFull, &l_hde_rectScrnFull); #endif osal_task_sleep(50); if(is_cur_decoder_avc() && need_to_wait) { struct dmx_device *dmx = (struct dmx_device *)dev_get_by_id(HLD_DEV_TYPE_DMX, 0); wait_total_time = VE_MODE_SWITCH_TIME; while(waittime<wait_total_time) { nim_get_lock(nim, &ulock); if(!ulock) break; if(RET_SUCCESS == dmx_io_control(dmx, IS_AV_SCRAMBLED, 0)) break; vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); if(vdec_info.uFirstPicShowed) { wait_total_time = H264_VE_MODE_SWITCH_TIME; } if(vdec_info.output_mode == MP_MODE) { break; } osal_task_sleep(1); waittime++; } } #else //Set Video Decoder Output Mode (MP_MODE) tInitInfo.buse_sml_buf = FALSE; tInitInfo.src_rect.uStartX = l_hde_rectSrcFull.uStartX; tInitInfo.src_rect.uStartY= l_hde_rectSrcFull.uStartY; tInitInfo.src_rect.uWidth = l_hde_rectSrcFull.uWidth; tInitInfo.src_rect.uHeight = l_hde_rectSrcFull.uHeight; tInitInfo.dst_rect.uStartX = l_hde_rectScrnFull.uStartX; tInitInfo.dst_rect.uStartY= l_hde_rectScrnFull.uStartY; tInitInfo.dst_rect.uWidth = l_hde_rectScrnFull.uWidth; tInitInfo.dst_rect.uHeight = l_hde_rectScrnFull.uHeight; vdec_set_output(pDecvDevice,MP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack); //Wait Video Decoder Output Mode Switch to MP_MODE vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); while(((vdec_info.output_mode != MP_MODE)||(vdec_info.use_sml_buf))&&(waittime<VE_MODE_SWITCH_TIME)) { nim_get_lock(nim, &ulock); if(!ulock) break; osal_task_sleep(1); waittime++; vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); } //Switch Video Decoder Output Mode to MP_MODE Forcely if((vdec_info.output_mode != MP_MODE)||(vdec_info.use_sml_buf)) { PRINTF("switch to mp forcely\n"); vdec_stop(pDecvDevice,TRUE,FALSE); vdec_set_output(pDecvDevice,MP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack); vdec_start(pDecvDevice); } #endif #elif(VDEC27_PREVIEW_SOLUTION == VDEC27_PREVIEW_DE_SCALE) //If is DE Scale Operation, then adjust VPO to Full Srceen directly if(0 == l_hde_preview_method) vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull); //If is VE Scale Operation, first set Video Decoder Output Mode(MP_MODE), //then adjust VPO to Full Srceen else if(1 == l_hde_preview_method) { //Set Video Decoder Output Mode (MP_MODE) tInitInfo.src_rect.uStartX = l_hde_rectSrcFull.uStartX; tInitInfo.src_rect.uStartY= l_hde_rectSrcFull.uStartY; tInitInfo.src_rect.uWidth = l_hde_rectSrcFull.uWidth; tInitInfo.src_rect.uHeight = l_hde_rectSrcFull.uHeight; tInitInfo.dst_rect.uStartX = l_hde_rectScrnFull.uStartX; tInitInfo.dst_rect.uStartY= l_hde_rectScrnFull.uStartY; tInitInfo.dst_rect.uWidth = l_hde_rectScrnFull.uWidth; tInitInfo.dst_rect.uHeight = l_hde_rectScrnFull.uHeight; vdec_set_output(pDecvDevice,MP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack); //After Video Decoder Output Mode switch to MP_MODE, then adjust VPO vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); if(VDEC27_STOPPED == vdec_info.uCurStatus) { vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull); } else { waittime = 0; while((vdec_info.output_mode != MP_MODE)&&(waittime<VE_MODE_SWITCH_TIME_29E)) { nim_get_lock(nim, &ulock); if(!ulock) break; osal_task_sleep(20); waittime += 20; vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info); } if(vdec_info.output_mode != MP_MODE) { vdec_stop(pDecvDevice,TRUE,FALSE); vdec_set_output(pDecvDevice,MP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack); vdec_start(pDecvDevice); vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull); } else { vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull); } } vpo_ioctl(pDisDevice, VPO_IO_ADJUST_LM_IN_PREVIEW, 0); } #endif LEAVE_CCHDE_API(); } }
static void win_satsrch_set_search_param(void) { UINT32 search_mode; UINT32 prog_type; S_NODE s_node; struct as_service_param param; struct vdec_device *vdec; struct vdec_io_get_frm_para vfrm_param; UINT32 addr, len; UINT32 sat_index = 0 ; /*sky.bi 20101228*/ UINT32 default_satidx = 0; UINT32 temp_value = 0; // BOOL find_flag = false; //tv/radio/all if(SATSRCH_CHAN_IDX==1) prog_type = P_SEARCH_TV; else if(SATSRCH_CHAN_IDX==2) prog_type = P_SEARCH_RADIO; else// if(SATSRCH_CHAN_IDX==0) prog_type = P_SEARCH_TV|P_SEARCH_RADIO; /* FTA Only */ if (SATSRCH_FTA_IDX == 1) search_mode = P_SEARCH_FTA; else// if (sSATSRCH_FTA_IDX == 1) search_mode = P_SEARCH_FTA|P_SEARCH_SCRAMBLED; param.as_from = AS_FREQ_MIN; param.as_to = AS_FREQ_MAX; param.as_prog_attr = prog_type|search_mode; #ifndef NEW_DEMO_FRAME if(single_multi_srch_flag == 0) { get_tuner_sat(TUNER_EITHER,SATSRCH_SAT_IDX,&s_node); param.as_sat_id = s_node.sat_id; if (s_node.lnb_type == LNB_CTRL_22K) { param.as_from = 950; param.as_to = 2150; } } else { param.as_sat_ids = sat_ids; } #else param.as_frontend_type = FRONTEND_TYPE_S; if(single_multi_srch_flag == 0) { get_tuner_sat(TUNER_EITHER,SATSRCH_SAT_IDX, &s_node); param.sat_ids[0] = s_node.sat_id; param.as_sat_cnt = 1; } else { param.as_sat_cnt = get_tuner_sat_cnt(TUNER_EITHER_SELECT); /*设置选中的卫星为第一颗卫星 20101228 sky.bi */ default_satidx = sys_data_get_cur_satidx(); for (sat_index = 0; sat_index < param.as_sat_cnt;++sat_index) { if (default_satidx > param.as_sat_cnt) { break; } if (sat_ids[default_satidx] == sat_ids[sat_index] ) { temp_value = sat_ids[0]; sat_ids[0] = sat_ids[default_satidx]; sat_ids[default_satidx] = temp_value; break; } } MEMCPY(param.sat_ids, sat_ids, param.as_sat_cnt * sizeof(UINT16)); } #endif if(SATSRCH_MODE_IDX == 0) { if(single_multi_srch_flag == 0) param.as_method = AS_METHOD_FFT; else param.as_method = AS_METHOD_MULTI_FFT; } else { if(single_multi_srch_flag == 0) param.as_method = (SATSRCH_NIT_IDX==0)? AS_METHOD_SAT_TP : AS_METHOD_NIT; else param.as_method = (SATSRCH_NIT_IDX==0)? AS_METHOD_MULTI_TP : AS_METHOD_MULTI_NIT; } param.as_p_add_cfg = PROG_ADD_REPLACE_OLD; /*sky.bi 20101225*/ param.as_handler = NULL; // set param win_search_set_param(¶m); //update_data(); #if 0 vdec = (struct vdec_device *)dev_get_by_id(HLD_DEV_TYPE_DECV, 0); vfrm_param.ufrm_mode = VDEC_UN_DISPLAY; vdec_io_control(vdec, VDEC_IO_GET_FRM, (UINT32)&vfrm_param); addr = vfrm_param.tFrmInfo.uC_Addr; len = (vfrm_param.tFrmInfo.uHeight*vfrm_param.tFrmInfo.uWidth*3)/2; #else addr = __MM_AUTOSCAN_DB_BUFFER_ADDR; addr &= 0x8fffffff; len = __MM_AUTOSCAN_DB_BUFFER_LEN; #endif db_search_init((UINT8 *)addr, len); }