diff -Naur main/libmenu/menu_dvbin.c main2/libmenu/menu_dvbin.c --- main/libmenu/menu_dvbin.c 2003-08-16 11:50:45.000000000 +0200 +++ main2/libmenu/menu_dvbin.c 2003-10-25 22:50:16.000000000 +0200 @@ -112,6 +112,8 @@ elem->p.txt = name; elem->num = n; + if(n == 0) + elem->p.prev = NULL; menu_list_add_entry(menu, elem); } diff -Naur main/libmpdemux/dvbin.c main2/libmpdemux/dvbin.c --- main/libmpdemux/dvbin.c 2003-08-27 19:08:58.000000000 +0200 +++ main2/libmpdemux/dvbin.c 2003-10-25 22:50:37.000000000 +0200 @@ -127,7 +127,7 @@ int fields, row_count; dvb_channel_t *ptr; char *tmp_lcr, *tmp_hier, *inv, *bw, *cr, *mod, *transm, *gi; - const char *cbl_conf = "%a[^:]:%d:%c:%d:%a[^:]:%a[^:]:%d:%d\n"; + const char *cbl_conf = "%a[^:]:%d:%a[^:]:%d:%a[^:]:%a[^:]:%d:%d\n"; const char *sat_conf = "%a[^:]:%d:%c:%d:%d:%d:%d:%d:%d:%d\n"; const char *ter_conf = "%a[^:]:%d:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%d:%d\n"; @@ -296,10 +296,8 @@ mp_msg(MSGT_DEMUX, MSGL_V, "dvb_streaming_read(%d)\n", size); - if(priv->retry) - tries = 5; - else - tries = 1; + tries = priv->retry + 1; + while(pos < size) { pfds[0].fd = fd; @@ -375,10 +373,10 @@ dvb_demux_stop(priv->demux_fd[0]); dvb_demux_stop(priv->demux_fd[1]); priv->retry = 0; - while(stream_read(stream, buf, 4096)); //empty both the stream's and driver's buffer + while(dvb_streaming_read(stream, buf, 4096) > 0); //empty both the stream's and driver's buffer } - priv->retry = 1; + priv->retry = 5; mp_msg(MSGT_DEMUX, MSGL_V, "DVB_SET_CHANNEL: channel %d\n", n); list = priv->list; if(list == NULL) @@ -424,7 +422,7 @@ } else { - mp_msg(MSGT_DEMUX, MSGL_V, "SAME TUNING, NO TUNING\n"); + mp_msg(MSGT_DEMUX, MSGL_V, "SAME TUNING PARAMETERS, NO TUNING\n"); do_tuning = 0; } @@ -638,7 +636,7 @@ struct stream_priv_s* p = (struct stream_priv_s*)opts; char *name = NULL, *filename; dvb_priv_t *priv; - int tuner_type; + int tuner_type = 0; @@ -684,6 +682,13 @@ } } + if(tuner_type == 0) + { + mp_msg(MSGT_DEMUX, MSGL_V, "OPEN_DVB: UNKNOWN OR UNDETECTABLE TUNER TYPE, EXIT\n"); + return STREAM_ERROR; + } + + priv->tuner_type = tuner_type; mp_msg(MSGT_DEMUX, MSGL_V, "OPEN_DVB: prog=%s, card=%d, type=%d, vid=%d, aid=%d, file=%s\n", @@ -696,14 +701,11 @@ { if((dvb_list_ptr = dvb_get_channels(filename, tuner_type)) == NULL) mp_msg(MSGT_DEMUX, MSGL_ERR, "EMPTY CHANNELS LIST FROM FILE %s!\n", filename); - else - { - priv->list = dvb_list_ptr; - } + priv->list = dvb_list_ptr; } else { - dvb_list_ptr = NULL; + priv->list = dvb_list_ptr = NULL; mp_msg(MSGT_DEMUX, MSGL_WARN, "NO CHANNELS FILE FOUND!\n"); } } @@ -711,6 +713,12 @@ priv->list = dvb_list_ptr; + if(priv->list == NULL) + { + mp_msg(MSGT_DEMUX, MSGL_ERR, "NO CHANNELS AVAILABLE, EXIT!\n"); + return STREAM_ERROR; + } + if(! strcmp(p->prog, "")) { if(dvb_list_ptr != NULL) diff -Naur main/libmpdemux/dvb_tune.c main2/libmpdemux/dvb_tune.c --- main/libmpdemux/dvb_tune.c 2003-08-14 03:05:49.000000000 +0200 +++ main2/libmpdemux/dvb_tune.c 2003-10-25 22:50:45.000000000 +0200 @@ -65,7 +65,7 @@ fe_fd = open(dvb_frontenddev[priv->card], O_RDWR); if(fe_fd < 0) { - mp_msg(MSGT_DEMUX, MSGL_ERR, "get_tuner_type(%d, %s), ERROR IN OPENING FRONTEND DEVICE %s: %d\n", priv->card, dvb_frontenddev[priv->card], errno); + mp_msg(MSGT_DEMUX, MSGL_ERR, "get_tuner_type(card %d), ERROR IN OPENING FRONTEND DEVICE %s: ERRNO %d\n", priv->card, dvb_frontenddev[priv->card], errno); return 0; } @@ -104,7 +104,7 @@ priv->fe_fd = open(dvb_frontenddev[priv->card], O_RDWR); if(priv->fe_fd < 0) { - mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR IN OPENING FRONTEND DEVICE %s: %d\n", dvb_frontenddev[priv->card], errno); + mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR IN OPENING FRONTEND DEVICE %s: ERRNO %d\n", dvb_frontenddev[priv->card], errno); return 0; } #ifdef HAVE_DVB_HEAD @@ -113,7 +113,7 @@ priv->sec_fd = open(dvb_secdev[priv->card], O_RDWR); if(priv->sec_fd < 0) { - mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR IN OPENING SEC DEVICE %s: %d\n", dvb_secdev[priv->card], errno); + mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR IN OPENING SEC DEVICE %s: ERRNO %d\n", dvb_secdev[priv->card], errno); close(priv->fe_fd); return 0; } @@ -209,7 +209,7 @@ if(freq > 100000000) { - tune_it(priv->fe_fd, 0, freq, 0, 0, tone, specInv, diseqc, modulation, HP_CodeRate, TransmissionMode, guardInterval, bandWidth); + tune_it(priv->fe_fd, 0, freq, srate, 0, tone, specInv, diseqc, modulation, HP_CodeRate, TransmissionMode, guardInterval, bandWidth); } else if(freq != 0) { diff -Naur main/mplayer.c main2/mplayer.c --- main/mplayer.c 2003-10-24 00:44:25.000000000 +0200 +++ main2/mplayer.c 2003-10-25 22:50:16.000000000 +0200 @@ -1372,6 +1372,7 @@ #endif // CACHE2: initial prefill: 20% later: 5% (should be set by -cacheopts) +goto_enable_cache: if(stream_cache_size>0){ current_module="enable_cache"; if(!stream_enable_cache(stream,stream_cache_size*1024,stream_cache_size*1024/5,stream_cache_size*1024/20)) @@ -1379,9 +1380,6 @@ } //============ Open DEMUXERS --- DETECT file type ======================= -#ifdef HAS_DVBIN_SUPPORT -goto_open_demuxer: -#endif current_module="demux_open"; demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id,filename); @@ -1568,7 +1566,8 @@ if(dvb_step_channel(priv, dir)) { uninit_player(INITED_ALL-(INITED_STREAM|INITED_INPUT)); - goto goto_open_demuxer; + cache_uninit(stream); + goto goto_enable_cache; } } } @@ -2933,8 +2932,8 @@ if(dvb_step_channel(priv, dir)) { uninit_player(INITED_ALL-(INITED_STREAM|INITED_INPUT)); - printf("UNINIT COMPLETE\n"); - goto goto_open_demuxer; + cache_uninit(stream); + goto goto_enable_cache; } } } @@ -2967,7 +2966,8 @@ if(dvb_set_channel(priv, cmd->args[0].v.i)) { uninit_player(INITED_ALL-(INITED_STREAM|INITED_INPUT)); - goto goto_open_demuxer; + cache_uninit(stream); + goto goto_enable_cache; } } }