Patch for the scan utility from dvb-apps

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello

I wrote a patch for the scan utility

This patchs allows scan to write his output in the format asked by
mumudvb : http://mumudvb.braice.net/

The patch is joined to this mail, it is against the version 1.1.1 of
dvb-apps.

Is this patch ok for you ?

By the way I have an issue : the French DVB-T network doesn't give the
good frequencies in the SI-Tables. Is there a way to get the frequency
from the card ?

Regards



--
Brice

A: Yes.
>Q: Are you sure?
>>A: Because it reverses the logical flow of conversation.
>>>Q: Why is top posting annoying in email?

diff -uNr linuxtv-dvb-apps-1.1.1/util/scan/dump-mumudvb.c linuxtv-dvb-apps-scan-mumu/util/scan/dump-mumudvb.c
--- linuxtv-dvb-apps-1.1.1/util/scan/dump-mumudvb.c	1970-01-01 01:00:00.000000000 +0100
+++ linuxtv-dvb-apps-scan-mumu/util/scan/dump-mumudvb.c	2008-05-04 13:24:28.464941015 +0200
@@ -0,0 +1,206 @@
+#include <stdio.h>
+#include "dump-mumudvb.h"
+#include <linux/dvb/frontend.h>
+
+
+static const char *inv_name [] = {
+	"0",
+	"1",
+	"999"
+};
+
+static const char *fec_name [] = {
+	"0",
+	"12",
+	"23",
+	"34",
+	"45",
+	"56",
+	"67",
+	"78",
+	"89",
+	"999"
+};
+
+static const char *qam_name [] = {
+	"0",
+	"16",
+	"32",
+	"64",
+	"128",
+	"256",
+	"999"
+};
+
+
+static const char *bw_name [] = {
+	"8",
+	"7",
+	"6",
+	"999"
+};
+
+
+static const char *mode_name [] = {
+	"2",
+	"8",
+	"999"
+};
+
+static const char *guard_name [] = {
+	"32",
+	"16",
+	"8",
+	"4",
+	"999"
+};
+
+
+static const char *hierarchy_name [] = {
+	"0",
+	"1",
+	"2",
+	"4",
+	"999"
+};
+
+static const char *west_east_flag_name [] = {
+	"W",
+	"E"
+};
+
+void mumudvb_dump_dvb_parameters (FILE *f, fe_type_t type,
+		struct dvb_frontend_parameters *p,
+		char polarity, int orbital_pos, int we_flag)
+{
+
+	switch (type) {
+	case FE_QPSK:
+		fprintf (f, "#QPSK Modulation : DVB-S. Satellite : S%i.%i%s\n", orbital_pos/10,
+			 orbital_pos % 10, west_east_flag_name[we_flag]);
+		fprintf (f, "freq=%i\n", p->frequency / 1000);
+		fprintf (f, "pol=%c\n", polarity);
+		fprintf (f, "srate=%i\n", p->u.qpsk.symbol_rate / 1000);
+		break;
+
+	case FE_QAM:
+	  fprintf (f, "#QAM Modulation : Probably DVB-C ---------- Not Tested ----------- \n");
+		fprintf (f, "%i:", p->frequency / 1000000);
+		fprintf (f, "M%s:C:", qam_name[p->u.qam.modulation]);
+		fprintf (f, "%i:", p->u.qam.symbol_rate / 1000);
+		break;
+
+	case FE_OFDM:
+	  fprintf (f, "#OFDM Modulation : DVB-T\n");
+	  fprintf (f, "#QAM : %s ", qam_name[p->u.ofdm.constellation]);
+	  fprintf (f, "Inversion : %s ", inv_name[p->inversion]);
+	  fprintf (f, "Coderate HP : %s ", fec_name[p->u.ofdm.code_rate_HP]);
+	  fprintf (f, "Coderate LP : %s ", fec_name[p->u.ofdm.code_rate_LP]);
+	  fprintf (f, "Guard interval : %s ", guard_name[p->u.ofdm.guard_interval]);
+	  fprintf (f, "Transmission mode : %s ", mode_name[p->u.ofdm.transmission_mode]);
+	  fprintf (f, "Hierarchy : %s ", hierarchy_name[p->u.ofdm.hierarchy_information]);
+	  fprintf (f, "\n");
+	  if(p->frequency>=0xfffffff)
+	    fprintf (f, "#==========WARNING=============\n#The network provider probably returned the wrong frequency\n#You have to set manually the freq= option\n\n");
+	  else
+	    fprintf (f, "freq=%i\n", p->frequency );
+	  fprintf (f, "bandwith=%sMhz\n", bw_name[p->u.ofdm.bandwidth]);
+	  fprintf (f, "qam=auto\n");
+	  fprintf (f, "trans_mode=auto\n");
+	  fprintf (f, "guardinterval=auto\n");
+	  fprintf (f, "coderate=auto\n");
+		//		fprintf (f, ":T:27500:");
+		break;
+
+	case FE_ATSC:
+		fprintf (f, "%i:", p->frequency / 1000);
+		fprintf (f, "VDR does not support ATSC at this time");
+		break;
+
+	default:
+		fprintf (f, "Modulation : %d\n", type);
+		;
+	};
+
+}
+
+void mumudvb_dump_service_parameter_set (FILE *f,
+				 const char *service_name,
+				 const char *provider_name,
+				 fe_type_t type,
+				 struct dvb_frontend_parameters *p,
+				 char polarity,
+				 int video_pid,
+				 int pcr_pid,
+				 uint16_t *audio_pid,
+				 char audio_lang[][4],
+                                 int audio_num,
+				 int teletext_pid,
+				 int scrambled,
+				 int ac3_pid,
+                                 int service_id,
+				 int network_id,
+				 int transport_stream_id,
+				 int orbital_pos,
+				 int we_flag,
+				 int ca_select,
+				 int channel_num,
+				 int channel_num_mumudvb,
+				 int pmt_pid,
+				 int subtitling_pid)
+{
+        int i;
+
+	if (channel_num_mumudvb == 0)
+	  {
+	    fprintf (f, "#This is an automatically generated config file for mumudvb\n#Check if the ip adresses are good for you\n#You might also have to ad the card=n parameter with n the number of your DVB adapter\n\n");
+	    mumudvb_dump_dvb_parameters (f, type, p, polarity, orbital_pos, we_flag);
+	  }
+	if ((video_pid || audio_pid[0]) && ((ca_select > 0) || ((ca_select == 0) && (scrambled == 0)))) {
+	  fprintf (f, "\n#Channel : \"%s\" Provider : \"%s\" Number : %d\n", service_name, provider_name, channel_num);
+	  fprintf (f, "ip=239.200.200.2%02i\n",channel_num_mumudvb);
+	  fprintf (f, "port=1234\n");
+	  fprintf (f, "name=");
+	  if (audio_lang && audio_lang[0][0])
+		fprintf (f, "%.4s ", audio_lang[0]);
+	  fprintf (f, "%s\n", service_name);
+
+	  fprintf (f, "#Pids are the following : PMT ");
+	  if ((pcr_pid != video_pid) && (video_pid > 0)) fprintf (f, "Video PCR ");
+	  else if (video_pid > 0) fprintf (f, "Video ");
+	  for (i = 0; i < audio_num; i++)
+	    {
+	      if(audio_pid[i]) fprintf (f, "Audio ");
+	    }
+	  if (ac3_pid) fprintf (f, "AC3 ");
+	  if (teletext_pid) fprintf (f, "Text ");
+	  if (subtitling_pid) fprintf (f, "SUB ");
+	  fprintf (f, "\n");
+	  fprintf (f, "pids=");
+	  fprintf (f, "%i ", pmt_pid);
+	  if ((pcr_pid != video_pid) && (video_pid > 0))
+	    fprintf (f, "%i %i", video_pid, pcr_pid);
+	  else if (video_pid > 0)
+	    fprintf (f, "%i", video_pid);
+	  if(audio_pid[0])
+	    fprintf (f, " %i", audio_pid[0]);
+	  for (i = 1; i < audio_num; i++)
+	    {
+	      if(audio_pid[i])
+		fprintf (f, " %i", audio_pid[i]);
+	    }
+	  if (ac3_pid)
+	    {
+	      fprintf (f, " %i", ac3_pid);
+	    }
+	  if (scrambled == 1) scrambled = ca_select;
+	  if (teletext_pid)
+	    fprintf (f, " %d", teletext_pid);
+	  if (subtitling_pid)
+	    fprintf (f, " %d", subtitling_pid);
+	  //	    fprintf (f, ":%d:%d:%d:%d:%d:0", teletext_pid, scrambled,
+	  //		   service_id, network_id, transport_stream_id);
+	  fprintf (f, "\n");
+	}
+}
+
diff -uNr linuxtv-dvb-apps-1.1.1/util/scan/dump-mumudvb.h linuxtv-dvb-apps-scan-mumu/util/scan/dump-mumudvb.h
--- linuxtv-dvb-apps-1.1.1/util/scan/dump-mumudvb.h	1970-01-01 01:00:00.000000000 +0100
+++ linuxtv-dvb-apps-scan-mumu/util/scan/dump-mumudvb.h	2008-05-04 13:24:03.839096762 +0200
@@ -0,0 +1,39 @@
+#ifndef __DUMP_MUMUDVB_H__
+#define __DUMP_MUMUDVB_H__
+
+#include <stdint.h>
+#include <linux/dvb/frontend.h>
+
+extern
+void mumudvb_dump_dvb_parameters (FILE *f, fe_type_t type,
+		struct dvb_frontend_parameters *p,
+		char polarity, int orbital_pos, int we_flag);
+
+extern
+void mumudvb_dump_service_parameter_set (FILE *f,
+				 const char *service_name,
+				 const char *provider_name,
+				 fe_type_t type,
+				 struct dvb_frontend_parameters *p,
+				 char polarity,
+				 int video_pid,
+				 int pcr_pid,
+				 uint16_t *audio_pid,
+				 char audio_lang[][4],
+                                 int audio_num,
+				 int teletext_pid,
+				 int scrambled,
+				 int ac3_pid,
+                                 int service_id,
+				 int network_id,
+				 int transport_stream_id,
+				 int orbital_pos,
+				 int we_flag,
+				 int ca_select,
+				 int channel_num,
+			         int channel_num_mumudvb,
+				 int pmt_pid,
+				 int subtitling_pid);
+
+#endif
+
diff -uNr linuxtv-dvb-apps-1.1.1/util/scan/Makefile linuxtv-dvb-apps-scan-mumu/util/scan/Makefile
--- linuxtv-dvb-apps-1.1.1/util/scan/Makefile	2006-05-18 01:34:53.000000000 +0200
+++ linuxtv-dvb-apps-scan-mumu/util/scan/Makefile	2008-05-04 13:30:28.291877015 +0200
@@ -3,7 +3,7 @@
 CFLAGS = -MD -g -Wall -O2 -I../../include
 LFLAGS = -g -Wall
 
