]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb psi: add another AC-3 detection hack, fixes #2647
authorJaroslav Kysela <perex@perex.cz>
Wed, 28 Jan 2015 13:56:21 +0000 (14:56 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 28 Jan 2015 13:56:24 +0000 (14:56 +0100)
src/input/mpegts.h
src/input/mpegts/dvb_psi.c
src/input/mpegts/mpegts_mux.c

index 61ab829f41659728296e719d65e4bcac62e45e76..a085c6e67826369504d9bc8dc14357ab3c1233ac 100644 (file)
@@ -331,6 +331,13 @@ enum mpegts_mux_epg_flag
 };
 #define MM_EPG_LAST MM_EPG_ONLY_OPENTV_SKY_AUSAT
 
+enum mpegts_mux_ac3_flag
+{
+  MM_AC3_STANDARD,
+  MM_AC3_PMT_06,
+  MM_AC3_PMT_N05,
+};
+
 typedef struct tsdebug_packet {
   TAILQ_ENTRY(tsdebug_packet) link;
   uint8_t pkt[188];
@@ -428,7 +435,7 @@ struct mpegts_mux
   int   mm_enabled;
   int   mm_epg;
   char *mm_charset;
-  int   mm_pmt_06_ac3;
+  int   mm_pmt_ac3;
 
   /*
    * TSDEBUG
index 4b554fdced5d3d5259ab75ba726c9ac875048977..6e22e70f5ee280f29b09e43f3ca6360cdf51c166 100644 (file)
@@ -2294,7 +2294,7 @@ psi_parse_pmt
     case 0x06:
       /* 0x06 is Chinese Cable TV AC-3 audio track */
       /* but mark it so only when no more descriptors exist */
-      if (dllen > 1 || !mux || !mux->mm_pmt_06_ac3)
+      if (dllen > 1 || !mux || mux->mm_pmt_ac3 != MM_AC3_PMT_06)
         break;
       /* fall through to SCT_AC3 */
     case 0x81:
@@ -2336,7 +2336,7 @@ psi_parse_pmt
         break;
 
       case DVB_DESC_REGISTRATION:
-        if(dlen == 4 && 
+        if(mux->mm_pmt_ac3 != MM_AC3_PMT_N05 && dlen == 4 &&
            ptr[0] == 'A' && ptr[1] == 'C' && ptr[2] == '-' &&  ptr[3] == '3')
           hts_stream_type = SCT_AC3;
         /* seen also these formats: */
index d2f9cc72d7f8dcca62288223b898463bfb49f195..f2aaa4cf0e6aa88e58ff49b0a203bdad4fb770b6 100644 (file)
@@ -447,6 +447,17 @@ mpegts_mux_epg_list ( void *o )
   return strtab2htsmsg(tab);
 }
 
+static htsmsg_t *
+mpegts_mux_ac3_list ( void *o )
+{
+  static const struct strtab tab[] = {
+    { "Standard",                 MM_AC3_STANDARD },
+    { "AC-3 = descriptor 6",      MM_AC3_PMT_06 },
+    { "Ignore descriptor 5",      MM_AC3_PMT_N05 },
+  };
+  return strtab2htsmsg(tab);
+}
+
 const idclass_t mpegts_mux_class =
 {
   .ic_class      = "mpegts_mux",
@@ -548,11 +559,12 @@ const idclass_t mpegts_mux_class =
       .get      = mpegts_mux_class_get_num_chn,
     },
     {
-      .type     = PT_BOOL,
+      .type     = PT_INT,
       .id       = "pmt_06_ac3",
-      .name     = "PMT Descriptor 0x06 = AC-3",
-      .off      = offsetof(mpegts_mux_t, mm_pmt_06_ac3),
-      .opts     = PO_ADVANCED,
+      .name     = "AC-3 Detection",
+      .off      = offsetof(mpegts_mux_t, mm_pmt_ac3),
+      .def.i    = MM_EPG_ENABLE,
+      .list     = mpegts_mux_ac3_list,
     },
     {}
   }