static void tv_scan(tvi_handle_t *tvh) { unsigned int now; struct CHANLIST cl; tv_channels_t *tv_channel_tmp=NULL; tv_channels_t *tv_channel_add=NULL; tv_scan_t* scan; int found=0, index=1; //Channel scanner without tuner is useless and causes crash due to uninitialized chanlist_s if (tvh->functions->control(tvh->priv, TVI_CONTROL_IS_TUNER, 0) != TVI_CONTROL_TRUE) { mp_msg(MSGT_TV, MSGL_WARN, MSGTR_TV_ScannerNotAvailableWithoutTuner); tvh->tv_param->scan=0; return; } scan = tvh->scan; now=GetTimer(); if (!scan) { scan=calloc(1,sizeof(tv_scan_t)); tvh->scan=scan; cl = tvh->chanlist_s[scan->channel_num]; tv_set_freq_float(tvh, cl.freq); scan->scan_timer=now+1e6*tvh->tv_param->scan_period; } if(scan->scan_timer>now) return; if (tv_get_signal(tvh)>tvh->tv_param->scan_threshold) { cl = tvh->chanlist_s[scan->channel_num]; tv_channel_tmp=tv_channel_list; while (tv_channel_tmp) { index++; if (cl.freq==tv_channel_tmp->freq) { found=1; break; } tv_channel_add=tv_channel_tmp; tv_channel_tmp=tv_channel_tmp->next; } if (!found) { mp_msg(MSGT_TV, MSGL_INFO, "Found new channel: %s (#%d). \n",cl.name,index); scan->new_channels++; tv_channel_tmp = malloc(sizeof(tv_channels_t)); tv_channel_tmp->index=index; tv_channel_tmp->next=NULL; tv_channel_tmp->prev=tv_channel_add; tv_channel_tmp->freq=cl.freq; snprintf(tv_channel_tmp->name,sizeof(tv_channel_tmp->name),"ch%d",index); strncpy(tv_channel_tmp->number, cl.name, 5); tv_channel_tmp->number[4]='\0'; if (!tv_channel_list) tv_channel_list=tv_channel_tmp; else { tv_channel_add->next=tv_channel_tmp; tv_channel_list->prev=tv_channel_tmp; } } else mp_msg(MSGT_TV, MSGL_INFO, "Found existing channel: %s-%s.\n", tv_channel_tmp->number,tv_channel_tmp->name); } scan->channel_num++; scan->scan_timer=now+1e6*tvh->tv_param->scan_period; if (scan->channel_num>=chanlists[tvh->chanlist].count) { tvh->tv_param->scan=0; mp_msg(MSGT_TV, MSGL_INFO, "TV scan end. Found %d new channels.\n", scan->new_channels); tv_channel_tmp=tv_channel_list; if(tv_channel_tmp) { mp_msg(MSGT_TV,MSGL_INFO,"channels="); while(tv_channel_tmp) { mp_msg(MSGT_TV,MSGL_INFO,"%s-%s",tv_channel_tmp->number,tv_channel_tmp->name); if(tv_channel_tmp->next) mp_msg(MSGT_TV,MSGL_INFO,","); tv_channel_tmp=tv_channel_tmp->next; } mp_msg(MSGT_TV, MSGL_INFO, "\n"); } if (!tv_channel_current) tv_channel_current=tv_channel_list; if (tv_channel_current) tv_set_freq_float(tvh, tv_channel_current->freq); free(tvh->scan); tvh->scan=NULL; } else { cl = tvh->chanlist_s[scan->channel_num]; tv_set_freq_float(tvh, cl.freq); mp_msg(MSGT_TV, MSGL_INFO, "Trying: %s (%.2f). \n",cl.name,1e-3*cl.freq); } }
static void tv_scan(tvi_handle_t *tvh) { unsigned int now; struct CHANLIST cl; tv_channels_t *tv_channel_tmp=NULL; tv_channels_t *tv_channel_add=NULL; tv_scan_t* scan; int found=0, index=1; scan = tvh->scan; now=GetTimer(); if (!scan) { scan=calloc(1,sizeof(tv_scan_t)); tvh->scan=scan; cl = tvh->chanlist_s[scan->channel_num]; tv_set_freq(tvh, (unsigned long)(((float)cl.freq/1000)*16)); scan->scan_timer=now+1e6*tvh->tv_param->scan_period; } if(scan->scan_timer>now) return; if (tv_get_signal(tvh)>tvh->tv_param->scan_threshold) { cl = tvh->chanlist_s[scan->channel_num]; tv_channel_tmp=tv_channel_list; while (tv_channel_tmp) { index++; if (cl.freq==tv_channel_tmp->freq){ found=1; break; } tv_channel_add=tv_channel_tmp; tv_channel_tmp=tv_channel_tmp->next; } if (!found) { mp_msg(MSGT_TV, MSGL_INFO, "Found new channel: %s (#%d). \n",cl.name,index); scan->new_channels++; tv_channel_tmp = malloc(sizeof(tv_channels_t)); tv_channel_tmp->index=index; tv_channel_tmp->next=NULL; tv_channel_tmp->prev=tv_channel_add; tv_channel_tmp->freq=cl.freq; snprintf(tv_channel_tmp->name,sizeof(tv_channel_tmp->name),"ch%d",index); strncpy(tv_channel_tmp->number, cl.name, 5); tv_channel_tmp->number[4]='\0'; if (!tv_channel_list) tv_channel_list=tv_channel_tmp; else { tv_channel_add->next=tv_channel_tmp; tv_channel_list->prev=tv_channel_tmp; } }else mp_msg(MSGT_TV, MSGL_INFO, "Found existing channel: %s-%s.\n", tv_channel_tmp->number,tv_channel_tmp->name); } scan->channel_num++; scan->scan_timer=now+1e6*tvh->tv_param->scan_period; if (scan->channel_num>=chanlists[tvh->chanlist].count) { tvh->tv_param->scan=0; mp_msg(MSGT_TV, MSGL_INFO, "TV scan end. Found %d new channels.\n", scan->new_channels); tv_channel_tmp=tv_channel_list; if(tv_channel_tmp){ mp_msg(MSGT_TV,MSGL_INFO,"channels="); while(tv_channel_tmp){ mp_msg(MSGT_TV,MSGL_INFO,"%s-%s",tv_channel_tmp->number,tv_channel_tmp->name); if(tv_channel_tmp->next) mp_msg(MSGT_TV,MSGL_INFO,","); tv_channel_tmp=tv_channel_tmp->next; } } if (!tv_channel_current) tv_channel_current=tv_channel_list; if (tv_channel_current) tv_set_freq(tvh, (unsigned long)(((float)tv_channel_current->freq/1000)*16)); free(tvh->scan); tvh->scan=NULL; }else{ cl = tvh->chanlist_s[scan->channel_num]; tv_set_freq(tvh, (unsigned long)(((float)cl.freq/1000)*16)); mp_msg(MSGT_TV, MSGL_INFO, "Trying: %s (%.2f). \n",cl.name,1e-3*cl.freq); } }