-OBJS = diseqc.o dump-zap.o dump-vdr.o scan.o lnb.o section.o atsc_psip_section.o
+OBJS = diseqc.o dump-mumudvb.o dump-zap.o dump-vdr.o scan.o lnb.o section.o atsc_psip_section.o
 SRCS = $(OBJS:.o=.c)
 
 TARGET = scan
diff -uNr linuxtv-dvb-apps-1.1.1/util/scan/scan.c linuxtv-dvb-apps-scan-mumu/util/scan/scan.c
--- linuxtv-dvb-apps-1.1.1/util/scan/scan.c	2006-05-18 01:33:25.000000000 +0200
+++ linuxtv-dvb-apps-scan-mumu/util/scan/scan.c	2008-05-04 13:25:41.183405766 +0200
@@ -41,6 +41,7 @@
 #include "diseqc.h"
 #include "dump-zap.h"
 #include "dump-vdr.h"
+#include "dump-mumudvb.h"
 #include "scan.h"
 #include "lnb.h"
 
@@ -79,7 +80,8 @@
 enum format {
         OUTPUT_ZAP,
         OUTPUT_VDR,
-	OUTPUT_PIDS
+	OUTPUT_PIDS,
+	OUTPUT_MUMUDVB
 };
 static enum format output_format = OUTPUT_ZAP;
 static int output_format_set = 0;
