Hi, I'd be really very thankful for any contribution on the following issue: 1. My motivation: I do not like: KDE 4, kaffeine, xawtv and vdr for reasons I do not want to discuss here. I prefer to watch DVB-S TV with xine-ui and / or gmplayer. 2. The current state of development: Xine-lib supports multiple audio PIDs demuxing TS streams since version 1.1.5. Mplayer only supports one audio PID (usually the first one that it finds). 3. My intention: Switching audio PIDs of DVB-S streams on the fly with the appropriate GUIs xine-ui and gmplayer. 4. My contribution: A patch for the scan utility (part of the DVB utils) that features all available audio PIDs producing a _non-vdr_ output format. This patch is not only necessary for revealing multiple audio tracks of a DVB TV channel in case you're producing a non-vdr channels.conf. It also keeps up compatibility with mplayer which cannot (yet) handle channel lists in vdr format. --- a/scan.patch +++ b/scan.patch @@ -0,0 +1,88 @@ --- a/util/scan/scan.c +++ b/util/scan/scan.c @@ -1260,7 +1260,7 @@ static LIST_HEAD(running_filters); static LIST_HEAD(waiting_filters); static int n_running; -#define MAX_RUNNING 27 +#define MAX_RUNNING 10 static struct pollfd poll_fds[MAX_RUNNING]; static struct section_buf* poll_section_bufs[MAX_RUNNING]; @@ -2035,6 +2035,8 @@ sat_number(t), s->video_pid, s->audio_pid, + s->audio_lang, + s->audio_num, s->service_id); default: break; --- a/util/scan/dump-zap.c +++ b/util/scan/dump-zap.c @@ -75,7 +75,6 @@ fprintf (f, "%c:", polarity); fprintf (f, "%d:", sat_number); fprintf (f, "%i", p->u.qpsk.symbol_rate / 1000); /* channels.conf wants kBaud */ - /*fprintf (f, "%s", fec_name[p->u.qpsk.fec_inner]);*/ break; case FE_QAM: @@ -114,12 +113,27 @@ struct dvb_frontend_parameters *p, char polarity, int sat_number, - uint16_t video_pid, + int video_pid, uint16_t *audio_pid, - uint16_t service_id) + char audio_lang[][4], + int audio_num, + int service_id) { + int i; + if (video_pid || audio_pid[0]) { fprintf (f, "%s:", service_name); zap_dump_dvb_parameters (f, type, p, polarity, sat_number); + fprintf (f, ":%i:", video_pid); + fprintf (f, "%i", audio_pid[0]); + if (audio_lang && audio_lang[0][0]) + fprintf (f, "=%.4s", audio_lang[0]); + for (i = 1; i < audio_num; i++) + { + fprintf (f, ",%i", audio_pid[i]); + if (audio_lang && audio_lang[i][0]) + fprintf (f, "=%.4s", audio_lang[i]); + } + fprintf (f, ":%d", service_id); - fprintf (f, ":%i:%i:%i", video_pid, audio_pid[0], service_id); fprintf (f, "\n"); } +} --- a/util/scan/dump-zap.h +++ b/util/scan/dump-zap.h @@ -1,19 +1,17 @@ #ifndef __DUMP_ZAP_H__ #define __DUMP_ZAP_H__ - #include <stdint.h> #include <linux/dvb/frontend.h> - extern void zap_dump_dvb_parameters (FILE *f, fe_type_t type, struct dvb_frontend_parameters *t, char polarity, int sat); - extern void zap_dump_service_parameter_set (FILE *f, const char *service_name, fe_type_t type, - struct dvb_frontend_parameters *t, + struct dvb_frontend_parameters *p, char polarity, int sat, - uint16_t video_pid, + int video_pid, uint16_t *audio_pid, - uint16_t service_id); + char audio_lang[][4], + int audio_num, + int service_id); - #endif 5. Your contribution? Who can give me hints about how and where patching xine-ui and gmplayer appropriately so that multiple audio TS PIDS can be changed on the fly? Who can offer appropriate patches? Thanks -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html