]> git.sesse.net Git - vlc/blobdiff - modules/access/dtv/access.c
dvdnav: also white-list *.img files (fixes #4951)
[vlc] / modules / access / dtv / access.c
index 20c7d559288bb271ef86e2ec6db341f7d8290ecd..90c3d9eb29476a349cf9f75386b03f3f0c4857d4 100644 (file)
     "If there is more than one digital broadcasting adapter, " \
     "the adapter number must be selected. Numbering start from zero.")
 
-#define DEVICE_TEXT N_("DVB device")
-#define DEVICE_LONGTEXT N_( \
-    "If the selected adapter has more than one tuner, " \
-    "the tuner number must be selected. Numbering start from zero.")
-
 #define BUDGET_TEXT N_("Do not demultiplex")
 #define BUDGET_LONGTEXT N_( \
     "Only useful programs are normally demultiplexed from the transponder. " \
@@ -108,26 +103,26 @@ static const char *const code_rate_user[] = { N_("Automatic"),
 
 #define TRANSMISSION_TEXT N_("Transmission mode")
 const int transmission_vlc[] = { -1,
-    2, 4, 8, /*16, 32,*/
+    1, 2, 4, 8, 16, 32,
 };
 static const char *const transmission_user[] = { N_("Automatic"),
-    "2k", "4k", "8k", /*"16k", "32k", */
+    "1k", "2k", "4k", "8k", "16k", "32k",
 };
 
 #define BANDWIDTH_TEXT N_("Bandwidth (MHz)")
 const int bandwidth_vlc[] = { 0,
-    8, 7, 6,
+    8, 7, 6, 5,
 };
 static const char *const bandwidth_user[] = { N_("Automatic"),
-    N_("8 MHz"), N_("7 MHz"), N_("6 MHz"),
+    N_("8 MHz"), N_("7 MHz"), N_("6 MHz"), N_("5 MHz"),
 };
 
 #define GUARD_TEXT N_("Guard interval")
 const char *const guard_vlc[] = { "",
-    /*"1/128",*/ "1/32", "1/16", /*"19/128",*/ "1/8", /*"9/256",*/ "1/4",
+    "1/128", "1/32", "1/16", "19/256", "1/8", "19/128", "1/4",
 };
 static const char *const guard_user[] = { N_("Automatic"),
-    /*"1/128",*/ "1/32", "1/16", /*"19/128",*/ "1/8", /*"9/256",*/ "1/4",
+    "1/128", "1/32", "1/16", "19/256", "1/8", "19/128", "1/4",
 };
 
 #define HIERARCHY_TEXT N_("Hierarchy mode")
@@ -222,9 +217,9 @@ vlc_module_begin ()
     set_callbacks (Open, Close)
     add_shortcut ("dtv", "tv", "dvb", /* "radio", "dab",*/
                   "cable", "dvb-c", "satellite", "dvb-s", "dvb-s2",
-                  "terrestrial", "dvb-t", "atsc", "cqam")
+                  "terrestrial", "dvb-t", "dvb-t2", "atsc", "cqam")
 
-    /* All options starting with dvb- can be overriden in the MRL, so they
+    /* All options starting with dvb- can be overridden in the MRL, so they
      * must all be "safe". Nevertheless, we do not mark as safe those that are
      * really specific to the local system (e.g. device ID...).
      * It wouldn't make sense to deliver those through a playlist. */
@@ -236,8 +231,7 @@ vlc_module_begin ()
 #ifdef __linux__
     add_integer ("dvb-adapter", 0, ADAPTER_TEXT, ADAPTER_LONGTEXT, false)
         change_integer_range (0, 255)
-    add_integer ("dvb-device", 0, DEVICE_TEXT, DEVICE_LONGTEXT, false)
-        change_integer_range (0, 255)
+    add_obsolete_integer ("dvb-device")
     add_bool ("dvb-budget-mode", false, BUDGET_TEXT, BUDGET_LONGTEXT, true)
 #endif
 #ifdef WIN32
@@ -320,7 +314,7 @@ vlc_module_begin ()
                  LNB_SWITCH_TEXT, LNB_SWITCH_LONGTEXT, true)
         change_integer_range (0, 0x7fffffff)
         add_deprecated_alias ("dvb-lnb-slof")
-#ifdef __linux
+#ifdef __linux__
     add_integer ("dvb-satno", 0, SATNO_TEXT, SATNO_LONGTEXT, true)
         change_integer_list (satno_vlc, satno_user)
     add_integer ("dvb-tone", -1, TONE_TEXT, TONE_LONGTEXT, true)
@@ -367,9 +361,8 @@ static int Open (vlc_object_t *obj)
         return VLC_ENOMEM;
 
     var_LocationParse (obj, access->psz_location, "dvb-");
-    unsigned freq = var_InheritFrequency (obj);
 
-    dvb_device_t *dev = dvb_open (obj, freq != 0);
+    dvb_device_t *dev = dvb_open (obj);
     if (dev == NULL)
     {
         free (sys);
@@ -379,6 +372,7 @@ static int Open (vlc_object_t *obj)
     sys->dev = dev;
     access->p_sys = sys;
 
+    unsigned freq = var_InheritFrequency (obj);
     if (freq != 0)
     {
         const delsys_t *delsys = GuessSystem (access->psz_access, dev);
@@ -503,8 +497,14 @@ static int Control (access_t *access, int query, va_list args)
         }
 
         case ACCESS_SET_PRIVATE_ID_CA:
-            /* TODO */
-            return VLC_EGENERIC;
+#ifdef HAVE_DVBPSI
+        {
+            struct dvbpsi_pmt_s *pmt = va_arg (args, struct dvbpsi_pmt_s *);
+
+            dvb_set_ca_pmt (dev, pmt);
+            return VLC_SUCCESS;
+        }
+#endif
 
         case ACCESS_GET_PRIVATE_ID_STATE:
             return VLC_EGENERIC;
@@ -551,6 +551,8 @@ static const delsys_t *GuessSystem (const char *scheme, dvb_device_t *dev)
         return &dvbs2;
     if (!strcasecmp (scheme, "dvb-t"))
         return &dvbt;
+    if (!strcasecmp (scheme, "dvb-t2"))
+        return &dvbt2;
 
     return dvb_guess_system (dev);
 }
@@ -788,4 +790,16 @@ static int dvbt_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq)
     return dvb_set_dvbt (dev, freq, mod, fec_hp, fec_lp, bw, tx, guard, h);
 }
 
+static int dvbt2_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq)
+{
+    const char *mod = var_InheritModulation (obj);
+    uint32_t fec = var_InheritCodeRate (obj, "dvb-fec");
+    uint32_t guard = var_InheritGuardInterval (obj);
+    uint32_t bw = var_InheritInteger (obj, "dvb-bandwidth");
+    int tx = var_InheritInteger (obj, "dvb-transmission");
+
+    return dvb_set_dvbt2 (dev, freq, mod, fec, bw, tx, guard);
+}
+
 const delsys_t dvbt = { .setup = dvbt_setup };
+const delsys_t dvbt2 = { .setup = dvbt2_setup };