Пример #1
0
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(&param, 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(&param);

	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);

}
Пример #2
0
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(&param);

	//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);

}
Пример #3
0
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;
}
Пример #4
0
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
			}
		}
	}
Пример #5
0
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;
}
Пример #6
0
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;        
    	}
       
}
Пример #7
0
/* 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();
        }
    }
Пример #8
0
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(&param);

	//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);

}