sys/dvb/gstdvbsrc.c: Add initial support for multiproto driver (not yet merged into...
authorZaheer Abbas Merali <zaheerabbas@merali.org>
Sat, 23 Feb 2008 11:56:41 +0000 (11:56 +0000)
committerZaheer Abbas Merali <zaheerabbas@merali.org>
Sat, 23 Feb 2008 11:56:41 +0000 (11:56 +0000)
Original commit message from CVS:
* sys/dvb/gstdvbsrc.c:
Add initial support for multiproto driver (not yet merged into
v4l-dvb mainline yet).
Only works for DVB-S not DVB-S2, DVB-T, DVB-C or other.

ChangeLog
common
sys/dvb/gstdvbsrc.c

index e87bc2c..b74393e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-02-23  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * sys/dvb/gstdvbsrc.c:
+       Add initial support for multiproto driver (not yet merged into
+       v4l-dvb mainline yet).
+       Only works for DVB-S not DVB-S2, DVB-T, DVB-C or other.
+
 2008-02-22  Tim-Philipp Müller  <tim at centricular dot net>
 
        * docs/plugins/inspect/plugin-alsaspdif.xml:
diff --git a/common b/common
index 135628f..bd6ec57 160000 (submodule)
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 135628f16d422584d3454fb9c9805e7be25760a1
+Subproject commit bd6ec57040fe3fa93e21ca440dfe494e3ee18555
index 9144d12..671f995 100644 (file)
@@ -36,6 +36,7 @@
 #define _XOPEN_SOURCE 500
 #include <unistd.h>
 
+#include <linux/dvb/version.h>
 #include <linux/dvb/frontend.h>
 #include <linux/dvb/dmx.h>
 
@@ -1175,7 +1176,11 @@ diseqc (int secfd, int sat_no, int voltage, int tone)
 static gboolean
 gst_dvbsrc_tune (GstDvbSrc * object)
 {
+#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+  struct dvbfe_params feparams;
+#else
   struct dvb_frontend_parameters feparams;
+#endif
   fe_sec_voltage_t voltage;
   int i;
   fe_status_t status;
@@ -1202,7 +1207,6 @@ gst_dvbsrc_tune (GstDvbSrc * object)
 
   switch (object->adapter_type) {
     case FE_QPSK:
-
       object->tone = SEC_TONE_OFF;
       if (freq > 2200000) {
         // this must be an absolute frequency
@@ -1216,15 +1220,22 @@ gst_dvbsrc_tune (GstDvbSrc * object)
         // this is an L-Band frequency
         feparams.frequency = freq;
       }
+      feparams.inversion = INVERSION_AUTO;
+      GST_DEBUG_OBJECT (object, "api version %d.%d", DVB_API_VERSION,
+          DVB_API_VERSION_MINOR);
+#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+      GST_DEBUG_OBJECT (object, "using multiproto driver");
+      feparams.delsys.dvbs.symbol_rate = sym_rate;
+      feparams.delsys.dvbs.fec = object->code_rate_hp;
+#else
+      feparams.u.qpsk.symbol_rate = sym_rate;
+      feparams.u.qpsk.fec_inner = object->code_rate_hp;
+#endif
       GST_INFO_OBJECT (object,
           "tuning DVB-S to L-Band:%u, Pol:%d, srate=%u, 22kHz=%s",
           feparams.frequency, object->pol, sym_rate,
           object->tone == SEC_TONE_ON ? "on" : "off");
 
-      feparams.inversion = INVERSION_AUTO;
-      feparams.u.qpsk.symbol_rate = sym_rate;
-      feparams.u.qpsk.fec_inner = object->code_rate_hp;
-
       if (object->pol == DVB_POL_H)
         voltage = SEC_VOLTAGE_18;
       else
@@ -1248,7 +1259,10 @@ gst_dvbsrc_tune (GstDvbSrc * object)
 
       break;
     case FE_OFDM:
+
       feparams.frequency = freq;
+#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+#else
       feparams.u.ofdm.bandwidth = object->bandwidth;
       feparams.u.ofdm.code_rate_HP = object->code_rate_hp;
       feparams.u.ofdm.code_rate_LP = object->code_rate_lp;
@@ -1256,6 +1270,7 @@ gst_dvbsrc_tune (GstDvbSrc * object)
       feparams.u.ofdm.transmission_mode = object->transmission_mode;
       feparams.u.ofdm.guard_interval = object->guard_interval;
       feparams.u.ofdm.hierarchy_information = object->hierarchy_information;
+#endif
       feparams.inversion = object->inversion;
 
       GST_INFO_OBJECT (object, "tuning DVB-T to %d Hz\n", freq);
@@ -1264,9 +1279,9 @@ gst_dvbsrc_tune (GstDvbSrc * object)
       GST_INFO_OBJECT (object, "Tuning DVB-C to %d, srate=%d", freq, sym_rate);
       feparams.frequency = freq;
       feparams.inversion = INVERSION_OFF;
-      feparams.u.qam.fec_inner = FEC_AUTO;
-      feparams.u.qam.modulation = object->modulation;
-      feparams.u.qam.symbol_rate = sym_rate;
+      /*feparams.u.qam.fec_inner = FEC_AUTO;
+         feparams.u.qam.modulation = object->modulation;
+         feparams.u.qam.symbol_rate = sym_rate; */
       break;
     default:
       g_error ("Unknown frontend type: %d", object->adapter_type);
@@ -1274,7 +1289,11 @@ gst_dvbsrc_tune (GstDvbSrc * object)
   }
   usleep (100000);
   /* now tune the frontend */
+#if DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR == 3
+  if (ioctl (object->fd_frontend, DVBFE_SET_PARAMS, &feparams) < 0) {
+#else
   if (ioctl (object->fd_frontend, FE_SET_FRONTEND, &feparams) < 0) {
+#endif
     g_warning ("Error tuning channel: %s", strerror (errno));
   }
   for (i = 0; i < 15; i++) {