From 927ebf2f0fc45d51ec162c26fab17b298d3ea6ac Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 28 Jan 2015 14:56:21 +0100 Subject: [PATCH] dvb psi: add another AC-3 detection hack, fixes #2647 --- src/input/mpegts.h | 9 ++++++++- src/input/mpegts/dvb_psi.c | 4 ++-- src/input/mpegts/mpegts_mux.c | 20 ++++++++++++++++---- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 61ab829f..a085c6e6 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -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 diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index 4b554fdc..6e22e70f 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -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: */ diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index d2f9cc72..f2aaa4cf 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -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, }, {} }