@@ -528,6 +530,7 @@
 		t->other_f[i] = f * 10;
 		buf += 4;
 	}
+
 }
 
 static void parse_service_descriptor (const unsigned char *buf, struct service *s)
@@ -1923,6 +1926,7 @@
 	int n = 0, i;
 	char sn[20];
         int anon_services = 0;
+        int channel_num_mumudvb = 0;
 
 	list_for_each(p1, &scanned_transponders) {
 		t = list_entry(p1, struct transponder, list);
@@ -1938,6 +1942,7 @@
 		t = list_entry(p1, struct transponder, list);
 		if (t->wrong_frequency)
 			continue;
+		channel_num_mumudvb = 0;
 		list_for_each(p2, &t->services) {
 			s = list_entry(p2, struct service, list);
 
@@ -2001,6 +2006,34 @@
 						    vdr_dump_channum,
 						    s->channel_num);
 				break;
+			  case OUTPUT_MUMUDVB:
+				mumudvb_dump_service_parameter_set (stdout,
+						    s->service_name,
+						    s->provider_name,
+						    t->type,
+						    &t->param,
+						    sat_polarisation(t),
+						    s->video_pid,
+						    s->pcr_pid,
+						    s->audio_pid,
+						    s->audio_lang,
+						    s->audio_num,
+						    s->teletext_pid,
+						    s->scrambled,
+						    //FIXME: s->subtitling_pid
+						    s->ac3_pid,
+						    s->service_id,
+						    t->network_id,
+						    s->transport_stream_id,
+						    t->orbital_pos,
+						    t->we_flag,
+						    ca_select,
+						    s->channel_num,
+						    channel_num_mumudvb,
+						    s->pmt_pid,
+						    s->subtitling_pid);
+				channel_num_mumudvb++;
+				break;
 			  case OUTPUT_ZAP:
 				zap_dump_service_parameter_set (stdout,
 						    s->service_name,
@@ -2013,7 +2046,7 @@
 						    s->service_id);
 			  default:
 				break;
-			  }
+			}
 		}
 	}
 	info("Done.\n");
