[mythtv-commits] Ticket #13382: User Defined DVB SDT descriptors seen as ATSC

MythTV noreply at mythtv.org
Wed Jan 23 11:18:01 UTC 2019


#13382: User Defined DVB SDT descriptors seen as ATSC
-------------------------------------------------+-------------------------
 Reporter:  Klaas de Waal                        |          Owner:  Stuart
                                                 |  Auchterlonie
     Type:  Patch - Bug Fix                      |         Status:
                                                 |  accepted
 Priority:  minor                                |      Milestone:  30.1
Component:  MythTV - Channel Scanner             |        Version:  Master
                                                 |  Head
 Severity:  medium                               |     Resolution:
 Keywords:  DVB ATSC SDT channelscan descriptor  |  Ticket locked:  0
-------------------------------------------------+-------------------------
Changes (by Stuart Auchterlonie):

 * owner:  (none) => Stuart Auchterlonie
 * status:  new => accepted
 * milestone:  needs_triage => 30.1


Old description:

> A DVB-C channel scan with "mythtv-setup -v general,channel,chanscan"
> gives wrong output for some of the SDT descriptors. Especially descriptor
> 0xA3, which is shown by my "DVBInspector" analysis tool as "User
> Defined", is shown here as "Component Name". The descriptor decoding then
> fails completely as shown by the output fragment below for one of the TV
> channels (see last line, scroll to the end...):
>
> {{{
> 2019-01-22 12:11:58.223338 I  ChannelScanSM(/dev/dvb/adapter3/frontend0):
> Got a Service Description Table (other)
> 2019-01-22 12:11:58.228999 I  SDT: TSID(0x81c) original_network_id(0x600)
> services(5)
> 2019-01-22 12:11:58.229005 I  Section (0) Last Section (0) IsCurrent (1)
> 2019-01-22 12:11:58.229012 I    Service # 0 SID(0x4cf5) eit_schd(t)
> eit_pf(t) encrypted(t)
> 2019-01-22 12:11:58.229015 I    Service descriptors length: 137
> 2019-01-22 12:11:58.229018 I      ServiceDescriptor: 24Kitchen HD  (TV)
> 2019-01-22 12:11:58.229029 I      Private Data Specifier Descriptor
> (0x5f) length(4). Dumping
> 2019-01-22 12:11:58.229032 I        000  00 00 00 16
> |....|
> 2019-01-22 12:11:58.229041 I      Unknown(212) Descriptor (0xd4)
> length(4). Dumping
> 2019-01-22 12:11:58.229045 I        000  00 06 00 01
> |....|
> 2019-01-22 12:11:58.229054 I      Private Data Specifier Descriptor
> (0x5f) length(4). Dumping
> 2019-01-22 12:11:58.229062 I        000  00 00 00 40
> |...@|
> 2019-01-22 12:11:58.229066 I      Private Data Specifier Descriptor
> (0x5f) length(4). Dumping
> 2019-01-22 12:11:58.229076 I        000  00 00 06 02
> |....|
> 2019-01-22 12:11:58.229079 I      Unknown(215) Descriptor (0xd7)
> length(19). Dumping
> 2019-01-22 12:11:58.229088 I        000  01 01 10 32 34 6b 69 74  63 68
> 65 6e 5f 76 33 2e  |...24kitchen_v3.|
> 2019-01-22 12:11:58.229091 I        010  70 6e 67
> |png|
> 2019-01-22 12:11:58.229101 I      Unknown(215) Descriptor (0xd7)
> length(19). Dumping
> 2019-01-22 12:11:58.229104 I        000  02 02 10 32 34 6b 69 74  63 68
> 65 6e 5f 76 33 2e  |...24kitchen_v3.|
> 2019-01-22 12:11:58.229119 I        010  70 6e 67
> |png|
> 2019-01-22 12:11:58.229123 I      Private Data Specifier Descriptor
> (0x5f) length(4). Dumping
> 2019-01-22 12:11:58.229132 I        000  00 00 06 03
> |....|
> 2019-01-22 12:11:58.229135 I      ATSC PID Count Descriptor (0xa5)
> length(10). Dumping
> 2019-01-22 12:11:58.229145 I        000  08 00 00 02 78 00 00 00  00 00
> |....x.....|
> 2019-01-22 12:11:58.229163 I      Component Name Descriptor
> MultipleStringStructure    count(2) String #0 lang(x:7869192) String #1
> lang(p:137328)  segment count(133)  Segment #0  ct(5) str(MSS unknown
> text compression 5)  Segment #1  ct(110) str(MSS unknown text compression
> 110)  Segment #2  ct(6) str(MSS unknown text compression 6)  Segment #3
> ct(84) str(MSS unknown text compression 84)  Segment #4  ct(0) str()
> Segment #5  ct(0) str()  Segment #6  ct(0) str()  Segment #7  ct(0) str()
> Segment #8  ct(0) str()  Segment #9  ct(0) str()  Segment #10  ct(0)
> str()  Segment #11  ct(0) str()  Segment #12  ct(0) str()  Segment #13
> ct(0) str()  Segment #14  ct(0) str()  Segment #15  ct(0) str()  Segment
> #16  ct(0) str()  Segment #17  ct(0) str()  Segment #18  ct(0) str()
> Segment #19  ct(0) str()  Segment #20  ct(0) str()  Segment #21  ct(0)
> str()  Segment #22  ct(0) str()  Segment #23  ct(0) str()  Segment #24
> ct(0) str()  Segment #25  ct(0) str()  Segment #26  ct(0) str()  Segment
> #27  ct(0) str()  Segment #28  ct(0) str()  Segment #29  ct(0) str()
> Segment #30  ct(0) str()  Segment #31  ct(0) str()  Segment #32  ct(0)
> str()  Segment #33  ct(0) str()  Segment #34  ct(0) str()  Segment #35
> ct(0) str()  Segment #36  ct(0) str()  Segment #37  ct(0) str()  Segment
> #38  ct(0) str()  Segment #39  ct(0) str()  Segment #40  ct(0) str()
> Segment #41  ct(0) str()  Segment #42  ct(0) str()  Segment #43  ct(0)
> str()  Segment #44  ct(0) str()  Segment #45  ct(0) str()  Segment #46
> ct(0) str()  Segment #47  ct(0) str()  Segment #48  ct(0) str()  Segment
> #49  ct(0) str()  Segment #50  ct(0) str()  Segment #51  ct(0) str()
> Segment #52  ct(0) str()  Segment #53  ct(0) str()  Segment #54  ct(0)
> str()  Segment #55  ct(0) str()  Segment #56  ct(0) str()  Segment #57
> ct(0) str()  Segment #58  ct(0) str()  Segment #59  ct(0) str()  Segment
> #60  ct(0) str()  Segment #61  ct(0) str()  Segment #62  ct(0) str()
> Segment #63  ct(0) str()  Segme
>
> }}}
> The last two descriptors, "ATSC PID Count" (0xA5) and  "Component Name"
> (0xA3), are presented as if they are ATSC descriptors. This is especially
> painful for the last one, "Component Name" (0xA3); the decoding clearly
> goes completely out of control.\\
>
> The root cause is that mpegdescriptors.cpp contains only one list of
> descriptors that is used both for DVB and ATSC. Values below 0x80 are DVB
> (and MPEG) and values of 0x80 and above are ATSC (and SCTE).\\
> However, DVB allows values from 0x80 to 0xFE as "user defined", as found
> in "Final draft ETSI EN 300 468 v1.13.1 (2012-04)", Table 12: "Possible
> location of descriptors", page 33.\\
> The use of values above 0x80 in DVB is not a problem as long as the
> values are not used in ATSC; this is for instance the case with the
> descriptors 0x83 (logical channel numbers) and 0x88 (HD-simulcast logical
> channel numbers).\\
> However, in my DVB-C signal there are also descriptors that conflict with
> the ATSC numbers, such as 0xA3 and 0xA5.\\
>
> The mythtv code is written such that there is only one
> "MPEGDescriptor::toString" function that does the toString for all
> descriptors, both DVB and ATSC. This function is called from
> dvbtables.cpp and from atsctables.cpp.\\
>
> The attached patch modifies dvbtables.cpp so that
> MPEGDescriptor::toString is only called for descriptors below 0x80; the
> other values are now printed as "User Defined" and the content is only
> printed as a hex dump. For this also mpegdescriptors.h is changed to
> allow calling hexdump() from anywhere.\\
> This is the output for the same TV channel, now with the fix:
>
> {{{
> 2019-01-22 14:29:03.238315 I  ChannelScanSM(/dev/dvb/adapter3/frontend0):
> Got a Service Description Table (other)
> 2019-01-22 14:29:03.239928 I  SDT: TSID(0x81c) original_network_id(0x600)
> services(5)
> 2019-01-22 14:29:03.239934 I  Section (0) Last Section (0) IsCurrent (1)
> 2019-01-22 14:29:03.239937 I    Service # 0 SID(0x4cf5) eit_schd(t)
> eit_pf(t) encrypted(t)
> 2019-01-22 14:29:03.239941 I    Service descriptors length: 137
> 2019-01-22 14:29:03.239944 I      ServiceDescriptor: 24Kitchen HD  (TV)
> 2019-01-22 14:29:03.239948 I      Private Data Specifier Descriptor
> (0x5f) length(4). Dumping
> 2019-01-22 14:29:03.239951 I        000  00 00 00 16
> |....|
> 2019-01-22 14:29:03.239954 I      User Defined Descriptor (0xd4)
> length(4). Dumping
> 2019-01-22 14:29:03.239958 I        000  00 06 00 01
> |....|
> 2019-01-22 14:29:03.239961 I      Private Data Specifier Descriptor
> (0x5f) length(4). Dumping
> 2019-01-22 14:29:03.239964 I        000  00 00 00 40
> |...@|
> 2019-01-22 14:29:03.239968 I      Private Data Specifier Descriptor
> (0x5f) length(4). Dumping
> 2019-01-22 14:29:03.239972 I        000  00 00 06 02
> |....|
> 2019-01-22 14:29:03.239976 I      User Defined Descriptor (0xd7)
> length(19). Dumping
> 2019-01-22 14:29:03.239979 I        000  01 01 10 32 34 6b 69 74  63 68
> 65 6e 5f 76 33 2e  |...24kitchen_v3.|
> 2019-01-22 14:29:03.239983 I        010  70 6e 67
> |png|
> 2019-01-22 14:29:03.239987 I      User Defined Descriptor (0xd7)
> length(19). Dumping
> 2019-01-22 14:29:03.239990 I        000  02 02 10 32 34 6b 69 74  63 68
> 65 6e 5f 76 33 2e  |...24kitchen_v3.|
> 2019-01-22 14:29:03.239994 I        010  70 6e 67
> |png|
> 2019-01-22 14:29:03.239998 I      Private Data Specifier Descriptor
> (0x5f) length(4). Dumping
> 2019-01-22 14:29:03.240001 I        000  00 00 06 03
> |....|
> 2019-01-22 14:29:03.240006 I      User Defined Descriptor (0xa5)
> length(10). Dumping
> 2019-01-22 14:29:03.240009 I        000  08 00 00 02 78 00 00 00  00 00
> |....x.....|
> 2019-01-22 14:29:03.240013 I      User Defined Descriptor (0xa3)
> length(29). Dumping
> 2019-01-22 14:29:03.240016 I        000  02 78 13 08 00 02 18 50  85 05
> f5 e1 00 05 f5 e1  |.x.....P........|
> 2019-01-22 14:29:03.240020 I        010  0a 07 5b cd 15 11 e1 a3  00 2e
> 5b f2 71           |..[.......[.q|
>
> }}}
>
> Note: it is far more elegant to make separate DVBDescriptor::toString and
> ATSCDescriptor::toString functions, share the MPEG descriptors that are
> used by both but with separate tables for ATSC and DVB-specific
> descriptors. This can be done but please consider that this would then
> also touch the ATSC code and thus require testing with ATSC signals.
> The patch as given only modifies the DVB path and has been tested with
> the DVB-C signal.

New description:

 A DVB-C channel scan with "mythtv-setup -v general,channel,chanscan" gives
 wrong output for some of the SDT descriptors. Especially descriptor 0xA3,
 which is shown by my "DVBInspector" analysis tool as "User Defined", is
 shown here as "Component Name". The descriptor decoding then fails
 completely as shown by the output fragment below for one of the TV
 channels (see last line, scroll to the end...):

 {{{
 2019-01-22 12:11:58.223338 I  ChannelScanSM(/dev/dvb/adapter3/frontend0):
 Got a Service Description Table (other)
 2019-01-22 12:11:58.228999 I  SDT: TSID(0x81c) original_network_id(0x600)
 services(5)
 2019-01-22 12:11:58.229005 I  Section (0) Last Section (0) IsCurrent (1)
 2019-01-22 12:11:58.229012 I    Service # 0 SID(0x4cf5) eit_schd(t)
 eit_pf(t) encrypted(t)
 2019-01-22 12:11:58.229015 I    Service descriptors length: 137
 2019-01-22 12:11:58.229018 I      ServiceDescriptor: 24Kitchen HD  (TV)
 2019-01-22 12:11:58.229029 I      Private Data Specifier Descriptor (0x5f)
 length(4). Dumping
 2019-01-22 12:11:58.229032 I        000  00 00 00 16
 |....|
 2019-01-22 12:11:58.229041 I      Unknown(212) Descriptor (0xd4)
 length(4). Dumping
 2019-01-22 12:11:58.229045 I        000  00 06 00 01
 |....|
 2019-01-22 12:11:58.229054 I      Private Data Specifier Descriptor (0x5f)
 length(4). Dumping
 2019-01-22 12:11:58.229062 I        000  00 00 00 40
 |...@|
 2019-01-22 12:11:58.229066 I      Private Data Specifier Descriptor (0x5f)
 length(4). Dumping
 2019-01-22 12:11:58.229076 I        000  00 00 06 02
 |....|
 2019-01-22 12:11:58.229079 I      Unknown(215) Descriptor (0xd7)
 length(19). Dumping
 2019-01-22 12:11:58.229088 I        000  01 01 10 32 34 6b 69 74  63 68 65
 6e 5f 76 33 2e  |...24kitchen_v3.|
 2019-01-22 12:11:58.229091 I        010  70 6e 67
 |png|
 2019-01-22 12:11:58.229101 I      Unknown(215) Descriptor (0xd7)
 length(19). Dumping
 2019-01-22 12:11:58.229104 I        000  02 02 10 32 34 6b 69 74  63 68 65
 6e 5f 76 33 2e  |...24kitchen_v3.|
 2019-01-22 12:11:58.229119 I        010  70 6e 67
 |png|
 2019-01-22 12:11:58.229123 I      Private Data Specifier Descriptor (0x5f)
 length(4). Dumping
 2019-01-22 12:11:58.229132 I        000  00 00 06 03
 |....|
 2019-01-22 12:11:58.229135 I      ATSC PID Count Descriptor (0xa5)
 length(10). Dumping
 2019-01-22 12:11:58.229145 I        000  08 00 00 02 78 00 00 00  00 00
 |....x.....|
 2019-01-22 12:11:58.229163 I      Component Name Descriptor
 MultipleStringStructure    count(2) String #0 lang(x:7869192) String #1
 lang(p:137328)  segment count(133)  Segment #0  ct(5) str(MSS unknown text
 compression 5)  Segment #1  ct(110) str(MSS unknown text compression 110)
 Segment #2  ct(6) str(MSS unknown text compression 6)  Segment #3  ct(84)
 str(MSS unknown text compression 84)  Segment #4  ct(0) str()  Segment #5
 ct(0) str()  Segment #6  ct(0) str()  Segment #7  ct(0) str()  Segment #8
 ct(0) str()  Segment #9  ct(0) str()  Segment #10  ct(0) str()  Segment
 #11  ct(0) str()  Segment #12  ct(0) str()  Segment #13  ct(0) str()
 Segment #14  ct(0) str()  Segment #15  ct(0) str()  Segment #16  ct(0)
 str()  Segment #17  ct(0) str()  Segment #18  ct(0) str()  Segment #19
 ct(0) str()  Segment #20  ct(0) str()  Segment #21  ct(0) str()  Segment
 #22  ct(0) str()  Segment #23  ct(0) str()  Segment #24  ct(0) str()
 Segment #25  ct(0) str()  Segment #26  ct(0) str()  Segment #27  ct(0)
 str()  Segment #28  ct(0) str()  Segment #29  ct(0) str()  Segment #30
 ct(0) str()  Segment #31  ct(0) str()  Segment #32  ct(0) str()  Segment
 #33  ct(0) str()  Segment #34  ct(0) str()  Segment #35  ct(0) str()
 Segment #36  ct(0) str()  Segment #37  ct(0) str()  Segment #38  ct(0)
 str()  Segment #39  ct(0) str()  Segment #40  ct(0) str()  Segment #41
 ct(0) str()  Segment #42  ct(0) str()  Segment #43  ct(0) str()  Segment
 #44  ct(0) str()  Segment #45  ct(0) str()  Segment #46  ct(0) str()
 Segment #47  ct(0) str()  Segment #48  ct(0) str()  Segment #49  ct(0)
 str()  Segment #50  ct(0) str()  Segment #51  ct(0) str()  Segment #52
 ct(0) str()  Segment #53  ct(0) str()  Segment #54  ct(0) str()  Segment
 #55  ct(0) str()  Segment #56  ct(0) str()  Segment #57  ct(0) str()
 Segment #58  ct(0) str()  Segment #59  ct(0) str()  Segment #60  ct(0)
 str()  Segment #61  ct(0) str()  Segment #62  ct(0) str()  Segment #63
 ct(0) str()  Segme

 }}}
 The last two descriptors, "ATSC PID Count" (0xA5) and  "Component Name"
 (0xA3), are presented as if they are ATSC descriptors. This is especially
 painful for the last one, "Component Name" (0xA3); the decoding clearly
 goes completely out of control.\\

 The root cause is that mpegdescriptors.cpp contains only one list of
 descriptors that is used both for DVB and ATSC. Values below 0x80 are DVB
 (and MPEG) and values of 0x80 and above are ATSC (and SCTE).\\
 However, DVB allows values from 0x80 to 0xFE as "user defined", as found
 in "Final draft ETSI EN 300 468 v1.13.1 (2012-04)", Table 12: "Possible
 location of descriptors", page 33.\\
 The use of values above 0x80 in DVB is not a problem as long as the values
 are not used in ATSC; this is for instance the case with the descriptors
 0x83 (logical channel numbers) and 0x88 (HD-simulcast logical channel
 numbers).\\
 However, in my DVB-C signal there are also descriptors that conflict with
 the ATSC numbers, such as 0xA3 and 0xA5.\\

 The mythtv code is written such that there is only one
 "MPEGDescriptor::toString" function that does the toString for all
 descriptors, both DVB and ATSC. This function is called from dvbtables.cpp
 and from atsctables.cpp.\\

 The attached patch modifies dvbtables.cpp so that MPEGDescriptor::toString
 is only called for descriptors below 0x80; the other values are now
 printed as "User Defined" and the content is only printed as a hex dump.
 For this also mpegdescriptors.h is changed to allow calling hexdump() from
 anywhere.\\
 This is the output for the same TV channel, now with the fix:

 {{{
 2019-01-22 14:29:03.238315 I  ChannelScanSM(/dev/dvb/adapter3/frontend0):
 Got a Service Description Table (other)
 2019-01-22 14:29:03.239928 I  SDT: TSID(0x81c) original_network_id(0x600)
 services(5)
 2019-01-22 14:29:03.239934 I  Section (0) Last Section (0) IsCurrent (1)
 2019-01-22 14:29:03.239937 I    Service # 0 SID(0x4cf5) eit_schd(t)
 eit_pf(t) encrypted(t)
 2019-01-22 14:29:03.239941 I    Service descriptors length: 137
 2019-01-22 14:29:03.239944 I      ServiceDescriptor: 24Kitchen HD  (TV)
 2019-01-22 14:29:03.239948 I      Private Data Specifier Descriptor (0x5f)
 length(4). Dumping
 2019-01-22 14:29:03.239951 I        000  00 00 00 16
 |....|
 2019-01-22 14:29:03.239954 I      User Defined Descriptor (0xd4)
 length(4). Dumping
 2019-01-22 14:29:03.239958 I        000  00 06 00 01
 |....|
 2019-01-22 14:29:03.239961 I      Private Data Specifier Descriptor (0x5f)
 length(4). Dumping
 2019-01-22 14:29:03.239964 I        000  00 00 00 40
 |...@|
 2019-01-22 14:29:03.239968 I      Private Data Specifier Descriptor (0x5f)
 length(4). Dumping
 2019-01-22 14:29:03.239972 I        000  00 00 06 02
 |....|
 2019-01-22 14:29:03.239976 I      User Defined Descriptor (0xd7)
 length(19). Dumping
 2019-01-22 14:29:03.239979 I        000  01 01 10 32 34 6b 69 74  63 68 65
 6e 5f 76 33 2e  |...24kitchen_v3.|
 2019-01-22 14:29:03.239983 I        010  70 6e 67
 |png|
 2019-01-22 14:29:03.239987 I      User Defined Descriptor (0xd7)
 length(19). Dumping
 2019-01-22 14:29:03.239990 I        000  02 02 10 32 34 6b 69 74  63 68 65
 6e 5f 76 33 2e  |...24kitchen_v3.|
 2019-01-22 14:29:03.239994 I        010  70 6e 67
 |png|
 2019-01-22 14:29:03.239998 I      Private Data Specifier Descriptor (0x5f)
 length(4). Dumping
 2019-01-22 14:29:03.240001 I        000  00 00 06 03
 |....|
 2019-01-22 14:29:03.240006 I      User Defined Descriptor (0xa5)
 length(10). Dumping
 2019-01-22 14:29:03.240009 I        000  08 00 00 02 78 00 00 00  00 00
 |....x.....|
 2019-01-22 14:29:03.240013 I      User Defined Descriptor (0xa3)
 length(29). Dumping
 2019-01-22 14:29:03.240016 I        000  02 78 13 08 00 02 18 50  85 05 f5
 e1 00 05 f5 e1  |.x.....P........|
 2019-01-22 14:29:03.240020 I        010  0a 07 5b cd 15 11 e1 a3  00 2e 5b
 f2 71           |..[.......[.q|

 }}}

 Note: it is far more elegant to make separate DVBDescriptor::toString and
 ATSCDescriptor::toString functions, share the MPEG descriptors that are
 used by both but with separate tables for ATSC and DVB-specific
 descriptors. This can be done but please consider that this would then
 also touch the ATSC code and thus require testing with ATSC signals.
 The patch as given only modifies the DVB path and has been tested with the
 DVB-C signal.

--

-- 
Ticket URL: <https://code.mythtv.org/trac/ticket/13382#comment:1>
MythTV <http://www.mythtv.org>
MythTV Media Center


More information about the mythtv-commits mailing list