@@ -2065,7 +2098,7 @@
 	"	-n	evaluate NIT-other for full network scan (slow!)\n"
 	"	-5	multiply all filter timeouts by factor 5\n"
 	"		for non-DVB-compliant section repitition rates\n"
-	"	-o fmt	output format: 'zap' (default), 'vdr' or 'pids' (default with -c)\n"
+	"	-o fmt	output format: 'zap' (default), 'vdr', 'mumudvb' or 'pids' (default with -c)\n"
 	"	-x N	Conditional Axcess, (default 1)\n"
 	"		N=0 gets only FTA channels\n"
 	"		N=xxx sets ca field in vdr output to :xxx:\n"
@@ -2158,6 +2191,7 @@
                         if      (strcmp(optarg, "zap") == 0) output_format = OUTPUT_ZAP;
                         else if (strcmp(optarg, "vdr") == 0) output_format = OUTPUT_VDR;
                         else if (strcmp(optarg, "pids") == 0) output_format = OUTPUT_PIDS;
+                        else if (strcmp(optarg, "mumudvb") == 0) output_format = OUTPUT_MUMUDVB;
                         else {
 				bad_usage(argv[0], 0);
 				return -1;
@@ -2280,6 +2314,7 @@
 	switch (output_format) {
 		case OUTPUT_PIDS:
 		case OUTPUT_VDR:
+		case OUTPUT_MUMUDVB:
 			vdr_dump_dvb_parameters(f, t->type, &t->param,
 					sat_polarisation (t), t->orbital_pos, t->we_flag);
 			break;

_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux