Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-mpeg-descriptor.c
blob07bd338ba4c2eeabec5a69bb54ceeda51af06b71
1 /* packet-mpeg-descriptor.c
2 * Routines for MPEG2 (ISO/ISO 13818-1 and co) descriptors
3 * Copyright 2012, Guy Martin <gmsoft@tuxicoman.be>
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * SPDX-License-Identifier: GPL-2.0-or-later
12 #include "config.h"
14 #include <epan/packet.h>
15 #include <epan/dvb_chartbl.h>
16 #include <epan/tfs.h>
17 #include <epan/unit_strings.h>
19 #include <wsutil/array.h>
20 #include "packet-mpeg-sect.h"
21 #include "packet-mpeg-descriptor.h"
23 void proto_register_mpeg_descriptor(void);
25 static int proto_mpeg_descriptor;
26 static int hf_mpeg_descriptor_tag;
27 static int hf_mpeg_descriptor_length;
28 static int hf_mpeg_descriptor_data;
30 static int ett_mpeg_descriptor;
32 static const value_string mpeg_descriptor_tag_vals[] = {
33 /* From ISO/IEC 13818-1 */
34 { 0x00, "Reserved" },
35 { 0x01, "Reserved" },
36 { 0x02, "Video Stream Descriptor" },
37 { 0x03, "Audio Stream Descriptor" },
38 { 0x04, "Hierarchy Descriptor" },
39 { 0x05, "Registration Descriptor" },
40 { 0x06, "Data Stream Alignment Descriptor" },
41 { 0x07, "Target Background Grid Descriptor" },
42 { 0x08, "Video Window Descriptor" },
43 { 0x09, "CA Descriptor" },
44 { 0x0A, "ISO 639 Language Descriptor" },
45 { 0x0B, "System Clock Descriptor" },
46 { 0x0C, "Multiplex Buffer Utilization Descriptor" },
47 { 0x0D, "Copyright Descriptor" },
48 { 0x0E, "Maximum Bitrate Descriptor" },
49 { 0x0F, "Private Data Indicator Descriptor" },
50 { 0x10, "Smoothing Buffer Descriptor" },
51 { 0x11, "STD Descriptor" },
52 { 0x12, "IBP Descriptor" },
54 /* From ETSI TR 101 202 */
55 { 0x13, "Carousel Identifier Descriptor" },
56 { 0x14, "Association Tag Descriptor" },
57 { 0x15, "Deferred Association Tag Descriptor" },
59 /* From ISO/IEC 13818-1 */
60 { 0x1B, "MPEG 4 Video Descriptor" },
61 { 0x1C, "MPEG 4 Audio Descriptor" },
62 { 0x1D, "IOD Descriptor" },
63 { 0x1E, "SL Descriptor" },
64 { 0x1F, "FMC Descriptor" },
65 { 0x20, "External ES ID Descriptor" },
66 { 0x21, "MuxCode Descriptor" },
67 { 0x22, "FmxBufferSize Descriptor" },
68 { 0x23, "MultiplexBuffer Descriptor" },
69 { 0x24, "Content Labeling Descriptor" },
70 { 0x25, "Metadata Pointer Descriptor" },
71 { 0x26, "Metadata Descriptor" },
72 { 0x27, "Metadata STD Descriptor" },
73 { 0x28, "AVC Video Descriptor" },
74 { 0x29, "IPMP Descriptor" },
75 { 0x2A, "AVC Timing and HRD Descriptor" },
76 { 0x2B, "MPEG2 AAC Descriptor" },
77 { 0x2C, "FlexMuxTiming Descriptor" },
79 /* From ETSI EN 300 468 */
80 { 0x40, "Network Name Descriptor" },
81 { 0x41, "Service List Descriptor" },
82 { 0x42, "Stuffing Descriptor" },
83 { 0x43, "Satellite Delivery System Descriptor" },
84 { 0x44, "Cable Delivery System Descriptor" },
85 { 0x45, "VBI Data Descriptor" },
86 { 0x46, "VBI Teletext Descriptor" },
87 { 0x47, "Bouquet Name Descriptor" },
88 { 0x48, "Service Descriptor" },
89 { 0x49, "Country Availability Descriptor" },
90 { 0x4A, "Linkage Descriptor" },
91 { 0x4B, "NVOD Reference Descriptor" },
92 { 0x4C, "Time Shifted Service Descriptor" },
93 { 0x4D, "Short Event Descriptor" },
94 { 0x4E, "Extended Event Descriptor" },
95 { 0x4F, "Time Shifted Event Descriptor" },
96 { 0x50, "Component Descriptor" },
97 { 0x51, "Mosaic Descriptor" },
98 { 0x52, "Stream Identifier Descriptor" },
99 { 0x53, "CA Identifier Descriptor" },
100 { 0x54, "Content Descriptor" },
101 { 0x55, "Parent Rating Descriptor" },
102 { 0x56, "Teletext Descriptor" },
103 { 0x57, "Telephone Descriptor" },
104 { 0x58, "Local Time Offset Descriptor" },
105 { 0x59, "Subtitling Descriptor" },
106 { 0x5A, "Terrestrial Delivery System Descriptor" },
107 { 0x5B, "Multilingual Network Name Descriptor" },
108 { 0x5C, "Multilingual Bouquet Name Descriptor" },
109 { 0x5D, "Multilingual Service Name Descriptor" },
110 { 0x5E, "Multilingual Component Descriptor" },
111 { 0x5F, "Private Data Specifier Descriptor" },
112 { 0x60, "Service Move Descriptor" },
113 { 0x61, "Short Smoothing Buffer Descriptor" },
114 { 0x62, "Frequency List Descriptor" },
115 { 0x63, "Partial Transport Stream Descriptor" },
116 { 0x64, "Data Broadcast Descriptor" },
117 { 0x65, "Scrambling Descriptor" },
118 { 0x66, "Data Broadcast ID Descriptor" },
119 { 0x67, "Transport Stream Descriptor" },
120 { 0x68, "DSNG Descriptor" },
121 { 0x69, "PDC Descriptor" },
122 { 0x6A, "AC-3 Descriptor" },
123 { 0x6B, "Ancillary Data Descriptor" },
124 { 0x6C, "Cell List Descriptor" },
125 { 0x6D, "Cell Frequency Link Descriptor" },
126 { 0x6E, "Announcement Support Descriptor" },
127 { 0x6F, "Application Signalling Descriptor" },
128 { 0x70, "Adaptation Field Data Descriptor" },
129 /* SID (0x71) from ETSI TS 102 812 */
130 { 0x71, "Service Identifier Descriptor" },
131 { 0x72, "Service Availability Descriptor" },
132 /* 0x73...0x76 from ETSI TS 102 323 */
133 { 0x73, "Default Authority Descriptor" },
134 { 0x74, "Related Content Descriptor" },
135 { 0x75, "TVA ID Descriptor" },
136 { 0x76, "Content Identifier Descriptor" },
137 { 0x77, "Time Slice FEC Identifier Descriptor" },
138 { 0x78, "ECM Repetition Rate Descriptor" },
139 { 0x79, "S2 Satellite Delivery System Descriptor" },
140 { 0x7A, "Enhanced AC-3 Descriptor" },
141 { 0x7B, "DTS Descriptor" },
142 { 0x7C, "AAC Descriptor" },
143 /* 0x7D from ETSI TS 102 727 */
144 { 0x7D, "XAIT Content Location Descriptor" },
145 { 0x7E, "FTA Content Management Descriptor" },
146 { 0x7F, "Extension Descriptor" },
148 /* From ATSC A/52 */
149 { 0x81, "ATSC A/52 AC-3 Audio Descriptor" },
151 /* From Nordig Unified Requirements */
152 { 0x83, "NorDig Logical Channel Descriptor v1" },
153 { 0x87, "NorDig Logical Channel Descriptor v2" },
155 /* From ETSI EN 301 790 */
156 { 0xA0, "Network Layer Info Descriptor" },
157 { 0xA1, "Correction Message Descriptor" },
158 { 0xA2, "Logon Initialize Descriptor" },
159 { 0xA3, "ACQ Assign Descriptor" },
160 { 0xA4, "SYNC Assign Descriptor" },
161 { 0xA5, "Encrypted Logon ID Descriptor" },
162 { 0xA6, "Echo Value Descriptor" },
163 { 0xA7, "RCS Content Descriptor" },
164 { 0xA8, "Satellite Forward Link Descriptor" },
165 { 0xA9, "Satellite Return Link Descriptor" },
166 { 0xAA, "Table Update Descriptor" },
167 { 0xAB, "Contention Control Descriptor" },
168 { 0xAC, "Correction Control Descriptor" },
169 { 0xAD, "Forward Interaction Path Descriptor" },
170 { 0xAE, "Return Interaction Path Descriptor" },
171 { 0xAf, "Connection Control Descriptor" },
172 { 0xB0, "Mobility Control Descriptor" },
173 { 0xB1, "Correction Message Extension Descriptor" },
174 { 0xB2, "Return Transmission Modes Descriptor" },
175 { 0xB3, "Mesh Logon Initialize Descriptor" },
176 { 0xB5, "Implementation Type Descriptor" },
177 { 0xB6, "LL FEC Identifier Descriptor" },
179 { 0x00, NULL}
181 static value_string_ext mpeg_descriptor_tag_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descriptor_tag_vals);
183 /* 0x02 Video Stream Descriptor */
184 static int hf_mpeg_descr_video_stream_multiple_frame_rate_flag;
185 static int hf_mpeg_descr_video_stream_frame_rate_code;
186 static int hf_mpeg_descr_video_stream_mpeg1_only_flag;
187 static int hf_mpeg_descr_video_stream_constrained_parameter_flag;
188 static int hf_mpeg_descr_video_stream_still_picture_flag;
189 static int hf_mpeg_descr_video_stream_profile_and_level_indication;
190 static int hf_mpeg_descr_video_stream_chroma_format;
191 static int hf_mpeg_descr_video_stream_frame_rate_extension_flag;
192 static int hf_mpeg_descr_video_stream_reserved;
194 #define MPEG_DESCR_VIDEO_STREAM_MULTIPLE_FRAME_RATE_FLAG_MASK 0x80
195 #define MPEG_DESCR_VIDEO_STREAM_FRAME_RATE_CODE_MASK 0x78
196 #define MPEG_DESCR_VIDEO_STREAM_MPEG1_ONLY_FLAG_MASK 0x04
197 #define MPEG_DESCR_VIDEO_STREAM_CONSTRAINED_PARAMETER_FLAG_MASK 0x02
198 #define MPEG_DESCR_VIDEO_STREAM_STILL_PICTURE_FLAG_MASK 0x01
199 #define MPEG_DESCR_VIDEO_STREAM_CHROMA_FORMAT_MASK 0xC0
200 #define MPEG_DESCR_VIDEO_STREAM_FRAME_RATE_EXTENSION_FLAG_MASK 0x20
201 #define MPEG_DESCR_VIDEO_STREAM_RESERVED_MASK 0x1F
203 static const value_string mpeg_descr_video_stream_multiple_frame_rate_flag_vals[] = {
204 { 0x00, "Single frame rate present" },
205 { 0x01, "Multiple frame rate present" },
207 { 0x00, NULL }
210 static void
211 proto_mpeg_descriptor_dissect_video_stream(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
214 uint8_t mpeg1_only_flag;
216 mpeg1_only_flag = tvb_get_uint8(tvb, offset) & MPEG_DESCR_VIDEO_STREAM_MPEG1_ONLY_FLAG_MASK;
217 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_multiple_frame_rate_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
218 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_frame_rate_code, tvb, offset, 1, ENC_BIG_ENDIAN);
219 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_mpeg1_only_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
220 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_constrained_parameter_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
221 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_still_picture_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
223 offset += 1;
225 if (mpeg1_only_flag == 0) {
227 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_profile_and_level_indication, tvb, offset, 1, ENC_BIG_ENDIAN);
228 offset += 1;
230 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_chroma_format, tvb, offset, 1, ENC_BIG_ENDIAN);
231 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_frame_rate_extension_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
232 proto_tree_add_item(tree, hf_mpeg_descr_video_stream_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
236 /* 0x03 Audio Stream Descriptor */
237 static int hf_mpeg_descr_audio_stream_free_format_flag;
238 static int hf_mpeg_descr_audio_stream_id;
239 static int hf_mpeg_descr_audio_stream_layer;
240 static int hf_mpeg_descr_audio_stream_variable_rate_audio_indicator;
241 static int hf_mpeg_descr_audio_stream_reserved;
243 #define MPEG_DESCR_AUDIO_STREAM_FREE_FORMAT_FLAG_MASK 0x80
244 #define MPEG_DESCR_AUDIO_STREAM_ID_MASK 0x40
245 #define MPEG_DESCR_AUDIO_STREAM_LAYER_MASK 0x30
246 #define MPEG_DESCR_AUDIO_STREAM_VARIABLE_RATE_AUDIO_INDICATOR_MASK 0x08
247 #define MPEG_DESCR_AUDIO_STREAM_RESERVED_MASK 0x07
249 static const value_string mpeg_descr_audio_stream_free_format_flag_vals[] = {
250 { 0x00, "bitrate_index is not 0" },
251 { 0x01, "One or more audio frame has bitrate_index = 0" },
253 { 0x00, NULL }
256 static const value_string mpeg_descr_audio_stream_id_vals[] = {
257 { 0x00, "ID not set to 1 in all the frames" },
258 { 0x01, "ID set to 1 in all the frames" },
260 { 0x00, NULL }
263 static const value_string mpeg_descr_audio_stream_variable_rate_audio_indicator_vals[] = {
264 { 0x00, "Constant bitrate" },
265 { 0x01, "Variable bitrate" },
267 { 0x00, NULL }
271 static void
272 proto_mpeg_descriptor_dissect_audio_stream(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
274 proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_free_format_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
275 proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_id, tvb, offset, 1, ENC_BIG_ENDIAN);
276 proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_layer, tvb, offset, 1, ENC_BIG_ENDIAN);
277 proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_variable_rate_audio_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
278 proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
281 /* 0x05 Registration Descriptor */
283 static const value_string mpeg_descr_registration_reg_form_vals[] = {
284 { 0x41432D33u, "AC-3 - Advanced Television Systems Committee" },
285 { 0x41444652u, "ADFR - SNPTV" },
286 { 0x414d434eu, "AMCN - AMC Networks Inc." },
287 { 0x41525253u, "ARRS - Arris Group, Inc." },
288 { 0x41563031u, "AV01 - Alliance for Open Media" },
289 { 0x41565341u, "AVSA - Audio Video Coding Standard Working Group of China" },
290 { 0x41565356u, "AVSV - Audio Video Coding Standard Working Group of China" },
291 { 0x42444330u, "BDC0 - Broadcast Data Corporation" },
292 { 0x42535344u, "BSSD - Society of Motion Picture and Television Engineers" },
293 { 0x4341504fu, "CAPO - SMPTE" },
294 { 0x43554549u, "CUEI - Society of Cable Telecommunications Engineers" },
295 { 0x44444544u, "DDED - LGEUS" },
296 { 0x44495343u, "DISC - DISCOVERY COMMUNICATIONS, LLC." },
297 { 0x44495348u, "DISH - EchoStar Communications Corporation" },
298 { 0x646d6174u, "dmat - Dolby Laboratories, Inc." },
299 { 0x44524131u, "DRA1 - Digital Rise" },
300 { 0x64726163u, "drac - British Broadcasting Corporation" },
301 { 0x44544731u, "DTG1 - Digital TV Group" },
302 { 0x44545331u, "DTS1 - DTS Inc." },
303 { 0x44545332u, "DTS2 - DTS Inc." },
304 { 0x44545333u, "DTS3 - DTS Inc." },
305 { 0x44545649u, "DTVI - DTV Innovations" },
306 { 0x44564446u, "DVDF - DVD Format/Logo Licensing Corporation" },
307 { 0x45414333u, "EAC3 - Dolby Laboratories, Inc." },
308 { 0x45425030u, "EBP0 - Cable Television Laboratories, Inc." },
309 { 0x45425031u, "EBP1 - Cable Television Laboratories, Inc." },
310 { 0x45425032u, "EBP2 - Cable Television Laboratories, Inc." },
311 { 0x45425033u, "EBP3 - Cable Television Laboratories, Inc." },
312 { 0x45425034u, "EBP4 - Cable Television Laboratories, Inc." },
313 { 0x45425035u, "EBP5 - Cable Television Laboratories, Inc." },
314 { 0x45425036u, "EBP6 - Cable Television Laboratories, Inc." },
315 { 0x45425037u, "EBP7 - Cable Television Laboratories, Inc." },
316 { 0x45425038u, "EBP8 - Cable Television Laboratories, Inc." },
317 { 0x45425039u, "EBP9 - Cable Television Laboratories, Inc." },
318 { 0x45545631u, "ETV1 - Cable Television Laboratories, Inc." },
319 { 0x464f5843u, "FOXC - FOX Corporation" },
320 { 0x47413934u, "GA94 - Advanced Television Systems Committee" },
321 { 0x47574b53u, "GWKS - GuideWorks" },
322 { 0x48444d56u, "HDMV - Sony Corporation" },
323 { 0x48444d58u, "HDMX - Matsushita Electric Industrial Co. Ltd" },
324 { 0x48445052u, "HDPR - Network Business Group" },
325 { 0x484c4954u, "HLIT - Harmonic Inc." },
326 { 0x49443320u, "ID3 - Organization Apple, Inc." },
327 { 0x4b4c5641u, "KLVA - Society of Motion Picture and Television Engineers" },
328 { 0x4c41534cu, "LASL - LaSalle Media LLC" },
329 { 0x4c495053u, "LIPS - Society of Motion Picture and Television Engineers" },
330 { 0x4c552d41u, "LU-A - Harris Corporation" },
331 { 0x6d6c7061u, "mlpa - Dolby Laboratories, Inc." },
332 { 0x4d54524du, "MTRM - Victor Company of Japan, Limited" },
333 { 0x4e424355u, "NBCU - NBC Universal" },
334 { 0x4e4d5231u, "NMR1 - Nielsen Media Research" },
335 { 0x4e504f31u, "NPO1 - Nederlandse Publieke Omroep (NPO, Dutch Public Broadcasting)" },
336 { 0x4e575456u, "NWTV - Digital TV Information Research Group" },
337 { 0x4f4d5643u, "OMVC - Open Mobile Video Coalition (OMVC)" },
338 { 0x4f707573u, "Opus - Mozilla" },
339 { 0x50415558u, "PAUX - Philips DVS" },
340 { 0x504d5346u, "PMSF - Sony Corporation" },
341 { 0x50524d43u, "PRMC - Philips DVS" },
342 { 0x50585341u, "PXSA - Proximus" },
343 { 0x52544c4eu, "RTLN - RTL Nederland" },
344 { 0x53425342u, "SBSB - SBS Broadcasting" },
345 { 0x53435445u, "SCTE - Society of Cable Telecommunications Engineers" },
346 { 0x53454e31u, "SEN1 - Sencore" },
347 { 0x53455346u, "SESF - Sony Corporation" },
348 { 0x534f5049u, "SOPI - Sony Corporation" },
349 { 0x53504c43u, "SPLC - Society of Motion Picture and Television Engineers" },
350 { 0x53564d44u, "SVMD - Society of Motion Picture and Television Engineers" },
351 { 0x53594e43u, "SYNC - Syncbak, Inc." },
352 { 0x535a4d49u, "SZMI - Building B, Inc" },
353 { 0x54524956u, "TRIV - Triveni Digital" },
354 { 0x54534256u, "TSBV - Toshiba Corporation Digital Media Network Company" },
355 { 0x54534856u, "TSHV - Sony Corporation" },
356 { 0x54534d56u, "TSMV - Sony Corporation" },
357 { 0x54544130u, "TTA0 - Telecommunication Technology Association(TTA)" },
358 { 0x54564731u, "TVG1 - Rovi Corporation" },
359 { 0x54564732u, "TVG2 - Rovi Corporation" },
360 { 0x54564733u, "TVG3 - Rovi Corporation" },
361 { 0x554c4531u, "ULE1 - University of Aberdeen (on behalf of the Internet Engineering Task Force, IETF)" },
362 { 0x554c4930u, "ULI0 - Update Logic, Inc." },
363 { 0x56432d31u, "VC-1 - Society of Motion Picture and Television Engineers" },
364 { 0x56432d34u, "VC-4 - Society of Motion Picture and Television Engineers" },
365 { 0x564d4e55u, "VMNU - Viacom" },
366 { 0x584d505fu, "XMP_ - Adobe Systems" },
368 { 0x55533030u, "US00 - US Government Registration 00" },
369 { 0x55533031u, "US01 - US Government Registration 01" },
370 { 0x55533032u, "US02 - US Government Registration 02" },
371 { 0x55533033u, "US03 - US Government Registration 03" },
372 { 0x55533034u, "US04 - US Government Registration 04" },
373 { 0x55533035u, "US05 - US Government Registration 05" },
374 { 0x55533036u, "US06 - US Government Registration 06" },
375 { 0x55533037u, "US07 - US Government Registration 07" },
376 { 0x55533038u, "US08 - US Government Registration 08" },
377 { 0x55533039u, "US09 - US Government Registration 09" },
379 { 0x55533130u, "US10 - US Government Registration 10" },
380 { 0x55533131u, "US11 - US Government Registration 11" },
381 { 0x55533132u, "US12 - US Government Registration 12" },
382 { 0x55533133u, "US13 - US Government Registration 13" },
383 { 0x55533134u, "US14 - US Government Registration 14" },
384 { 0x55533135u, "US15 - US Government Registration 15" },
385 { 0x55533136u, "US16 - US Government Registration 16" },
386 { 0x55533137u, "US17 - US Government Registration 17" },
387 { 0x55533138u, "US18 - US Government Registration 18" },
388 { 0x55533139u, "US19 - US Government Registration 19" },
390 { 0x55533230u, "US20 - US Government Registration 20" },
391 { 0x55533231u, "US21 - US Government Registration 21" },
392 { 0x55533232u, "US22 - US Government Registration 22" },
393 { 0x55533233u, "US23 - US Government Registration 23" },
394 { 0x55533234u, "US24 - US Government Registration 24" },
395 { 0x55533235u, "US25 - US Government Registration 25" },
396 { 0x55533236u, "US26 - US Government Registration 26" },
397 { 0x55533237u, "US27 - US Government Registration 27" },
398 { 0x55533238u, "US28 - US Government Registration 28" },
399 { 0x55533239u, "US29 - US Government Registration 29" },
401 { 0x55533330u, "US30 - US Government Registration 30" },
402 { 0x55533331u, "US31 - US Government Registration 31" },
403 { 0x55533332u, "US32 - US Government Registration 32" },
404 { 0x55533333u, "US33 - US Government Registration 33" },
405 { 0x55533334u, "US34 - US Government Registration 34" },
406 { 0x55533335u, "US35 - US Government Registration 35" },
407 { 0x55533336u, "US36 - US Government Registration 36" },
408 { 0x55533337u, "US37 - US Government Registration 37" },
409 { 0x55533338u, "US38 - US Government Registration 38" },
410 { 0x55533339u, "US39 - US Government Registration 39" },
412 { 0x55533430u, "US40 - US Government Registration 40" },
413 { 0x55533431u, "US41 - US Government Registration 41" },
414 { 0x55533432u, "US42 - US Government Registration 42" },
415 { 0x55533433u, "US43 - US Government Registration 43" },
416 { 0x55533434u, "US44 - US Government Registration 44" },
417 { 0x55533435u, "US45 - US Government Registration 45" },
418 { 0x55533436u, "US46 - US Government Registration 46" },
419 { 0x55533437u, "US47 - US Government Registration 47" },
420 { 0x55533438u, "US48 - US Government Registration 48" },
421 { 0x55533439u, "US49 - US Government Registration 49" },
423 { 0x55533530u, "US50 - US Government Registration 50" },
424 { 0x55533531u, "US51 - US Government Registration 51" },
425 { 0x55533532u, "US52 - US Government Registration 52" },
426 { 0x55533533u, "US53 - US Government Registration 53" },
427 { 0x55533534u, "US54 - US Government Registration 54" },
428 { 0x55533535u, "US55 - US Government Registration 55" },
429 { 0x55533536u, "US56 - US Government Registration 56" },
430 { 0x55533537u, "US57 - US Government Registration 57" },
431 { 0x55533538u, "US58 - US Government Registration 58" },
432 { 0x55533539u, "US59 - US Government Registration 59" },
434 { 0x55533630u, "US60 - US Government Registration 60" },
435 { 0x55533631u, "US61 - US Government Registration 61" },
436 { 0x55533632u, "US62 - US Government Registration 62" },
437 { 0x55533633u, "US63 - US Government Registration 63" },
438 { 0x55533634u, "US64 - US Government Registration 64" },
439 { 0x55533635u, "US65 - US Government Registration 65" },
440 { 0x55533636u, "US66 - US Government Registration 66" },
441 { 0x55533637u, "US67 - US Government Registration 67" },
442 { 0x55533638u, "US68 - US Government Registration 68" },
443 { 0x55533639u, "US69 - US Government Registration 69" },
445 { 0x55533730u, "US70 - US Government Registration 70" },
446 { 0x55533731u, "US71 - US Government Registration 71" },
447 { 0x55533732u, "US72 - US Government Registration 72" },
448 { 0x55533733u, "US73 - US Government Registration 73" },
449 { 0x55533734u, "US74 - US Government Registration 74" },
450 { 0x55533735u, "US75 - US Government Registration 75" },
451 { 0x55533736u, "US76 - US Government Registration 76" },
452 { 0x55533737u, "US77 - US Government Registration 77" },
453 { 0x55533738u, "US78 - US Government Registration 78" },
454 { 0x55533739u, "US79 - US Government Registration 79" },
456 { 0x55533830u, "US80 - US Government Registration 80" },
457 { 0x55533831u, "US81 - US Government Registration 81" },
458 { 0x55533832u, "US82 - US Government Registration 82" },
459 { 0x55533833u, "US83 - US Government Registration 83" },
460 { 0x55533834u, "US84 - US Government Registration 84" },
461 { 0x55533835u, "US85 - US Government Registration 85" },
462 { 0x55533836u, "US86 - US Government Registration 86" },
463 { 0x55533837u, "US87 - US Government Registration 87" },
464 { 0x55533838u, "US88 - US Government Registration 88" },
465 { 0x55533839u, "US89 - US Government Registration 89" },
467 { 0x55533930u, "US90 - US Government Registration 90" },
468 { 0x55533931u, "US91 - US Government Registration 91" },
469 { 0x55533932u, "US92 - US Government Registration 92" },
470 { 0x55533933u, "US93 - US Government Registration 93" },
471 { 0x55533934u, "US94 - US Government Registration 94" },
472 { 0x55533935u, "US95 - US Government Registration 95" },
473 { 0x55533936u, "US96 - US Government Registration 96" },
474 { 0x55533937u, "US97 - US Government Registration 97" },
475 { 0x55533938u, "US98 - US Government Registration 98" },
476 { 0x55533939u, "US99 - US Government Registration 99" },
478 { 0x00, NULL }
481 static int hf_mpeg_descr_reg_form_id;
482 static int hf_mpeg_descr_reg_add_id_inf;
484 static void
485 proto_mpeg_descriptor_dissect_registration(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
487 unsigned offset_start;
489 offset_start = offset;
490 proto_tree_add_item(tree, hf_mpeg_descr_reg_form_id, tvb, offset, 4, ENC_BIG_ENDIAN);
491 offset += 4;
493 while (offset-offset_start<len) {
494 proto_tree_add_item(tree, hf_mpeg_descr_reg_add_id_inf, tvb, offset, 1, ENC_BIG_ENDIAN);
495 offset++;
499 /* 0x06 Data Stream Alignment Descriptor */
500 static int hf_mpeg_descr_data_stream_alignment;
502 static const value_string mpeg_descr_data_stream_alignment_vals[] = {
503 { 0x00, "Reserved" },
504 { 0x01, "Slice, or video access unit" },
505 { 0x02, "Video access unit" },
506 { 0x03, "GOP, or SEQ" },
507 { 0x04, "SEQ" },
509 { 0x00, NULL }
512 static void
513 proto_mpeg_descriptor_dissect_data_stream_alignment(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
515 proto_tree_add_item(tree, hf_mpeg_descr_data_stream_alignment, tvb, offset, 1, ENC_BIG_ENDIAN);
518 /* 0x09 CA Descriptor */
519 static int hf_mpeg_descr_ca_system_id;
520 static int hf_mpeg_descr_ca_reserved;
521 static int hf_mpeg_descr_ca_pid;
522 static int hf_mpeg_descr_ca_private;
524 #define MPEG_DESCR_CA_RESERVED_MASK 0xE000
525 #define MPEG_DESCR_CA_PID_MASK 0x1FFF
527 static void
528 proto_mpeg_descriptor_dissect_ca(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
530 proto_tree_add_item(tree, hf_mpeg_descr_ca_system_id, tvb, offset, 2, ENC_BIG_ENDIAN);
531 offset += 2;
533 proto_tree_add_item(tree, hf_mpeg_descr_ca_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
534 proto_tree_add_item(tree, hf_mpeg_descr_ca_pid, tvb, offset, 2, ENC_BIG_ENDIAN);
535 offset += 2;
537 if (len > 4)
538 proto_tree_add_item(tree, hf_mpeg_descr_ca_private, tvb, offset, len - 4, ENC_NA);
542 /* 0x0A ISO 639 Language Descriptor */
543 static int hf_mpeg_descr_iso639_lang;
544 static int hf_mpeg_descr_iso639_type;
546 static const value_string mpeg_descr_iso639_type_vals[] = {
547 { 0x00, "Undefined" },
548 { 0x01, "Clean Effects" },
549 { 0x02, "Hearing Impaired" },
550 { 0x03, "Visual Impaired Commentary" },
552 { 0x00, NULL }
555 static void
556 proto_mpeg_descriptor_dissect_iso639(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
558 if (len > 1)
559 proto_tree_add_item(tree, hf_mpeg_descr_iso639_lang, tvb, offset, len - 1, ENC_ASCII);
560 offset += len - 1;
561 proto_tree_add_item(tree, hf_mpeg_descr_iso639_type, tvb, offset, 1, ENC_BIG_ENDIAN);
564 /* 0x0B System Clock Descriptor */
565 static int hf_mpeg_descr_system_clock_external_clock_reference_indicator;
566 static int hf_mpeg_descr_system_clock_reserved1;
567 static int hf_mpeg_descr_system_clock_accuracy_integer;
568 static int hf_mpeg_descr_system_clock_accuracy_exponent;
569 static int hf_mpeg_descr_system_clock_reserved2;
571 #define MPEG_DESCR_SYSTEM_CLOCK_EXTERNAL_CLOCK_REFERENCE_INDICATOR_MASK 0x80
572 #define MPEG_DESCR_SYSTEM_CLOCK_RESERVED1_MASK 0x40
573 #define MPEG_DESCR_SYSTEM_CLOCK_ACCURACY_INTEGER_MASK 0x3F
574 #define MPEG_DESCR_SYSTEM_CLOCK_ACCURACY_EXPONENT_MASK 0xE0
575 #define MPEG_DESCR_SYSTEM_CLOCK_RESERVED2_MASK 0x1F
577 static void
578 proto_mpeg_descriptor_dissect_system_clock(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
580 proto_tree_add_item(tree, hf_mpeg_descr_system_clock_external_clock_reference_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
581 proto_tree_add_item(tree, hf_mpeg_descr_system_clock_reserved1, tvb, offset, 1, ENC_BIG_ENDIAN);
582 proto_tree_add_item(tree, hf_mpeg_descr_system_clock_accuracy_integer, tvb, offset, 1, ENC_BIG_ENDIAN);
583 offset += 1;
585 proto_tree_add_item(tree, hf_mpeg_descr_system_clock_accuracy_exponent, tvb, offset, 1, ENC_BIG_ENDIAN);
586 proto_tree_add_item(tree, hf_mpeg_descr_system_clock_reserved2, tvb, offset, 1, ENC_BIG_ENDIAN);
589 /* 0x0E Maximum Bitrate Descriptor */
590 static int hf_mpeg_descr_max_bitrate_reserved;
591 static int hf_mpeg_descr_max_bitrate;
593 #define MPEG_DESCR_MAX_BITRATE_RESERVED_MASK 0xC00000
594 #define MPEG_DESCR_MAX_BITRATE_MASK 0x3FFFFF
596 static void
597 proto_mpeg_descriptor_dissect_max_bitrate(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
599 proto_item *rate_item;
601 uint32_t rate;
603 proto_tree_add_item(tree, hf_mpeg_descr_max_bitrate_reserved, tvb, offset, 3, ENC_BIG_ENDIAN);
604 rate = tvb_get_ntoh24(tvb, offset) & MPEG_DESCR_MAX_BITRATE_MASK;
605 rate_item = proto_tree_add_item(tree, hf_mpeg_descr_max_bitrate, tvb, offset, 3, ENC_BIG_ENDIAN);
606 proto_item_append_text(rate_item, " (%u bytes/sec)", rate * 50);
609 /* 0x10 Smoothing Buffer Descriptor */
610 static int hf_mpeg_descr_smoothing_buffer_reserved1;
611 static int hf_mpeg_descr_smoothing_buffer_leak_rate;
612 static int hf_mpeg_descr_smoothing_buffer_reserved2;
613 static int hf_mpeg_descr_smoothing_buffer_size;
615 #define MPEG_DESCR_SMOOTHING_BUFFER_RESERVED1_MASK 0xC00000
616 #define MPEG_DESCR_SMOOTHING_BUFFER_LEAK_RATE_MASK 0x3FFFFF
617 #define MPEG_DESCR_SMOOTHING_BUFFER_RESERVED2_MASK 0xC00000
618 #define MPEG_DESCR_SMOOTHING_BUFFER_SIZE_MASK 0x3FFFFF
620 static void
621 proto_mpeg_descriptor_dissect_smoothing_buffer(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
623 proto_item *leak_rate_item;
625 uint32_t leak_rate;
627 proto_tree_add_item(tree, hf_mpeg_descr_smoothing_buffer_reserved1, tvb, offset, 3, ENC_BIG_ENDIAN);
628 leak_rate = tvb_get_ntoh24(tvb, offset) & MPEG_DESCR_SMOOTHING_BUFFER_LEAK_RATE_MASK;
629 leak_rate_item = proto_tree_add_item(tree, hf_mpeg_descr_smoothing_buffer_leak_rate, tvb, offset, 3, ENC_BIG_ENDIAN);
630 proto_item_append_text(leak_rate_item, " (%u bytes/sec)", leak_rate * 400 / 8);
631 offset += 3;
633 proto_tree_add_item(tree, hf_mpeg_descr_smoothing_buffer_reserved2, tvb, offset, 3, ENC_BIG_ENDIAN);
634 proto_tree_add_item(tree, hf_mpeg_descr_smoothing_buffer_size, tvb, offset, 3, ENC_BIG_ENDIAN);
638 /* 0x11 STD Descriptor */
639 static int hf_mpeg_descr_std_reserved;
640 static int hf_mpeg_descr_std_leak_valid;
642 #define MPEG_DESCR_STD_RESERVED_MASK 0xFE
643 #define MPEG_DESCR_STD_LEAK_VALID_MASK 0x01
645 static void
646 proto_mpeg_descriptor_dissect_std(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
648 proto_tree_add_item(tree, hf_mpeg_descr_std_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
649 proto_tree_add_item(tree, hf_mpeg_descr_std_leak_valid, tvb, offset, 1, ENC_BIG_ENDIAN);
652 /* 0x13 Carousel Identifier Descriptor */
653 static int hf_mpeg_descr_carousel_identifier_id;
654 static int hf_mpeg_descr_carousel_identifier_format_id;
655 static int hf_mpeg_descr_carousel_identifier_module_version;
656 static int hf_mpeg_descr_carousel_identifier_module_id;
657 static int hf_mpeg_descr_carousel_identifier_block_size;
658 static int hf_mpeg_descr_carousel_identifier_module_size;
659 static int hf_mpeg_descr_carousel_identifier_compression_method;
660 static int hf_mpeg_descr_carousel_identifier_original_size;
661 static int hf_mpeg_descr_carousel_identifier_timeout;
662 static int hf_mpeg_descr_carousel_identifier_object_key_len;
663 static int hf_mpeg_descr_carousel_identifier_object_key_data;
664 static int hf_mpeg_descr_carousel_identifier_private;
666 static const value_string mpeg_descr_carousel_identifier_format_id_vals[] = {
667 { 0x00, "No Format Specifier" },
668 { 0x01, "Format Specifier" },
670 { 0, NULL }
673 static void
674 proto_mpeg_descriptor_dissect_carousel_identifier(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
676 unsigned key_len;
677 uint8_t format_id;
678 unsigned private_len = 0;
680 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_id, tvb, offset, 4, ENC_BIG_ENDIAN);
681 offset += 4;
683 format_id = tvb_get_uint8(tvb, offset);
684 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_format_id, tvb, offset, 1, ENC_BIG_ENDIAN);
685 offset += 1;
687 if (format_id == 0x01) {
688 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_module_version, tvb, offset, 1, ENC_BIG_ENDIAN);
689 offset += 1;
691 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_module_id, tvb, offset, 2, ENC_BIG_ENDIAN);
692 offset += 2;
694 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_block_size, tvb, offset, 2, ENC_BIG_ENDIAN);
695 offset += 2;
697 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_module_size, tvb, offset, 4, ENC_BIG_ENDIAN);
698 offset += 4;
700 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_compression_method, tvb, offset, 1, ENC_BIG_ENDIAN);
701 offset += 1;
703 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_original_size, tvb, offset, 4, ENC_BIG_ENDIAN);
704 offset += 4;
706 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_timeout, tvb, offset, 1, ENC_BIG_ENDIAN);
707 offset += 1;
709 key_len = tvb_get_uint8(tvb, offset);
710 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_object_key_len, tvb, offset, 1, ENC_BIG_ENDIAN);
711 offset += 1;
713 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_object_key_data, tvb, offset, key_len, ENC_NA);
714 offset += key_len;
716 if (len > (key_len + 20))
717 private_len = len - 20 - key_len;
719 } else {
720 if (len > 5)
721 private_len = len - 5;
724 if (private_len)
725 proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_private, tvb, offset, private_len, ENC_NA);
729 /* 0x14 Association Tag Descriptor */
730 static int hf_mpeg_descr_association_tag;
731 static int hf_mpeg_descr_association_tag_use;
732 static int hf_mpeg_descr_association_tag_selector_len;
733 static int hf_mpeg_descr_association_tag_transaction_id;
734 static int hf_mpeg_descr_association_tag_timeout;
735 static int hf_mpeg_descr_association_tag_selector_bytes;
736 static int hf_mpeg_descr_association_tag_private_bytes;
738 static void
739 proto_mpeg_descriptor_dissect_association_tag(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
741 unsigned end = offset + len;
742 uint16_t use;
743 uint8_t selector_len;
745 proto_tree_add_item(tree, hf_mpeg_descr_association_tag, tvb, offset, 2, ENC_BIG_ENDIAN);
746 offset += 2;
748 use = tvb_get_ntohs(tvb, offset);
749 proto_tree_add_item(tree, hf_mpeg_descr_association_tag_use, tvb, offset, 2, ENC_BIG_ENDIAN);
750 offset += 2;
752 selector_len = tvb_get_uint8(tvb, offset);
753 proto_tree_add_item(tree, hf_mpeg_descr_association_tag_selector_len, tvb, offset, 1, ENC_BIG_ENDIAN);
754 offset ++;
756 if (use == 0x00) {
757 if (selector_len != 8)
758 return;
759 proto_tree_add_item(tree, hf_mpeg_descr_association_tag_transaction_id, tvb, offset, 4, ENC_BIG_ENDIAN);
760 offset += 4;
762 proto_tree_add_item(tree, hf_mpeg_descr_association_tag_timeout, tvb, offset, 4, ENC_BIG_ENDIAN);
763 offset += 4;
765 } else {
766 proto_tree_add_item(tree, hf_mpeg_descr_association_tag_selector_bytes, tvb, offset, selector_len, ENC_NA);
767 offset += selector_len;
770 if (offset < end)
771 proto_tree_add_item(tree, hf_mpeg_descr_association_tag_private_bytes, tvb, offset, end - offset, ENC_NA);
774 /* 0x28 AVC Video Descriptor */
775 static int hf_mpeg_descr_avc_vid_profile_idc;
776 static int hf_mpeg_descr_avc_vid_constraint_set0_flag;
777 static int hf_mpeg_descr_avc_vid_constraint_set1_flag;
778 static int hf_mpeg_descr_avc_vid_constraint_set2_flag;
779 static int hf_mpeg_descr_avc_vid_compatible_flags;
780 static int hf_mpeg_descr_avc_vid_level_idc;
781 static int hf_mpeg_descr_avc_vid_still_present;
782 static int hf_mpeg_descr_avc_vid_24h_picture_flag;
783 static int hf_mpeg_descr_avc_vid_reserved;
785 #define MPEG_DESCR_AVC_VID_CONSTRAINT_SET0_FLAG_MASK 0x80
786 #define MPEG_DESCR_AVC_VID_CONSTRAINT_SET1_FLAG_MASK 0x40
787 #define MPEG_DESCR_AVC_VID_CONSTRAINT_SET2_FLAG_MASK 0x20
788 #define MPEG_DESCR_AVC_VID_COMPATIBLE_FLAGS_MASK 0x1F
789 #define MPEG_DESCR_AVC_VID_STILL_PRESENT_MASK 0x80
790 #define MPEG_DESCR_AVC_VID_24H_PICTURE_FLAG_MASK 0x40
791 #define MPEG_DESCR_AVC_VID_RESERVED_MASK 0x3F
793 static void
794 proto_mpeg_descriptor_dissect_avc_vid(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
796 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_profile_idc, tvb, offset, 1, ENC_BIG_ENDIAN);
797 offset += 1;
799 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_constraint_set0_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
800 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_constraint_set1_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
801 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_constraint_set2_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
802 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_compatible_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
803 offset += 1;
805 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_level_idc, tvb, offset, 1, ENC_BIG_ENDIAN);
806 offset += 1;
808 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_still_present, tvb, offset, 1, ENC_BIG_ENDIAN);
809 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_24h_picture_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
810 proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
813 /* 0x40 Network Name Descriptor */
814 static int hf_mpeg_descr_network_name_encoding;
815 static int hf_mpeg_descr_network_name_descriptor;
817 static void
818 proto_mpeg_descriptor_dissect_network_name(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
820 dvb_encoding_e encoding;
821 unsigned enc_len = dvb_analyze_string_charset(tvb, offset, len, &encoding);
822 dvb_add_chartbl(tree, hf_mpeg_descr_network_name_encoding, tvb, offset, enc_len, encoding);
824 proto_tree_add_item(tree, hf_mpeg_descr_network_name_descriptor, tvb, offset+enc_len, len-enc_len, dvb_enc_to_item_enc(encoding));
827 /* 0x41 Service List Descriptor */
828 static int hf_mpeg_descr_service_list_id;
829 static int hf_mpeg_descr_service_list_type;
831 static int ett_mpeg_descriptor_service_list;
833 static void
834 proto_mpeg_descriptor_dissect_service_list(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
836 unsigned end = offset + len;
837 uint16_t svc_id;
839 proto_tree *svc_tree;
842 while (offset < end) {
843 svc_id = tvb_get_ntohs(tvb, offset);
845 svc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3,
846 ett_mpeg_descriptor_service_list, NULL, "Service 0x%02x", svc_id);
848 proto_tree_add_item(svc_tree, hf_mpeg_descr_service_list_id, tvb, offset, 2, ENC_BIG_ENDIAN);
849 offset += 2;
851 proto_tree_add_item(svc_tree, hf_mpeg_descr_service_list_type, tvb, offset, 1, ENC_BIG_ENDIAN);
852 offset += 1;
856 /* 0x42 Stuffing Descriptor */
857 static int hf_mpeg_descr_stuffing;
859 static void
860 proto_mpeg_descriptor_stuffing(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
862 proto_tree_add_item(tree, hf_mpeg_descr_stuffing, tvb, offset, len, ENC_NA);
865 /* 0x43 Satellite Delivery System Descriptor */
866 static int hf_mpeg_descr_satellite_delivery_frequency;
867 static int hf_mpeg_descr_satellite_delivery_orbital_position;
868 static int hf_mpeg_descr_satellite_delivery_west_east_flag;
869 static int hf_mpeg_descr_satellite_delivery_polarization;
870 static int hf_mpeg_descr_satellite_delivery_roll_off;
871 static int hf_mpeg_descr_satellite_delivery_zero;
872 static int hf_mpeg_descr_satellite_delivery_modulation_system;
873 static int hf_mpeg_descr_satellite_delivery_modulation_type;
874 static int hf_mpeg_descr_satellite_delivery_symbol_rate;
875 static int hf_mpeg_descr_satellite_delivery_fec_inner;
877 #define MPEG_DESCR_SATELLITE_DELIVERY_WEST_EAST_FLAG_MASK 0x80
878 #define MPEG_DESCR_SATELLITE_DELIVERY_POLARIZATION_MASK 0x60
879 #define MPEG_DESCR_SATELLITE_DELIVERY_ROLL_OFF_MASK 0x18
880 #define MPEG_DESCR_SATELLITE_DELIVERY_ZERO_MASK 0x18
881 #define MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_SYSTEM_MASK 0x04
882 #define MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_TYPE_MASK 0x03
883 #define MPEG_DESCR_SATELLITE_DELIVERY_FEC_INNER_MASK 0x0F
885 static const value_string mpeg_descr_satellite_delivery_west_east_flag_vals[] = {
886 { 0x0, "West" },
887 { 0x1, "East" },
889 { 0x0, NULL }
892 static const value_string mpeg_descr_satellite_delivery_polarization_vals[] = {
893 { 0x0, "Linear - Horizontal" },
894 { 0x1, "Linear - Vertical" },
895 { 0x2, "Circular - Left" },
896 { 0x3, "Circular - Right" },
898 { 0x0, NULL }
901 static const value_string mpeg_descr_satellite_delivery_roll_off_vals[] = {
902 { 0x0, "alpha = 0,35" },
903 { 0x1, "alpha = 0,25" },
904 { 0x2, "alpha = 0,20" },
906 { 0x0, NULL }
909 static const value_string mpeg_descr_satellite_delivery_modulation_system_vals[] = {
910 { 0x0, "DVB-S" },
911 { 0x1, "DVB-S2" },
913 { 0x0, NULL }
916 static const value_string mpeg_descr_satellite_delivery_modulation_type_vals[] = {
917 { 0x0, "Auto" },
918 { 0x1, "QPSK" },
919 { 0x2, "8PSK" },
920 { 0x3, "16-QAM (n/a for DVB-S2)" },
922 { 0x0, NULL }
925 static const value_string mpeg_descr_satellite_delivery_fec_inner_vals[] = {
926 { 0x0, "Not defined" },
927 { 0x1, "1/2 convolutional code rate" },
928 { 0x2, "2/3 convolutional code rate" },
929 { 0x3, "3/4 convolutional code rate" },
930 { 0x4, "5/6 convolutional code rate" },
931 { 0x5, "7/8 convolutional code rate" },
932 { 0x6, "8/9 convolutional code rate" },
933 { 0x7, "3/5 convolutional code rate" },
934 { 0x8, "4/5 convolutional code rate" },
935 { 0x9, "9/10 convolutional code rate" },
936 { 0xF, "No convolutional coding" },
938 { 0x0, NULL }
940 static value_string_ext mpeg_descr_satellite_delivery_fec_inner_vals_ext =
941 VALUE_STRING_EXT_INIT(mpeg_descr_satellite_delivery_fec_inner_vals);
943 static void
944 proto_mpeg_descriptor_dissect_satellite_delivery(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
947 double frequency, symbol_rate;
948 float orbital_position;
949 uint8_t modulation_system;
951 frequency = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 10.0 +
952 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) / 10.0 +
953 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+2)) / 1000.0 +
954 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+3)) / 100000.0;
955 proto_tree_add_double(tree, hf_mpeg_descr_satellite_delivery_frequency,
956 tvb, offset, 4, frequency);
957 offset += 4;
959 orbital_position = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 10.0f +
960 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) / 10.0f;
961 proto_tree_add_float(tree, hf_mpeg_descr_satellite_delivery_orbital_position,
962 tvb, offset, 2, orbital_position);
963 offset += 2;
965 modulation_system = tvb_get_uint8(tvb, offset) & MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_SYSTEM_MASK;
967 proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_west_east_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
968 proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_polarization, tvb, offset, 1, ENC_BIG_ENDIAN);
969 if (modulation_system)
970 proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_roll_off, tvb, offset, 1, ENC_BIG_ENDIAN);
971 else
972 proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_zero, tvb, offset, 1, ENC_BIG_ENDIAN);
973 proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_modulation_system, tvb, offset, 1, ENC_BIG_ENDIAN);
974 proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_modulation_type, tvb, offset, 1, ENC_BIG_ENDIAN);
975 offset += 1;
977 symbol_rate = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 10.0 +
978 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) / 10.0 +
979 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+2)) / 1000.0 +
980 /* symbol rate is 28 bits, only the upper 4 bits of this byte are used */
981 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+3)>>4) / 10000.0;
982 proto_tree_add_double_format_value(tree, hf_mpeg_descr_satellite_delivery_symbol_rate,
983 tvb, offset, 4, symbol_rate, "%3.4f MSym/s", symbol_rate);
984 offset += 3;
986 proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_fec_inner, tvb, offset, 1, ENC_BIG_ENDIAN);
990 /* 0x44 Cable Delivery System Descriptor */
991 static int hf_mpeg_descr_cable_delivery_frequency;
992 static int hf_mpeg_descr_cable_delivery_reserved;
993 static int hf_mpeg_descr_cable_delivery_fec_outer;
994 static int hf_mpeg_descr_cable_delivery_modulation;
995 static int hf_mpeg_descr_cable_delivery_symbol_rate;
996 static int hf_mpeg_descr_cable_delivery_fec_inner;
998 #define MPEG_DESCR_CABLE_DELIVERY_RESERVED_MASK 0xFFF0
999 #define MPEG_DESCR_CABLE_DELIVERY_FEC_OUTER_MASK 0x000F
1000 #define MPEG_DESCR_CABLE_DELIVERY_FEC_INNER_MASK 0x0F
1002 static const value_string mpeg_descr_cable_delivery_fec_outer_vals[] = {
1003 { 0x0, "Not defined" },
1004 { 0x1, "No outer FEC coding" },
1005 { 0x2, "RS(204/188)" },
1007 { 0x0, NULL }
1010 static const value_string mpeg_descr_cable_delivery_modulation_vals[] = {
1011 { 0x00, "Not defined" },
1012 { 0x01, "16-QAM" },
1013 { 0x02, "32-QAM" },
1014 { 0x03, "64-QAM" },
1015 { 0x04, "128-QAM" },
1016 { 0x05, "256-QAM" },
1018 { 0x0, NULL }
1021 static const value_string mpeg_descr_cable_delivery_fec_inner_vals[] = {
1022 { 0x0, "Not defined" },
1023 { 0x1, "1/2 convolutional code rate" },
1024 { 0x2, "2/3 convolutional code rate" },
1025 { 0x3, "3/4 convolutional code rate" },
1026 { 0x4, "5/6 convolutional code rate" },
1027 { 0x5, "7/8 convolutional code rate" },
1028 { 0x6, "8/9 convolutional code rate" },
1029 { 0x7, "3/5 convolutional code rate" },
1030 { 0x8, "4/5 convolutional code rate" },
1031 { 0x9, "9/10 convolutional code rate" },
1032 { 0xF, "No convolutional coding" },
1034 { 0x0, NULL }
1036 static value_string_ext mpeg_descr_cable_delivery_fec_inner_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_cable_delivery_fec_inner_vals);
1038 static void
1039 proto_mpeg_descriptor_dissect_cable_delivery(tvbuff_t *tvb, unsigned offset, proto_tree *tree) {
1041 double frequency, symbol_rate;
1043 frequency = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 100.0 +
1044 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) +
1045 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+2)) / 100.0 +
1046 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+3)) / 10000.0;
1047 proto_tree_add_double_format_value(tree, hf_mpeg_descr_cable_delivery_frequency,
1048 tvb, offset, 4, frequency, "%4.4f MHz", frequency);
1049 offset += 4;
1051 proto_tree_add_item(tree, hf_mpeg_descr_cable_delivery_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
1052 proto_tree_add_item(tree, hf_mpeg_descr_cable_delivery_fec_outer, tvb, offset, 2, ENC_BIG_ENDIAN);
1053 offset += 2;
1055 proto_tree_add_item(tree, hf_mpeg_descr_cable_delivery_modulation, tvb, offset, 1, ENC_BIG_ENDIAN);
1056 offset += 1;
1058 symbol_rate = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 10.0 +
1059 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) / 10.0 +
1060 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+2)) / 1000.0 +
1061 /* symbol rate is 28 bits, only the upper 4 bits of this byte are used */
1062 MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+3)>>4) / 10000.0;
1063 proto_tree_add_double_format_value(tree, hf_mpeg_descr_cable_delivery_symbol_rate,
1064 tvb, offset, 4, symbol_rate, "%3.4f MSymbol/s", symbol_rate);
1065 offset += 3;
1066 proto_tree_add_item(tree, hf_mpeg_descr_cable_delivery_fec_inner, tvb, offset, 1, ENC_BIG_ENDIAN);
1071 /* 0x45 VBI Data Descriptor */
1072 static int hf_mpeg_descr_vbi_data_service_id;
1073 static int hf_mpeg_descr_vbi_data_descr_len;
1074 static int hf_mpeg_descr_vbi_data_reserved1;
1075 static int hf_mpeg_descr_vbi_data_field_parity;
1076 static int hf_mpeg_descr_vbi_data_line_offset;
1077 static int hf_mpeg_descr_vbi_data_reserved2;
1079 #define MPEG_DESCR_VBI_DATA_RESERVED1_MASK 0xC0
1080 #define MPEG_DESCR_VBI_DATA_FIELD_PARITY_MASK 0x20
1081 #define MPEG_DESCR_VBI_DATA_LINE_OFFSET_MASK 0x1F
1083 static int ett_mpeg_descriptor_vbi_data_service;
1085 static const value_string mpeg_descr_vbi_data_service_id_vals[] = {
1087 { 0x00, "Reserved" },
1088 { 0x01, "EBU Teletext" },
1089 { 0x02, "Inverted Teletext" },
1090 { 0x03, "Reserved" },
1091 { 0x04, "VPS" },
1092 { 0x05, "WSS" },
1093 { 0x06, "Closed Captioning" },
1094 { 0x07, "Monochrome 4:2:2 samples" },
1096 { 0, NULL }
1099 static const value_string mpeg_descr_vbi_data_field_parity_vals[] = {
1100 { 0x00, "Second (even) field of frame" },
1101 { 0x01, "First (odd) field of frame" },
1103 { 0, NULL }
1106 static void
1107 proto_mpeg_descriptor_dissect_vbi_data(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1110 uint8_t svc_id, svc_len;
1111 unsigned end = offset + len, svc_end;
1113 proto_tree *svc_tree;
1115 while (offset < end) {
1116 svc_id = tvb_get_uint8(tvb, offset);
1117 svc_len = tvb_get_uint8(tvb, offset + 1);
1118 svc_tree = proto_tree_add_subtree_format(tree, tvb, offset, svc_len + 2,
1119 ett_mpeg_descriptor_vbi_data_service, NULL, "Service 0x%02x", svc_id);
1121 proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_service_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1122 offset += 1;
1124 proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_descr_len, tvb, offset, 1, ENC_BIG_ENDIAN);
1125 offset += 1;
1127 switch (svc_id) {
1128 case 0x01:
1129 case 0x02:
1130 case 0x04:
1131 case 0x05:
1132 case 0x06:
1133 case 0x07:
1134 svc_end = offset + svc_len;
1135 while (offset < svc_end) {
1136 proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_reserved1, tvb, offset, 1, ENC_BIG_ENDIAN);
1137 proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_field_parity, tvb, offset, 1, ENC_BIG_ENDIAN);
1138 proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_line_offset, tvb, offset, 1, ENC_BIG_ENDIAN);
1139 offset += 1;
1141 break;
1142 default:
1143 proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_reserved2, tvb, offset, svc_len, ENC_NA);
1144 offset += svc_len;
1145 break;
1151 /* 0x47 Bouquet Name Descriptor */
1152 static int hf_mpeg_descr_bouquet_name_encoding;
1153 static int hf_mpeg_descr_bouquet_name;
1155 static void
1156 proto_mpeg_descriptor_dissect_bouquet_name(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1158 dvb_encoding_e encoding;
1159 unsigned enc_len = dvb_analyze_string_charset(tvb, offset, len, &encoding);
1160 dvb_add_chartbl(tree, hf_mpeg_descr_bouquet_name_encoding, tvb, offset, enc_len, encoding);
1162 proto_tree_add_item(tree, hf_mpeg_descr_bouquet_name, tvb, offset+enc_len, len-enc_len, dvb_enc_to_item_enc(encoding));
1165 /* 0x48 Service Descriptor */
1166 static int hf_mpeg_descr_service_type;
1167 static int hf_mpeg_descr_service_provider_name_length;
1168 static int hf_mpeg_descr_service_provider_name_encoding;
1169 static int hf_mpeg_descr_service_provider;
1170 static int hf_mpeg_descr_service_name_length;
1171 static int hf_mpeg_descr_service_name_encoding;
1172 static int hf_mpeg_descr_service_name;
1174 static const value_string mpeg_descr_service_type_vals[] = {
1176 { 0x00, "reserved" },
1177 { 0x01, "digital television service" },
1178 { 0x02, "digital radio sound service" },
1179 { 0x03, "Teletext service" },
1180 { 0x04, "NVOD reference service" },
1181 { 0x05, "NVOD time-shifted service" },
1182 { 0x06, "mosaic service" },
1183 { 0x07, "FM radio service" },
1184 { 0x08, "DVB SRM service" },
1185 { 0x09, "reserved" },
1186 { 0x0A, "advanced codec digital radio sound service" },
1187 { 0x0B, "advanced codec mosaic service" },
1188 { 0x0C, "data broadcast service" },
1189 { 0x0D, "reserved for Common Interface Usage (EN 50221)" },
1190 { 0x0E, "RCS Map (see EN 301 790)" },
1191 { 0x0F, "RCS FLS (see EN 301 790)" },
1192 { 0x10, "DVB MHP service" },
1193 { 0x11, "MPEG-2 HD digital television service" },
1194 { 0x16, "H.264/AVC SD digital television service" },
1195 { 0x17, "H.264/AVC SD NVOD time-shifted service" },
1196 { 0x18, "H.264/AVC SD NVOD reference service" },
1197 { 0x19, "H.264/AVC HD digital television service" },
1198 { 0x1A, "H.264/AVC HD NVOD time-shifted service" },
1199 { 0x1B, "H.264/AVC NVOD reference service" },
1200 { 0x1C, "H.264/AVC frame compatible plano-stereoscopic HD digital television service" },
1201 { 0x1D, "H.264/AVC rame compatible plano-stereoscopic HD NVOD time-shifted service" },
1202 { 0x1E, "H.264/AVC frame compatible plano-stereoscopic HD NVOD reference service" },
1203 { 0x1F, "HEVC digital television service" },
1204 { 0x20, "HEVC UHD DTV service with either: a resolution up to 3840x2160, HDR and/or a frame rate of 100 Hz, \
1205 120000/1001Hz, or 120 Hz; or a resolution greater than 3840x2160, SDR or HDR, up to 60Hz." },
1207 { 0x00, NULL }
1209 /* global variable that's shared e.g. with DVB-CI */
1210 value_string_ext mpeg_descr_service_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_service_type_vals);
1212 static void
1213 proto_mpeg_descriptor_dissect_service(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1215 uint8_t prov_len, name_len;
1216 unsigned enc_len;
1217 dvb_encoding_e encoding;
1219 proto_tree_add_item(tree, hf_mpeg_descr_service_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1220 offset += 1;
1222 prov_len = tvb_get_uint8(tvb, offset);
1223 proto_tree_add_item(tree, hf_mpeg_descr_service_provider_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1224 offset += 1;
1226 if (prov_len>0) {
1227 enc_len = dvb_analyze_string_charset(tvb, offset, prov_len, &encoding);
1228 dvb_add_chartbl(tree, hf_mpeg_descr_service_provider_name_encoding, tvb, offset, enc_len, encoding);
1230 proto_tree_add_item(tree, hf_mpeg_descr_service_provider,
1231 tvb, offset+enc_len, prov_len-enc_len, dvb_enc_to_item_enc(encoding));
1233 offset += prov_len;
1235 name_len = tvb_get_uint8(tvb, offset);
1236 proto_tree_add_item(tree, hf_mpeg_descr_service_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1237 offset += 1;
1239 if (name_len>0) {
1240 enc_len = dvb_analyze_string_charset(tvb, offset, name_len, &encoding);
1241 dvb_add_chartbl(tree, hf_mpeg_descr_service_name_encoding, tvb, offset, enc_len, encoding);
1243 proto_tree_add_item(tree, hf_mpeg_descr_service_name,
1244 tvb, offset+enc_len, name_len-enc_len, dvb_enc_to_item_enc(encoding));
1249 /* 0x49 Country Availability Descriptor */
1250 static int hf_mpeg_descr_country_availability_flag;
1251 static int hf_mpeg_descr_country_availability_reserved_future_use;
1252 static int hf_mpeg_descr_country_availability_country_code;
1254 static int ett_mpeg_descriptor_country_availability_countries;
1256 #define MPEG_DESCR_COUNTRY_AVAILABILITY_FLAG_MASK 0x80
1257 #define MPEG_DESCR_COUNTRY_AVAILABILITY_RESERVED_MASK 0x7F
1259 static const value_string mpeg_descr_country_availability_flag_vals[] = {
1260 { 0x0, "Reception of the service is not intended" },
1261 { 0x1, "Reception of the service is intended" },
1263 { 0x0, NULL }
1266 static void
1267 proto_mpeg_descriptor_dissect_country_availability_descriptor(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1269 unsigned end = offset+len;
1271 proto_tree *countries_tree;
1273 proto_tree_add_item(tree, hf_mpeg_descr_country_availability_flag , tvb, offset, 1, ENC_BIG_ENDIAN);
1274 proto_tree_add_item(tree, hf_mpeg_descr_country_availability_reserved_future_use , tvb, offset, 1, ENC_BIG_ENDIAN);
1275 offset += 1;
1277 countries_tree = proto_tree_add_subtree_format(tree, tvb, offset, end - offset, ett_mpeg_descriptor_country_availability_countries, NULL, "Countries");
1279 while (offset < end) {
1280 proto_tree_add_item(countries_tree, hf_mpeg_descr_country_availability_country_code, tvb, offset, 3, ENC_ASCII);
1281 offset += 3;
1285 /* 0x4A Linkage Descriptor */
1286 static int hf_mpeg_descr_linkage_transport_stream_id;
1287 static int hf_mpeg_descr_linkage_original_network_id;
1288 static int hf_mpeg_descr_linkage_service_id;
1289 static int hf_mpeg_descr_linkage_linkage_type;
1291 static int hf_mpeg_descr_linkage_hand_over_type;
1292 static int hf_mpeg_descr_linkage_reserved1;
1293 static int hf_mpeg_descr_linkage_origin_type;
1294 static int hf_mpeg_descr_linkage_network_id;
1295 static int hf_mpeg_descr_linkage_initial_service_id;
1297 static int hf_mpeg_descr_linkage_target_event_id;
1298 static int hf_mpeg_descr_linkage_target_listed;
1299 static int hf_mpeg_descr_linkage_event_simulcast;
1300 static int hf_mpeg_descr_linkage_reserved2;
1302 static int hf_mpeg_descr_linkage_interactive_network_id;
1303 static int hf_mpeg_descr_linkage_population_id_loop_count;
1304 static int hf_mpeg_descr_linkage_population_id;
1305 static int hf_mpeg_descr_linkage_population_id_base;
1306 static int hf_mpeg_descr_linkage_population_id_mask;
1308 static int hf_mpeg_descr_linkage_private_data_byte;
1310 static int ett_mpeg_descriptor_linkage_population_id;
1312 #define MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_MASK 0xF0
1313 #define MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_SHIFT 0x04
1314 #define MPEG_DESCR_LINKAGE_RESERVED1_MASK 0x0E
1315 #define MPEG_DESCR_LINKAGE_ORIGIN_TYPE_MASK 0x01
1317 #define MPEG_DESCR_LINKAGE_TARGET_LISTED_MASK 0x80
1318 #define MPEG_DESCR_LINKAGE_EVENT_SIMULCAST_MASK 0x40
1319 #define MPEG_DESCR_LINKAGE_RESERVED2_MASK 0x3F
1321 static const value_string mpeg_descr_linkage_linkage_type_vals[] = {
1322 { 0x01, "Information service" },
1323 { 0x02, "EPG service" },
1324 { 0x03, "CA replacement service" },
1325 { 0x04, "TS containing complete Network/Bouquet SI" },
1326 { 0x05, "Service replacement service" },
1327 { 0x06, "Data broadcast service" },
1328 { 0x07, "RCS Map" },
1329 { 0x08, "Mobile hand-over" },
1330 { 0x09, "System Software Update Service" },
1331 { 0x0A, "TS containing SSU BAT or NIT" },
1332 { 0x0B, "IP/MAC Notification Service" },
1333 { 0x0C, "TS containing INT BAT or NIT" },
1334 { 0x0D, "Event linkage" },
1335 { 0x81, "RCS FLS" },
1337 { 0x00, NULL }
1339 static value_string_ext mpeg_descr_linkage_linkage_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_linkage_linkage_type_vals);
1341 #if 0
1342 static const value_string mpeg_descr_linkage_hand_over_type_vals[] = {
1343 { 0x01, "DVB hand-over to an identical service in a neighbouring country" },
1344 { 0x02, "DVB hand-over to a local variation of the same service" },
1345 { 0x03, "DVB hand-over to an associated service" },
1347 { 0x00, NULL }
1349 #endif
1351 static const value_string mpeg_descr_linkage_origin_type_vals[] = {
1352 { 0x0, "NIT" },
1353 { 0x1, "SDT" },
1355 { 0x0, NULL }
1358 static const value_string mpeg_descr_linkage_target_listed_vals[] = {
1359 { 0x0, "Service may not be included in SDT" },
1360 { 0x1, "Service should be included in SDT" },
1362 { 0x0, NULL}
1365 static const value_string mpeg_descr_linkage_event_simulcast_vals[] = {
1366 { 0x0, "Events are offset in time" },
1367 { 0x1, "Target and source events are being simulcast" },
1369 { 0x0, NULL }
1372 static void
1373 proto_mpeg_descriptor_dissect_linkage(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1376 uint8_t linkage_type, hand_over_type, origin_type;
1377 unsigned end = offset + len;
1378 unsigned population_id_loop_count;
1379 uint16_t population_id_base, population_id_mask;
1381 proto_item *pi;
1382 proto_tree *population_tree;
1384 proto_tree_add_item(tree, hf_mpeg_descr_linkage_transport_stream_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1385 offset += 2;
1387 proto_tree_add_item(tree, hf_mpeg_descr_linkage_original_network_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1388 offset += 2;
1390 proto_tree_add_item(tree, hf_mpeg_descr_linkage_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1391 offset += 2;
1393 proto_tree_add_item(tree, hf_mpeg_descr_linkage_linkage_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1394 linkage_type = tvb_get_uint8(tvb, offset);
1395 offset += 1;
1397 if (linkage_type == 0x08) {
1398 proto_tree_add_item(tree, hf_mpeg_descr_linkage_hand_over_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1399 proto_tree_add_item(tree, hf_mpeg_descr_linkage_reserved1, tvb, offset, 1, ENC_BIG_ENDIAN);
1400 proto_tree_add_item(tree, hf_mpeg_descr_linkage_origin_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1401 hand_over_type = (tvb_get_uint8(tvb, offset) & MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_MASK) >> MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_SHIFT;
1402 origin_type = tvb_get_uint8(tvb, offset) & MPEG_DESCR_LINKAGE_ORIGIN_TYPE_MASK;
1403 offset += 1;
1405 if ((hand_over_type == 1) || (hand_over_type == 2) || (hand_over_type == 3)) {
1406 proto_tree_add_item(tree, hf_mpeg_descr_linkage_network_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1407 offset += 2;
1410 if (origin_type) {
1411 proto_tree_add_item(tree, hf_mpeg_descr_linkage_initial_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1412 offset += 2;
1415 } else if (linkage_type == 0x0D) {
1416 proto_tree_add_item(tree, hf_mpeg_descr_linkage_target_event_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1417 offset += 2;
1419 proto_tree_add_item(tree, hf_mpeg_descr_linkage_target_listed, tvb, offset, 1, ENC_BIG_ENDIAN);
1420 proto_tree_add_item(tree, hf_mpeg_descr_linkage_event_simulcast, tvb, offset, 1, ENC_BIG_ENDIAN);
1421 proto_tree_add_item(tree, hf_mpeg_descr_linkage_reserved2, tvb, offset, 1, ENC_BIG_ENDIAN);
1422 } else if (linkage_type == 0x81) {
1423 /* linkage type 0x81 is "user defined" in the DVB-SI spec (EN 300468)
1424 it is defined in the interaction channel spec (EN 301790)
1425 it seems that in practice, 0x81 is also used for other purposes than interaction channel
1426 if the following data really belongs to interaction channel, we need at least another 7 bytes */
1427 if (offset+7>end)
1428 return;
1430 proto_tree_add_item(tree, hf_mpeg_descr_linkage_interactive_network_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1431 offset += 2;
1433 population_id_loop_count = tvb_get_uint8(tvb, offset) + 1;
1434 proto_tree_add_item(tree, hf_mpeg_descr_linkage_population_id_loop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
1435 offset += 1;
1437 while (population_id_loop_count--) {
1438 population_id_base = tvb_get_ntohs(tvb, offset);
1439 population_id_mask = tvb_get_ntohs(tvb, offset + 2);
1440 pi = proto_tree_add_uint_format_value(tree, hf_mpeg_descr_linkage_population_id, tvb, offset, 4,
1441 population_id_base<<16|population_id_mask,
1442 "0x%04x / 0x%04x", population_id_base, population_id_mask);
1443 population_tree = proto_item_add_subtree(pi, ett_mpeg_descriptor_linkage_population_id);
1445 proto_tree_add_item(population_tree, hf_mpeg_descr_linkage_population_id_base, tvb, offset, 2, ENC_BIG_ENDIAN);
1446 offset += 2;
1448 proto_tree_add_item(population_tree, hf_mpeg_descr_linkage_population_id_mask, tvb, offset, 2, ENC_BIG_ENDIAN);
1449 offset += 2;
1454 if (end - offset > 0)
1455 proto_tree_add_item(tree, hf_mpeg_descr_linkage_private_data_byte, tvb, offset, end - offset, ENC_NA);
1458 /* 0x4B NVOD Reference Descriptor */
1459 static int hf_mpeg_descr_nvod_reference_tsid;
1460 static int hf_mpeg_descr_nvod_reference_onid;
1461 static int hf_mpeg_descr_nvod_reference_sid;
1463 static int ett_mpeg_descriptor_nvod_reference_triplet;
1465 static void
1466 proto_mpeg_descriptor_dissect_nvod_reference(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1468 unsigned end = offset + len;
1470 proto_tree * triplet_tree;
1472 while (offset < end) {
1473 unsigned tsid = tvb_get_uint16(tvb, offset + 0, ENC_BIG_ENDIAN);
1474 unsigned onid = tvb_get_uint16(tvb, offset + 2, ENC_BIG_ENDIAN);
1475 unsigned sid = tvb_get_uint16(tvb, offset + 4, ENC_BIG_ENDIAN);
1477 triplet_tree = proto_tree_add_subtree_format(tree, tvb, offset, 6, ett_mpeg_descriptor_nvod_reference_triplet, NULL, "NVOD Service Triplet (0x%04X:0x%04X:0x%04X)", tsid, onid, sid);
1479 proto_tree_add_item(triplet_tree, hf_mpeg_descr_nvod_reference_tsid, tvb, offset, 2, ENC_BIG_ENDIAN);
1480 offset += 2;
1482 proto_tree_add_item(triplet_tree, hf_mpeg_descr_nvod_reference_onid, tvb, offset, 2, ENC_BIG_ENDIAN);
1483 offset += 2;
1485 proto_tree_add_item(triplet_tree, hf_mpeg_descr_nvod_reference_sid, tvb, offset, 2, ENC_BIG_ENDIAN);
1486 offset += 2;
1490 /* 0x4C Time Shifted Service Descriptor */
1491 static int hf_mpeg_descr_time_shifted_service_id;
1493 static void
1494 proto_mpeg_descriptor_dissect_time_shifted_service(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1496 proto_tree_add_item(tree, hf_mpeg_descr_time_shifted_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1499 /* 0x4D Short Event Descriptor */
1500 static int hf_mpeg_descr_short_event_lang_code;
1501 static int hf_mpeg_descr_short_event_name_length;
1502 static int hf_mpeg_descr_short_event_name_encoding;
1503 static int hf_mpeg_descr_short_event_name;
1504 static int hf_mpeg_descr_short_event_text_length;
1505 static int hf_mpeg_descr_short_event_text_encoding;
1506 static int hf_mpeg_descr_short_event_text;
1508 static void
1509 proto_mpeg_descriptor_dissect_short_event(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1511 uint8_t name_len, text_len;
1512 unsigned enc_len;
1513 dvb_encoding_e encoding;
1515 proto_tree_add_item(tree, hf_mpeg_descr_short_event_lang_code, tvb, offset, 3, ENC_ASCII);
1516 offset += 3;
1518 name_len = tvb_get_uint8(tvb, offset);
1519 proto_tree_add_item(tree, hf_mpeg_descr_short_event_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1520 offset += 1;
1522 if (name_len>0) {
1523 enc_len = dvb_analyze_string_charset(tvb, offset, name_len, &encoding);
1524 dvb_add_chartbl(tree, hf_mpeg_descr_short_event_name_encoding, tvb, offset, enc_len, encoding);
1525 proto_tree_add_item(tree, hf_mpeg_descr_short_event_name,
1526 tvb, offset+enc_len, name_len-enc_len, dvb_enc_to_item_enc(encoding));
1528 offset += name_len;
1530 text_len = tvb_get_uint8(tvb, offset);
1531 proto_tree_add_item(tree, hf_mpeg_descr_short_event_text_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1532 offset += 1;
1534 if (text_len>0) {
1535 enc_len = dvb_analyze_string_charset(tvb, offset, text_len, &encoding);
1536 dvb_add_chartbl(tree, hf_mpeg_descr_short_event_text_encoding, tvb, offset, enc_len, encoding);
1537 proto_tree_add_item(tree, hf_mpeg_descr_short_event_text,
1538 tvb, offset+enc_len, text_len-enc_len, dvb_enc_to_item_enc(encoding));
1542 /* 0x4E Extended Event Descriptor */
1543 static int hf_mpeg_descr_extended_event_descriptor_number;
1544 static int hf_mpeg_descr_extended_event_last_descriptor_number;
1545 static int hf_mpeg_descr_extended_event_lang_code;
1546 static int hf_mpeg_descr_extended_event_length_of_items;
1547 static int hf_mpeg_descr_extended_event_item_description_length;
1548 static int hf_mpeg_descr_extended_event_item_description_char;
1549 static int hf_mpeg_descr_extended_event_item_length;
1550 static int hf_mpeg_descr_extended_event_item_char;
1551 static int hf_mpeg_descr_extended_event_text_length;
1552 static int hf_mpeg_descr_extended_event_text_encoding;
1553 static int hf_mpeg_descr_extended_event_text;
1555 #define MPEG_DESCR_EXTENDED_EVENT_DESCRIPTOR_NUMBER_MASK 0xF0
1556 #define MPEG_DESCR_EXTENDED_EVENT_LAST_DESCRIPTOR_NUMBER_MASK 0x0F
1558 static int ett_mpeg_descriptor_extended_event_item;
1560 static void
1561 proto_mpeg_descriptor_dissect_extended_event(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1564 uint8_t items_len, item_descr_len, item_len, text_len;
1565 unsigned items_end;
1566 proto_tree *item_tree;
1567 unsigned enc_len;
1568 dvb_encoding_e encoding;
1570 proto_tree_add_item(tree, hf_mpeg_descr_extended_event_descriptor_number, tvb, offset, 1, ENC_BIG_ENDIAN);
1571 proto_tree_add_item(tree, hf_mpeg_descr_extended_event_last_descriptor_number, tvb, offset, 1, ENC_BIG_ENDIAN);
1572 offset += 1;
1574 proto_tree_add_item(tree, hf_mpeg_descr_extended_event_lang_code, tvb, offset, 3, ENC_ASCII);
1575 offset += 3;
1577 items_len = tvb_get_uint8(tvb, offset);
1578 proto_tree_add_item(tree, hf_mpeg_descr_extended_event_length_of_items, tvb, offset, 1, ENC_BIG_ENDIAN);
1579 offset += 1;
1581 items_end = offset + items_len;
1583 while (offset < items_end) {
1584 item_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_mpeg_descriptor_extended_event_item, NULL, "Item");
1586 item_descr_len = tvb_get_uint8(tvb, offset);
1587 proto_tree_add_item(item_tree, hf_mpeg_descr_extended_event_item_description_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1588 offset += 1;
1590 proto_tree_add_item(item_tree, hf_mpeg_descr_extended_event_item_description_char, tvb, offset, item_descr_len, ENC_ASCII);
1591 offset += item_descr_len;
1593 item_len = tvb_get_uint8(tvb, offset);
1594 proto_tree_add_item(item_tree, hf_mpeg_descr_extended_event_item_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1595 offset += 1;
1597 proto_tree_add_item(item_tree, hf_mpeg_descr_extended_event_item_char, tvb, offset, item_len, ENC_ASCII);
1598 offset += item_len;
1601 text_len = tvb_get_uint8(tvb, offset);
1602 proto_tree_add_item(tree, hf_mpeg_descr_extended_event_text_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1603 offset += 1;
1605 if (text_len>0) {
1606 enc_len = dvb_analyze_string_charset(tvb, offset, text_len, &encoding);
1607 dvb_add_chartbl(tree, hf_mpeg_descr_extended_event_text_encoding, tvb, offset, enc_len, encoding);
1608 proto_tree_add_item(tree, hf_mpeg_descr_extended_event_text,
1609 tvb, offset+enc_len, text_len-enc_len, dvb_enc_to_item_enc(encoding));
1614 /* 0x4F Time Shifted Event Descriptor */
1615 static int hf_mpeg_descr_time_shifted_event_reference_service_id;
1616 static int hf_mpeg_descr_time_shifted_event_reference_event_id;
1618 static void
1619 proto_mpeg_descriptor_dissect_time_shifted_event(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1621 proto_tree_add_item(tree, hf_mpeg_descr_time_shifted_event_reference_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1622 offset += 2;
1624 proto_tree_add_item(tree, hf_mpeg_descr_time_shifted_event_reference_event_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1627 /* 0x50 Component Descriptor */
1628 static int hf_mpeg_descr_component_stream_content_ext;
1629 static int hf_mpeg_descr_component_stream_content;
1630 static int hf_mpeg_descr_component_type;
1631 static int hf_mpeg_descr_component_content_type;
1632 static int hf_mpeg_descr_component_tag;
1633 static int hf_mpeg_descr_component_lang_code;
1634 static int hf_mpeg_descr_component_text_encoding;
1635 static int hf_mpeg_descr_component_text;
1637 static int hf_mpeg_descr_component_high_stream_content_ext;
1638 static int hf_mpeg_descr_component_high_stream_content;
1639 static int hf_mpeg_descr_component_high_stream_content_both;
1640 static int hf_mpeg_descr_component_high_component_type;
1641 static int hf_mpeg_descr_component_high_stream_content_n_component_type;
1643 static int hf_mpeg_descr_component_nga_bits_b7_reserved;
1644 static int hf_mpeg_descr_component_nga_bits_b6_headphones;
1645 static int hf_mpeg_descr_component_nga_bits_b5_interactivity;
1646 static int hf_mpeg_descr_component_nga_bits_b4_dialogue_enhancement;
1647 static int hf_mpeg_descr_component_nga_bits_b3_spoken_subtitles;
1648 static int hf_mpeg_descr_component_nga_bits_b2_audio_description;
1649 static int hf_mpeg_descr_component_nga_bits_b10_channel_layout;
1651 #define MPEG_DESCR_COMPONENT_STREAM_CONTENT_EXT_MASK 0xF0
1652 #define MPEG_DESCR_COMPONENT_STREAM_CONTENT_MASK 0x0F
1653 #define MPEG_DESCR_COMPONENT_CONTENT_TYPE_MASK 0x0FFF
1655 #define MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_EXT_MASK 0xF000
1656 #define MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_MASK 0x0F00
1657 #define MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_BOTH_MASK 0xFF00
1658 #define MPEG_DESCR_COMPONENT_HIGH_COMPONENT_TYPE_MASK 0x00FF
1659 #define MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_N_COMPONENT_TYPE_MASK 0xFFFF
1661 #define MPEG_DESCR_COMPONENT_NGA_BITS_B7_MASK 0x0080
1662 #define MPEG_DESCR_COMPONENT_NGA_BITS_B6_MASK 0x0040
1663 #define MPEG_DESCR_COMPONENT_NGA_BITS_B5_MASK 0x0020
1664 #define MPEG_DESCR_COMPONENT_NGA_BITS_B4_MASK 0x0010
1665 #define MPEG_DESCR_COMPONENT_NGA_BITS_B3_MASK 0x0008
1666 #define MPEG_DESCR_COMPONENT_NGA_BITS_B2_MASK 0x0004
1667 #define MPEG_DESCR_COMPONENT_NGA_BITS_B10_MASK 0x0003
1669 static int ett_mpeg_descriptor_component_content_type;
1671 static const value_string mpeg_descr_component_stream_content_vals[] = {
1673 { 0x01, "Video (MPEG-2)" },
1674 { 0x02, "Audio (MPEG-1 Layer 2)" },
1675 { 0x03, "EBU Data (Teletext, Subtitle, ...)" },
1676 { 0x04, "Audio (AC-3)" },
1677 { 0x05, "Video (H.264/AVC)" },
1678 { 0x06, "Audio (HE-AAC)" },
1679 { 0x07, "Audio (DTS)" },
1681 { 0x0, NULL }
1684 static const value_string mpeg_descr_component_high_stream_content_vals[] = {
1685 { 0x09, "Video (HEVC)"},
1686 { 0x19, "Audio (AC-4/DTS-UHD)"},
1687 { 0x29, "TTML subtitles"},
1688 { 0xEB, "NGA flags"},
1689 { 0xFB, "Component tag based combination"},
1691 { 0x0, NULL }
1694 static const value_string mpeg_descr_component_preferred_reproduction_channel_layout_vals[] = {
1695 { 0x00, "no preference" },
1696 { 0x01, "stereo" },
1697 { 0x02, "two-dimensional" },
1698 { 0x03, "three-dimensional" },
1700 { 0x0, NULL }
1703 static const value_string mpeg_descr_component_content_type_vals[] = {
1705 { 0x0101, "MPEG-2 video, 4:3 aspect ratio, 25 Hz" },
1706 { 0x0102, "MPEG-2 video, 16:9 aspect ratio with pan vectors, 25 Hz" },
1707 { 0x0103, "MPEG-2 video, 16:9 aspect ratio without pan vectors, 25 Hz" },
1708 { 0x0104, "MPEG-2 video, > 16:9 aspect ratio, 25 Hz" },
1709 { 0x0105, "MPEG-2 video, 4:3 aspect ratio, 30 Hz" },
1710 { 0x0106, "MPEG-2 video, 16:9 aspect ratio with pan vectors, 30 Hz" },
1711 { 0x0107, "MPEG-2 video, 16:9 aspect ratio without pan vectors, 30 Hz" },
1712 { 0x0108, "MPEG-2 video, > 16:9 aspect ratio, 30 Hz" },
1713 { 0x0109, "MPEG-2 high definition video, 4:3 aspect ratio, 25 Hz" },
1714 { 0x010A, "MPEG-2 high definition video, 16:9 aspect ratio with pan vectors, 25 Hz" },
1715 { 0x010B, "MPEG-2 high definition video, 16:9 aspect ratio without pan vectors, 25 Hz" },
1716 { 0x010C, "MPEG-2 high definition video, > 16:9 aspect ratio, 25 Hz" },
1717 { 0x010D, "MPEG-2 high definition video, 4:3 aspect ratio, 30 Hz" },
1718 { 0x010E, "MPEG-2 high definition video, 16:9 aspect ratio with pan vectors, 30 Hz" },
1719 { 0x010F, "MPEG-2 high definition video, 16:9 aspect ratio without pan vectors, 30 Hz" },
1720 { 0x0110, "MPEG-2 high definition video, > 16:9 aspect ratio, 30 Hz" },
1721 { 0x0201, "MPEG-1 Layer 2 audio, single mono channel" },
1722 { 0x0202, "MPEG-1 Layer 2 audio, dual mono channel" },
1723 { 0x0203, "MPEG-1 Layer 2 audio, stereo" },
1724 { 0x0204, "MPEG-1 Layer 2 audio, multi-lingual, multi-channel" },
1725 { 0x0205, "MPEG-1 Layer 2 audio, surround sound" },
1726 { 0x0240, "MPEG-1 Layer 2 audio description for the visually impaired" },
1727 { 0x0241, "MPEG-1 Layer 2 audio for the hard of hearing" },
1728 { 0x0242, "Receiver-mixed supplementary audio as per annex E of TS 101 154 [9]" },
1729 { 0x0247, "MPEG-1 Layer 2 audio, receiver mix audio description as per annex E of TS 101 154 [9]" },
1730 { 0x0248, "MPEG-1 Layer 2 audio, broadcaster mix audio description" },
1731 { 0x0301, "EBU Teletext subtitles" },
1732 { 0x0302, "Associated EBU Teletext" },
1733 { 0x0303, "VBI data" },
1734 { 0x0310, "DVB subtitles (normal) with no monitor aspect ratio criticality" },
1735 { 0x0311, "DVB subtitles (normal) for display on 4:3 aspect ratio monitor" },
1736 { 0x0312, "DVB subtitles (normal) for display on 16:9 aspect ratio monitor" },
1737 { 0x0313, "DVB subtitles (normal) for display on 2.21:1 aspect ratio monitor" },
1738 { 0x0314, "DVB subtitles (normal) for display on a high definition monitor" },
1739 { 0x0315, "DVB subtitles (normal) with plano-stereoscopic disparity for display on a high definition monitor" },
1740 { 0x0316, "DVB subtitles (normal) for display on an ultra high definition monitor" },
1741 { 0x0320, "DVB subtitles (for the hard of hearing) with no monitor aspect ratio criticality" },
1742 { 0x0321, "DVB subtitles (for the hard of hearing) for display on 4:3 aspect ratio monitor" },
1743 { 0x0322, "DVB subtitles (for the hard of hearing) for display on 16:9 aspect ratio monitor" },
1744 { 0x0323, "DVB subtitles (for the hard of hearing) for display on 2.21:1 aspect ratio monitor" },
1745 { 0x0324, "DVB subtitles (for the hard of hearing) for display on a high definition monitor" },
1746 { 0x0325, "DVB subtitles (for the hard of hearing) with plano-stereoscopic disparity for display on a high definition monitor" },
1747 { 0x0326, "DVB subtitles (for the hard of hearing) for display on an ultra high definition monitor" },
1748 { 0x0330, "Open (in-vision) sign language interpretation for the deaf" },
1749 { 0x0331, "Closed sign language interpretation for the deaf" },
1750 { 0x0340, "video up-sampled from standard definition source material" },
1751 { 0x0341, "Video is standard dynamic range (SDR)" },
1752 { 0x0342, "Video is high dynamic range (HDR) remapped from standard dynamic range (SDR) source material" },
1753 { 0x0343, "Video is high dynamic range (HDR) up-converted from standard dynamic range (SDR) source material" },
1754 { 0x0344, "Video is standard frame rate, less than or equal to 60 Hz" },
1755 { 0x0345, "High frame rate video generated from lower frame rate source material" },
1756 { 0x0380, "dependent SAOC-DE data stream" },
1757 { 0x0501, "H.264/AVC standard definition video, 4:3 aspect ratio, 25 Hz" },
1758 { 0x0503, "H.264/AVC standard definition video, 16:9 aspect ratio, 25 Hz" },
1759 { 0x0504, "H.264/AVC standard definition video, > 16:9 aspect ratio, 25 Hz" },
1760 { 0x0505, "H.264/AVC standard definition video, 4:3 aspect ratio, 30 Hz" },
1761 { 0x0507, "H.264/AVC standard definition video, 16:9 aspect ratio, 30 Hz" },
1762 { 0x0508, "H.264/AVC standard definition video, > 16:9 aspect ratio, 30 Hz" },
1763 { 0x050B, "H.264/AVC high definition video, 16:9 aspect ratio, 25 Hz" },
1764 { 0x050C, "H.264/AVC high definition video, > 16:9 aspect ratio, 25 Hz" },
1765 { 0x050F, "H.264/AVC high definition video, 16:9 aspect ratio, 30 Hz" },
1766 { 0x0510, "H.264/AVC high definition video, > 16:9 aspect ratio, 30 Hz" },
1767 { 0x0580, "H.264/AVC plano-stereoscopic frame compatible high definition video, 16:9 aspect ratio, 25 Hz, Side-by-Side" },
1768 { 0x0581, "H.264/AVC plano-stereoscopic frame compatible high definition video, 16:9 aspect ratio, 25 Hz, Top-and-Bottom" },
1769 { 0x0582, "H.264/AVC plano-stereoscopic frame compatible high definition video, 16:9 aspect ratio, 30 Hz, Side-by-Side" },
1770 { 0x0583, "H.264/AVC stereoscopic frame compatible high definition video, 16:9 aspect ratio, 30 Hz, Top-and-Bottom" },
1771 { 0x0584, "H.264/MVC dependent view, plano-stereoscopic service compatible video" },
1772 { 0x0601, "HE-AAC audio, single mono channel" },
1773 { 0x0603, "HE-AAC audio, stereo" },
1774 { 0x0605, "HE-AAC audio, surround sound" },
1775 { 0x0640, "HE-AAC audio description for the visually impaired" },
1776 { 0x0641, "HE-AAC audio for the hard of hearing" },
1777 { 0x0642, "HE-AAC receiver-mixed supplementary audio as per annex E of TS 101 154 [9]" },
1778 { 0x0643, "HE-AAC v2 audio, stereo" },
1779 { 0x0644, "HE-AAC v2 audio description for the visually impaired" },
1780 { 0x0645, "HE-AAC v2 audio for the hard of hearing" },
1781 { 0x0646, "HE-AAC v2 receiver-mixed supplementary audio as per annex E of TS 101 154 [9]" },
1782 { 0x0647, "HE-AAC receiver mix audio description for the visually impaired" },
1783 { 0x0648, "HE-AAC broadcaster mix audio description for the visually impaired" },
1784 { 0x0649, "HE-AAC v2 receiver mix audio description for the visually impaired" },
1785 { 0x064A, "HE-AAC v2 broadcaster mix audio description for the visually impaired" },
1786 { 0x06A0, "HE-AAC, or HE-AAC v2 with SAOC-DE ancillary data" },
1787 { 0x0801, "DVB SRM data" },
1789 { 0x0, NULL }
1791 static value_string_ext mpeg_descr_component_content_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_component_content_type_vals);
1793 static const value_string mpeg_descr_component_high_content_type_vals[] = {
1795 { 0x0900, "HEVC Main Profile high definition video, 50 Hz" },
1796 { 0x0901, "HEVC Main 10 Profile high definition video, 50 Hz" },
1797 { 0x0902, "HEVC Main Profile high definition video, 60 Hz" },
1798 { 0x0903, "HEVC Main 10 Profile high definition video, 60 Hz" },
1799 { 0x0904, "HEVC UHD up to 3840x2160 (SDR up to 3840x2160@60Hz, SDR HFR dual PID with tmp. scal-ty \
1800 up to 3840x2160, HDR with HLG10 up to 3840x2160@60Hz, HDR with HLG10 HFR dual PID and tmp. scal-ty \
1801 up to 3840x2160)" },
1802 { 0x0905, "HEVC UHD PQ10 HDR up to 60Hz (HDR PQ10 up to 3840x2160@60Hz) or HEVC UHD PQ10 HDR 100Hz/\
1803 (120000/1001)Hz/120Hz with a half frame rate HEVC tmp. video sub-bit-stream (HDR PQ10 HFR dual PID \
1804 and tmp. scal-ty up to 3840x2160)" },
1805 { 0x0906, "HEVC UHD video up to 3840x2160@100Hz/(120000/1001)Hz/120Hz w/o a half frame rate HEVC tmp. \
1806 video sub-bit-stream (SDR HFR single PID up to 3840x2160, HDR with HLG10 HFR single PID up to 3840x2160)" },
1807 { 0x0907, "HEVC UHD PQ10 HDR, 100Hz/(120000/1001)Hz/120Hz without a half frame rate HEVC tmp. \
1808 video sub-bit-stream (HDR with PQ10 HFR single PID resolution up to 3840x2160)" },
1809 { 0x0908, "HEVC UHD video up to 7680x4320 (SDR up to 7680x4320@60Hz, HDR with PQ10 up to 7680x4320@60Hz, \
1810 HDR with HLG10 up to 7680x4320@60Hz)" },
1811 { 0x1900, "AC-4 main audio, mono" },
1812 { 0x1901, "AC-4 main audio, mono, dialogue enhancement enabled" },
1813 { 0x1902, "AC-4 main audio, stereo" },
1814 { 0x1903, "AC-4 main audio, stereo, dialogue enhancement enabled" },
1815 { 0x1904, "AC-4 main audio, multichannel" },
1816 { 0x1905, "AC-4 main audio, multichannel, dialogue enhancement enabled" },
1817 { 0x1906, "AC-4 broadcast-mix audio description, mono, for the visually impaired" },
1818 { 0x1907, "AC-4 broadcast-mix audio description, mono, for the visually impaired, dialogue enhancement enabled" },
1819 { 0x1908, "AC-4 broadcast-mix audio description, stereo, for the visually impaired" },
1820 { 0x1909, "AC-4 broadcast-mix audio description, stereo, for the visually impaired, dialogue enhancement enabled" },
1821 { 0x190A, "AC-4 broadcast-mix audio description, multichannel, for the visually impaired" },
1822 { 0x190B, "AC-4 broadcast-mix audio description, multichannel, for the visually impaired, dialogue enhancement enabled" },
1823 { 0x190C, "AC-4 receiver-mix audio description, mono, for the visually impaired" },
1824 { 0x190D, "AC-4 receiver-mix audio description, stereo, for the visually impaired" },
1825 { 0x190E, "AC-4 Part-2" },
1826 { 0x190F, "MPEG-H Audio LC Profile" },
1827 { 0x1910, "DTS-UHD main audio, mono" },
1828 { 0x1911, "DTS-UHD main audio, mono, dialogue enhancement enabled" },
1829 { 0x1912, "DTS-UHD main audio, stereo" },
1830 { 0x1913, "DTS-UHD main audio, stereo, dialogue enhancement enabled" },
1831 { 0x1914, "DTS-UHD main audio, multichannel" },
1832 { 0x1915, "DTS-UHD main audio, multichannel, dialogue enhancement enabled" },
1833 { 0x1916, "DTS-UHD broadcast-mix audio description, mono, for the visually impaired" },
1834 { 0x1917, "DTS-UHD broadcast-mix audio description, mono, for the visually impaired, dialogue enhancement enabled" },
1835 { 0x1918, "DTS-UHD broadcast-mix audio description, stereo, for the visually impaired" },
1836 { 0x1919, "DTS-UHD broadcast-mix audio description, stereo, for the visually impaired, dialogue enhancement enabled" },
1837 { 0x191A, "DTS-UHD broadcast-mix audio description, multichannel, for the visually impaired" },
1838 { 0x191B, "DTS-UHD broadcast-mix audio description, multichannel, for the visually impaired, dialogue enhancement enabled" },
1839 { 0x191C, "DTS-UHD receiver-mix audio description, mono, for the visually impaired" },
1840 { 0x191D, "DTS-UHD receiver-mix audio description, stereo, for the visually impaired" },
1841 { 0x191E, "DTS-UHD NGA Audio" },
1842 { 0xFB00, "less than 16:9 aspect ratio" },
1843 { 0xFB01, "16:9 aspect ratio" },
1844 { 0xFB02, "greater than 16:9 aspect ratio" },
1845 { 0xFB03, "plano-stereoscopic top and bottom (TaB) framepacking" },
1846 { 0xFB04, "HLG10 HDR" },
1847 { 0xFB05, "HEVC temporal video subset for a frame rate of 100 Hz, 120 000/1 001 Hz, or 120 Hz" },
1848 { 0xFB06, "SMPTE ST 2094-10 DMI format as defined in clause 5.14.4.4.3.4.3 of ETSI TS 101 154" },
1849 { 0xFB07, "SL-HDR2 DMI format as defined in clause 5.14.4.4.3.4.4 of ETSI TS 101 154" },
1850 { 0xFB08, "SMPTE ST 2094-40 DMI format as defined in clause 5.14.4.4.3.4.5 of ETSI TS 101 154" },
1852 { 0x0, NULL }
1854 static value_string_ext mpeg_descr_component_high_content_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_component_high_content_type_vals);
1856 static void
1857 proto_mpeg_descriptor_dissect_component(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1860 proto_item *cti;
1861 proto_tree *content_type_tree;
1862 unsigned end = offset + len;
1864 if (len < 6) {
1865 return;
1868 unsigned stream_content = tvb_get_bits8(tvb, offset * 8 + 4, 4);
1870 if (stream_content >= 0x09) {
1871 unsigned stream_content_ext = tvb_get_bits8(tvb, offset * 8, 4);
1873 cti = proto_tree_add_item(tree, hf_mpeg_descr_component_high_stream_content_n_component_type, tvb, offset, 2, ENC_BIG_ENDIAN);
1874 content_type_tree = proto_item_add_subtree(cti, ett_mpeg_descriptor_component_content_type);
1876 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_high_stream_content_both, tvb, offset, 2, ENC_BIG_ENDIAN);
1877 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_high_stream_content_ext, tvb, offset, 2, ENC_BIG_ENDIAN);
1878 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_high_stream_content, tvb, offset, 2, ENC_BIG_ENDIAN);
1880 if (stream_content_ext == 0x0E && stream_content == 0x0B) {
1881 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b7_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
1882 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b6_headphones, tvb, offset, 2, ENC_BIG_ENDIAN);
1883 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b5_interactivity, tvb, offset, 2, ENC_BIG_ENDIAN);
1884 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b4_dialogue_enhancement, tvb, offset, 2, ENC_BIG_ENDIAN);
1885 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b3_spoken_subtitles, tvb, offset, 2, ENC_BIG_ENDIAN);
1886 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b2_audio_description, tvb, offset, 2, ENC_BIG_ENDIAN);
1887 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b10_channel_layout, tvb, offset, 2, ENC_BIG_ENDIAN);
1888 } else {
1889 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_high_component_type, tvb, offset, 2, ENC_BIG_ENDIAN);
1891 offset += 2;
1892 goto mpeg_descr_component_tail;
1895 proto_tree_add_item(tree, hf_mpeg_descr_component_stream_content_ext, tvb, offset, 1, ENC_BIG_ENDIAN);
1897 cti = proto_tree_add_item(tree, hf_mpeg_descr_component_content_type, tvb, offset, 2, ENC_BIG_ENDIAN);
1898 content_type_tree = proto_item_add_subtree(cti, ett_mpeg_descriptor_component_content_type);
1900 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_stream_content, tvb, offset, 1, ENC_BIG_ENDIAN);
1901 offset += 1;
1903 proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1904 offset += 1;
1906 mpeg_descr_component_tail:
1908 proto_tree_add_item(tree, hf_mpeg_descr_component_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
1909 offset += 1;
1911 proto_tree_add_item(tree, hf_mpeg_descr_component_lang_code, tvb, offset, 3, ENC_ASCII);
1912 offset += 3;
1914 if (offset < end)
1916 dvb_encoding_e encoding;
1917 unsigned enc_len = dvb_analyze_string_charset(tvb, offset, end - offset, &encoding);
1918 dvb_add_chartbl(tree, hf_mpeg_descr_component_text_encoding, tvb, offset, enc_len, encoding);
1920 proto_tree_add_item(tree, hf_mpeg_descr_component_text, tvb, offset+enc_len, end-offset-enc_len, dvb_enc_to_item_enc(encoding));
1924 /* 0x51 Mosaic Descriptor */
1925 static int hf_mpeg_descr_mosaic_mosaic_entry_point;
1926 static int hf_mpeg_descr_mosaic_number_of_horizontal_elementary_cells;
1927 static int hf_mpeg_descr_mosaic_reserved_future_use1;
1928 static int hf_mpeg_descr_mosaic_number_of_vertical_elementary_cells;
1929 static int hf_mpeg_descr_mosaic_logical_cell_id;
1930 static int hf_mpeg_descr_mosaic_reserved_future_use2;
1931 static int hf_mpeg_descr_mosaic_logical_cell_presentation_info;
1932 static int hf_mpeg_descr_mosaic_elementary_cell_field_length;
1933 static int hf_mpeg_descr_mosaic_reserved_future_use3;
1934 static int hf_mpeg_descr_mosaic_elementary_cell_id;
1935 static int hf_mpeg_descr_mosaic_cell_linkage_info;
1936 static int hf_mpeg_descr_mosaic_bouquet_id;
1937 static int hf_mpeg_descr_mosaic_original_network_id;
1938 static int hf_mpeg_descr_mosaic_transport_stream_id;
1939 static int hf_mpeg_descr_mosaic_service_id;
1940 static int hf_mpeg_descr_mosaic_event_id;
1942 #define MPEG_DESCR_MOSAIC_ENTRY_POINT_MASK 0x80
1943 #define MPEG_DESCR_MOSAIC_NUM_OF_H_CELLS_MASK 0x70
1944 #define MPEG_DESCR_MOSAIC_RESERVED1_MASK 0x08
1945 #define MPEG_DESCR_MOSAIC_NUM_OF_V_CELLS_MASK 0x07
1946 #define MPEG_DESCR_MOSAIC_LOGICAL_CELL_ID_MASK 0xFC00
1947 #define MPEG_DESCR_MOSAIC_RESERVED2_MASK 0x03F8
1948 #define MPEG_DESCR_MOSAIC_CELL_PRESENTATION_INFO_MASK 0x0007
1949 #define MPEG_DESCR_MOSAIC_RESERVED3_MASK 0xC0
1950 #define MPEG_DESCR_MOSAIC_ELEMENTARY_CELL_ID_MASK 0x3F
1952 static int ett_mpeg_descriptor_mosaic_logical_cell;
1953 static int ett_mpeg_descriptor_mosaic_elementary_cells;
1955 static const value_string mpeg_descr_mosaic_number_of_e_cells_vals[] = {
1956 { 0x00, "One cell" },
1957 { 0x01, "Two cells" },
1958 { 0x02, "Three cells" },
1959 { 0x03, "Four cells" },
1960 { 0x04, "Five cells" },
1961 { 0x05, "Six cells" },
1962 { 0x06, "Seven cells" },
1963 { 0x07, "Eight cells" },
1965 { 0, NULL }
1968 static const range_string mpeg_descr_mosaic_logical_cell_presentation_info_vals[] = {
1969 { 0x00, 0x00, "Undefined" },
1970 { 0x01, 0x01, "Video" },
1971 { 0x02, 0x02, "Still picture" },
1972 { 0x03, 0x03, "Graphics/Text" },
1973 { 0x04, 0x07, "Reserved for future use" },
1975 { 0x00, 0x00, NULL }
1978 static const range_string mpeg_descr_mosaic_cell_linkage_info_vals[] = {
1979 { 0x00, 0x00, "Underfined" },
1980 { 0x01, 0x01, "Bouquet related" },
1981 { 0x02, 0x02, "Service related" },
1982 { 0x03, 0x03, "Other mosaic related" },
1983 { 0x04, 0x04, "Event related" },
1984 { 0x05, 0xFF, "Reserved for future use" },
1986 { 0x00, 0x00, NULL }
1989 static unsigned
1990 proto_mpeg_descriptor_dissect_mosaic_measure_l_cell_len(tvbuff_t *tvb, unsigned offset)
1992 unsigned l_offset = offset;
1994 l_offset += 2;
1995 uint8_t elementary_cell_field_length = tvb_get_uint8(tvb, l_offset);
1996 l_offset += 1;
1997 l_offset += elementary_cell_field_length;
1999 uint8_t cell_linkage_info = tvb_get_uint8(tvb, l_offset);
2000 l_offset += 1;
2002 switch (cell_linkage_info) {
2003 case 0x01 :
2004 l_offset += 2;
2005 break;
2006 case 0x02 :
2007 case 0x03 :
2008 l_offset += 6;
2009 break;
2010 case 0x04 :
2011 l_offset += 8;
2012 break;
2015 return l_offset - offset;
2018 static void
2019 proto_mpeg_descriptor_dissect_mosaic(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2021 unsigned end = offset + len;
2023 proto_tree_add_item(tree, hf_mpeg_descr_mosaic_mosaic_entry_point, tvb, offset, 1, ENC_BIG_ENDIAN);
2024 proto_tree_add_item(tree, hf_mpeg_descr_mosaic_number_of_horizontal_elementary_cells, tvb, offset, 1, ENC_BIG_ENDIAN);
2025 proto_tree_add_item(tree, hf_mpeg_descr_mosaic_reserved_future_use1, tvb, offset, 1, ENC_BIG_ENDIAN);
2026 proto_tree_add_item(tree, hf_mpeg_descr_mosaic_number_of_vertical_elementary_cells, tvb, offset, 1, ENC_BIG_ENDIAN);
2027 offset += 1;
2029 while (offset < end) {
2030 unsigned l_cell_len = proto_mpeg_descriptor_dissect_mosaic_measure_l_cell_len(tvb, offset);
2032 uint8_t logical_cell_id = tvb_get_bits(tvb, offset*8, 6, ENC_BIG_ENDIAN);
2033 proto_tree *cell_tree = proto_tree_add_subtree_format(tree, tvb, offset, l_cell_len, ett_mpeg_descriptor_mosaic_logical_cell, NULL, "Logical Cell 0x%02x", logical_cell_id);
2034 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_logical_cell_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2035 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_reserved_future_use2, tvb, offset, 2, ENC_BIG_ENDIAN);
2036 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_logical_cell_presentation_info, tvb, offset, 2, ENC_BIG_ENDIAN);
2037 offset += 2;
2039 uint8_t elementary_cell_field_length = tvb_get_uint8(tvb, offset);
2040 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_elementary_cell_field_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2041 offset += 1;
2043 proto_tree *field_tree = NULL;
2044 if (elementary_cell_field_length > 0) {
2045 field_tree = proto_tree_add_subtree(cell_tree, tvb, offset, elementary_cell_field_length, ett_mpeg_descriptor_mosaic_elementary_cells, NULL, "Elementary Cells");
2047 while (elementary_cell_field_length > 0) {
2048 proto_tree_add_item(field_tree, hf_mpeg_descr_mosaic_reserved_future_use3, tvb, offset, 1, ENC_BIG_ENDIAN);
2049 proto_tree_add_item(field_tree, hf_mpeg_descr_mosaic_elementary_cell_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2050 offset += 1;
2051 elementary_cell_field_length -= 1;
2054 uint8_t cell_linkage_info = tvb_get_uint8(tvb, offset);
2055 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_cell_linkage_info, tvb, offset, 1, ENC_BIG_ENDIAN);
2056 offset += 1;
2058 switch (cell_linkage_info) {
2059 case 0x01 :
2060 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_bouquet_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2061 offset += 2;
2062 break;
2063 case 0x02 :
2064 case 0x03 :
2065 case 0x04 :
2066 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_original_network_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2067 offset += 2;
2069 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_transport_stream_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2070 offset += 2;
2072 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2073 offset += 2;
2074 break;
2077 if (cell_linkage_info == 0x04) {
2078 proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_event_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2079 offset += 2;
2084 /* 0x52 Stream Identifier Descriptor */
2085 static int hf_mpeg_descr_stream_identifier_component_tag;
2087 static void
2088 proto_mpeg_descriptor_dissect_stream_identifier(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
2090 proto_tree_add_item(tree, hf_mpeg_descr_stream_identifier_component_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
2093 /* 0x53 CA Identifier Descriptor */
2094 static int hf_mpeg_descr_ca_identifier_system_id;
2096 static void
2097 proto_mpeg_descriptor_dissect_ca_identifier(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2099 unsigned end = offset + len;
2101 while (offset < end) {
2102 proto_tree_add_item(tree, hf_mpeg_descr_ca_identifier_system_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2103 offset += 2;
2108 /* 0x54 Content Descriptor */
2109 static int hf_mpeg_descr_content_nibble;
2110 static int hf_mpeg_descr_content_nibble_level_1;
2111 static int hf_mpeg_descr_content_nibble_level_2;
2112 static int hf_mpeg_descr_content_user_byte;
2114 #define MPEG_DESCR_CONTENT_NIBBLE_LEVEL_1_MASK 0xF0
2115 #define MPEG_DESCR_CONTENT_NIBBLE_LEVEL_2_MASK 0x0F
2117 static int ett_mpeg_descriptor_content_nibble;
2119 static const value_string mpeg_descr_content_nibble_vals[] = {
2121 { 0x10, "movie/drama (general)" },
2122 { 0x11, "detective/thriller" },
2123 { 0x12, "adventure/western/war" },
2124 { 0x13, "science fiction/fantasy/horror" },
2125 { 0x14, "comedy" },
2126 { 0x15, "soap/melodrama/folkloric" },
2127 { 0x16, "romance" },
2128 { 0x17, "serious/classical/religious/historical movie/drama" },
2129 { 0x18, "adult movie/drama" },
2130 { 0x1F, "user defined (movie/drama)" },
2132 { 0x20, "news/current affairs (general)" },
2133 { 0x21, "news/weather report" },
2134 { 0x22, "news magazine" },
2135 { 0x23, "documentary" },
2136 { 0x24, "discussion/interview/debate" },
2137 { 0x2F, "user defined (news/current affairs)" },
2139 { 0x30, "show/game show (general)" },
2140 { 0x31, "game show/quiz/contest" },
2141 { 0x32, "variety show" },
2142 { 0x33, "talk show" },
2143 { 0x3F, "user defined (show/game show)" },
2145 { 0x40, "sports (general)" },
2146 { 0x41, "special events (Olympic Games, World Cup, etc.)" },
2147 { 0x42, "sports magazines" },
2148 { 0x43, "football/soccer" },
2149 { 0x44, "tennis/squash" },
2150 { 0x45, "team sports (excluding football)" },
2151 { 0x46, "athletics" },
2152 { 0x47, "motor sport" },
2153 { 0x48, "water sport" },
2154 { 0x49, "winter sports" },
2155 { 0x4A, "equestrian" },
2156 { 0x4B, "martial sports" },
2157 { 0x4F, "user defined (sports)" },
2159 { 0x50, "children's/youth programmes (general)" },
2160 { 0x51, "pre-school children's programmes" },
2161 { 0x52, "entertainment programmes for 6 to14" },
2162 { 0x53, "entertainment programmes for 10 to 16" },
2163 { 0x54, "informational/educational/school programmes" },
2164 { 0x55, "cartoons/puppets" },
2165 { 0x5F, "user defined (children's/youth programmes)" },
2167 { 0x60, "music/ballet/dance (general)" },
2168 { 0x61, "rock/pop" },
2169 { 0x62, "serious music/classical music" },
2170 { 0x63, "folk/traditional music" },
2171 { 0x64, "jazz" },
2172 { 0x65, "musical/opera" },
2173 { 0x66, "ballet" },
2174 { 0x6F, "user defined (music/ballet/dance)" },
2176 { 0x70, "arts/culture (without music, general)" },
2177 { 0x71, "performing arts" },
2178 { 0x72, "fine arts" },
2179 { 0x73, "religion" },
2180 { 0x74, "popular culture/traditional arts" },
2181 { 0x75, "literature" },
2182 { 0x76, "film/cinema" },
2183 { 0x77, "experimental film/video" },
2184 { 0x78, "broadcasting/press" },
2185 { 0x79, "new media" },
2186 { 0x7A, "arts/culture magazines" },
2187 { 0x7B, "fashion" },
2188 { 0x7F, "user defined (arts/culture)" },
2190 { 0x80, "social/political issues/economics (general)" },
2191 { 0x81, "magazines/reports/documentary" },
2192 { 0x82, "economics/social advisory" },
2193 { 0x83, "remarkable people" },
2194 { 0x8F, "user defined (social/political issues/economics)" },
2196 { 0x90, "education/science/factual topics (general)" },
2197 { 0x91, "nature/animals/environment" },
2198 { 0x92, "technology/natural sciences" },
2199 { 0x93, "medicine/physiology/psychology" },
2200 { 0x94, "foreign countries/expeditions" },
2201 { 0x95, "social/spiritual sciences" },
2202 { 0x96, "further education" },
2203 { 0x97, "languages" },
2204 { 0x9F, "user defined (education/science/factual topics)" },
2206 { 0xA0, "leisure hobbies (general)" },
2207 { 0xA1, "tourism/travel" },
2208 { 0xA2, "handicraft" },
2209 { 0xA3, "motoring" },
2210 { 0xA4, "fitness and health" },
2211 { 0xA5, "cooking" },
2212 { 0xA6, "advertisement/shopping" },
2213 { 0xA7, "gardening" },
2214 { 0xAF, "user defined (leisure hobbies)" },
2216 { 0xB0, "original language" },
2217 { 0xB1, "black and white" },
2218 { 0xB2, "unpublished" },
2219 { 0xB3, "live broadcast" },
2220 { 0xBF, "user defined (special characteristics)" },
2222 { 0x00, NULL }
2224 static value_string_ext mpeg_descr_content_nibble_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_content_nibble_vals);
2226 static const value_string mpeg_descr_content_nibble_level_1_vals[] = {
2228 { 0x1, "Movie/Drama" },
2229 { 0x2, "News/Current affairs" },
2230 { 0x3, "Show/Game show" },
2231 { 0x4, "Sports" },
2232 { 0x5, "Children's/Youth programmes" },
2233 { 0x6, "Music/Ballet/Dance" },
2234 { 0x7, "Arts/Culture (without music)" },
2235 { 0x8, "Social/Political issues/Economics" },
2236 { 0x9, "Education/Science/Factual topics" },
2237 { 0xA, "Leisure hobbies" },
2238 { 0xB, "Special characteristics" },
2240 { 0x00, NULL }
2242 static value_string_ext mpeg_descr_content_nibble_level_1_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_content_nibble_level_1_vals);
2244 static void
2245 proto_mpeg_descriptor_dissect_content(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2247 proto_item *ni;
2248 proto_tree *nibble_tree;
2250 unsigned end = offset + len;
2252 while (offset < end) {
2253 ni = proto_tree_add_item(tree, hf_mpeg_descr_content_nibble, tvb, offset, 1, ENC_BIG_ENDIAN);
2254 nibble_tree = proto_item_add_subtree(ni, ett_mpeg_descriptor_content_nibble);
2256 proto_tree_add_item(nibble_tree, hf_mpeg_descr_content_nibble_level_1, tvb, offset, 1, ENC_BIG_ENDIAN);
2257 proto_tree_add_item(nibble_tree, hf_mpeg_descr_content_nibble_level_2, tvb, offset, 1, ENC_BIG_ENDIAN);
2258 offset += 1;
2260 proto_tree_add_item(tree, hf_mpeg_descr_content_user_byte, tvb, offset, 1, ENC_BIG_ENDIAN);
2261 offset += 1;
2266 /* 0x55 Parental Rating Descriptor */
2267 static int hf_mpeg_descr_parental_rating_country_code;
2268 static int hf_mpeg_descr_parental_rating_rating;
2270 static const value_string mpeg_descr_parental_rating_vals[] = {
2271 { 0x00, "Undefined" },
2272 { 0x01, "Minimum 4 year old" },
2273 { 0x02, "Minimum 5 year old" },
2274 { 0x03, "Minimum 6 year old" },
2275 { 0x04, "Minimum 7 year old" },
2276 { 0x05, "Minimum 8 year old" },
2277 { 0x06, "Minimum 9 year old" },
2278 { 0x07, "Minimum 10 year old" },
2279 { 0x08, "Minimum 11 year old" },
2280 { 0x09, "Minimum 12 year old" },
2281 { 0x0A, "Minimum 13 year old" },
2282 { 0x0B, "Minimum 14 year old" },
2283 { 0x0C, "Minimum 15 year old" },
2284 { 0x0D, "Minimum 16 year old" },
2285 { 0x0E, "Minimum 17 year old" },
2286 { 0x0F, "Minimum 18 year old" },
2288 { 0x00, NULL }
2290 static value_string_ext mpeg_descr_parental_rating_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_parental_rating_vals);
2293 static void
2294 proto_mpeg_descriptor_dissect_parental_rating(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
2296 proto_tree_add_item(tree, hf_mpeg_descr_parental_rating_country_code, tvb, offset, 3, ENC_ASCII);
2297 offset += 3;
2299 proto_tree_add_item(tree, hf_mpeg_descr_parental_rating_rating, tvb, offset, 1, ENC_BIG_ENDIAN);
2302 /* 0x56 Teletext Descriptor */
2303 static int hf_mpeg_descr_teletext_lang_code;
2304 static int hf_mpeg_descr_teletext_type;
2305 static int hf_mpeg_descr_teletext_magazine_number;
2306 static int hf_mpeg_descr_teletext_page_number;
2308 #define MPEG_DESCR_TELETEXT_TYPE_MASK 0xF8
2309 #define MPEG_DESCR_TELETEXT_MAGAZINE_NUMBER_MASK 0x07
2311 static const value_string mpeg_descr_teletext_type_vals[] = {
2312 { 0x00, "Reserved" },
2313 { 0x01, "Initial Teletext Page" },
2314 { 0x02, "Teletext Subtitle Page" },
2315 { 0x03, "Additional Information Page" },
2316 { 0x04, "Programme Schedule Page" },
2317 { 0x05, "Teletext Subtitle Page for hearing impaired people" },
2319 { 0, NULL }
2323 static void
2324 proto_mpeg_descriptor_dissect_teletext(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2326 unsigned end = offset + len;
2328 while (offset < end) {
2329 proto_tree_add_item(tree, hf_mpeg_descr_teletext_lang_code, tvb, offset, 3, ENC_ASCII);
2330 offset += 3;
2332 proto_tree_add_item(tree, hf_mpeg_descr_teletext_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2333 proto_tree_add_item(tree, hf_mpeg_descr_teletext_magazine_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2334 offset += 1;
2336 proto_tree_add_item(tree, hf_mpeg_descr_teletext_page_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2337 offset += 1;
2341 /* 0x57 Telephone Descriptor */
2342 static int hf_mpeg_descr_telephone_reserved_future_use1;
2343 static int hf_mpeg_descr_telephone_foreign_availability;
2344 static int hf_mpeg_descr_telephone_connection_type;
2345 static int hf_mpeg_descr_telephone_reserved_future_use2;
2346 static int hf_mpeg_descr_telephone_country_prefix_length;
2347 static int hf_mpeg_descr_telephone_international_area_code_length;
2348 static int hf_mpeg_descr_telephone_operator_code_length;
2349 static int hf_mpeg_descr_telephone_reserved_future_use3;
2350 static int hf_mpeg_descr_telephone_national_area_code_length;
2351 static int hf_mpeg_descr_telephone_core_number_length;
2352 static int hf_mpeg_descr_telephone_number;
2353 static int hf_mpeg_descr_telephone_country_prefix;
2354 static int hf_mpeg_descr_telephone_international_area_code;
2355 static int hf_mpeg_descr_telephone_operator_code;
2356 static int hf_mpeg_descr_telephone_national_area_code;
2357 static int hf_mpeg_descr_telephone_core_number;
2359 #define MPEG_DESCR_TELEPHONE_RESERVED1_MASK 0xC0
2360 #define MPEG_DESCR_TELEPHONE_FOREIGN_AVAILABILITY_MASK 0x20
2361 #define MPEG_DESCR_TELEPHONE_CONNECTION_TYPE_MASK 0x1F
2362 #define MPEG_DESCR_TELEPHONE_RESERVED2_MASK 0x80
2363 #define MPEG_DESCR_TELEPHONE_COUNTRY_PREFIX_LEN_MASK 0x60
2364 #define MPEG_DESCR_TELEPHONE_INTERNATIONAL_CODE_LEN_MASK 0x1C
2365 #define MPEG_DESCR_TELEPHONE_OPERATOR_CODE_LEN_MASK 0x03
2366 #define MPEG_DESCR_TELEPHONE_RESERVED3_MASK 0x80
2367 #define MPEG_DESCR_TELEPHONE_NATIONAL_CODE_LEN_MASK 0x70
2368 #define MPEG_DESCR_TELEPHONE_CORE_NUMBER_LEN_MASK 0x0F
2370 static const value_string mpeg_descr_telephone_foreign_availability_vals[] = {
2371 { 0x0, "Inside country only" },
2372 { 0x1, "Foreign call available" },
2374 { 0x0, NULL }
2377 static const range_string mpeg_descr_telephone_connection_type_vals[] = {
2378 { 0x00, 0x1F, "Unknown" },
2380 { 0, 0, NULL }
2383 static int ett_mpeg_descriptor_telephone_number;
2385 static void
2386 proto_mpeg_descriptor_dissect_telephone(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
2388 uint32_t country_prefix_length;
2389 uint32_t international_area_code_length;
2390 uint32_t operator_code_length;
2391 uint32_t national_area_code_length;
2392 uint32_t core_number_length;
2394 proto_item * ni;
2395 proto_tree * number_tree;
2397 proto_tree_add_item(tree, hf_mpeg_descr_telephone_reserved_future_use1, tvb, offset, 1, ENC_BIG_ENDIAN);
2398 proto_tree_add_item(tree, hf_mpeg_descr_telephone_foreign_availability, tvb, offset, 1, ENC_BIG_ENDIAN);
2399 proto_tree_add_item(tree, hf_mpeg_descr_telephone_connection_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2400 offset += 1;
2402 proto_tree_add_item(tree, hf_mpeg_descr_telephone_reserved_future_use2, tvb, offset, 1, ENC_BIG_ENDIAN);
2403 proto_tree_add_item_ret_uint(tree, hf_mpeg_descr_telephone_country_prefix_length, tvb, offset, 1, ENC_BIG_ENDIAN, &country_prefix_length);
2404 proto_tree_add_item_ret_uint(tree, hf_mpeg_descr_telephone_international_area_code_length, tvb, offset, 1, ENC_BIG_ENDIAN, &international_area_code_length);
2405 proto_tree_add_item_ret_uint(tree, hf_mpeg_descr_telephone_operator_code_length, tvb, offset, 1, ENC_BIG_ENDIAN, &operator_code_length);
2406 offset += 1;
2408 proto_tree_add_item(tree, hf_mpeg_descr_telephone_reserved_future_use3, tvb, offset, 1, ENC_BIG_ENDIAN);
2409 proto_tree_add_item_ret_uint(tree, hf_mpeg_descr_telephone_national_area_code_length, tvb, offset, 1, ENC_BIG_ENDIAN, &national_area_code_length);
2410 proto_tree_add_item_ret_uint(tree, hf_mpeg_descr_telephone_core_number_length, tvb, offset, 1, ENC_BIG_ENDIAN, &core_number_length);
2411 offset += 1;
2413 uint32_t number_l = country_prefix_length + international_area_code_length + operator_code_length + national_area_code_length + core_number_length;
2415 if (number_l == 0) return;
2416 ni = proto_tree_add_item(tree, hf_mpeg_descr_telephone_number, tvb, offset, number_l, ENC_ISO_8859_1);
2417 number_tree = proto_item_add_subtree(ni, ett_mpeg_descriptor_telephone_number);
2419 if (country_prefix_length != 0) {
2420 proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_country_prefix, tvb, offset, country_prefix_length, ENC_ISO_8859_1);
2421 offset += country_prefix_length;
2424 if (international_area_code_length != 0) {
2425 proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_international_area_code, tvb, offset, international_area_code_length, ENC_ISO_8859_1);
2426 offset += international_area_code_length;
2429 if (operator_code_length != 0) {
2430 proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_operator_code, tvb, offset, operator_code_length, ENC_ISO_8859_1);
2431 offset += operator_code_length;
2434 if (national_area_code_length != 0) {
2435 proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_national_area_code, tvb, offset, national_area_code_length, ENC_ISO_8859_1);
2436 offset += national_area_code_length;
2439 if (core_number_length == 0) return;
2440 proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_core_number, tvb, offset, core_number_length, ENC_ISO_8859_1);
2443 /* 0x58 Local Time Offset Descriptor */
2444 static int hf_mpeg_descr_local_time_offset_country_code;
2445 static int hf_mpeg_descr_local_time_offset_region_id;
2446 static int hf_mpeg_descr_local_time_offset_reserved;
2447 static int hf_mpeg_descr_local_time_offset_polarity;
2448 static int hf_mpeg_descr_local_time_offset_offset;
2449 static int hf_mpeg_descr_local_time_offset_time_of_change;
2450 static int hf_mpeg_descr_local_time_offset_next_time_offset;
2452 #define MPEG_DESCR_LOCAL_TIME_OFFSET_COUNTRY_REGION_ID_MASK 0xFC
2453 #define MPEG_DESCR_LOCAL_TIME_OFFSET_RESERVED_MASK 0x02
2454 #define MPEG_DESCR_LOCAL_TIME_OFFSET_POLARITY 0x01
2456 static const value_string mpeg_descr_local_time_offset_polarity_vals[] = {
2457 { 0x0, "Positive (local time ahead of UTC)" },
2458 { 0x1, "Negative (local time behind UTC)" },
2460 { 0x0, NULL }
2463 static void
2464 proto_mpeg_descriptor_dissect_local_time_offset(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2466 unsigned end = offset + len;
2467 uint8_t hour, min;
2468 nstime_t local_time_offset, time_of_change, next_time_offset;
2470 while (offset < end) {
2471 proto_tree_add_item(tree, hf_mpeg_descr_local_time_offset_country_code, tvb, offset, 3, ENC_ASCII);
2472 offset += 3;
2474 proto_tree_add_item(tree, hf_mpeg_descr_local_time_offset_region_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2475 proto_tree_add_item(tree, hf_mpeg_descr_local_time_offset_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
2476 proto_tree_add_item(tree, hf_mpeg_descr_local_time_offset_polarity, tvb, offset, 1, ENC_BIG_ENDIAN);
2477 offset += 1;
2479 hour = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset));
2480 min = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1));
2481 nstime_set_zero(&local_time_offset);
2482 local_time_offset.secs = hour*60*60 + min*60;
2483 proto_tree_add_time_format_value(tree, hf_mpeg_descr_local_time_offset_offset,
2484 tvb, offset, 2, &local_time_offset, "%02d:%02d", hour, min);
2485 offset += 2;
2488 if (packet_mpeg_sect_mjd_to_utc_time(tvb, offset, &time_of_change) < 0) {
2489 proto_tree_add_time_format_value(tree, hf_mpeg_descr_local_time_offset_time_of_change, tvb, offset, 5, &time_of_change, "Unparseable time");
2490 } else {
2491 proto_tree_add_time(tree, hf_mpeg_descr_local_time_offset_time_of_change, tvb, offset, 5, &time_of_change);
2493 offset += 5;
2495 hour = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset));
2496 min = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1));
2497 nstime_set_zero(&next_time_offset);
2498 next_time_offset.secs = hour*60*60 + min*60;
2499 proto_tree_add_time_format_value(tree, hf_mpeg_descr_local_time_offset_next_time_offset,
2500 tvb, offset, 2, &next_time_offset, "%02d:%02d", hour, min);
2501 offset += 2;
2505 /* 0x59 Subtitling Descriptor */
2506 static int hf_mpeg_descr_subtitling_lang_code;
2507 static int hf_mpeg_descr_subtitling_type;
2508 static int hf_mpeg_descr_subtitling_composition_page_id;
2509 static int hf_mpeg_descr_subtitling_ancillary_page_id;
2512 static const value_string mpeg_descr_subtitling_type_vals[] = {
2513 { 0x01, "EBU Teletext subtitles" },
2514 { 0x02, "associated EBU Teletext" },
2515 { 0x03, "VBI data" },
2516 { 0x10, "DVB subtitles (normal) with no monitor aspect ratio criticality" },
2517 { 0x11, "DVB subtitles (normal) for display on 4:3 aspect ratio monitor" },
2518 { 0x12, "DVB subtitles (normal) for display on 16:9 aspect ratio monitor" },
2519 { 0x13, "DVB subtitles (normal) for display on 2.21:1 aspect ratio monitor" },
2520 { 0x14, "DVB subtitles (normal) for display on a high definition monitor" },
2521 { 0x20, "DVB subtitles (for the hard of hearing) with no monitor aspect ratio criticality" },
2522 { 0x21, "DVB subtitles (for the hard of hearing) for display on 4:3 aspect ratio monitor" },
2523 { 0x22, "DVB subtitles (for the hard of hearing) for display on 16:9 aspect ratio monitor" },
2524 { 0x23, "DVB subtitles (for the hard of hearing) for display on 2.21:1 aspect ratio monitor" },
2525 { 0x24, "DVB subtitles (for the hard of hearing) for display on a high definition monitor" },
2526 { 0x30, "Open (in-vision) sign language interpretation for the deaf" },
2527 { 0x31, "Closed sign language interpretation for the deaf" },
2528 { 0x40, "video up-sampled from standard definition source material" },
2530 { 0, NULL }
2532 static value_string_ext mpeg_descr_subtitling_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_subtitling_type_vals);
2534 static void
2535 proto_mpeg_descriptor_dissect_subtitling(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2537 unsigned end = offset + len;
2539 while (offset < end) {
2540 proto_tree_add_item(tree, hf_mpeg_descr_subtitling_lang_code, tvb, offset, 3, ENC_ASCII);
2541 offset += 3;
2543 proto_tree_add_item(tree, hf_mpeg_descr_subtitling_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2544 offset += 1;
2546 proto_tree_add_item(tree, hf_mpeg_descr_subtitling_composition_page_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2547 offset += 2;
2549 proto_tree_add_item(tree, hf_mpeg_descr_subtitling_ancillary_page_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2550 offset += 2;
2555 /* 0x5A Terrestrial Delivery System Descriptor */
2556 static int hf_mpeg_descr_terrestrial_delivery_centre_frequency;
2557 static int hf_mpeg_descr_terrestrial_delivery_bandwidth;
2558 static int hf_mpeg_descr_terrestrial_delivery_priority;
2559 static int hf_mpeg_descr_terrestrial_delivery_time_slicing_indicator;
2560 static int hf_mpeg_descr_terrestrial_delivery_mpe_fec_indicator;
2561 static int hf_mpeg_descr_terrestrial_delivery_reserved1;
2562 static int hf_mpeg_descr_terrestrial_delivery_constellation;
2563 static int hf_mpeg_descr_terrestrial_delivery_hierarchy_information;
2564 static int hf_mpeg_descr_terrestrial_delivery_code_rate_hp_stream;
2565 static int hf_mpeg_descr_terrestrial_delivery_code_rate_lp_stream;
2566 static int hf_mpeg_descr_terrestrial_delivery_guard_interval;
2567 static int hf_mpeg_descr_terrestrial_delivery_transmission_mode;
2568 static int hf_mpeg_descr_terrestrial_delivery_other_frequency_flag;
2569 static int hf_mpeg_descr_terrestrial_delivery_reserved2;
2571 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_BANDWIDTH_MASK 0xE0
2572 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_PRIORITY_MASK 0x10
2573 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_TIME_SLICING_INDICATOR_MASK 0x08
2574 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_MPE_FEC_INDICATOR_MASK 0x04
2575 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_RESERVED1_MASK 0x03
2576 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_CONSTELLATION_MASK 0xC0
2577 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_HIERARCHY_INFORMATION_MASK 0x38
2578 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_CODE_RATE_HP_STREAM_MASK 0x07
2579 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_CODE_RATE_LP_STREAM_MASK 0xE0
2580 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_GUARD_INTERVAL_MASK 0x18
2581 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_TRANSMISSION_MODE_MASK 0x06
2582 #define MPEG_DESCR_TERRESTRIAL_DELIVERY_OTHER_FREQUENCY_FLAG_MASK 0x01
2584 static const value_string mpeg_descr_terrestrial_delivery_bandwidth_vals[] = {
2585 { 0x0, "8 MHz" },
2586 { 0x1, "7 MHz" },
2587 { 0x2, "6 MHz" },
2588 { 0x3, "5 Mhz" },
2590 { 0x0, NULL }
2593 static const value_string mpeg_descr_terrestrial_delivery_priority_vals[] = {
2594 { 0x0, "Low Priority" },
2595 { 0x1, "High Priority (or N/A if not hierarchical stream)" },
2597 { 0x0, NULL }
2600 static const value_string mpeg_descr_terrestrial_delivery_time_slicing_indicator_vals[] = {
2601 { 0x0, "At least one elementary stream uses Time Slicing" },
2602 { 0x1, "Time Slicing not used" },
2604 { 0x0, NULL }
2607 static const value_string mpeg_descr_terrestrial_delivery_mpe_fec_indicator_vals[] = {
2608 { 0x0, "At least one elementary stream uses MPE-FEC" },
2609 { 0x1, "MPE-FEC not used" },
2611 { 0x0, NULL }
2614 static const value_string mpeg_descr_terrestrial_delivery_constellation_vals[] = {
2615 { 0x0, "QPSK" },
2616 { 0x1, "16-QAM" },
2617 { 0x2, "64-QAM" },
2619 { 0x0, NULL }
2622 static const value_string mpeg_descr_terrestrial_delivery_hierarchy_information_vals[] = {
2623 { 0x0, "Non-hierarchical, native interleaver" },
2624 { 0x1, "alpha = 1, native interleaver" },
2625 { 0x2, "alpha = 2, native interleaver" },
2626 { 0x3, "alpha = 4, native interleaver" },
2627 { 0x4, "Non-hierarchical, in-depth interleaver" },
2628 { 0x5, "alpha = 1, in-depth interleaver" },
2629 { 0x6, "alpha = 2, in-depth interleaver" },
2630 { 0x7, "alpha = 4, in-depth interleaver" },
2632 { 0x0, NULL }
2635 static const value_string mpeg_descr_terrestrial_delivery_code_rate_vals[] = {
2636 { 0x0, "1/2 convolutional code rate" },
2637 { 0x1, "2/3 convolutional code rate" },
2638 { 0x2, "3/4 convolutional code rate" },
2639 { 0x3, "5/6 convolutional code rate" },
2640 { 0x4, "7/8 convolutional code rate" },
2642 { 0x0, NULL }
2645 static const value_string mpeg_descr_terrestrial_delivery_guard_interval_vals[] = {
2646 { 0x0, "1/32" },
2647 { 0x1, "1/16" },
2648 { 0x2, "1/8" },
2649 { 0x3, "1/4" },
2651 { 0x0, NULL }
2654 static const value_string mpeg_descr_terrestrial_delivery_other_frequency_flag_vals[] = {
2655 { 0x0, "No other frequency is in use" },
2656 { 0x1, "One or more frequencies are in use" },
2658 { 0x0, NULL }
2661 static const value_string mpeg_descr_terrestrial_delivery_transmission_mode_vals[] = {
2662 { 0x0, "2k mode" },
2663 { 0x1, "8k mode" },
2664 { 0x2, "4k mode" },
2666 { 0x0, NULL }
2669 static void
2670 proto_mpeg_descriptor_dissect_terrestrial_delivery(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
2672 uint64_t centre_freq;
2674 /* the descriptor stores the centre frequency in units of 10Hz (so
2675 that they can get away with 32bits), we're using Hz here */
2676 centre_freq = tvb_get_ntohl(tvb, offset) * 10;
2678 proto_tree_add_uint64_format_value(tree, hf_mpeg_descr_terrestrial_delivery_centre_frequency, tvb, offset, 4,
2679 centre_freq, "%d.%06d MHz", (unsigned)centre_freq/(1000*1000), (unsigned)centre_freq%(1000*1000));
2680 offset += 4;
2682 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_bandwidth, tvb, offset, 1, ENC_BIG_ENDIAN);
2683 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
2684 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_time_slicing_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
2685 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_mpe_fec_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
2686 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_reserved1, tvb, offset, 1, ENC_BIG_ENDIAN);
2687 offset += 1;
2689 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_constellation, tvb, offset, 1, ENC_BIG_ENDIAN);
2690 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_hierarchy_information, tvb, offset, 1, ENC_BIG_ENDIAN);
2691 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_code_rate_hp_stream, tvb, offset, 1, ENC_BIG_ENDIAN);
2692 offset += 1;
2694 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_code_rate_lp_stream, tvb, offset, 1, ENC_BIG_ENDIAN);
2695 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_guard_interval, tvb, offset, 1, ENC_BIG_ENDIAN);
2696 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_transmission_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
2697 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_other_frequency_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
2698 offset += 1;
2700 proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_reserved2, tvb, offset, 4, ENC_BIG_ENDIAN);
2704 /* 0x5B Multilingual Network Name Descriptor */
2705 static int hf_mpeg_descr_multilng_network_name_desc_iso639_language_code;
2706 static int hf_mpeg_descr_multilng_network_name_desc_name_length;
2707 static int hf_mpeg_descr_multilng_network_name_desc_name_encoding;
2708 static int hf_mpeg_descr_multilng_network_name_desc_name;
2710 static int ett_mpeg_descriptor_multilng_network_name_desc_lng;
2712 static unsigned
2713 proto_mpeg_descriptor_dissect_multilng_network_name_desc_measure_lng_len(tvbuff_t *tvb, unsigned offset, unsigned len)
2715 unsigned l_offset = offset;
2716 unsigned cnt = len;
2718 if (cnt < 3) return l_offset - offset;
2719 cnt -= 3;
2720 l_offset += 3;
2722 if (cnt < 1) return l_offset - offset;
2723 unsigned network_name_length = tvb_get_uint8(tvb, l_offset);
2724 cnt -= 1;
2725 l_offset += 1;
2727 network_name_length = MIN(network_name_length, cnt);
2728 l_offset += network_name_length;
2730 return l_offset - offset;
2733 static void
2734 proto_mpeg_descriptor_dissect_multilng_network_name_desc(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2736 unsigned cnt = len;
2738 while (cnt > 0)
2740 char *lng_str;
2741 proto_tree * lng_tree;
2742 proto_item * lng_item;
2744 if (cnt < 3) return;
2745 unsigned lng_len = proto_mpeg_descriptor_dissect_multilng_network_name_desc_measure_lng_len(tvb, offset, cnt);
2746 lng_tree = proto_tree_add_subtree(tree, tvb, offset, lng_len,
2747 ett_mpeg_descriptor_multilng_network_name_desc_lng, &lng_item, NULL);
2749 proto_tree_add_item_ret_display_string(lng_tree, hf_mpeg_descr_multilng_network_name_desc_iso639_language_code, tvb, offset, 3, ENC_ASCII,
2750 wmem_packet_scope(), &lng_str);
2751 proto_item_set_text(lng_item, "Language \"%s\"", lng_str);
2752 offset += 3;
2753 cnt -= 3;
2755 if (cnt < 1) return;
2756 unsigned network_name_length = tvb_get_uint8(tvb, offset);
2757 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_network_name_desc_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2758 offset += 1;
2759 cnt -= 1;
2761 network_name_length = MIN(network_name_length, cnt);
2762 if (cnt < network_name_length) return;
2763 dvb_encoding_e encoding;
2764 unsigned enc_len = dvb_analyze_string_charset(tvb, offset, network_name_length, &encoding);
2765 dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_network_name_desc_name_encoding, tvb, offset, enc_len, encoding);
2767 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_network_name_desc_name, tvb, offset+enc_len, network_name_length-enc_len, dvb_enc_to_item_enc(encoding));
2768 offset += network_name_length;
2769 cnt -= network_name_length;
2773 /* 0x5C Multilingual Bouquet Name Descriptor */
2774 static int hf_mpeg_descr_multilng_bouquet_name_desc_iso639_language_code;
2775 static int hf_mpeg_descr_multilng_bouquet_name_desc_name_length;
2776 static int hf_mpeg_descr_multilng_bouquet_name_desc_name_encoding;
2777 static int hf_mpeg_descr_multilng_bouquet_name_desc_name;
2779 static int ett_mpeg_descriptor_multilng_bouquet_name_desc_lng;
2781 static unsigned
2782 proto_mpeg_descriptor_dissect_multilng_bouquet_name_desc_measure_lng_len(tvbuff_t *tvb, unsigned offset, unsigned len)
2784 unsigned l_offset = offset;
2785 unsigned cnt = len;
2787 if (cnt < 3) return l_offset - offset;
2788 cnt -= 3;
2789 l_offset += 3;
2791 if (cnt < 1) return l_offset - offset;
2792 unsigned bouquet_name_length = tvb_get_uint8(tvb, l_offset);
2793 cnt -= 1;
2794 l_offset += 1;
2796 bouquet_name_length = MIN(bouquet_name_length, cnt);
2797 l_offset += bouquet_name_length;
2799 return l_offset - offset;
2802 static void
2803 proto_mpeg_descriptor_dissect_multilng_bouquet_name_desc(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2805 unsigned cnt = len;
2807 while (cnt > 0)
2809 char* lng_str;
2810 proto_tree * lng_tree;
2811 proto_item * lng_item;
2813 if (cnt < 3) return;
2814 unsigned lng_len = proto_mpeg_descriptor_dissect_multilng_bouquet_name_desc_measure_lng_len(tvb, offset, cnt);
2815 lng_tree = proto_tree_add_subtree(tree, tvb, offset, lng_len,
2816 ett_mpeg_descriptor_multilng_bouquet_name_desc_lng, &lng_item, NULL);
2818 proto_tree_add_item_ret_display_string(lng_tree, hf_mpeg_descr_multilng_bouquet_name_desc_iso639_language_code, tvb, offset, 3, ENC_ASCII,
2819 wmem_packet_scope(), &lng_str);
2820 proto_item_set_text(lng_item, "Language \"%s\"", lng_str);
2821 offset += 3;
2822 cnt -= 3;
2824 if (cnt < 1) return;
2825 unsigned bouquet_name_length = tvb_get_uint8(tvb, offset);
2826 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_bouquet_name_desc_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2827 offset += 1;
2828 cnt -= 1;
2830 bouquet_name_length = MIN(bouquet_name_length, cnt);
2831 if (cnt < bouquet_name_length) return;
2832 dvb_encoding_e encoding;
2833 unsigned enc_len = dvb_analyze_string_charset(tvb, offset, bouquet_name_length, &encoding);
2834 dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_bouquet_name_desc_name_encoding, tvb, offset, enc_len, encoding);
2836 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_bouquet_name_desc_name, tvb, offset+enc_len, bouquet_name_length-enc_len, dvb_enc_to_item_enc(encoding));
2837 offset += bouquet_name_length;
2838 cnt -= bouquet_name_length;
2842 /* 0x5D Multilingual Service Name Descriptor */
2843 static int hf_mpeg_descr_multilng_srv_name_desc_iso639_language_code;
2844 static int hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_length;
2845 static int hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_encoding;
2846 static int hf_mpeg_descr_multilng_srv_name_desc_service_provider_name;
2847 static int hf_mpeg_descr_multilng_srv_name_desc_service_name_length;
2848 static int hf_mpeg_descr_multilng_srv_name_desc_service_name_encoding;
2849 static int hf_mpeg_descr_multilng_srv_name_desc_service_name;
2851 static int ett_mpeg_descriptor_multilng_srv_name_desc_lng;
2853 static unsigned
2854 proto_mpeg_descriptor_dissect_multilng_srv_name_desc_measure_lng_len(tvbuff_t *tvb, unsigned offset, unsigned len)
2856 unsigned l_offset = offset;
2857 unsigned cnt = len;
2859 if (cnt < 3) return l_offset - offset;
2860 cnt -= 3;
2861 l_offset += 3;
2863 if (cnt < 1) return l_offset - offset;
2864 unsigned service_provider_name_length = tvb_get_uint8(tvb, l_offset);
2865 cnt -= 1;
2866 l_offset += 1;
2868 service_provider_name_length = MIN(service_provider_name_length, cnt);
2869 cnt -= service_provider_name_length;
2870 l_offset += service_provider_name_length;
2872 if (cnt < 1) return l_offset - offset;
2873 unsigned service_name_length = tvb_get_uint8(tvb, l_offset);
2874 cnt -= 1;
2875 l_offset += 1;
2877 service_name_length = MIN(service_name_length, cnt);
2878 l_offset += service_name_length;
2880 return l_offset - offset;
2883 static void
2884 proto_mpeg_descriptor_dissect_multilng_srv_name_desc(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2886 unsigned cnt = len;
2888 while (cnt > 0)
2890 char *lng_str;
2891 proto_tree * lng_tree;
2892 proto_item * lng_item;
2894 if (cnt < 3) return;
2895 unsigned lng_len = proto_mpeg_descriptor_dissect_multilng_srv_name_desc_measure_lng_len(tvb, offset, cnt);
2896 lng_tree = proto_tree_add_subtree(tree, tvb, offset, lng_len,
2897 ett_mpeg_descriptor_multilng_srv_name_desc_lng, &lng_item, NULL);
2899 proto_tree_add_item_ret_display_string(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_iso639_language_code, tvb, offset, 3, ENC_ASCII,
2900 wmem_packet_scope(), &lng_str);
2901 proto_item_set_text(lng_item, "Language \"%s\"", lng_str);
2902 offset += 3;
2903 cnt -= 3;
2905 if (cnt < 1) return;
2906 unsigned service_provider_name_length = tvb_get_uint8(tvb, offset);
2907 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2908 offset += 1;
2909 cnt -= 1;
2911 service_provider_name_length = MIN(service_provider_name_length, cnt);
2912 if (cnt < service_provider_name_length) return;
2913 dvb_encoding_e encoding;
2914 unsigned enc_len = dvb_analyze_string_charset(tvb, offset, service_provider_name_length, &encoding);
2915 dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_encoding, tvb, offset, enc_len, encoding);
2917 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_provider_name, tvb, offset+enc_len, service_provider_name_length-enc_len, dvb_enc_to_item_enc(encoding));
2918 offset += service_provider_name_length;
2919 cnt -= service_provider_name_length;
2921 if (cnt < 1) return;
2922 unsigned service_name_length = tvb_get_uint8(tvb, offset);
2923 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2924 offset += 1;
2925 cnt -= 1;
2927 service_name_length = MIN(service_name_length, cnt);
2928 if (cnt < service_name_length) return;
2929 enc_len = dvb_analyze_string_charset(tvb, offset, service_name_length, &encoding);
2930 dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_name_encoding, tvb, offset, enc_len, encoding);
2932 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_name, tvb, offset+enc_len, service_name_length-enc_len, dvb_enc_to_item_enc(encoding));
2933 offset += service_name_length;
2934 cnt -= service_name_length;
2938 /* 0x5E Multilingual Component Descriptor */
2939 static int hf_mpeg_descr_multilng_component_desc_iso639_language_code;
2940 static int hf_mpeg_descr_multilng_component_desc_tag;
2941 static int hf_mpeg_descr_multilng_component_desc_text_length;
2942 static int hf_mpeg_descr_multilng_component_desc_text_encoding;
2943 static int hf_mpeg_descr_multilng_component_desc_text;
2945 static int ett_mpeg_descriptor_multilng_component_desc_lng;
2947 static unsigned
2948 proto_mpeg_descriptor_dissect_multilng_component_desc_measure_lng_len(tvbuff_t *tvb, unsigned offset, unsigned len)
2950 unsigned l_offset = offset;
2951 unsigned cnt = len;
2953 if (cnt < 3) return l_offset - offset;
2954 cnt -= 3;
2955 l_offset += 3;
2957 if (cnt < 1) return l_offset - offset;
2958 unsigned text_length = tvb_get_uint8(tvb, l_offset);
2959 cnt -= 1;
2960 l_offset += 1;
2962 text_length = MIN(text_length, cnt);
2963 l_offset += text_length;
2965 return l_offset - offset;
2968 static void
2969 proto_mpeg_descriptor_dissect_multilng_component_desc(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2971 unsigned cnt = len;
2973 if (cnt < 1) return;
2974 proto_tree_add_item(tree, hf_mpeg_descr_multilng_component_desc_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
2975 offset += 1;
2976 cnt -= 1;
2978 while (cnt > 0)
2980 char *lng_str;
2981 proto_tree * lng_tree;
2982 proto_item * lng_item;
2984 if (cnt < 3) return;
2985 unsigned lng_len = proto_mpeg_descriptor_dissect_multilng_component_desc_measure_lng_len(tvb, offset, cnt);
2986 lng_tree = proto_tree_add_subtree(tree, tvb, offset, lng_len,
2987 ett_mpeg_descriptor_multilng_component_desc_lng, &lng_item, NULL);
2989 proto_tree_add_item_ret_display_string(lng_tree, hf_mpeg_descr_multilng_component_desc_iso639_language_code, tvb, offset, 3, ENC_ASCII,
2990 wmem_packet_scope(), &lng_str);
2991 proto_item_set_text(lng_item, "Language \"%s\"", lng_str);
2992 offset += 3;
2993 cnt -= 3;
2995 if (cnt < 1) return;
2996 unsigned text_length = tvb_get_uint8(tvb, offset);
2997 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_component_desc_text_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2998 offset += 1;
2999 cnt -= 1;
3001 text_length = MIN(text_length, cnt);
3002 if (cnt < text_length) return;
3003 dvb_encoding_e encoding;
3004 unsigned enc_len = dvb_analyze_string_charset(tvb, offset, text_length, &encoding);
3005 dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_component_desc_text_encoding, tvb, offset, enc_len, encoding);
3007 proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_component_desc_text, tvb, offset+enc_len, text_length-enc_len, dvb_enc_to_item_enc(encoding));
3008 offset += text_length;
3009 cnt -= text_length;
3013 /* 0x5F Private Data Specifier */
3014 static int hf_mpeg_descr_private_data_specifier_id;
3016 #define PRIVATE_DATA_SPECIFIER_RESERVED 0x00000000
3017 #define PRIVATE_DATA_SPECIFIER_NORDIG 0x00000029
3018 #define PRIVATE_DATA_SPECIFIER_CIPLUS_LLP 0x00000040
3019 #define PRIVATE_DATA_SPECIFIER_EUTELSAT_SA 0x0000055F
3021 static const value_string mpeg_descr_data_specifier_id_vals[] = {
3022 { PRIVATE_DATA_SPECIFIER_RESERVED, "reserved" },
3023 { PRIVATE_DATA_SPECIFIER_NORDIG, "NorDig" },
3024 { PRIVATE_DATA_SPECIFIER_CIPLUS_LLP, "CI+ LLP" },
3025 { PRIVATE_DATA_SPECIFIER_EUTELSAT_SA, "Eutelsat S.A." },
3026 /* See dvbservices.com for complete and current list */
3028 { 0, NULL }
3031 static void
3032 proto_mpeg_descriptor_dissect_private_data_specifier(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
3034 proto_tree_add_item(tree, hf_mpeg_descr_private_data_specifier_id, tvb, offset, 4, ENC_BIG_ENDIAN);
3037 /* 0x61 Short Smoothing Buffer Descriptor */
3038 static int hf_mpeg_descr_short_smoothing_buffer_sb_size;
3039 static int hf_mpeg_descr_short_smoothing_buffer_sb_leak_rate;
3040 static int hf_mpeg_descr_short_smoothing_buffer_dvb_reserved;
3042 #define MPEG_DESCR_SHORT_SMOOTHING_BUFFER_SB_SIZE_MASK 0xC0
3043 #define MPEG_DESCR_SHORT_SMOOTHING_BUFFER_SB_LEAK_RATE_MASK 0x3F
3045 static const value_string mpeg_descr_ssb_sb_size_vals[] = {
3046 { 0, "DVB_reserved" },
3047 { 1, "1 536" },
3048 { 2, "DVB_reserved" },
3049 { 3, "DVB_reserved" },
3050 { 0, NULL }
3053 static const value_string mpeg_descr_ssb_sb_leak_rate_vals[] = {
3054 { 0, "DVB_reserved" },
3055 { 1, "0,0009 Mbit/s" },
3056 { 2, "0,0018 Mbit/s" },
3057 { 3, "0,0036 Mbit/s" },
3058 { 4, "0,0072 Mbit/s" },
3059 { 5, "0,0108 Mbit/s" },
3060 { 6, "0,0144 Mbit/s" },
3061 { 7, "0,0216 Mbit/s" },
3062 { 8, "0,0288 Mbit/s" },
3063 { 9, "0,075 Mbit/s" },
3064 { 10, "0,5 Mbit/s" },
3065 { 11, "0,5625 Mbit/s" },
3066 { 12, "0,8437 Mbit/s" },
3067 { 13, "1,0 Mbit/s" },
3068 { 14, "1,1250 Mbit/s" },
3069 { 15, "1,5 Mbit/s" },
3070 { 16, "1,6875 Mbit/s" },
3071 { 17, "2,0 Mbit/s" },
3072 { 18, "2,2500 Mbit/s" },
3073 { 19, "2,5 Mbit/s" },
3074 { 20, "3,0 Mbit/s" },
3075 { 21, "3,3750 Mbit/s" },
3076 { 22, "3,5 Mbit/s" },
3077 { 23, "4,0 Mbit/s" },
3078 { 24, "4,5 Mbit/s" },
3079 { 25, "5,0 Mbit/s" },
3080 { 26, "5,5 Mbit/s" },
3081 { 27, "6,0 Mbit/s" },
3082 { 28, "6,5 Mbit/s" },
3083 { 29, "6,7500 Mbit/s" },
3084 { 30, "7,0 Mbit/s" },
3085 { 31, "7,5 Mbit/s" },
3086 { 32, "8,0 Mbit/s" },
3087 { 33, "9,0 Mbit/s" },
3088 { 34, "10,0 Mbit/s" },
3089 { 35, "11,0 Mbit/s" },
3090 { 36, "12,0 Mbit/s" },
3091 { 37, "13,0 Mbit/s" },
3092 { 38, "13,5 Mbit/s" },
3093 { 39, "14,0 Mbit/s" },
3094 { 40, "15,0 Mbit/s" },
3095 { 41, "16,0 Mbit/s" },
3096 { 42, "17,0 Mbit/s" },
3097 { 43, "18,0 Mbit/s" },
3098 { 44, "20,0 Mbit/s" },
3099 { 45, "22,0 Mbit/s" },
3100 { 46, "24,0 Mbit/s" },
3101 { 47, "26,0 Mbit/s" },
3102 { 48, "27,0 Mbit/s" },
3103 { 49, "28,0 Mbit/s" },
3104 { 50, "30,0 Mbit/s" },
3105 { 51, "32,0 Mbit/s" },
3106 { 52, "34,0 Mbit/s" },
3107 { 53, "36,0 Mbit/s" },
3108 { 54, "38,0 Mbit/s" },
3109 { 55, "40,0 Mbit/s" },
3110 { 56, "44,0 Mbit/s" },
3111 { 57, "48,0 Mbit/s" },
3112 { 58, "54,0 Mbit/s" },
3113 { 59, "72,0 Mbit/s" },
3114 { 60, "108,0 Mbit/s" },
3115 { 61, "DVB_reserved" },
3116 { 62, "DVB_reserved" },
3117 { 63, "DVB_reserved" },
3118 { 0, NULL }
3121 static void
3122 proto_mpeg_descriptor_dissect_short_smoothing_buffer(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3124 proto_tree_add_item(tree, hf_mpeg_descr_short_smoothing_buffer_sb_size, tvb, offset, 1, ENC_BIG_ENDIAN);
3125 proto_tree_add_item(tree, hf_mpeg_descr_short_smoothing_buffer_sb_leak_rate, tvb, offset, 1, ENC_BIG_ENDIAN);
3126 offset += 1;
3128 if (len == 1) return;
3130 proto_tree_add_item(tree, hf_mpeg_descr_short_smoothing_buffer_dvb_reserved, tvb, offset, len-1, ENC_NA);
3133 /* 0x63 Partial Transport Stream Descriptor */
3134 static int hf_mpeg_descr_partial_transport_stream_reserved_future_use1;
3135 static int hf_mpeg_descr_partial_transport_stream_peak_rate;
3136 static int hf_mpeg_descr_partial_transport_stream_reserved_future_use2;
3137 static int hf_mpeg_descr_partial_transport_stream_minimum_overall_smoothing_rate;
3138 static int hf_mpeg_descr_partial_transport_stream_reserved_future_use3;
3139 static int hf_mpeg_descr_partial_transport_stream_maximum_overall_smoothing_buffer;
3141 #define PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE1_MASK 0xC00000
3142 #define PARTIAL_TRANSPORT_STREAM_DESCR_PEAK_RATE_MASK 0x3FFFFF
3143 #define PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE2_MASK 0xC00000
3144 #define PARTIAL_TRANSPORT_STREAM_DESCR_MINIMUM_SMOOTHING_RATE_MASK 0x3FFFFF
3145 #define PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE3_MASK 0xC000
3146 #define PARTIAL_TRANSPORT_STREAM_DESCR_MAXIMUM_SMOOTHING_BUFF_MASK 0x3FFF
3148 static void
3149 proto_mpeg_descriptor_dissect_partial_transport_stream(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3151 unsigned cnt = len;
3153 if (cnt < 3) return;
3154 proto_tree_add_item(tree, hf_mpeg_descr_partial_transport_stream_reserved_future_use1, tvb, offset, 3, ENC_BIG_ENDIAN);
3155 unsigned rate = tvb_get_uint24(tvb, offset, ENC_NA) & PARTIAL_TRANSPORT_STREAM_DESCR_PEAK_RATE_MASK;
3156 proto_tree_add_uint_bits_format_value(tree, hf_mpeg_descr_partial_transport_stream_peak_rate, tvb, (offset*8)+2,
3157 22, rate, ENC_BIG_ENDIAN, "%u bits/s", rate*400);
3158 offset += 3;
3159 cnt -= 3;
3161 if (cnt < 3) return;
3162 proto_tree_add_item(tree, hf_mpeg_descr_partial_transport_stream_reserved_future_use2, tvb, offset, 3, ENC_BIG_ENDIAN);
3163 rate = tvb_get_uint24(tvb, offset, ENC_BIG_ENDIAN) & PARTIAL_TRANSPORT_STREAM_DESCR_MINIMUM_SMOOTHING_RATE_MASK;
3164 proto_tree_add_uint_bits_format_value(tree, hf_mpeg_descr_partial_transport_stream_minimum_overall_smoothing_rate, tvb,
3165 (offset*8)+2, 22, rate, ENC_BIG_ENDIAN, (rate==0x3FFFFFu)?"Underfined (0x3FFFFF)":"%u bits/s", rate*400u);
3166 offset += 3;
3167 cnt -= 3;
3169 if (cnt < 2) return;
3170 proto_tree_add_item(tree, hf_mpeg_descr_partial_transport_stream_reserved_future_use3, tvb, offset, 2, ENC_BIG_ENDIAN);
3171 unsigned buffer = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN) & PARTIAL_TRANSPORT_STREAM_DESCR_MAXIMUM_SMOOTHING_BUFF_MASK;
3172 proto_tree_add_uint_bits_format_value(tree, hf_mpeg_descr_partial_transport_stream_maximum_overall_smoothing_buffer, tvb,
3173 (offset*8)+2, 14, buffer, ENC_BIG_ENDIAN, (buffer==0x3FFFu)?"Underfined (0x3FFF)":"%u bytes", buffer);
3176 /* 0x64 Data Broadcast Descriptor */
3177 static int hf_mpeg_descr_data_bcast_bcast_id;
3178 static int hf_mpeg_descr_data_bcast_component_tag;
3179 static int hf_mpeg_descr_data_bcast_selector_len;
3180 static int hf_mpeg_descr_data_bcast_selector_bytes;
3181 static int hf_mpeg_descr_data_bcast_lang_code;
3182 static int hf_mpeg_descr_data_bcast_text_len;
3183 static int hf_mpeg_descr_data_bcast_text;
3185 static const value_string mpeg_descr_data_bcast_id_vals[] = {
3187 { 0x0001, "Data pipe" },
3188 { 0x0002, "Asynchronous data stream" },
3189 { 0x0003, "Synchronous data stream" },
3190 { 0x0004, "Synchronised data stream" },
3191 { 0x0005, "Multi protocol encapsulation" },
3192 { 0x0006, "Data Carousel" },
3193 { 0x0007, "Object Carousel" },
3194 { 0x0008, "DVB ATM streams" },
3195 { 0x0009, "Higher Protocols based on asynchronous data streams" },
3196 { 0x000A, "System Software Update service" },
3197 { 0x000B, "IP/MAC Notification service" },
3198 { 0x00F0, "MHP Object Carousel" },
3199 { 0x00F1, "MHP Multiprotocol Encapsulation" },
3200 { 0x0122, "CI+ Data Carousel" },
3201 { 0x0123, "HbbTV Carousel" },
3202 /* See dvbservices.com for complete and current list */
3204 { 0, NULL }
3206 /* global variable that's shared e.g. with DVB-CI */
3207 value_string_ext mpeg_descr_data_bcast_id_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_data_bcast_id_vals);
3209 static void
3210 proto_mpeg_descriptor_dissect_data_bcast(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
3213 uint8_t selector_len, text_len;
3215 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_bcast_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3216 offset += 2;
3218 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_component_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
3219 offset += 1;
3221 selector_len = tvb_get_uint8(tvb, offset);
3222 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_selector_len, tvb, offset, 1, ENC_BIG_ENDIAN);
3223 offset += 1;
3225 if (selector_len > 0) {
3226 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_selector_bytes, tvb, offset, selector_len, ENC_NA);
3227 offset += selector_len;
3230 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_lang_code, tvb, offset, 3, ENC_ASCII);
3231 offset += 3;
3233 text_len = tvb_get_uint8(tvb, offset);
3234 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_text_len, tvb, offset, 1, ENC_BIG_ENDIAN);
3235 offset += 1;
3237 if (text_len > 0)
3238 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_text, tvb, offset, text_len, ENC_ASCII);
3241 /* 0x66 Data Broadcast ID Descriptor */
3242 static int hf_mpeg_descr_data_bcast_id_bcast_id;
3243 static int hf_mpeg_descr_data_bcast_id_id_selector_bytes;
3245 static void
3246 proto_mpeg_descriptor_dissect_data_bcast_id(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3248 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_id_bcast_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3249 offset += 2;
3251 if (len > 2)
3252 proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_id_id_selector_bytes, tvb, offset, len - 2, ENC_NA);
3255 /* 0x69 PDC Descriptor */
3256 static int hf_mpeg_descr_pdc_reserved;
3257 static int hf_mpeg_descr_pdc_pil;
3258 static int hf_mpeg_descr_pdc_day;
3259 static int hf_mpeg_descr_pdc_month;
3260 static int hf_mpeg_descr_pdc_hour;
3261 static int hf_mpeg_descr_pdc_minute;
3263 #define MPEG_DESCR_PDC_RESERVED_MASK 0xF00000
3264 #define MPEG_DESCR_PDC_PIL_MASK 0x0FFFFF
3265 #define MPEG_DESCR_PDC_DAY_MASK 0x0F8000
3266 #define MPEG_DESCR_PDC_MONTH_MASK 0x007800
3267 #define MPEG_DESCR_PDC_HOUR_MASK 0x0007C0
3268 #define MPEG_DESCR_PDC_MINUTE_MASK 0x00003F
3270 static int ett_mpeg_descriptor_pdc_pil;
3272 static void
3273 proto_mpeg_descriptor_dissect_pdc(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
3275 proto_item * pi;
3276 proto_tree * pil_tree;
3278 proto_tree_add_item(tree, hf_mpeg_descr_pdc_reserved, tvb, offset, 3, ENC_BIG_ENDIAN);
3279 pi = proto_tree_add_item(tree, hf_mpeg_descr_pdc_pil, tvb, offset, 3, ENC_BIG_ENDIAN);
3280 pil_tree = proto_item_add_subtree(pi, ett_mpeg_descriptor_pdc_pil);
3281 proto_tree_add_item(pil_tree, hf_mpeg_descr_pdc_day, tvb, offset, 3, ENC_BIG_ENDIAN);
3282 proto_tree_add_item(pil_tree, hf_mpeg_descr_pdc_month, tvb, offset, 3, ENC_BIG_ENDIAN);
3283 proto_tree_add_item(pil_tree, hf_mpeg_descr_pdc_hour, tvb, offset, 3, ENC_BIG_ENDIAN);
3284 proto_tree_add_item(pil_tree, hf_mpeg_descr_pdc_minute, tvb, offset, 3, ENC_BIG_ENDIAN);
3287 /* 0x6A AC-3 Descriptor */
3288 static int hf_mpeg_descr_ac3_component_type_flag;
3289 static int hf_mpeg_descr_ac3_bsid_flag;
3290 static int hf_mpeg_descr_ac3_mainid_flag;
3291 static int hf_mpeg_descr_ac3_asvc_flag;
3292 static int hf_mpeg_descr_ac3_reserved;
3293 static int hf_mpeg_descr_ac3_component_type_reserved_flag;
3294 static int hf_mpeg_descr_ac3_component_type_full_service_flag;
3295 static int hf_mpeg_descr_ac3_component_type_service_type_flags;
3296 static int hf_mpeg_descr_ac3_component_type_number_of_channels_flags;
3297 static int hf_mpeg_descr_ac3_bsid;
3298 static int hf_mpeg_descr_ac3_mainid;
3299 static int hf_mpeg_descr_ac3_asvc;
3300 static int hf_mpeg_descr_ac3_additional_info;
3302 static int ett_mpeg_descriptor_ac3_component_type;
3304 #define MPEG_DESCR_AC3_COMPONENT_TYPE_FLAG_MASK 0x80
3305 #define MPEG_DESCR_AC3_BSID_FLAG_MASK 0x40
3306 #define MPEG_DESCR_AC3_MAINID_FLAG_MASK 0x20
3307 #define MPEG_DESCR_AC3_ASVC_FLAG_MASK 0x10
3308 #define MPEG_DESCR_AC3_RESERVED_MASK 0x0F
3310 #define MPEG_DESCR_AC3_COMPONENT_TYPE_RESERVED_FLAG_MASK 0x80
3311 #define MPEG_DESCR_AC3_COMPONENT_TYPE_FULL_SERVICE_FLAG_MASK 0x40
3312 #define MPEG_DESCR_AC3_COMPONENT_TYPE_SERVICE_TYPE_FLAGS_MASK 0x38
3313 #define MPEG_DESCR_AC3_COMPONENT_TYPE_NUMBER_OF_CHANNELS_FLAGS 0x07
3315 static const value_string mpeg_descr_ac3_component_type_flag_vals[] = {
3316 { 0x0, "Component type field not included" },
3317 { 0x1, "Component type field included" },
3319 { 0x0, NULL }
3322 static const value_string mpeg_descr_ac3_bsid_flag_vals[] = {
3323 { 0x0, "BSID field not included" },
3324 { 0x1, "BSID field included" },
3326 { 0x0, NULL }
3329 static const value_string mpeg_descr_ac3_mainid_flag_vals[] = {
3330 { 0x0, "Main ID field not included" },
3331 { 0x1, "Main ID field included" },
3333 { 0x0, NULL }
3336 static const value_string mpeg_descr_ac3_asvc_flag_vals[] = {
3337 { 0x0, "ASVC field not included" },
3338 { 0x1, "ASVC field included" },
3340 { 0x0, NULL }
3343 static const value_string mpeg_descr_ac3_component_type_full_service_flag_vals[] = {
3344 { 0x0, "Decoded audio stream is intended to be combined with another decoded audio stream" },
3345 { 0x1, "Decoded audio stream is a full service" },
3347 { 0x0, NULL}
3350 static const value_string mpeg_descr_ac3_component_type_service_type_flags_vals[] = {
3351 { 0x0, "Complete Main (CM)" },
3352 { 0x1, "Music and effects (ME)" },
3353 { 0x2, "Visually impaired (VI)" },
3354 { 0x3, "Hearing impaired (HI)" },
3355 { 0x4, "Dialogue (D)" },
3356 { 0x5, "Commentary (C)" },
3357 { 0x6, "Emergency (E)" },
3358 { 0x7, "Voiceover (VO) if Full Service Flag is 0, else Karaoke" },
3360 { 0x0, NULL }
3363 static const value_string mpeg_descr_ac3_component_type_number_of_channels_flags_vals[] = {
3364 { 0x0, "Mono" },
3365 { 0x1, "1+1 Mode" },
3366 { 0x2, "2 Channel (stereo)" },
3367 { 0x3, "2 Channel Dolby surround encoded (stereo)" },
3368 { 0x4, "Multichannel audio (> 2 channels)" },
3370 { 0x0, NULL }
3373 static void
3374 proto_mpeg_descriptor_dissect_ac3(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3376 unsigned end = offset + len;
3377 uint8_t flags, component_type;
3379 proto_tree *component_type_tree;
3381 flags = tvb_get_uint8(tvb, offset);
3382 proto_tree_add_item(tree, hf_mpeg_descr_ac3_component_type_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3383 proto_tree_add_item(tree, hf_mpeg_descr_ac3_bsid_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3384 proto_tree_add_item(tree, hf_mpeg_descr_ac3_mainid_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3385 proto_tree_add_item(tree, hf_mpeg_descr_ac3_asvc_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3386 proto_tree_add_item(tree, hf_mpeg_descr_ac3_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3387 offset += 1;
3389 if (flags & MPEG_DESCR_AC3_COMPONENT_TYPE_FLAG_MASK) {
3390 component_type = tvb_get_uint8(tvb, offset);
3391 component_type_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3,
3392 ett_mpeg_descriptor_ac3_component_type, NULL, "Component Type 0x%02x", component_type);
3393 proto_tree_add_item(component_type_tree, hf_mpeg_descr_ac3_component_type_reserved_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3394 proto_tree_add_item(component_type_tree, hf_mpeg_descr_ac3_component_type_full_service_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3395 proto_tree_add_item(component_type_tree, hf_mpeg_descr_ac3_component_type_service_type_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
3396 proto_tree_add_item(component_type_tree, hf_mpeg_descr_ac3_component_type_number_of_channels_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
3397 offset += 1;
3400 if (flags & MPEG_DESCR_AC3_BSID_FLAG_MASK) {
3401 proto_tree_add_item(tree, hf_mpeg_descr_ac3_bsid, tvb, offset, 1, ENC_BIG_ENDIAN);
3402 offset += 1;
3405 if (flags & MPEG_DESCR_AC3_MAINID_FLAG_MASK) {
3406 proto_tree_add_item(tree, hf_mpeg_descr_ac3_mainid, tvb, offset, 1, ENC_BIG_ENDIAN);
3407 offset += 1;
3410 if (flags & MPEG_DESCR_AC3_ASVC_FLAG_MASK) {
3411 proto_tree_add_item(tree, hf_mpeg_descr_ac3_asvc, tvb, offset, 1, ENC_BIG_ENDIAN);
3412 offset += 1;
3415 if (offset < end)
3416 proto_tree_add_item(tree, hf_mpeg_descr_ac3_additional_info, tvb, offset, end - offset, ENC_NA);
3419 /* 0x6F Application Signalling Descriptor */
3420 static int hf_mpeg_descr_app_sig_app_type;
3421 static int hf_mpeg_descr_app_sig_ait_ver;
3423 static void
3424 proto_mpeg_descriptor_dissect_app_sig(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3426 unsigned offset_start;
3428 offset_start = offset;
3429 while ((offset - offset_start) < len) {
3430 proto_tree_add_item(tree, hf_mpeg_descr_app_sig_app_type, tvb, offset, 2, ENC_BIG_ENDIAN);
3431 offset += 2;
3432 proto_tree_add_item(tree, hf_mpeg_descr_app_sig_ait_ver, tvb, offset, 1, ENC_BIG_ENDIAN);
3433 offset += 1;
3437 /* 0x71 Service Identifier Descriptor */
3438 static int hf_mpeg_descr_service_identifier;
3440 static void
3441 proto_mpeg_descriptor_dissect_service_identifier(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3443 proto_tree_add_item(tree, hf_mpeg_descr_service_identifier, tvb, offset, len, ENC_ASCII);
3446 /* 0x72 Service Availability Descriptor */
3447 static int hf_mpeg_descr_service_availability_flag;
3448 static int hf_mpeg_descr_service_availability_reserved;
3449 static int hf_mpeg_descr_service_availability_cell_id;
3451 #define MPEG_DESCR_SRV_AVAIL_FLAG_MASK 0x80
3452 #define MPEG_DESCR_SRV_AVAIL_RESERVED_MASK 0x7F
3454 static int ett_mpeg_descriptor_srv_avail_cells;
3456 static const value_string mpeg_descr_srv_avail_flag_vals[] = {
3457 { 0x0, "Service is unavailable on the cells" },
3458 { 0x1, "Service is available on the cells" },
3460 { 0x0, NULL }
3463 static void
3464 proto_mpeg_descriptor_dissect_service_availability(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3466 unsigned end = offset + len;
3468 proto_tree * cells_tree;
3470 proto_tree_add_item(tree, hf_mpeg_descr_service_availability_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3471 proto_tree_add_item(tree, hf_mpeg_descr_service_availability_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3472 offset += 1;
3474 cells_tree = proto_tree_add_subtree(tree, tvb, offset, end - offset, ett_mpeg_descriptor_srv_avail_cells, NULL, "Cells");
3476 while (offset < end) {
3477 proto_tree_add_item(cells_tree, hf_mpeg_descr_service_availability_cell_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3478 offset += 2;
3482 /* 0x73 Default Authority Descriptor */
3483 static int hf_mpeg_descr_default_authority_name;
3485 static void
3486 proto_mpeg_descriptor_dissect_default_authority(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3488 proto_tree_add_item(tree, hf_mpeg_descr_default_authority_name, tvb, offset, len, ENC_ASCII);
3491 /* 0x75 TVA ID Descriptor */
3492 static int hf_mpeg_descr_tva_id;
3493 static int hf_mpeg_descr_tva_reserved;
3494 static int hf_mpeg_descr_tva_running_status;
3496 static int ett_mpeg_descriptor_tva;
3498 #define MPEG_DESCR_TVA_RESREVED_MASK 0xF8
3499 #define MPEG_DESCR_TVA_RUNNING_STATUS_MASK 0x07
3501 static const value_string mpeg_descr_tva_running_status_vals[] = {
3502 { 0, "Reserved" },
3503 { 1, "Not yet running" },
3504 { 2, "Starts (or restarts) shortly" },
3505 { 3, "Paused" },
3506 { 4, "Running" },
3507 { 5, "Cancelled" },
3508 { 6, "Completed" },
3509 { 7, "Reserved" },
3510 { 0, NULL }
3513 static void
3514 proto_mpeg_descriptor_dissect_tva_id(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3516 unsigned end = offset + len;
3517 unsigned tva_cnt = 0;
3519 proto_tree * tva_tree;
3521 while (offset < end) {
3522 unsigned id = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN);
3523 tva_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3, ett_mpeg_descriptor_tva, NULL, "TVA %u (0x%04X)", tva_cnt, id);
3524 proto_tree_add_item(tva_tree, hf_mpeg_descr_tva_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3525 offset += 2;
3526 tva_cnt += 1;
3528 proto_tree_add_item(tva_tree, hf_mpeg_descr_tva_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3529 proto_tree_add_item(tva_tree, hf_mpeg_descr_tva_running_status, tvb, offset, 1, ENC_BIG_ENDIAN);
3530 offset += 1;
3534 /* 0x76 Content Identifier Descriptor */
3535 static int hf_mpeg_descr_content_identifier_crid_type;
3536 static int hf_mpeg_descr_content_identifier_crid_location;
3537 static int hf_mpeg_descr_content_identifier_crid_length;
3538 static int hf_mpeg_descr_content_identifier_crid_bytes;
3539 static int hf_mpeg_descr_content_identifier_cird_ref;
3541 #define MPEG_DESCR_CONTENT_IDENTIFIER_CRID_TYPE_MASK 0xFC
3542 #define MPEG_DESCR_CONTENT_IDENTIFIER_CRID_LOCATION_MASK 0x03
3544 static int ett_mpeg_descriptor_content_identifier_crid;
3546 static const value_string mpeg_descr_content_identifier_crid_type_vals[] = {
3547 { 0x00, "No type defined" },
3548 { 0x01, "CRID references the item of content that this event is an instance of" },
3549 { 0x02, "CRID references a series that this event belongs to" },
3550 { 0x03, "CRID references a recommendation" },
3552 { 0, NULL }
3555 static const value_string mpeg_descr_content_identifier_crid_location_vals[] = {
3556 { 0x00, "Carried explicitly within descriptor" },
3557 { 0x01, "Carried in Content Identifier Table (CIT)" },
3559 { 0, NULL }
3562 static void
3563 proto_mpeg_descriptor_dissect_content_identifier(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3565 unsigned end = offset + len, crid_len;
3566 uint8_t crid, crid_location, crid_type;
3568 proto_tree *crid_tree;
3570 while (offset < end) {
3571 crid = tvb_get_uint8(tvb, offset);
3572 crid_type = (crid & MPEG_DESCR_CONTENT_IDENTIFIER_CRID_TYPE_MASK) >> 2;
3573 crid_location = crid & MPEG_DESCR_CONTENT_IDENTIFIER_CRID_LOCATION_MASK;
3575 if (crid_location == 0) {
3576 crid_len = 2 + tvb_get_uint8(tvb, offset + 1);
3577 } else if (crid_location == 1) {
3578 crid_len = 3;
3579 } else {
3580 crid_len = 1;
3583 crid_tree = proto_tree_add_subtree_format(tree, tvb, offset, crid_len,
3584 ett_mpeg_descriptor_content_identifier_crid, NULL, "CRID type=0%02x", crid_type);
3586 proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_crid_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3587 proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_crid_location, tvb, offset, 1, ENC_BIG_ENDIAN);
3588 offset += 1;
3590 if (crid_location == 0x00) {
3591 crid_len = tvb_get_uint8(tvb, offset);
3592 proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_crid_length, tvb, offset, 1, ENC_BIG_ENDIAN);
3593 offset += 1;
3595 proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_crid_bytes, tvb, offset, crid_len, ENC_NA);
3596 offset += crid_len;
3597 } else if (crid_location == 0x01) {
3598 proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_cird_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
3606 /* 0x7D XAIT Content Location Descriptor */
3607 static int hf_mpeg_descr_xait_onid;
3608 static int hf_mpeg_descr_xait_sid;
3609 static int hf_mpeg_descr_xait_version_number;
3610 static int hf_mpeg_descr_xait_update_policy;
3612 #define MPEG_DESCR_XAIT_VERSION_NUM_MASK 0xF8
3613 #define MPEG_DESCR_XAIT_UPDATE_POLICY_MASK 0x07
3615 static const range_string mpeg_descr_xait_update_policy_vals[] = {
3616 { 0, 0, "When the XAIT version changes, immediately re-load the XAIT" },
3617 { 1, 1, "Ignore XAIT version changes until a reset or reinitialize" },
3618 { 2, 7, "Reserved for future use" },
3619 { 0, 0, NULL }
3622 static void
3623 proto_mpeg_descriptor_dissect_xait(tvbuff_t *tvb, unsigned offset, proto_tree *tree) {
3624 proto_tree_add_item(tree, hf_mpeg_descr_xait_onid, tvb, offset, 2, ENC_BIG_ENDIAN);
3625 offset += 2;
3627 proto_tree_add_item(tree, hf_mpeg_descr_xait_sid, tvb, offset, 2, ENC_BIG_ENDIAN);
3628 offset += 2;
3630 proto_tree_add_item(tree, hf_mpeg_descr_xait_version_number, tvb, offset, 1, ENC_BIG_ENDIAN);
3631 proto_tree_add_item(tree, hf_mpeg_descr_xait_update_policy, tvb, offset, 1, ENC_BIG_ENDIAN);
3634 /* 0x7E FTA Content Management Descriptor */
3635 static int hf_mpeg_descr_fta_user_defined;
3636 static int hf_mpeg_descr_fta_reserved_future_use;
3637 static int hf_mpeg_descr_fta_do_not_scramble;
3638 static int hf_mpeg_descr_fta_control_remote_access_over_internet;
3639 static int hf_mpeg_descr_fta_do_not_apply_revocation;
3641 #define MPEG_DESCR_FTA_USER_DEFINED_MASK 0x80
3642 #define MPEG_DESCR_FTA_RESERVED_MASK 0x70
3643 #define MPEG_DESCR_FTA_DO_NOT_SCRAMBLE_MASK 0x08
3644 #define MPEG_DESCR_FTA_REMOTE_MASK 0x06
3645 #define MPEG_DESCR_FTA_REVOCATION_MASK 0x01
3647 static const value_string fta_control_remote_access_over_internet_vals[] = {
3648 { 0, "Redistribution over the Internet is enabled." },
3649 { 1, "Redistribution over the Internet is enabled but only within a managed domain." },
3650 { 2, "Redistribution over the Internet is enabled but only within a managed domain and after a certain short period of time (e.g. 24 hours)." },
3651 { 3, "Redistribution over the Internet is not allowed with the following exception: Redistribution over the Internet within a managed domain is enabled after a specified long (possibly indefinite) period of time." },
3652 { 0, NULL }
3655 static const true_false_string tfs_fta_do_not_scramble = { "Scrambling shall not be applied for the purposes of content protection", "Scrambling shall be applied where applicable for content protection" };
3656 static const true_false_string tfs_fta_do_not_apply_revocation = { "Content revocation process shall not be applied", "Content revocation process shall be applied" };
3658 static void
3659 proto_mpeg_descriptor_dissect_fta(tvbuff_t *tvb, unsigned offset, proto_tree *tree) {
3660 proto_tree_add_item(tree, hf_mpeg_descr_fta_user_defined, tvb, offset, 1, ENC_BIG_ENDIAN);
3661 proto_tree_add_item(tree, hf_mpeg_descr_fta_reserved_future_use, tvb, offset, 1, ENC_BIG_ENDIAN);
3662 proto_tree_add_item(tree, hf_mpeg_descr_fta_do_not_scramble, tvb, offset, 1, ENC_BIG_ENDIAN);
3663 proto_tree_add_item(tree, hf_mpeg_descr_fta_control_remote_access_over_internet, tvb, offset, 1, ENC_BIG_ENDIAN);
3664 proto_tree_add_item(tree, hf_mpeg_descr_fta_do_not_apply_revocation, tvb, offset, 1, ENC_BIG_ENDIAN);
3667 /* 0x7F Extension Descriptor */
3668 static int hf_mpeg_descr_extension_tag_extension;
3669 static int hf_mpeg_descr_extension_data;
3670 /* Supplementary Audio (Sub-)Descriptor */
3671 static int hf_mpeg_descr_extension_supp_audio_mix_type;
3672 static int hf_mpeg_descr_extension_supp_audio_ed_cla;
3673 static int hf_mpeg_descr_extension_supp_audio_lang_code_present;
3674 static int hf_mpeg_descr_extension_supp_audio_lang_code;
3676 static int hf_mpeg_descr_private_data;
3678 #define EXT_TAG_IMG_ICON 0x00
3679 #define EXT_TAG_CPCM_DLV 0x01
3680 #define EXT_TAG_CP 0x02
3681 #define EXT_TAG_CP_ID 0x03
3682 #define EXT_TAG_T2 0x04
3683 #define EXT_TAG_SH 0x05
3684 #define EXT_TAG_SUPP_AUDIO 0x06
3685 #define EXT_TAG_NW_CHANGE 0x07
3686 #define EXT_TAG_MSG 0x08
3687 #define EXT_TAG_TRGT_REG 0x09
3688 #define EXT_TAG_TRGT_REG_NAME 0x0A
3689 #define EXT_TAG_SVC_RELOC 0x0B
3691 static const value_string mpeg_descr_extension_tag_extension_vals[] = {
3692 { EXT_TAG_IMG_ICON, "Image Icon Descriptor" },
3693 { EXT_TAG_CPCM_DLV, "CPCM Delivery Signalling Descriptor" },
3694 { EXT_TAG_CP, "CP Descriptor" },
3695 { EXT_TAG_CP_ID, "CP Identifier Descriptor" },
3696 { EXT_TAG_T2, "T2 Delivery System Descriptor" },
3697 { EXT_TAG_SH, "SH Delivery System Descriptor" },
3698 { EXT_TAG_SUPP_AUDIO, "Supplementary Audio Descriptor" },
3699 { EXT_TAG_NW_CHANGE, "Network Change Notify Descriptor" },
3700 { EXT_TAG_MSG, "Message Descriptor" },
3701 { EXT_TAG_TRGT_REG, "Target Region Descriptor" },
3702 { EXT_TAG_TRGT_REG_NAME, "Target Region Name Descriptor" },
3703 { EXT_TAG_SVC_RELOC, "Service Relocated Descriptor" },
3704 { 0x0, NULL }
3706 static value_string_ext mpeg_descr_extension_tag_extension_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_extension_tag_extension_vals);
3708 static const value_string supp_audio_mix_type_vals[] = {
3709 { 0x00, "Audio stream is a supplementary stream" },
3710 { 0x01, "Audio stream is a complete and independent stream" },
3711 { 0x0, NULL }
3714 /* if we wanted to distinguish between reserved and user defined,
3715 we'd have to convert this into a range string */
3716 static const value_string supp_audio_ed_cla[] = {
3717 { 0x00, "Main audio" },
3718 { 0x01, "Audio description for the visually impaired" },
3719 { 0x02, "Clean audio for the hearing impaired" },
3720 { 0x03, "Spoken subtitles for the visually impaired" },
3721 { 0x0, NULL }
3725 static void
3726 proto_mpeg_descriptor_dissect_extension(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3728 unsigned offset_start;
3729 uint8_t tag_ext;
3730 bool lang_code_present;
3731 unsigned already_dissected;
3733 offset_start = offset;
3735 tag_ext = tvb_get_uint8(tvb, offset);
3736 proto_tree_add_item(tree, hf_mpeg_descr_extension_tag_extension, tvb, offset, 1, ENC_BIG_ENDIAN);
3737 offset += 1;
3739 switch (tag_ext) {
3740 case EXT_TAG_SUPP_AUDIO:
3741 proto_tree_add_item(tree, hf_mpeg_descr_extension_supp_audio_mix_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3742 proto_tree_add_item(tree, hf_mpeg_descr_extension_supp_audio_ed_cla, tvb, offset, 1, ENC_BIG_ENDIAN);
3743 lang_code_present = ((tvb_get_uint8(tvb, offset) & 0x01) == 0x01);
3744 proto_tree_add_item(tree, hf_mpeg_descr_extension_supp_audio_lang_code_present, tvb, offset, 1, ENC_BIG_ENDIAN);
3745 offset += 1;
3746 if (lang_code_present) {
3747 proto_tree_add_item(tree, hf_mpeg_descr_extension_supp_audio_lang_code, tvb, offset, 3, ENC_ASCII);
3748 offset += 3;
3750 already_dissected = offset-offset_start;
3751 if (already_dissected<len)
3752 proto_tree_add_item(tree, hf_mpeg_descr_private_data, tvb, offset, len-already_dissected, ENC_NA);
3753 break;
3754 default:
3755 already_dissected = offset-offset_start;
3756 if (already_dissected<len)
3757 proto_tree_add_item(tree, hf_mpeg_descr_extension_data, tvb, offset, len-already_dissected, ENC_NA);
3758 break;
3763 #define MPEG_DESCR_AC3_SYSA_SRATE_MASK 0xe0
3764 #define MPEG_DESCR_AC3_SYSA_BSID_MASK 0x1f
3765 #define MPEG_DESCR_AC3_SYSA_BITRATE_CODE_LIMIT_MASK 0x80
3766 #define MPEG_DESCR_AC3_SYSA_BITRATE_CODE_MASK 0x7c
3767 #define MPEG_DESCR_AC3_SYSA_SURROUND_MODE_MASK 0x03
3768 #define MPEG_DESCR_AC3_SYSA_BSMOD_MASK 0xe0
3769 #define MPEG_DESCR_AC3_SYSA_NUM_CHANNELS_MASK 0x1e
3770 #define MPEG_DESCR_AC3_SYSA_FULL_SVC_MASK 0x01
3771 #define MPEG_DESCR_AC3_SYSA_MAINID_MASK 0xe0
3772 #define MPEG_DESCR_AC3_SYSA_PRIORITY_MASK 0x18
3773 #define MPEG_DESCR_AC3_SYSA_RESERVED_MASK 0x07
3774 #define MPEG_DESCR_AC3_SYSA_TEXTLEN_MASK 0xfe
3775 #define MPEG_DESCR_AC3_SYSA_TEXTCODE_MASK 0x01
3776 #define MPEG_DESCR_AC3_SYSA_LANG1_MASK 0x80
3777 #define MPEG_DESCR_AC3_SYSA_LANG2_MASK 0x40
3779 static int hf_mpeg_descr_ac3_sysa_srate;
3780 static int hf_mpeg_descr_ac3_sysa_bsid;
3781 static int hf_mpeg_descr_ac3_sysa_bitrate;
3782 static int hf_mpeg_descr_ac3_sysa_bitrate_limit;
3783 static int hf_mpeg_descr_ac3_sysa_surround;
3784 static int hf_mpeg_descr_ac3_sysa_bsmod;
3785 static int hf_mpeg_descr_ac3_sysa_num_channels;
3786 static int hf_mpeg_descr_ac3_sysa_full_svc;
3787 static int hf_mpeg_descr_ac3_sysa_langcode;
3788 static int hf_mpeg_descr_ac3_sysa_langcode2;
3789 static int hf_mpeg_descr_ac3_sysa_mainid;
3790 static int hf_mpeg_descr_ac3_sysa_priority;
3791 static int hf_mpeg_descr_ac3_sysa_reserved;
3792 static int hf_mpeg_descr_ac3_sysa_asvcflags;
3793 static int hf_mpeg_descr_ac3_sysa_textlen;
3794 static int hf_mpeg_descr_ac3_sysa_textcode;
3795 static int hf_mpeg_descr_ac3_sysa_lang1;
3796 static int hf_mpeg_descr_ac3_sysa_lang2;
3797 static int hf_mpeg_descr_ac3_sysa_lang1_bytes;
3798 static int hf_mpeg_descr_ac3_sysa_lang2_bytes;
3800 /* ATSC A/52 Annex A Table A4.2*/
3801 static const value_string mpeg_descr_ac3_sysa_srate_flag_vals[] = {
3802 { 0x0, "48 KHz" },
3803 { 0x1, "44.1 KHz" },
3804 { 0x2, "32 KHz" },
3805 { 0x3, "Reserved" },
3806 { 0x4, "48 or 44.1 KHz" },
3807 { 0x5, "48 or 32 KHz" },
3808 { 0x6, "44.1 or 32 KHz" },
3809 { 0x7, "48, 44.1 or 32 KHz" },
3810 { 0x0, NULL }
3813 /* ATSC A/52 Annex A Table A4.3 */
3814 static const value_string mpeg_descr_ac3_sysa_bitrate_code_limit_vals[] = {
3815 { 0, "Exact bitrate" },
3816 { 1, "Upper limit bitrate" },
3817 { 0x0, NULL }
3820 static const value_string mpeg_descr_ac3_sysa_bitrate_code_vals[] = {
3821 { 0, "32 KHz" },
3822 { 1, "40 KHz" },
3823 { 2, "48 KHz" },
3824 { 3, "56 KHz" },
3825 { 4, "64 KHz" },
3826 { 5, "80 KHz" },
3827 { 6, "96 KHz" },
3828 { 7, "112 KHz" },
3829 { 8, "128 KHz" },
3830 { 9, "160 KHz" },
3831 { 10, "192 KHz" },
3832 { 11, "224 KHz" },
3833 { 12, "256 KHz" },
3834 { 13, "320 KHz" },
3835 { 14, "384 KHz" },
3836 { 15, "448 KHz" },
3837 { 16, "512 KHz" },
3838 { 17, "576 KHz" },
3839 { 18, "640 KHz" },
3840 { 0x0, NULL }
3843 /* ATSC A/52 Annex A Table A4.4 */
3844 static const value_string mpeg_descr_ac3_sysa_surround_mode_vals[] = {
3845 { 0x0, "Not indicated" },
3846 { 0x1, "NOT Dolby Surround Sound" },
3847 { 0x2, "Dolby Surround Sound" },
3848 { 0x3, "Reserved" },
3849 { 0x0, NULL }
3852 /* ATSC A/52 Annex A Table A4.5*/
3853 static const value_string mpeg_descr_ac3_sysa_num_channels_vals[] = {
3854 { 0x0, "1 + 1 channels" },
3855 { 0x1, "1/0 channels" },
3856 { 0x2, "2/0 channels" },
3857 { 0x3, "3/0 channels" },
3858 { 0x4, "2/1 channels" },
3859 { 0x5, "3/1 channels" },
3860 { 0x6, "2/2 channels" },
3861 { 0x7, "3/2 channels" },
3862 { 0x8, "1 channel" },
3863 { 0x9, "<= 2 channels" },
3864 { 0xa, "<= 3 channels" },
3865 { 0xb, "<= 4 channels" },
3866 { 0xc, "<= 5 channels" },
3867 { 0xd, "<= 6 channels" },
3868 { 0xe, "Reserved" },
3869 { 0xf, "Reserved" },
3870 { 0x0, NULL }
3873 /* ATSC A/52 Annex A Table A4.6 */
3874 static const value_string mpeg_descr_ac3_sysa_priority_vals[] = {
3875 { 0x0, "Reserved" },
3876 { 0x1, "Primary Audio" },
3877 { 0x2, "Other Audio" },
3878 { 0x3, "Not specified" },
3879 { 0x0, NULL }
3882 /* According to ATSC A/52, Annex A, there are two separate ATSC descriptors. "System A" is used
3883 by ATSC, and "System B" is used by DVB. See A/52 Sec A.4.1 for the System A definition */
3884 static void
3885 proto_mpeg_descriptor_dissect_ac3_system_a(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3887 unsigned end = offset + len;
3888 uint8_t bsmod_chans_fullsvc, bsmod, num_channels, textlen, lang;
3890 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_srate, tvb, offset, 1, ENC_BIG_ENDIAN);
3891 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_bsid, tvb, offset, 1, ENC_BIG_ENDIAN);
3892 offset += 1;
3894 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_bitrate_limit, tvb, offset, 1, ENC_BIG_ENDIAN);
3895 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_bitrate, tvb, offset, 1, ENC_BIG_ENDIAN);
3896 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_surround, tvb, offset, 1, ENC_BIG_ENDIAN);
3897 offset += 1;
3899 bsmod_chans_fullsvc = tvb_get_uint8(tvb, offset);
3900 bsmod = (bsmod_chans_fullsvc & 0xe0) >> 5;
3901 num_channels = (bsmod_chans_fullsvc & 0x1e) >> 1;
3902 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_bsmod, tvb, offset, 1, ENC_BIG_ENDIAN);
3903 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_num_channels, tvb, offset, 1, ENC_BIG_ENDIAN);
3904 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_full_svc, tvb, offset, 1, ENC_BIG_ENDIAN);
3905 offset += 1;
3907 if (offset >= end) return;
3909 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_langcode, tvb, offset, 1, ENC_BIG_ENDIAN);
3910 offset += 1;
3912 if (offset >= end) return;
3914 if (num_channels == 0) {
3915 /* 1+1 mode, so there is the possibility the second mono is in a different language */
3916 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_langcode2, tvb, offset, 1, ENC_BIG_ENDIAN);
3917 offset += 1;
3920 if (offset >= end) return;
3922 if (bsmod < 2) {
3923 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_mainid, tvb, offset, 1, ENC_BIG_ENDIAN);
3924 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
3925 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3926 } else {
3927 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_asvcflags, tvb, offset, 1, ENC_BIG_ENDIAN);
3929 offset += 1;
3931 if (offset >= end) return;
3933 textlen = tvb_get_uint8(tvb, offset) >> 1;
3934 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_textlen, tvb, offset, 1, ENC_BIG_ENDIAN);
3935 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_textcode, tvb, offset, 1, ENC_BIG_ENDIAN);
3936 offset += 1;
3937 offset += textlen;
3939 if (offset >= end) return;
3941 lang = tvb_get_uint8(tvb, offset);
3942 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_lang1, tvb, offset, 1, ENC_BIG_ENDIAN);
3943 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_lang2, tvb, offset, 1, ENC_BIG_ENDIAN);
3944 offset += 1;
3946 if (offset >= end) return;
3948 if (lang & 0x80) {
3949 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_lang1_bytes, tvb, offset, 3, ENC_ASCII);
3950 offset += 3;
3953 if (offset >= end) return;
3955 if (lang & 0x40) {
3956 proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_lang2_bytes, tvb, offset, 3, ENC_ASCII);
3957 offset += 3;
3960 if (offset < end)
3961 proto_tree_add_item(tree, hf_mpeg_descr_ac3_additional_info, tvb, offset, end - offset, ENC_NA);
3964 /* 0x83 NorDig Logical Channel Descriptor (version 1) */
3965 static int hf_mpeg_descr_nordig_lcd_v1_service_list_id;
3966 static int hf_mpeg_descr_nordig_lcd_v1_service_list_visible_service_flag;
3967 static int hf_mpeg_descr_nordig_lcd_v1_service_list_reserved;
3968 static int hf_mpeg_descr_nordig_lcd_v1_service_list_logical_channel_number;
3970 static int ett_mpeg_descriptor_nordig_lcd_v1_service_list;
3972 #define MPEG_DESCR_NORDIG_LCD_V1_VISIBLE_SERVICE_FLAG_MASK 0x8000
3973 #define MPEG_DESCR_NORDIG_LCD_V1_RESERVED_MASK 0x4000
3974 #define MPEG_DESCR_NORDIG_LCD_V1_LCN_MASK 0x3fff
3976 static void
3977 proto_mpeg_descriptor_dissect_nordig_lcd_v1(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3979 unsigned end = offset + len;
3981 if (len%4 != 0) {
3982 return;
3985 uint16_t svc_id;
3986 proto_tree * svc_tree;
3988 while (offset < end) {
3989 svc_id = tvb_get_ntohs(tvb, offset);
3991 svc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3,
3992 ett_mpeg_descriptor_nordig_lcd_v1_service_list, NULL, "Service 0x%04x", svc_id);
3994 proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v1_service_list_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3995 offset += 2;
3997 proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v1_service_list_visible_service_flag, tvb, offset, 2, ENC_BIG_ENDIAN);
3998 proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v1_service_list_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
3999 proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v1_service_list_logical_channel_number, tvb, offset, 2, ENC_BIG_ENDIAN);
4000 offset += 2;
4005 /* 0x87 NorDig Logical Channel Descriptor (version 2) */
4006 static int hf_mpeg_descr_nordig_lcd_v2_channel_list_id;
4007 static int hf_mpeg_descr_nordig_lcd_v2_channel_list_name_length;
4008 static int hf_mpeg_descr_nordig_lcd_v2_channel_list_name_encoding;
4009 static int hf_mpeg_descr_nordig_lcd_v2_channel_list_name;
4010 static int hf_mpeg_descr_nordig_lcd_v2_country_code;
4011 static int hf_mpeg_descr_nordig_lcd_v2_descriptor_length;
4012 static int hf_mpeg_descr_nordig_lcd_v2_service_id;
4013 static int hf_mpeg_descr_nordig_lcd_v2_visible_service_flag;
4014 static int hf_mpeg_descr_nordig_lcd_v2_reserved;
4015 static int hf_mpeg_descr_nordig_lcd_v2_logical_channel_number;
4017 static int ett_mpeg_descriptor_nordig_lcd_v2_channel_list_list;
4018 static int ett_mpeg_descriptor_nordig_lcd_v2_service_list;
4020 #define MPEG_DESCR_NORDIG_LCD_V2_VISIBLE_SERVICE_FLAG_MASK 0x8000
4021 #define MPEG_DESCR_NORDIG_LCD_V2_RESERVED_MASK 0x7c00
4022 #define MPEG_DESCR_NORDIG_LCD_V2_LCN_MASK 0x03ff
4024 static int
4025 proto_mpeg_descriptor_dissect_nordig_lcd_v2_measure_ch_list(tvbuff_t *tvb, unsigned offset, unsigned len)
4027 unsigned l_offset = offset;
4028 if (len < 2) {
4029 return len;
4031 uint8_t channel_list_name_length = tvb_get_uint8(tvb, l_offset + 1);
4032 l_offset += 2 + channel_list_name_length + 4;
4033 if (l_offset > offset + len) {
4034 return len;
4036 uint8_t descriptor_len = tvb_get_uint8(tvb, l_offset - 1);
4037 l_offset += descriptor_len;
4038 if (l_offset > offset + len) {
4039 return len;
4040 } else {
4041 return l_offset - offset;
4045 static void
4046 proto_mpeg_descriptor_dissect_nordig_lcd_v2(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
4048 unsigned cnt = len;
4049 unsigned end = offset + len;
4051 proto_tree * channel_list_tree;
4053 while (cnt > 0) {
4054 int ch_list_len = proto_mpeg_descriptor_dissect_nordig_lcd_v2_measure_ch_list(tvb, offset, end - offset);
4055 uint8_t channel_list_id;
4056 uint8_t channel_list_name_length;
4057 uint8_t descriptor_length;
4059 channel_list_id = tvb_get_uint8(tvb, offset);
4060 channel_list_tree = proto_tree_add_subtree_format(tree, tvb, offset, ch_list_len,
4061 ett_mpeg_descriptor_nordig_lcd_v2_channel_list_list, NULL, "Channel list 0x%02x", channel_list_id);
4062 proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_channel_list_id, tvb, offset, 1, ENC_BIG_ENDIAN);
4063 offset += 1;
4064 cnt -= 1;
4066 if (cnt < 1) return;
4067 channel_list_name_length = tvb_get_uint8(tvb, offset);
4068 proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_channel_list_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
4069 offset += 1;
4070 cnt -= 1;
4072 channel_list_name_length = MIN(cnt, channel_list_name_length);
4073 dvb_encoding_e encoding;
4074 unsigned enc_len = dvb_analyze_string_charset(tvb, offset, channel_list_name_length, &encoding);
4075 dvb_add_chartbl(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_channel_list_name_encoding, tvb, offset, enc_len, encoding);
4077 proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_channel_list_name, tvb, offset+enc_len, channel_list_name_length-enc_len, dvb_enc_to_item_enc(encoding));
4078 offset += channel_list_name_length;
4079 cnt -= channel_list_name_length;
4081 if (cnt < 3) return;
4082 proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_country_code, tvb, offset, 3, ENC_ASCII);
4083 offset += 3;
4084 cnt -= 3;
4086 if (cnt < 1) return;
4087 descriptor_length = tvb_get_uint8(tvb, offset);
4088 proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_descriptor_length, tvb, offset, 1, ENC_BIG_ENDIAN);
4089 offset += 1;
4090 cnt -= 1;
4092 descriptor_length = MIN(descriptor_length, cnt);
4093 while (descriptor_length > 0) {
4094 uint16_t svc_id;
4095 proto_tree * svc_tree;
4097 if (cnt < 2) return;
4098 svc_id = tvb_get_ntohs(tvb, offset);
4100 svc_tree = proto_tree_add_subtree_format(channel_list_tree, tvb, offset, 4,
4101 ett_mpeg_descriptor_nordig_lcd_v2_service_list, NULL, "Service 0x%04x", svc_id);
4103 proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v2_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
4104 offset += 2;
4105 cnt -= 2;
4106 descriptor_length -= 2;
4108 if (cnt < 2) return;
4109 proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v2_visible_service_flag, tvb, offset, 2, ENC_BIG_ENDIAN);
4110 proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v2_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
4111 proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v2_logical_channel_number, tvb, offset, 2, ENC_BIG_ENDIAN);
4112 offset += 2;
4113 cnt -= 2;
4114 descriptor_length -= 2;
4120 /* 0xA2 Logon Initialize Descriptor */
4121 static int hf_mpeg_descr_logon_initialize_group_id;
4122 static int hf_mpeg_descr_logon_initialize_logon_id;
4123 static int hf_mpeg_descr_logon_initialize_continuous_carrier_reserved;
4124 static int hf_mpeg_descr_logon_initialize_continuous_carrier;
4125 static int hf_mpeg_descr_logon_initialize_security_handshake_required;
4126 static int hf_mpeg_descr_logon_initialize_prefix_flag;
4127 static int hf_mpeg_descr_logon_initialize_data_unit_labelling_flag;
4128 static int hf_mpeg_descr_logon_initialize_mini_slot_flag;
4129 static int hf_mpeg_descr_logon_initialize_contention_based_mini_slot_flag;
4130 static int hf_mpeg_descr_logon_initialize_capacity_type_flag_reserved;
4131 static int hf_mpeg_descr_logon_initialize_capacity_type_flag;
4132 static int hf_mpeg_descr_logon_initialize_traffic_burst_type;
4133 static int hf_mpeg_descr_logon_initialize_connectivity;
4134 static int hf_mpeg_descr_logon_initialize_return_vpi_reserved;
4135 static int hf_mpeg_descr_logon_initialize_return_vpi;
4136 static int hf_mpeg_descr_logon_initialize_return_vci;
4137 static int hf_mpeg_descr_logon_initialize_return_signalling_vpi_reserved;
4138 static int hf_mpeg_descr_logon_initialize_return_signalling_vpi;
4139 static int hf_mpeg_descr_logon_initialize_return_signalling_vci;
4140 static int hf_mpeg_descr_logon_initialize_forward_signalling_vpi_reserved;
4141 static int hf_mpeg_descr_logon_initialize_forward_signalling_vpi;
4142 static int hf_mpeg_descr_logon_initialize_forward_signalling_vci;
4144 static int hf_mpeg_descr_logon_initialize_return_trf_pid;
4145 static int hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid_reserved;
4146 static int hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid;
4148 static int hf_mpeg_descr_logon_initialize_cra_level;
4149 static int hf_mpeg_descr_logon_initialize_vbdc_max_reserved;
4150 static int hf_mpeg_descr_logon_initialize_vbdc_max;
4151 static int hf_mpeg_descr_logon_initialize_rbdc_max;
4152 static int hf_mpeg_descr_logon_initialize_rbdc_timeout;
4155 #define MPEG_DESCR_LOGON_INITIALIZE_CONTINUOUS_CARRIER_RESERVED_MASK 0xC0
4156 #define MPEG_DESCR_LOGON_INITIALIZE_CONTINUOUS_CARRIER_MASK 0x20
4157 #define MPEG_DESCR_LOGON_INITIALIZE_SECURITY_HANDSHAKE_REQUIRED_MASK 0x10
4158 #define MPEG_DESCR_LOGON_INITIALIZE_PREFIX_FLAG_MASK 0x08
4159 #define MPEG_DESCR_LOGON_INITIALIZE_DATA_UNIT_LABELLING_FLAG_MASK 0x04
4160 #define MPEG_DESCR_LOGON_INITIALIZE_MINI_SLOT_FLAG_MASK 0x02
4161 #define MPEG_DESCR_LOGON_INITIALIZE_CONTENTION_BASED_MINI_SLOT_FLAG_MASK 0x01
4163 #define MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_RESERVED_MASK 0x80
4164 #define MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_MASK 0x40
4165 #define MPEG_DESCR_LOGON_INITIALIZE_TRAFFIC_BURST_TYPE_MASK 0x20
4167 #define MPEG_DESCR_LOGON_INITIALIZE_RETURN_TRF_PID_MASK 0x1FFF
4168 #define MPEG_DESCR_LOGON_INITIALIZE_RETURN_CTRL_MNGM_PID_RESERVED_MASK 0xE000
4169 #define MPEG_DESCR_LOGON_INITIALIZE_RETURN_CTRL_MNGM_PID_MASK 0x1FFF
4171 #define MPEG_DESCR_LOGON_INITIALIZE_CONNECTIVITY_MASK 0x1000
4172 #define MPEG_DESCR_LOGON_INITIALIZE_RETURN_VPI_RESERVED_MASK 0xF0
4173 #define MPEG_DESCR_LOGON_INITIALIZE_RETURN_VPI_MASK 0x0F
4175 #define MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_RESERVED_MASK 0xF0
4176 #define MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_MASK 0x0F
4177 #define MPEG_DESCR_LOGON_INITIALIZE_FORWARD_SIGNALLING_VPI_RESERVED_MASK 0xFF00
4178 #define MPEG_DESCR_LOGON_INITIALIZE_FORWARD_SIGNALLING_VPI_MASK 0x00FF
4180 #define MPEG_DESCR_LOGON_INITIALIZE_VDBC_MAX_RESERVED_MASK 0xF800
4181 #define MPEG_DESCR_LOGON_INITIALIZE_VDBC_MAX_MASK 0x07FF
4183 /* ETSI EN 301 790 - 8.5.5.10.4 Logon Initialize descriptor */
4184 static void
4185 proto_mpeg_descriptor_dissect_logon_initialize(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
4188 unsigned end = offset + len;
4189 uint8_t flags;
4190 uint16_t flags2;
4192 if (len >= 1)
4194 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_group_id, tvb, offset, 1, ENC_BIG_ENDIAN);
4195 offset += 1;
4198 if (len >= 3)
4200 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_logon_id, tvb, offset, 2, ENC_BIG_ENDIAN);
4201 offset += 2;
4204 if (len >= 4)
4206 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_continuous_carrier_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4207 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_continuous_carrier, tvb, offset, 1, ENC_BIG_ENDIAN);
4208 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_security_handshake_required, tvb, offset, 1, ENC_BIG_ENDIAN);
4209 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_prefix_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
4210 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_data_unit_labelling_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
4211 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_mini_slot_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
4212 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_contention_based_mini_slot_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
4213 offset += 1;
4216 if (len >= 5)
4218 flags = tvb_get_uint8(tvb, offset);
4220 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_capacity_type_flag_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4221 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_capacity_type_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
4222 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_traffic_burst_type, tvb, offset, 1, ENC_BIG_ENDIAN);
4223 /* If (Traffic_burst_type == 0) { */
4224 if (flags & MPEG_DESCR_LOGON_INITIALIZE_TRAFFIC_BURST_TYPE_MASK) {
4225 /* Connectivity */
4226 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_connectivity, tvb, offset, 2, ENC_BIG_ENDIAN);
4227 flags2 = tvb_get_ntohs(tvb, offset);
4228 if (flags2 & MPEG_DESCR_LOGON_INITIALIZE_CONNECTIVITY_MASK) {
4229 /* Else { (out of order) */
4231 /* Return_signalling_VPI (4 bits reserved, 4 bits) */
4232 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_signalling_vpi_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4233 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_signalling_vpi, tvb, offset, 1, ENC_BIG_ENDIAN);
4234 offset += 1;
4236 /* Return_signalling_VCI (16 bits) */
4237 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_signalling_vci, tvb, offset, 2, ENC_BIG_ENDIAN);
4238 offset += 2;
4240 /* Forward_signalling_VPI (4 bits reserved, then 4 bits) */
4241 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_forward_signalling_vpi_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4242 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_forward_signalling_vpi, tvb, offset, 1, ENC_BIG_ENDIAN);
4243 offset += 1;
4245 /* Forward_signalling_VCI (16 bits) */
4246 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_forward_signalling_vci, tvb, offset, 2, ENC_BIG_ENDIAN);
4247 offset += 2;
4248 } else {
4249 /* If (Connectivity == 0) { */
4251 /* Return_signalling_VPI (4 bits reserved, then 4 bits) */
4252 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_vpi_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4253 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_vpi, tvb, offset, 1, ENC_BIG_ENDIAN);
4254 offset += 1;
4256 /* Return_signalling_VCI (16 bits) */
4257 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_vci, tvb, offset, 2, ENC_BIG_ENDIAN);
4258 offset += 2;
4261 } else {
4262 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_trf_pid, tvb, offset, 2, ENC_BIG_ENDIAN);
4263 offset += 2;
4265 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
4266 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid, tvb, offset, 2, ENC_BIG_ENDIAN);
4267 offset += 2;
4270 if ((offset < end) && (flags & MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_MASK)) {
4272 /* CRA_level (3 bytes) */
4273 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_cra_level, tvb, offset, 3, ENC_BIG_ENDIAN);
4274 offset += 3;
4276 /* VBDC_max (5 bits reserved, 11 bits) */
4277 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_vbdc_max_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
4278 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_vbdc_max, tvb, offset, 2, ENC_BIG_ENDIAN);
4279 offset += 2;
4281 /* RBDC_max (3 bytes) */
4282 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_rbdc_max, tvb, offset, 3, ENC_BIG_ENDIAN);
4283 offset += 3;
4285 /* RBDC timeout (2 bytes) */
4286 proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_rbdc_timeout, tvb, offset, 2, ENC_BIG_ENDIAN);
4287 /*offset += 2;*/
4292 /* 0xA7 RCS Content Descriptor */
4293 static int hf_mpeg_descr_rcs_content_table_id;
4295 static void
4296 proto_mpeg_descriptor_dissect_rcs_content(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
4298 unsigned end = offset + len;
4300 while (offset < end) {
4301 proto_tree_add_item(tree, hf_mpeg_descr_rcs_content_table_id, tvb, offset, 1, ENC_BIG_ENDIAN);
4302 offset += 1;
4306 /* Private descriptors
4307 these functions replace proto_mpeg_descriptor_dissect(), they get to see the whole descriptor */
4309 #define CIPLUS_DESC_TAG_CNT_LBL 0xCB
4310 #define CIPLUS_DESC_TAG_SVC 0xCC
4311 #define CIPLUS_DESC_TAG_PROT 0xCE
4313 static const value_string mpeg_descriptor_ciplus_tag_vals[] = {
4314 /* From CI+ 1.3.1 */
4315 { CIPLUS_DESC_TAG_CNT_LBL, "CI+ Content Label Descriptor" },
4316 { CIPLUS_DESC_TAG_SVC, "CI+ Service Descriptor" },
4317 { CIPLUS_DESC_TAG_PROT, "CI+ Protection Descriptor" },
4318 { 0x00, NULL}
4321 /* 0xCB CI+ Content Label Descriptor */
4322 static int hf_mpeg_descr_ciplus_cl_cb_min;
4323 static int hf_mpeg_descr_ciplus_cl_cb_max;
4324 static int hf_mpeg_descr_ciplus_cl_lang;
4325 static int hf_mpeg_descr_ciplus_cl_label;
4327 /* 0xCC CI+ Service Descriptor */
4328 static int hf_mpeg_descr_ciplus_svc_id;
4329 static int hf_mpeg_descr_ciplus_svc_type;
4330 static int hf_mpeg_descr_ciplus_svc_visible;
4331 static int hf_mpeg_descr_ciplus_svc_selectable;
4332 static int hf_mpeg_descr_ciplus_svc_lcn;
4333 static int hf_mpeg_descr_ciplus_svc_prov_name;
4334 static int hf_mpeg_descr_ciplus_svc_name;
4336 /* 0xCE CI+ Protection Descriptor */
4337 static int hf_mpeg_descr_ciplus_prot_free_ci_mode;
4338 static int hf_mpeg_descr_ciplus_prot_match_brand_flag;
4339 static int hf_mpeg_descr_ciplus_prot_num_entries;
4340 static int hf_mpeg_descr_ciplus_prot_brand_id;
4342 static const true_false_string tfs_prot_noprot = { "CI+ protection required", "CI+ protection not required" };
4345 static unsigned
4346 proto_mpeg_descriptor_dissect_private_ciplus(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4348 unsigned offset_start;
4349 uint8_t tag, len;
4350 const char *tag_str;
4351 proto_item *di;
4352 proto_tree *descriptor_tree;
4354 offset_start=offset;
4356 tag = tvb_get_uint8(tvb, offset);
4357 tag_str = try_val_to_str(tag, mpeg_descriptor_ciplus_tag_vals);
4358 if (!tag_str)
4359 return 0;
4361 descriptor_tree = proto_tree_add_subtree_format(tree, tvb, offset_start, -1,
4362 ett_mpeg_descriptor, &di, "CI+ private descriptor Tag=0x%02x", tag);
4364 proto_tree_add_uint_format(descriptor_tree, hf_mpeg_descriptor_tag,
4365 tvb, offset, 1, tag, "Descriptor Tag: %s (0x%02x)", tag_str, tag);
4366 offset += 1;
4368 len = tvb_get_uint8(tvb, offset);
4369 proto_tree_add_item(descriptor_tree, hf_mpeg_descriptor_length, tvb, offset, 1, ENC_BIG_ENDIAN);
4370 offset += 1;
4372 if (tag==CIPLUS_DESC_TAG_CNT_LBL) {
4373 proto_tree_add_item(tree, hf_mpeg_descr_ciplus_cl_cb_min, tvb, offset, 1, ENC_BIG_ENDIAN);
4374 offset += 1;
4376 proto_tree_add_item(tree, hf_mpeg_descr_ciplus_cl_cb_max, tvb, offset, 1, ENC_BIG_ENDIAN);
4377 offset += 1;
4379 proto_tree_add_item(tree, hf_mpeg_descr_ciplus_cl_lang, tvb, offset, 3, ENC_ASCII);
4380 offset += 3;
4382 proto_tree_add_item(tree, hf_mpeg_descr_ciplus_cl_label, tvb, offset, len-offset, ENC_ASCII);
4383 offset += len-offset;
4385 else if (tag==CIPLUS_DESC_TAG_SVC) {
4386 uint8_t str_len_byte;
4388 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_id, tvb, offset, 2, ENC_BIG_ENDIAN);
4389 offset += 2;
4391 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_type, tvb, offset, 1, ENC_BIG_ENDIAN);
4392 offset += 1;
4394 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_visible, tvb, offset, 2, ENC_BIG_ENDIAN);
4395 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_selectable, tvb, offset, 2, ENC_BIG_ENDIAN);
4396 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_lcn, tvb, offset, 2, ENC_BIG_ENDIAN);
4397 offset += 2;
4399 str_len_byte = tvb_get_uint8(tvb, offset);
4400 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_prov_name, tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN);
4401 offset += 1+str_len_byte;
4403 str_len_byte = tvb_get_uint8(tvb, offset);
4404 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_name, tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN);
4405 offset += 1+str_len_byte;
4407 else if (tag==CIPLUS_DESC_TAG_PROT) {
4408 bool match_brand_flag;
4409 uint8_t num_brands, i;
4410 unsigned remaining;
4412 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_prot_free_ci_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
4413 match_brand_flag = ((tvb_get_uint8(tvb, offset) & 0x40) == 0x40);
4414 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_prot_match_brand_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
4415 offset++;
4417 if (match_brand_flag) {
4418 num_brands = tvb_get_uint8(tvb, offset);
4419 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_prot_num_entries, tvb, offset, 1, ENC_BIG_ENDIAN);
4420 offset++;
4421 for (i=0; i<num_brands; i++) {
4422 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_prot_brand_id, tvb, offset, 2, ENC_BIG_ENDIAN);
4423 offset += 2;
4427 remaining = offset_start+2+len - offset;
4428 if (remaining > 0) {
4429 proto_tree_add_item(descriptor_tree, hf_mpeg_descr_private_data, tvb, offset, remaining, ENC_NA);
4430 offset += remaining;
4434 proto_item_set_len(di, offset-offset_start);
4435 return offset-offset_start;
4439 /* Common dissector */
4441 unsigned
4442 proto_mpeg_descriptor_dissect(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4444 unsigned tag, len;
4446 proto_tree *descriptor_tree;
4448 tag = tvb_get_uint8(tvb, offset);
4449 len = tvb_get_uint8(tvb, offset + 1);
4451 descriptor_tree = proto_tree_add_subtree_format(tree, tvb, offset, len + 2,
4452 ett_mpeg_descriptor, NULL, "Descriptor Tag=0x%02x", tag);
4454 proto_tree_add_item(descriptor_tree, hf_mpeg_descriptor_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
4455 offset += 1;
4457 proto_tree_add_item(descriptor_tree, hf_mpeg_descriptor_length, tvb, offset, 1, ENC_BIG_ENDIAN);
4458 offset += 1;
4460 if (len == 0)
4461 return 2;
4463 switch (tag) {
4464 case 0x02: /* Video Stream Descriptor */
4465 proto_mpeg_descriptor_dissect_video_stream(tvb, offset, descriptor_tree);
4466 break;
4467 case 0x03: /* Audio Stream Descriptor */
4468 proto_mpeg_descriptor_dissect_audio_stream(tvb, offset, descriptor_tree);
4469 break;
4470 case 0x05: /* Registration Descriptor */
4471 proto_mpeg_descriptor_dissect_registration(tvb, offset, len, descriptor_tree);
4472 break;
4473 case 0x06: /* Data Stream Alignment Descriptor */
4474 proto_mpeg_descriptor_dissect_data_stream_alignment(tvb, offset, descriptor_tree);
4475 break;
4476 case 0x09: /* CA Descriptor */
4477 proto_mpeg_descriptor_dissect_ca(tvb, offset, len, descriptor_tree);
4478 break;
4479 case 0x0A: /* ISO 639 Language Descriptor */
4480 proto_mpeg_descriptor_dissect_iso639(tvb, offset, len, descriptor_tree);
4481 break;
4482 case 0x0B: /* System Clock Descriptor */
4483 proto_mpeg_descriptor_dissect_system_clock(tvb, offset, descriptor_tree);
4484 break;
4485 case 0x0E: /* Maximum Bitrate Descriptor */
4486 proto_mpeg_descriptor_dissect_max_bitrate(tvb, offset, descriptor_tree);
4487 break;
4488 case 0x10: /* Smoothing Buffer Descriptor */
4489 proto_mpeg_descriptor_dissect_smoothing_buffer(tvb, offset, descriptor_tree);
4490 break;
4491 case 0x11: /* STD Descriptor */
4492 proto_mpeg_descriptor_dissect_std(tvb, offset, descriptor_tree);
4493 break;
4494 case 0x13: /* Carousel Identifier Descriptor */
4495 proto_mpeg_descriptor_dissect_carousel_identifier(tvb, offset, len, descriptor_tree);
4496 break;
4497 case 0x14: /* Association Tag Descriptor */
4498 proto_mpeg_descriptor_dissect_association_tag(tvb, offset, len, descriptor_tree);
4499 break;
4500 case 0x28: /* AVC Video Descriptor */
4501 proto_mpeg_descriptor_dissect_avc_vid(tvb, offset, descriptor_tree);
4502 break;
4503 case 0x40: /* Network Name Descriptor */
4504 proto_mpeg_descriptor_dissect_network_name(tvb, offset, len, descriptor_tree);
4505 break;
4506 case 0x41: /* Service List Descriptor */
4507 proto_mpeg_descriptor_dissect_service_list(tvb, offset, len, descriptor_tree);
4508 break;
4509 case 0x42: /* Stuffing Descriptor */
4510 proto_mpeg_descriptor_stuffing(tvb, offset, len, descriptor_tree);
4511 break;
4512 case 0x43: /* Satellite Delivery System Descriptor */
4513 proto_mpeg_descriptor_dissect_satellite_delivery(tvb, offset, descriptor_tree);
4514 break;
4515 case 0x44: /* Cable Delivery System Descriptor */
4516 proto_mpeg_descriptor_dissect_cable_delivery(tvb, offset, descriptor_tree);
4517 break;
4518 case 0x45: /* VBI Data Descriptor */
4519 proto_mpeg_descriptor_dissect_vbi_data(tvb, offset, len, descriptor_tree);
4520 break;
4521 case 0x47: /* Bouquet Name Descriptor */
4522 proto_mpeg_descriptor_dissect_bouquet_name(tvb, offset, len, descriptor_tree);
4523 break;
4524 case 0x48: /* Service Descriptor */
4525 proto_mpeg_descriptor_dissect_service(tvb, offset, descriptor_tree);
4526 break;
4527 case 0x49: /* Country Availability Descriptor */
4528 proto_mpeg_descriptor_dissect_country_availability_descriptor(tvb, offset, len, descriptor_tree);
4529 break;
4530 case 0x4A: /* Linkage Descriptor */
4531 proto_mpeg_descriptor_dissect_linkage(tvb, offset, len, descriptor_tree);
4532 break;
4533 case 0x4B: /* NVOD Reference Descriptor */
4534 proto_mpeg_descriptor_dissect_nvod_reference(tvb, offset, len, descriptor_tree);
4535 break;
4536 case 0x4C: /* Time Shifted Service Descriptor */
4537 proto_mpeg_descriptor_dissect_time_shifted_service(tvb, offset, descriptor_tree);
4538 break;
4539 case 0x4D: /* Short Event Descriptor */
4540 proto_mpeg_descriptor_dissect_short_event(tvb, offset, descriptor_tree);
4541 break;
4542 case 0x4E: /* Extended Event Descriptor */
4543 proto_mpeg_descriptor_dissect_extended_event(tvb, offset, descriptor_tree);
4544 break;
4545 case 0x4F: /* Time Shifted Event Descriptor */
4546 proto_mpeg_descriptor_dissect_time_shifted_event(tvb, offset, descriptor_tree);
4547 break;
4548 case 0x50: /* Component Descriptor */
4549 proto_mpeg_descriptor_dissect_component(tvb, offset, len, descriptor_tree);
4550 break;
4551 case 0x51: /* Mosaic Descriptor */
4552 proto_mpeg_descriptor_dissect_mosaic(tvb, offset, len, descriptor_tree);
4553 break;
4554 case 0x52: /* Stream Identifier Descriptor */
4555 proto_mpeg_descriptor_dissect_stream_identifier(tvb, offset, descriptor_tree);
4556 break;
4557 case 0x53: /* CA Identifier Descriptor */
4558 proto_mpeg_descriptor_dissect_ca_identifier(tvb, offset, len, descriptor_tree);
4559 break;
4560 case 0x54: /* Content Descriptor */
4561 proto_mpeg_descriptor_dissect_content(tvb, offset, len, descriptor_tree);
4562 break;
4563 case 0x55: /* Parental Rating Descriptor */
4564 proto_mpeg_descriptor_dissect_parental_rating(tvb, offset, descriptor_tree);
4565 break;
4566 case 0x56: /* Teletext Descriptor */
4567 proto_mpeg_descriptor_dissect_teletext(tvb, offset, len, descriptor_tree);
4568 break;
4569 case 0x57: /* Telephone Descriptor */
4570 proto_mpeg_descriptor_dissect_telephone(tvb, offset, descriptor_tree);
4571 break;
4572 case 0x58: /* Local Time Offset Descriptor */
4573 proto_mpeg_descriptor_dissect_local_time_offset(tvb, offset, len, descriptor_tree);
4574 break;
4575 case 0x59: /* Subtitling Descriptor */
4576 proto_mpeg_descriptor_dissect_subtitling(tvb, offset, len, descriptor_tree);
4577 break;
4578 case 0x5A: /* Terrestrial Delivery System Descriptor */
4579 proto_mpeg_descriptor_dissect_terrestrial_delivery(tvb, offset, descriptor_tree);
4580 break;
4581 case 0x5B: /* Multilingual Network Name Descriptor */
4582 proto_mpeg_descriptor_dissect_multilng_network_name_desc(tvb, offset, len, descriptor_tree);
4583 break;
4584 case 0x5C: /* Multilingual Bouquet Name Descriptor */
4585 proto_mpeg_descriptor_dissect_multilng_bouquet_name_desc(tvb, offset, len, descriptor_tree);
4586 break;
4587 case 0x5D: /* Multilingual Service Name Descriptor */
4588 proto_mpeg_descriptor_dissect_multilng_srv_name_desc(tvb, offset, len, descriptor_tree);
4589 break;
4590 case 0x5E: /* Multilingual Component Descriptor */
4591 proto_mpeg_descriptor_dissect_multilng_component_desc(tvb, offset, len, descriptor_tree);
4592 break;
4593 case 0x5F: /* Private Data Specifier Descriptor */
4594 proto_mpeg_descriptor_dissect_private_data_specifier(tvb, offset, descriptor_tree);
4595 break;
4596 case 0x61: /* Short Smoothing Buffer Descriptor */
4597 proto_mpeg_descriptor_dissect_short_smoothing_buffer(tvb, offset, len, descriptor_tree);
4598 break;
4599 case 0x63: /* Partial Transport Stream Descriptor */
4600 proto_mpeg_descriptor_dissect_partial_transport_stream(tvb, offset, len, descriptor_tree);
4601 break;
4602 case 0x64: /* Data Broadcast Descriptor */
4603 proto_mpeg_descriptor_dissect_data_bcast(tvb, offset, descriptor_tree);
4604 break;
4605 case 0x66: /* Data Broadcast ID Descriptor */
4606 proto_mpeg_descriptor_dissect_data_bcast_id(tvb, offset, len, descriptor_tree);
4607 break;
4608 case 0x69: /* PDC Descriptor */
4609 proto_mpeg_descriptor_dissect_pdc(tvb, offset, descriptor_tree);
4610 break;
4611 case 0x6A: /* AC-3 Descriptor */
4612 proto_mpeg_descriptor_dissect_ac3(tvb, offset, len, descriptor_tree);
4613 break;
4614 case 0x6F: /* Application Signalling Descriptor */
4615 proto_mpeg_descriptor_dissect_app_sig(tvb, offset, len, descriptor_tree);
4616 break;
4617 case 0x71: /* Service Identifier Descriptor */
4618 proto_mpeg_descriptor_dissect_service_identifier(tvb, offset, len, descriptor_tree);
4619 break;
4620 case 0x72: /* Service Availability Descriptor */
4621 proto_mpeg_descriptor_dissect_service_availability(tvb, offset, len, descriptor_tree);
4622 break;
4623 case 0x73: /* Default Authority Descriptor */
4624 proto_mpeg_descriptor_dissect_default_authority(tvb, offset, len, descriptor_tree);
4625 break;
4626 case 0x75: /* TVA ID Descriptor */
4627 proto_mpeg_descriptor_dissect_tva_id(tvb, offset, len, descriptor_tree);
4628 break;
4629 case 0x76: /* Content Identifier Descriptor */
4630 proto_mpeg_descriptor_dissect_content_identifier(tvb, offset, len, descriptor_tree);
4631 break;
4632 case 0x7D: /* XAIT Content Location Descriptor */
4633 proto_mpeg_descriptor_dissect_xait(tvb, offset, descriptor_tree);
4634 break;
4635 case 0x7E: /* FTA Content Management Descriptor */
4636 proto_mpeg_descriptor_dissect_fta(tvb, offset, descriptor_tree);
4637 break;
4638 case 0x7F: /* Extension Descriptor */
4639 proto_mpeg_descriptor_dissect_extension(tvb, offset, len, descriptor_tree);
4640 break;
4641 case 0x81: /* ATSC A/52 AC-3 Audio Descriptor */
4642 proto_mpeg_descriptor_dissect_ac3_system_a(tvb, offset, len, descriptor_tree);
4643 break;
4644 case 0x83: /* NorDig Logical Channel Descriptor (version 1) */
4645 proto_mpeg_descriptor_dissect_nordig_lcd_v1(tvb, offset, len, descriptor_tree);
4646 break;
4647 case 0x87: /* NorDig Logical Channel Descriptor (version 2) */
4648 proto_mpeg_descriptor_dissect_nordig_lcd_v2(tvb, offset, len, descriptor_tree);
4649 break;
4650 case 0xA2: /* Logon Initialize Descriptor */
4651 proto_mpeg_descriptor_dissect_logon_initialize(tvb, offset, len, descriptor_tree);
4652 break;
4653 case 0xA7: /* RCS Content Descriptor */
4654 proto_mpeg_descriptor_dissect_rcs_content(tvb, offset, len, descriptor_tree);
4655 break;
4656 default:
4657 proto_tree_add_item(descriptor_tree, hf_mpeg_descriptor_data, tvb, offset, len, ENC_NA);
4658 break;
4661 return len + 2;
4665 /* dissect a descriptor loop consisting of one or more descriptors
4666 take into account the contexts defined a private data specifier descriptors */
4667 unsigned
4668 proto_mpeg_descriptor_loop_dissect(tvbuff_t *tvb, unsigned offset, unsigned loop_len, proto_tree *tree)
4670 /* we use the reserved value to indicate that no private context is active */
4671 uint32_t private_data_specifier = PRIVATE_DATA_SPECIFIER_RESERVED;
4672 unsigned offset_start;
4673 unsigned desc_len;
4674 uint8_t tag;
4676 offset_start = offset;
4678 while ((offset - offset_start) < loop_len) {
4679 /* don't increment offset in our pre-checks */
4680 tag = tvb_get_uint8(tvb, offset);
4681 if (tag == 0x5F) {
4682 /* we have a private data specifier descriptor: get the private data specifier */
4683 /* offset+1 is length byte, offset+2 is start of payload */
4684 private_data_specifier = tvb_get_ntohl(tvb, offset+2);
4687 /* the default descriptor function takes precedence
4688 however, if it does not know the current descriptor, we search for a context-specific subfunction
4689 this subfunction gets to see the entire descriptor, including tag and len */
4690 if (try_val_to_str(tag, mpeg_descriptor_tag_vals)) {
4691 desc_len = proto_mpeg_descriptor_dissect(tvb, offset, tree);
4693 else {
4694 switch (private_data_specifier) {
4695 case PRIVATE_DATA_SPECIFIER_CIPLUS_LLP:
4696 desc_len = proto_mpeg_descriptor_dissect_private_ciplus(tvb, offset, tree);
4697 break;
4698 default:
4699 desc_len = 0;
4700 break;
4702 if (desc_len == 0) {
4703 /* either there was no subfunction or it could not handle the descriptor
4704 fall back to the default (which will dissect it as unknown) */
4705 desc_len = proto_mpeg_descriptor_dissect(tvb, offset, tree);
4709 offset += desc_len;
4712 return offset-offset_start;
4716 void
4717 proto_register_mpeg_descriptor(void)
4720 static hf_register_info hf[] = {
4721 { &hf_mpeg_descriptor_tag, {
4722 "Descriptor Tag", "mpeg_descr.tag",
4723 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descriptor_tag_vals_ext, 0, NULL, HFILL
4724 } },
4726 { &hf_mpeg_descriptor_length, {
4727 "Descriptor Length", "mpeg_descr.len",
4728 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
4729 } },
4731 { &hf_mpeg_descriptor_data, {
4732 "Descriptor Data", "mpeg_descr.data",
4733 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
4734 } },
4736 /* 0x02 Video Stream Descriptor */
4737 { &hf_mpeg_descr_video_stream_multiple_frame_rate_flag, {
4738 "Multiple Frame Rate Flag", "mpeg_descr.video_stream.multiple_frame_rate_flag",
4739 FT_UINT8, BASE_DEC, VALS(mpeg_descr_video_stream_multiple_frame_rate_flag_vals),
4740 MPEG_DESCR_VIDEO_STREAM_MULTIPLE_FRAME_RATE_FLAG_MASK, NULL, HFILL
4741 } },
4743 { &hf_mpeg_descr_video_stream_frame_rate_code, {
4744 "Frame Rate Code", "mpeg_descr.video_stream.frame_rate_code",
4745 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_VIDEO_STREAM_FRAME_RATE_CODE_MASK, NULL, HFILL
4746 } },
4748 { &hf_mpeg_descr_video_stream_mpeg1_only_flag, {
4749 "MPEG1 Only Flag", "mpeg_descr.video_stream.mpeg1_only_flag",
4750 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_VIDEO_STREAM_MPEG1_ONLY_FLAG_MASK, NULL, HFILL
4751 } },
4753 { &hf_mpeg_descr_video_stream_constrained_parameter_flag, {
4754 "Constrained Parameter Flag", "mpeg_descr.video_stream.constrained_parameter_flag",
4755 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_VIDEO_STREAM_CONSTRAINED_PARAMETER_FLAG_MASK, NULL, HFILL
4756 } },
4758 { &hf_mpeg_descr_video_stream_still_picture_flag, {
4759 "Still Picture Flag", "mpeg_descr.video_stream.still_picture_flag",
4760 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_VIDEO_STREAM_STILL_PICTURE_FLAG_MASK, NULL, HFILL
4761 } },
4763 { &hf_mpeg_descr_video_stream_profile_and_level_indication, {
4764 "Profile and Level Indication", "mpeg_descr.video_stream.profile_level_ind",
4765 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
4766 } },
4768 { &hf_mpeg_descr_video_stream_chroma_format, {
4769 "Chroma Format", "mpeg_descr.video_stream.chroma_format",
4770 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
4771 } },
4773 { &hf_mpeg_descr_video_stream_frame_rate_extension_flag, {
4774 "Frame Rate Extension Flag", "mpeg_descr.video_stream.frame_rate_extension_flag",
4775 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_VIDEO_STREAM_FRAME_RATE_EXTENSION_FLAG_MASK, NULL, HFILL
4776 } },
4778 { &hf_mpeg_descr_video_stream_reserved, {
4779 "Reserved", "mpeg_descr.video_stream.reserved",
4780 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_VIDEO_STREAM_RESERVED_MASK, NULL, HFILL
4781 } },
4783 /* 0x03 Audio Stream Descriptor */
4784 { &hf_mpeg_descr_audio_stream_free_format_flag, {
4785 "Free Format Flag", "mpeg_descr.audio_stream.free_format_flag",
4786 FT_UINT8, BASE_DEC, VALS(mpeg_descr_audio_stream_free_format_flag_vals), MPEG_DESCR_AUDIO_STREAM_FREE_FORMAT_FLAG_MASK, NULL, HFILL
4787 } },
4789 { &hf_mpeg_descr_audio_stream_id, {
4790 "ID", "mpeg_descr.audio_stream.id",
4791 FT_UINT8, BASE_DEC, VALS(mpeg_descr_audio_stream_id_vals), MPEG_DESCR_AUDIO_STREAM_ID_MASK, NULL, HFILL
4792 } },
4794 { &hf_mpeg_descr_audio_stream_layer, {
4795 "Layer", "mpeg_descr.audio_stream.layer",
4796 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AUDIO_STREAM_LAYER_MASK, NULL, HFILL
4797 } },
4799 { &hf_mpeg_descr_audio_stream_variable_rate_audio_indicator, {
4800 "Variable Rate Audio Indicator", "mpeg_descr.audio_stream.vbr_indicator",
4801 FT_UINT8, BASE_DEC, VALS(mpeg_descr_audio_stream_variable_rate_audio_indicator_vals),
4802 MPEG_DESCR_AUDIO_STREAM_VARIABLE_RATE_AUDIO_INDICATOR_MASK, NULL, HFILL
4803 } },
4805 { &hf_mpeg_descr_audio_stream_reserved, {
4806 "Reserved", "mpeg_descr.audio_stream.reserved",
4807 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AUDIO_STREAM_RESERVED_MASK, NULL, HFILL
4808 } },
4810 /* 0x05 Registration Descriptor */
4811 { &hf_mpeg_descr_reg_form_id, {
4812 "Format identifier", "mpeg_descr.registration.format_identifier",
4813 FT_UINT32, BASE_HEX, VALS(mpeg_descr_registration_reg_form_vals), 0, NULL, HFILL
4814 } },
4816 { &hf_mpeg_descr_reg_add_id_inf, {
4817 "Additional identification info", "mpeg_descr.registration.add_id_info",
4818 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
4819 } },
4821 /* 0x06 Data Stream Alignment Descriptor */
4822 { &hf_mpeg_descr_data_stream_alignment, {
4823 "Data Stream Alignment", "mpeg_descr.data_stream_alignment.alignment",
4824 FT_UINT8, BASE_HEX, VALS(mpeg_descr_data_stream_alignment_vals), 0, NULL, HFILL
4825 } },
4827 /* 0x09 CA Descriptor */
4828 { &hf_mpeg_descr_ca_system_id, {
4829 "System ID", "mpeg_descr.ca.sys_id",
4830 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
4831 } },
4833 { &hf_mpeg_descr_ca_reserved, {
4834 "Reserved", "mpeg_descr.ca.reserved",
4835 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_CA_RESERVED_MASK, NULL, HFILL
4836 } },
4838 { &hf_mpeg_descr_ca_pid, {
4839 "CA PID", "mpeg_descr.ca.pid",
4840 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_CA_PID_MASK, NULL, HFILL
4841 } },
4843 { &hf_mpeg_descr_ca_private, {
4844 "Private bytes", "mpeg_descr.ca.private",
4845 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
4846 } },
4848 /* 0x0A ISO 639 Language Descriptor */
4849 { &hf_mpeg_descr_iso639_lang, {
4850 "ISO 639 Language Code", "mpeg_descr.lang.code",
4851 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
4852 } },
4854 { &hf_mpeg_descr_iso639_type, {
4855 "ISO 639 Language Type", "mpeg_descr.lang.type",
4856 FT_UINT8, BASE_HEX, VALS(mpeg_descr_iso639_type_vals), 0, NULL, HFILL
4857 } },
4859 /* 0x0B System Clock Descriptor */
4860 { &hf_mpeg_descr_system_clock_external_clock_reference_indicator, {
4861 "External Clock Reference Indicator", "mpeg_descr.sys_clk.external_clk_ref_ind",
4862 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_SYSTEM_CLOCK_EXTERNAL_CLOCK_REFERENCE_INDICATOR_MASK, NULL, HFILL
4863 } },
4865 { &hf_mpeg_descr_system_clock_reserved1, {
4866 "Reserved", "mpeg_descr.sys_clk.reserved1",
4867 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_SYSTEM_CLOCK_RESERVED1_MASK, NULL, HFILL
4868 } },
4870 { &hf_mpeg_descr_system_clock_accuracy_integer, {
4871 "Accuracy Integer", "mpeg_descr.sys_clk.accuracy_integer",
4872 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_SYSTEM_CLOCK_ACCURACY_INTEGER_MASK, NULL, HFILL
4873 } },
4875 { &hf_mpeg_descr_system_clock_accuracy_exponent, {
4876 "Accuracy Exponent", "mpeg_descr.sys_clk.accuracy_exponent",
4877 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_SYSTEM_CLOCK_ACCURACY_EXPONENT_MASK, NULL, HFILL
4878 } },
4880 { &hf_mpeg_descr_system_clock_reserved2, {
4881 "Reserved", "mpeg_descr.sys_clk.reserved2",
4882 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_SYSTEM_CLOCK_RESERVED2_MASK, NULL, HFILL
4883 } },
4885 /* 0x0E Maximum Bitrate Descriptor */
4886 { &hf_mpeg_descr_max_bitrate_reserved, {
4887 "Maximum Bitrate Reserved", "mpeg_descr.max_bitrate.reserved",
4888 FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_MAX_BITRATE_RESERVED_MASK, NULL, HFILL
4889 } },
4891 { &hf_mpeg_descr_max_bitrate, {
4892 "Maximum Bitrate", "mpeg_descr.max_bitrate.rate",
4893 FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_MAX_BITRATE_MASK, NULL, HFILL
4894 } },
4896 /* 0x10 Smoothing Buffer Descriptor */
4897 { &hf_mpeg_descr_smoothing_buffer_reserved1, {
4898 "Reserved", "mpeg_descr.smoothing_buf.reserved1",
4899 FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_SMOOTHING_BUFFER_RESERVED1_MASK, NULL, HFILL
4900 } },
4902 { &hf_mpeg_descr_smoothing_buffer_leak_rate, {
4903 "Leak Rate", "mpeg_descr.smoothing_buf.leak_rate",
4904 FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_SMOOTHING_BUFFER_LEAK_RATE_MASK, NULL, HFILL
4905 } },
4907 { &hf_mpeg_descr_smoothing_buffer_reserved2, {
4908 "Reserved", "mpeg_descr.smoothing_buf.reserved2",
4909 FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_SMOOTHING_BUFFER_RESERVED2_MASK, NULL, HFILL
4910 } },
4912 { &hf_mpeg_descr_smoothing_buffer_size, {
4913 "Buffer Size", "mpeg_descr.smoothing_buf.size",
4914 FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_SMOOTHING_BUFFER_SIZE_MASK, NULL, HFILL
4915 } },
4917 /* 0x11 STD Descriptor */
4918 { &hf_mpeg_descr_std_reserved, {
4919 "Reserved", "mpeg_descr.std.reserved",
4920 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_STD_RESERVED_MASK, NULL, HFILL
4921 } },
4923 { &hf_mpeg_descr_std_leak_valid, {
4924 "Leak Valid", "mpeg_descr.std.leak_valid",
4925 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_STD_LEAK_VALID_MASK, NULL, HFILL
4926 } },
4928 /* 0x13 Carousel Identifier Descriptor */
4929 { &hf_mpeg_descr_carousel_identifier_id, {
4930 "Carousel ID", "mpeg_descr.carousel_identifier.id",
4931 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
4932 } },
4934 { &hf_mpeg_descr_carousel_identifier_format_id, {
4935 "Format ID", "mpeg_descr.carousel_identifier.format_id",
4936 FT_UINT8, BASE_HEX, VALS(mpeg_descr_carousel_identifier_format_id_vals), 0, NULL, HFILL
4937 } },
4939 { &hf_mpeg_descr_carousel_identifier_module_version, {
4940 "Module Version", "mpeg_descr.carousel_identifier.module_version",
4941 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
4942 } },
4944 { &hf_mpeg_descr_carousel_identifier_module_id, {
4945 "Module ID", "mpeg_descr.carousel_identifier.module_id",
4946 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
4947 } },
4949 { &hf_mpeg_descr_carousel_identifier_block_size, {
4950 "Block Size", "mpeg_descr.carousel_identifier.block_size",
4951 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
4952 } },
4954 { &hf_mpeg_descr_carousel_identifier_module_size, {
4955 "Module Size", "mpeg_descr.carousel_identifier.module_size",
4956 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
4957 } },
4959 { &hf_mpeg_descr_carousel_identifier_compression_method, {
4960 "Compression Method", "mpeg_descr.carousel_identifier.comp_method",
4961 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
4962 } },
4964 { &hf_mpeg_descr_carousel_identifier_original_size, {
4965 "Original Size", "mpeg_descr.carousel_identifier.orig_size",
4966 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
4967 } },
4969 { &hf_mpeg_descr_carousel_identifier_timeout, {
4970 "Timeout", "mpeg_descr.carousel_identifier.timeout",
4971 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
4972 } },
4974 { &hf_mpeg_descr_carousel_identifier_object_key_len, {
4975 "Object Key Length", "mpeg_descr.carousel_identifier.key_len",
4976 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
4977 } },
4979 { &hf_mpeg_descr_carousel_identifier_object_key_data, {
4980 "Object Key Data", "mpeg_descr.carousel_identifier.key_data",
4981 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
4982 } },
4984 { &hf_mpeg_descr_carousel_identifier_private, {
4985 "Private Bytes", "mpeg_descr.carousel_identifier.private",
4986 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
4987 } },
4989 /* 0x14 Association Tag Descriptor */
4990 { &hf_mpeg_descr_association_tag, {
4991 "Association Tag", "mpeg_descr.assoc_tag.tag",
4992 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
4993 } },
4995 { &hf_mpeg_descr_association_tag_use, {
4996 "Use", "mpeg_descr.assoc_tag.use",
4997 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
4998 } },
5000 { &hf_mpeg_descr_association_tag_selector_len, {
5001 "Selector Length", "mpeg_descr.assoc_tag.selector_len",
5002 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5003 } },
5005 { &hf_mpeg_descr_association_tag_transaction_id, {
5006 "Transaction ID", "mpeg_descr.assoc_tag.transaction_id",
5007 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
5008 } },
5010 { &hf_mpeg_descr_association_tag_timeout, {
5011 "Timeout", "mpeg_descr.assoc_tag.timeout",
5012 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
5013 } },
5015 { &hf_mpeg_descr_association_tag_selector_bytes, {
5016 "Selector Bytes", "mpeg_descr.assoc_tag.selector_bytes",
5017 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5018 } },
5020 { &hf_mpeg_descr_association_tag_private_bytes, {
5021 "Private Bytes", "mpeg_descr.assoc_tag.private_bytes",
5022 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5023 } },
5025 /* 0x28 AVC Video Descriptor */
5026 { &hf_mpeg_descr_avc_vid_profile_idc, {
5027 "Profile IDC", "mpeg_descr.avc_vid.profile_idc",
5028 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5029 } },
5031 { &hf_mpeg_descr_avc_vid_constraint_set0_flag, {
5032 "Constraint Set0 Flag", "mpeg_descr.avc_vid.constraint_set0",
5033 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_CONSTRAINT_SET0_FLAG_MASK, NULL, HFILL
5034 } },
5036 { &hf_mpeg_descr_avc_vid_constraint_set1_flag, {
5037 "Constraint Set1 Flag", "mpeg_descr.avc_vid.constraint_set1",
5038 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_CONSTRAINT_SET1_FLAG_MASK, NULL, HFILL
5039 } },
5041 { &hf_mpeg_descr_avc_vid_constraint_set2_flag, {
5042 "Constraint Set2 Flag", "mpeg_descr.avc_vid.constraint_set2",
5043 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_CONSTRAINT_SET2_FLAG_MASK, NULL, HFILL
5044 } },
5046 { &hf_mpeg_descr_avc_vid_compatible_flags, {
5047 "Constraint Compatible Flags", "mpeg_descr.avc_vid.compatible_flags",
5048 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AVC_VID_COMPATIBLE_FLAGS_MASK, NULL, HFILL
5049 } },
5051 { &hf_mpeg_descr_avc_vid_level_idc, {
5052 "Level IDC", "mpeg_descr.avc_vid.level_idc",
5053 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5054 } },
5056 { &hf_mpeg_descr_avc_vid_still_present, {
5057 "AVC Still Present", "mpeg_descr.avc_vid.still_present",
5058 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_STILL_PRESENT_MASK, NULL, HFILL
5059 } },
5061 { &hf_mpeg_descr_avc_vid_24h_picture_flag, {
5062 "AVC 24 Hour Picture Flag", "mpeg_descr.avc_vid.24h_picture_flag",
5063 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_24H_PICTURE_FLAG_MASK, NULL, HFILL
5064 } },
5066 { &hf_mpeg_descr_avc_vid_reserved, {
5067 "Reserved", "mpeg_descr.avc_vid.reserved",
5068 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AVC_VID_RESERVED_MASK, NULL, HFILL
5069 } },
5071 /* 0x40 Network Name Descriptor */
5072 { &hf_mpeg_descr_network_name_encoding, {
5073 "Network Name Encoding", "mpeg_descr.net_name.name_enc",
5074 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5075 } },
5077 { &hf_mpeg_descr_network_name_descriptor, {
5078 "Network Name", "mpeg_descr.net_name.name",
5079 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5080 } },
5082 /* 0x41 Service List Descriptor */
5083 { &hf_mpeg_descr_service_list_id, {
5084 "Service ID", "mpeg_descr.svc_list.id",
5085 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5086 } },
5088 { &hf_mpeg_descr_service_list_type, {
5089 "Service Type", "mpeg_descr.svc_list.type",
5090 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_service_type_vals_ext, 0, NULL, HFILL
5091 } },
5093 /* 0x42 Stuffing Descriptor */
5094 { &hf_mpeg_descr_stuffing, {
5095 "Stuffing", "mpeg_descr.stuffing",
5096 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5097 } },
5099 /* 0x43 Satellite Delivery System Descriptor */
5100 { &hf_mpeg_descr_satellite_delivery_frequency, {
5101 "Frequency", "mpeg_descr.sat_delivery.freq",
5102 FT_DOUBLE, BASE_NONE|BASE_UNIT_STRING, UNS(&units_ghz), 0, NULL, HFILL
5103 } },
5105 { &hf_mpeg_descr_satellite_delivery_orbital_position, {
5106 "Orbital Position", "mpeg_descr.sat_delivery.orbital_pos",
5107 FT_FLOAT, BASE_NONE|BASE_UNIT_STRING, UNS(&units_degree_degrees), 0, NULL, HFILL
5108 } },
5110 { &hf_mpeg_descr_satellite_delivery_west_east_flag, {
5111 "West East Flag", "mpeg_descr.sat_delivery.west_east_flag",
5112 FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_west_east_flag_vals),
5113 MPEG_DESCR_SATELLITE_DELIVERY_WEST_EAST_FLAG_MASK, NULL, HFILL
5114 } },
5116 { &hf_mpeg_descr_satellite_delivery_polarization, {
5117 "Polarization", "mpeg_descr.sat_delivery.polarization",
5118 FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_polarization_vals),
5119 MPEG_DESCR_SATELLITE_DELIVERY_POLARIZATION_MASK, NULL, HFILL
5120 } },
5122 { &hf_mpeg_descr_satellite_delivery_roll_off, {
5123 "Roll Off", "mpeg_descr.sat_delivery.roll_off",
5124 FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_roll_off_vals),
5125 MPEG_DESCR_SATELLITE_DELIVERY_ROLL_OFF_MASK, NULL, HFILL
5126 } },
5128 { &hf_mpeg_descr_satellite_delivery_zero, {
5129 "Zero", "mpeg_descr.sat_delivery.zero",
5130 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_SATELLITE_DELIVERY_ZERO_MASK, NULL, HFILL
5131 } },
5133 { &hf_mpeg_descr_satellite_delivery_modulation_system, {
5134 "Modulation System", "mpeg_descr.sat_delivery.modulation_system",
5135 FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_modulation_system_vals),
5136 MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_SYSTEM_MASK, NULL, HFILL
5137 } },
5139 { &hf_mpeg_descr_satellite_delivery_modulation_type, {
5140 "Modulation Type", "mpeg_descr.sat_delivery.modulation_type",
5141 FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_modulation_type_vals),
5142 MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_TYPE_MASK, NULL, HFILL
5143 } },
5145 { &hf_mpeg_descr_satellite_delivery_symbol_rate, {
5146 "Symbol Rate", "mpeg_descr.sat_delivery.symbol_rate",
5147 FT_DOUBLE, BASE_NONE, NULL, 0, NULL, HFILL
5148 } },
5150 { &hf_mpeg_descr_satellite_delivery_fec_inner, {
5151 "FEC Inner", "mpeg_descr.sat_delivery.fec_inner",
5152 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_satellite_delivery_fec_inner_vals_ext,
5153 MPEG_DESCR_SATELLITE_DELIVERY_FEC_INNER_MASK, NULL, HFILL
5154 } },
5156 /* 0x44 Cable Delivery System Descriptor */
5157 { &hf_mpeg_descr_cable_delivery_frequency, {
5158 "Frequency", "mpeg_descr.cable_delivery.freq",
5159 FT_DOUBLE, BASE_NONE, NULL, 0, NULL, HFILL
5160 } },
5162 { &hf_mpeg_descr_cable_delivery_reserved, {
5163 "Reserved", "mpeg_descr.cable_delivery.reserved",
5164 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_CABLE_DELIVERY_RESERVED_MASK, NULL, HFILL
5165 } },
5167 { &hf_mpeg_descr_cable_delivery_fec_outer, {
5168 "FEC Outer", "mpeg_descr.cable_delivery.fec_outer",
5169 FT_UINT16, BASE_HEX, VALS(mpeg_descr_cable_delivery_fec_outer_vals),
5170 MPEG_DESCR_CABLE_DELIVERY_FEC_OUTER_MASK, NULL, HFILL
5171 } },
5173 { &hf_mpeg_descr_cable_delivery_modulation, {
5174 "Modulation", "mpeg_descr.cable_delivery.modulation",
5175 FT_UINT8, BASE_HEX, VALS(mpeg_descr_cable_delivery_modulation_vals), 0, NULL, HFILL
5176 } },
5178 { &hf_mpeg_descr_cable_delivery_symbol_rate, {
5179 "Symbol Rate", "mpeg_descr.cable_delivery.sym_rate",
5180 FT_DOUBLE, BASE_NONE, NULL, 0, NULL, HFILL
5181 } },
5183 { &hf_mpeg_descr_cable_delivery_fec_inner, {
5184 "FEC Inner", "mpeg_descr.cable_delivery.fec_inner",
5185 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_cable_delivery_fec_inner_vals_ext,
5186 MPEG_DESCR_CABLE_DELIVERY_FEC_INNER_MASK, NULL, HFILL
5187 } },
5189 /* 0x45 VBI Data Descriptor */
5190 { &hf_mpeg_descr_vbi_data_service_id, {
5191 "Data Service ID", "mpeg_descr.vbi_data.svc_id",
5192 FT_UINT8, BASE_HEX, VALS(mpeg_descr_vbi_data_service_id_vals), 0, NULL, HFILL
5193 } },
5195 { &hf_mpeg_descr_vbi_data_descr_len, {
5196 "Data Descriptor Length", "mpeg_descr.vbi_data.decr_len",
5197 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5198 } },
5200 { &hf_mpeg_descr_vbi_data_reserved1, {
5201 "Reserved", "mpeg_descr.vbi_data.reserved1",
5202 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_VBI_DATA_RESERVED1_MASK, NULL, HFILL
5203 } },
5205 { &hf_mpeg_descr_vbi_data_field_parity, {
5206 "Field Parity", "mpeg_descr.vbi_data.field_parity",
5207 FT_UINT8, BASE_DEC, VALS(mpeg_descr_vbi_data_field_parity_vals),
5208 MPEG_DESCR_VBI_DATA_FIELD_PARITY_MASK, NULL, HFILL
5209 } },
5211 { &hf_mpeg_descr_vbi_data_line_offset, {
5212 "Line offset", "mpeg_descr.vbi_data.line_offset",
5213 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5214 } },
5216 { &hf_mpeg_descr_vbi_data_reserved2, {
5217 "Reserved", "mpeg_descr.vbi_data.reserved2",
5218 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5219 } },
5221 /* 0x47 Bouquet Name Descriptor */
5222 { &hf_mpeg_descr_bouquet_name_encoding, {
5223 "Bouquet Name Encoding", "mpeg_descr.bouquet_name.name_enc",
5224 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5225 } },
5227 { &hf_mpeg_descr_bouquet_name, {
5228 "Bouquet Name", "mpeg_descr.bouquet_name.name",
5229 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5230 } },
5232 /* 0x48 Service Descriptor */
5233 { &hf_mpeg_descr_service_type, {
5234 "Service Type", "mpeg_descr.svc.type",
5235 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_service_type_vals_ext, 0, NULL, HFILL
5236 } },
5238 { &hf_mpeg_descr_service_provider_name_length, {
5239 "Provider Name Length", "mpeg_descr.svc.provider_name_len",
5240 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5241 } },
5243 { &hf_mpeg_descr_service_provider_name_encoding, {
5244 "Provider Name Encoding", "mpeg_descr.svc.provider_name_enc",
5245 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5246 } },
5248 { &hf_mpeg_descr_service_provider, {
5249 "Service Provider Name", "mpeg_descr.svc.provider_name",
5250 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5251 } },
5253 { &hf_mpeg_descr_service_name_length, {
5254 "Service Name Length", "mpeg_descr.svc.svc_name_len",
5255 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5256 } },
5258 { &hf_mpeg_descr_service_name_encoding, {
5259 "Service Name Encoding", "mpeg_descr.svc.svn_name_enc",
5260 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5261 } },
5263 { &hf_mpeg_descr_service_name, {
5264 "Service Name", "mpeg_descr.svc.svc_name",
5265 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5266 } },
5268 /* 0x49 Country Availability Descriptor */
5269 { &hf_mpeg_descr_country_availability_flag, {
5270 "Country Availability Flag", "mpeg_descr.country_avail.avail_flag",
5271 FT_UINT8, BASE_HEX, VALS(mpeg_descr_country_availability_flag_vals),
5272 MPEG_DESCR_COUNTRY_AVAILABILITY_FLAG_MASK, NULL, HFILL
5273 } },
5275 { &hf_mpeg_descr_country_availability_reserved_future_use, {
5276 "Reserved Future Use", "mpeg_descr.country_avail.reserved",
5277 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_COUNTRY_AVAILABILITY_RESERVED_MASK, NULL, HFILL
5278 } },
5280 { &hf_mpeg_descr_country_availability_country_code, {
5281 "Country Code", "mpeg_descr.country_avail.country_code",
5282 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5283 } },
5285 /* 0x4A Linkage Descriptor */
5286 { &hf_mpeg_descr_linkage_transport_stream_id, {
5287 "Transport Stream ID", "mpeg_descr.linkage.tsid",
5288 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5289 } },
5291 { &hf_mpeg_descr_linkage_original_network_id, {
5292 "Original Network ID", "mpeg_descr.linkage.original_nid",
5293 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5294 } },
5296 { &hf_mpeg_descr_linkage_service_id, {
5297 "Service ID", "mpeg_descr.linkage.svc_id",
5298 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5299 } },
5301 { &hf_mpeg_descr_linkage_linkage_type, {
5302 "Linkage Type", "mpeg_descr.linkage.type",
5303 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_linkage_linkage_type_vals_ext, 0, NULL, HFILL
5304 } },
5306 { &hf_mpeg_descr_linkage_hand_over_type, {
5307 "Hand-Over Type", "mpeg_descr.linkage.hand_over_type",
5308 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_MASK, NULL, HFILL
5309 } },
5311 { &hf_mpeg_descr_linkage_reserved1, {
5312 "Reserved", "mpeg_descr.linkage.reserved1",
5313 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LINKAGE_RESERVED1_MASK, NULL, HFILL
5314 } },
5316 { &hf_mpeg_descr_linkage_origin_type, {
5317 "Origin Type", "mpeg_descr.linkage.origin_type",
5318 FT_UINT8, BASE_HEX, VALS(mpeg_descr_linkage_origin_type_vals), 0, NULL, HFILL
5319 } },
5321 { &hf_mpeg_descr_linkage_network_id, {
5322 "Network ID", "mpeg_descr.linkage.network_id",
5323 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5324 } },
5326 { &hf_mpeg_descr_linkage_initial_service_id, {
5327 "Initial Service ID", "mpeg_descr.linkage.initial_svc_id",
5328 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5329 } },
5331 { &hf_mpeg_descr_linkage_target_event_id, {
5332 "Target Event ID", "mpeg_descr.linkage.target_evt_id",
5333 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5334 } },
5336 { &hf_mpeg_descr_linkage_target_listed, {
5337 "Target Listed", "mpeg_descr.linkage.target_listed",
5338 FT_UINT8, BASE_DEC, VALS(mpeg_descr_linkage_target_listed_vals),
5339 MPEG_DESCR_LINKAGE_TARGET_LISTED_MASK, NULL, HFILL
5340 } },
5342 { &hf_mpeg_descr_linkage_event_simulcast, {
5343 "Event Simulcast", "mpeg_descr.linkage.evt_simulcast",
5344 FT_UINT8, BASE_DEC, VALS(mpeg_descr_linkage_event_simulcast_vals),
5345 MPEG_DESCR_LINKAGE_EVENT_SIMULCAST_MASK, NULL, HFILL
5346 } },
5348 { &hf_mpeg_descr_linkage_reserved2, {
5349 "Reserved", "mpeg_descr.linkage.reserved2",
5350 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LINKAGE_RESERVED2_MASK, NULL, HFILL
5351 } },
5353 { &hf_mpeg_descr_linkage_private_data_byte, {
5354 "Private Data", "mpeg_descr.linkage.private_data",
5355 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5356 } },
5358 { &hf_mpeg_descr_linkage_interactive_network_id, {
5359 "Interactive Network ID", "mpeg_descr.interactive_network_id",
5360 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5361 } },
5363 { &hf_mpeg_descr_linkage_population_id_loop_count, {
5364 "Population ID loop count", "mpeg_descr.population_id_loop_count",
5365 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5366 } },
5368 { &hf_mpeg_descr_linkage_population_id, {
5369 "Population ID", "mpeg_descr.population_id",
5370 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
5371 } },
5373 { &hf_mpeg_descr_linkage_population_id_base, {
5374 "Population ID Base", "mpeg_descr.population_id_base",
5375 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5376 } },
5378 { &hf_mpeg_descr_linkage_population_id_mask, {
5379 "Population ID Mask", "mpeg_descr.population_id_mask",
5380 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5381 } },
5383 /* 0x4B NVOD Reference Descriptor */
5384 { &hf_mpeg_descr_nvod_reference_tsid, {
5385 "Transport Stream ID", "mpeg_descr.nvod_ref.tsid",
5386 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5387 } },
5389 { &hf_mpeg_descr_nvod_reference_onid, {
5390 "Original Network ID", "mpeg_descr.nvod_ref.onid",
5391 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5392 } },
5394 { &hf_mpeg_descr_nvod_reference_sid, {
5395 "Stream ID", "mpeg_descr.nvod_ref.sid",
5396 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5397 } },
5399 /* 0x4C Time Shifted Service Descriptor */
5400 { &hf_mpeg_descr_time_shifted_service_id, {
5401 "Reference Service ID", "mpeg_descr.time_shifted_service.id",
5402 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5403 } },
5405 /* 0x4D Short Event Descriptor */
5406 { &hf_mpeg_descr_short_event_lang_code, {
5407 "Language Code", "mpeg_descr.short_evt.lang_code",
5408 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5409 } },
5411 { &hf_mpeg_descr_short_event_name_length, {
5412 "Event Name Length", "mpeg_descr.short_evt.name_len",
5413 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5414 } },
5416 { &hf_mpeg_descr_short_event_name_encoding, {
5417 "Event Name Encoding", "mpeg_descr.short_evt.name_enc",
5418 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5419 } },
5421 { &hf_mpeg_descr_short_event_name, {
5422 "Event Name", "mpeg_descr.short_evt.name",
5423 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5424 } },
5426 { &hf_mpeg_descr_short_event_text_length, {
5427 "Event Text Length", "mpeg_descr.short_evt.txt_len",
5428 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5429 } },
5431 { &hf_mpeg_descr_short_event_text_encoding, {
5432 "Event Text Encoding", "mpeg_descr.short_evt.txt_enc",
5433 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5434 } },
5436 { &hf_mpeg_descr_short_event_text, {
5437 "Event Text", "mpeg_descr.short_evt.txt",
5438 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5439 } },
5441 /* 0x4E Extended Event Descriptor */
5442 { &hf_mpeg_descr_extended_event_descriptor_number, {
5443 "Descriptor Number", "mpeg_descr.ext_evt.descr_num",
5444 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_EXTENDED_EVENT_DESCRIPTOR_NUMBER_MASK, NULL, HFILL
5445 } },
5447 { &hf_mpeg_descr_extended_event_last_descriptor_number, {
5448 "Last Descriptor Number", "mpeg_descr.ext_evt.last_descr_num",
5449 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_EXTENDED_EVENT_LAST_DESCRIPTOR_NUMBER_MASK, NULL, HFILL
5450 } },
5452 { &hf_mpeg_descr_extended_event_lang_code, {
5453 "Language Code", "mpeg_descr.ext_evt.lang_code",
5454 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5455 } },
5457 { &hf_mpeg_descr_extended_event_length_of_items, {
5458 "Length of items", "mpeg_descr.ext_evt.items_len",
5459 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5460 } },
5462 { &hf_mpeg_descr_extended_event_item_description_length, {
5463 "Item Description Length", "mpeg_descr.ext_evt.item_descr_len",
5464 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5465 } },
5467 { &hf_mpeg_descr_extended_event_item_description_char, {
5468 "Item Description", "mpeg_descr.ext_evt.item_descr",
5469 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5470 } },
5472 { &hf_mpeg_descr_extended_event_item_length, {
5473 "Item Length", "mpeg_descr.ext_evt.item_len",
5474 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5475 } },
5477 { &hf_mpeg_descr_extended_event_item_char, {
5478 "Item", "mpeg_descr.ext_evt.item",
5479 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5480 } },
5482 { &hf_mpeg_descr_extended_event_text_length, {
5483 "Text Length", "mpeg_descr.ext_evt.txt_len",
5484 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5485 } },
5487 { &hf_mpeg_descr_extended_event_text_encoding, {
5488 "Text Encoding", "mpeg_descr.ext_evt.txt_enc",
5489 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5490 } },
5492 { &hf_mpeg_descr_extended_event_text, {
5493 "Text", "mpeg_descr.ext_evt.txt",
5494 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5495 } },
5497 /* 0x4F Time Shifted Event Descriptor */
5498 { &hf_mpeg_descr_time_shifted_event_reference_service_id, {
5499 "Reference Service ID", "mpeg_descr.tshift_evt.sid",
5500 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5501 } },
5503 { &hf_mpeg_descr_time_shifted_event_reference_event_id, {
5504 "Reference Event ID", "mpeg_descr.tshift_evt.eid",
5505 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5506 } },
5508 /* 0x50 Component Descriptor */
5509 { &hf_mpeg_descr_component_nga_bits_b7_reserved, {
5510 "Reserved zero for future use", "mpeg_descr.component.nga.reserved",
5511 FT_UINT16, BASE_HEX, NULL,
5512 MPEG_DESCR_COMPONENT_NGA_BITS_B7_MASK, NULL, HFILL
5513 } },
5515 { &hf_mpeg_descr_component_nga_bits_b6_headphones, {
5516 "Pre-rendered for consumption with headphones", "mpeg_descr.component.nga.headphones",
5517 FT_UINT16, BASE_HEX, NULL,
5518 MPEG_DESCR_COMPONENT_NGA_BITS_B6_MASK, NULL, HFILL
5519 } },
5521 { &hf_mpeg_descr_component_nga_bits_b5_interactivity, {
5522 "Enables interactivity", "mpeg_descr.component.nga.interactivity",
5523 FT_UINT16, BASE_HEX, NULL,
5524 MPEG_DESCR_COMPONENT_NGA_BITS_B5_MASK, NULL, HFILL
5525 } },
5527 { &hf_mpeg_descr_component_nga_bits_b4_dialogue_enhancement, {
5528 "Enables dialogue enhancement", "mpeg_descr.component.nga.dialogue_enhancement",
5529 FT_UINT16, BASE_HEX, NULL,
5530 MPEG_DESCR_COMPONENT_NGA_BITS_B4_MASK, NULL, HFILL
5531 } },
5533 { &hf_mpeg_descr_component_nga_bits_b3_spoken_subtitles, {
5534 "Contains spoken subtitles", "mpeg_descr.component.nga.spoken_subtitles",
5535 FT_UINT16, BASE_HEX, NULL,
5536 MPEG_DESCR_COMPONENT_NGA_BITS_B3_MASK, NULL, HFILL
5537 } },
5539 { &hf_mpeg_descr_component_nga_bits_b2_audio_description, {
5540 "Contains audio description", "mpeg_descr.component.nga.audio_description",
5541 FT_UINT16, BASE_HEX, NULL,
5542 MPEG_DESCR_COMPONENT_NGA_BITS_B2_MASK, NULL, HFILL
5543 } },
5545 { &hf_mpeg_descr_component_nga_bits_b10_channel_layout, {
5546 "Preferred reproduction channel layout", "mpeg_descr.component.nga.channel_layout",
5547 FT_UINT16, BASE_HEX, VALS(mpeg_descr_component_preferred_reproduction_channel_layout_vals),
5548 MPEG_DESCR_COMPONENT_NGA_BITS_B10_MASK, NULL, HFILL
5549 } },
5551 { &hf_mpeg_descr_component_high_stream_content_n_component_type, {
5552 "Stream Content and Component Type", "mpeg_descr.component.content_type",
5553 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_component_high_content_type_vals_ext,
5554 MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_N_COMPONENT_TYPE_MASK, NULL, HFILL
5555 } },
5557 { &hf_mpeg_descr_component_high_stream_content_both, {
5558 "Stream Content both", "mpeg_descr.component.stream_content_both",
5559 FT_UINT16, BASE_HEX, VALS(mpeg_descr_component_high_stream_content_vals),
5560 MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_BOTH_MASK, NULL, HFILL
5561 } },
5563 { &hf_mpeg_descr_component_high_stream_content_ext, {
5564 "Stream Content Ext", "mpeg_descr.component.stream_content_ext",
5565 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_EXT_MASK, NULL, HFILL
5566 } },
5568 { &hf_mpeg_descr_component_high_stream_content, {
5569 "Stream Content", "mpeg_descr.component.stream_content",
5570 FT_UINT16, BASE_HEX, NULL,
5571 MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_MASK, NULL, HFILL
5572 } },
5574 { &hf_mpeg_descr_component_high_component_type, {
5575 "Component Type", "mpeg_descr.component.type",
5576 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_COMPONENT_HIGH_COMPONENT_TYPE_MASK, NULL, HFILL
5577 } },
5579 { &hf_mpeg_descr_component_stream_content_ext, {
5580 "Stream Content Ext", "mpeg_descr.component.stream_content_ext",
5581 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_COMPONENT_STREAM_CONTENT_EXT_MASK, NULL, HFILL
5582 } },
5584 { &hf_mpeg_descr_component_stream_content, {
5585 "Stream Content", "mpeg_descr.component.stream_content",
5586 FT_UINT8, BASE_HEX, VALS(mpeg_descr_component_stream_content_vals),
5587 MPEG_DESCR_COMPONENT_STREAM_CONTENT_MASK, NULL, HFILL
5588 } },
5590 { &hf_mpeg_descr_component_type, {
5591 "Component Type", "mpeg_descr.component.type",
5592 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5593 } },
5595 { &hf_mpeg_descr_component_content_type, {
5596 "Stream Content and Component Type", "mpeg_descr.component.content_type",
5597 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_component_content_type_vals_ext,
5598 MPEG_DESCR_COMPONENT_CONTENT_TYPE_MASK, NULL, HFILL
5599 } },
5601 { &hf_mpeg_descr_component_tag, {
5602 "Component Tag", "mpeg_descr.component.tag",
5603 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5604 } },
5606 { &hf_mpeg_descr_component_lang_code, {
5607 "Language Code", "mpeg_descr.component.lang_code",
5608 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5609 } },
5611 { &hf_mpeg_descr_component_text_encoding, {
5612 "Text Encoding", "mpeg_descr.component.text_enc",
5613 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5614 } },
5616 { &hf_mpeg_descr_component_text, {
5617 "Text", "mpeg_descr.component.text",
5618 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5619 } },
5621 /* 0x51 Mosaic Descriptor */
5622 { &hf_mpeg_descr_mosaic_mosaic_entry_point, {
5623 "Mosaic Entry Point", "mpeg_descr.mosaic.entry_point",
5624 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_ENTRY_POINT_MASK, NULL, HFILL
5625 } },
5627 { &hf_mpeg_descr_mosaic_number_of_horizontal_elementary_cells, {
5628 "Number Of Horizontal Elementary Cells", "mpeg_descr.mosaic.h_cells_num",
5629 FT_UINT8, BASE_HEX, VALS(mpeg_descr_mosaic_number_of_e_cells_vals),
5630 MPEG_DESCR_MOSAIC_NUM_OF_H_CELLS_MASK, NULL, HFILL
5631 } },
5633 { &hf_mpeg_descr_mosaic_reserved_future_use1, {
5634 "Reserved Future Use", "mpeg_descr.mosaic.reserved1",
5635 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_RESERVED1_MASK, NULL, HFILL
5636 } },
5638 { &hf_mpeg_descr_mosaic_number_of_vertical_elementary_cells, {
5639 "Number Of Vertical Elementary Cells", "mpeg_descr.mosaic.v_cells_num",
5640 FT_UINT8, BASE_HEX, VALS(mpeg_descr_mosaic_number_of_e_cells_vals),
5641 MPEG_DESCR_MOSAIC_NUM_OF_V_CELLS_MASK, NULL, HFILL
5642 } },
5644 { &hf_mpeg_descr_mosaic_logical_cell_id, {
5645 "Logical Cell ID", "mpeg_descr.mosaic.l_cell_id",
5646 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_LOGICAL_CELL_ID_MASK, NULL, HFILL
5647 } },
5649 { &hf_mpeg_descr_mosaic_reserved_future_use2, {
5650 "Reserved Future Use", "mpeg_descr.mosaic.reserved2",
5651 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_RESERVED2_MASK, NULL, HFILL
5652 } },
5654 { &hf_mpeg_descr_mosaic_logical_cell_presentation_info, {
5655 "Logical Cell Presentation Info", "mpeg_descr.mosaic.l_cell_pr_info",
5656 FT_UINT16, BASE_HEX|BASE_RANGE_STRING, RVALS(mpeg_descr_mosaic_logical_cell_presentation_info_vals),
5657 MPEG_DESCR_MOSAIC_CELL_PRESENTATION_INFO_MASK, NULL, HFILL
5658 } },
5660 { &hf_mpeg_descr_mosaic_elementary_cell_field_length, {
5661 "Elementary Cell Field Length", "mpeg_descr.mosaic.e_cell_field_len",
5662 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5663 } },
5665 { &hf_mpeg_descr_mosaic_reserved_future_use3, {
5666 "Reserved Future Use", "mpeg_descr.mosaic.reserved3",
5667 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_RESERVED3_MASK, NULL, HFILL
5668 } },
5670 { &hf_mpeg_descr_mosaic_elementary_cell_id, {
5671 "Elementary Cell ID", "mpeg_descr.mosaic.e_cell_id",
5672 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_ELEMENTARY_CELL_ID_MASK, NULL, HFILL
5673 } },
5675 { &hf_mpeg_descr_mosaic_cell_linkage_info, {
5676 "Cell Linkage Info", "mpeg_descr.mosaic.cell_link_info",
5677 FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(mpeg_descr_mosaic_cell_linkage_info_vals), 0, NULL, HFILL
5678 } },
5680 { &hf_mpeg_descr_mosaic_bouquet_id, {
5681 "Bouquet ID", "mpeg_descr.mosaic.bouquet_id",
5682 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5683 } },
5685 { &hf_mpeg_descr_mosaic_original_network_id, {
5686 "Original Network ID", "mpeg_descr.mosaic.onid",
5687 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5688 } },
5690 { &hf_mpeg_descr_mosaic_transport_stream_id, {
5691 "Transport Stream ID", "mpeg_descr.mosaic.tsid",
5692 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5693 } },
5695 { &hf_mpeg_descr_mosaic_service_id, {
5696 "Service ID", "mpeg_descr.mosaic.sid",
5697 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5698 } },
5700 { &hf_mpeg_descr_mosaic_event_id, {
5701 "Event ID", "mpeg_descr.mosaic.event_id",
5702 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5703 } },
5705 /* 0x52 Stream Identifier Descriptor */
5706 { &hf_mpeg_descr_stream_identifier_component_tag, {
5707 "Component Tag", "mpeg_descr.stream_id.component_tag",
5708 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5709 } },
5711 /* 0x53 CA Identifier Descriptor */
5712 { &hf_mpeg_descr_ca_identifier_system_id, {
5713 "CA System ID", "mpeg_descr.ca_id.sys_id",
5714 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5715 } },
5717 /* 0x54 Content Descriptor */
5718 { &hf_mpeg_descr_content_nibble, {
5719 "Nibble Level 1 and 2", "mpeg_descr.content.nibble_1_2",
5720 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_content_nibble_vals_ext, 0, NULL, HFILL
5721 } },
5723 { &hf_mpeg_descr_content_nibble_level_1, {
5724 "Nibble Level 1", "mpeg_descr.content.nibble_lvl_1",
5725 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_content_nibble_level_1_vals_ext,
5726 MPEG_DESCR_CONTENT_NIBBLE_LEVEL_1_MASK, NULL, HFILL
5727 } },
5729 { &hf_mpeg_descr_content_nibble_level_2, {
5730 "Nibble Level 2", "mpeg_descr.content.nibble_lvl_2",
5731 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_CONTENT_NIBBLE_LEVEL_2_MASK, NULL, HFILL
5732 } },
5734 { &hf_mpeg_descr_content_user_byte, {
5735 "User Byte", "mpeg_descr.content.user",
5736 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5737 } },
5739 /* 0x56 Teletext Descriptor */
5740 { &hf_mpeg_descr_teletext_lang_code, {
5741 "Language Code", "mpeg_descr.teletext.lang_code",
5742 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5743 } },
5745 { &hf_mpeg_descr_teletext_type, {
5746 "Teletext Type", "mpeg_descr.teletext.type",
5747 FT_UINT8, BASE_HEX, VALS(mpeg_descr_teletext_type_vals),
5748 MPEG_DESCR_TELETEXT_TYPE_MASK, NULL, HFILL
5749 } },
5751 { &hf_mpeg_descr_teletext_magazine_number, {
5752 "Magazine Number", "mpeg_descr.teletext.magazine_num",
5753 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELETEXT_MAGAZINE_NUMBER_MASK, NULL, HFILL
5754 } },
5756 { &hf_mpeg_descr_teletext_page_number, {
5757 "Page Number", "mpeg_descr.teletext.page_num",
5758 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5759 } },
5761 /* 0x55 Parental Rating Descriptor */
5762 { &hf_mpeg_descr_parental_rating_country_code, {
5763 "Country Code", "mpeg_descr.parental_rating.country_code",
5764 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5765 } },
5767 { &hf_mpeg_descr_parental_rating_rating, {
5768 "Rating", "mpeg_descr.parental_rating.rating",
5769 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_parental_rating_vals_ext, 0, NULL, HFILL
5770 } },
5772 /* 0x57 Telephone Descriptor */
5773 { &hf_mpeg_descr_telephone_reserved_future_use1, {
5774 "Reserved Future Use", "mpeg_descr.phone.reserved1",
5775 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TELEPHONE_RESERVED1_MASK, NULL, HFILL
5776 } },
5778 { &hf_mpeg_descr_telephone_foreign_availability, {
5779 "Foreign Availability", "mpeg_descr.phone.foreign",
5780 FT_UINT8, BASE_HEX, VALS(mpeg_descr_telephone_foreign_availability_vals),
5781 MPEG_DESCR_TELEPHONE_FOREIGN_AVAILABILITY_MASK, NULL, HFILL
5782 } },
5784 { &hf_mpeg_descr_telephone_connection_type, {
5785 "Connection Type", "mpeg_descr.phone.conn_t",
5786 FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(mpeg_descr_telephone_connection_type_vals),
5787 MPEG_DESCR_TELEPHONE_CONNECTION_TYPE_MASK, NULL, HFILL
5788 } },
5790 { &hf_mpeg_descr_telephone_reserved_future_use2, {
5791 "Reserved Future Use", "mpeg_descr.phone.reserved2",
5792 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TELEPHONE_RESERVED2_MASK, NULL, HFILL
5793 } },
5795 { &hf_mpeg_descr_telephone_country_prefix_length, {
5796 "Country Prefix Length", "mpeg_descr.phone.nat_code_len",
5797 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_COUNTRY_PREFIX_LEN_MASK, NULL, HFILL
5798 } },
5800 { &hf_mpeg_descr_telephone_international_area_code_length, {
5801 "International Area Code Length", "mpeg_descr.phone.int_code_len",
5802 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_INTERNATIONAL_CODE_LEN_MASK, NULL, HFILL
5803 } },
5805 { &hf_mpeg_descr_telephone_operator_code_length, {
5806 "Operator Code Length", "mpeg_descr.phone.op_code_len",
5807 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_OPERATOR_CODE_LEN_MASK, NULL, HFILL
5808 } },
5810 { &hf_mpeg_descr_telephone_reserved_future_use3, {
5811 "Reserved Future Use", "mpeg_descr.phone.reserved3",
5812 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TELEPHONE_RESERVED3_MASK, NULL, HFILL
5813 } },
5815 { &hf_mpeg_descr_telephone_national_area_code_length, {
5816 "National Area Code Length", "mpeg_descr.phone.nat_code_len",
5817 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_NATIONAL_CODE_LEN_MASK, NULL, HFILL
5818 } },
5820 { &hf_mpeg_descr_telephone_core_number_length, {
5821 "Core Number Length", "mpeg_descr.phone.core_n_len",
5822 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_CORE_NUMBER_LEN_MASK, NULL, HFILL
5823 } },
5825 { &hf_mpeg_descr_telephone_number, {
5826 "Telephone Number", "mpeg_descr.phone.number",
5827 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5828 } },
5830 { &hf_mpeg_descr_telephone_country_prefix, {
5831 "Country Prefix", "mpeg_descr.phone.country",
5832 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5833 } },
5835 { &hf_mpeg_descr_telephone_international_area_code, {
5836 "International Area Code", "mpeg_descr.phone.int_area",
5837 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5838 } },
5840 { &hf_mpeg_descr_telephone_operator_code, {
5841 "Operator Code", "mpeg_descr.phone.operator",
5842 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5843 } },
5845 { &hf_mpeg_descr_telephone_national_area_code, {
5846 "National Area Code", "mpeg_descr.phone.nat_code",
5847 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5848 } },
5850 { &hf_mpeg_descr_telephone_core_number, {
5851 "Core Number", "mpeg_descr.phone.core",
5852 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5853 } },
5855 /* 0x58 Local Time Offset Descriptor */
5856 { &hf_mpeg_descr_local_time_offset_country_code, {
5857 "Country Code", "mpeg_descr.local_time_offset.country_code",
5858 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5859 } },
5861 { &hf_mpeg_descr_local_time_offset_region_id, {
5862 "Region ID", "mpeg_descr.local_time_offset.region_id",
5863 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOCAL_TIME_OFFSET_COUNTRY_REGION_ID_MASK, NULL, HFILL
5864 } },
5866 { &hf_mpeg_descr_local_time_offset_reserved, {
5867 "Reserved", "mpeg_descr.local_time_offset.reserved",
5868 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOCAL_TIME_OFFSET_RESERVED_MASK, NULL, HFILL
5869 } },
5871 { &hf_mpeg_descr_local_time_offset_polarity, {
5872 "Time Offset Polarity", "mpeg_descr.local_time_offset.polarity",
5873 FT_UINT8, BASE_HEX, VALS(mpeg_descr_local_time_offset_polarity_vals),
5874 MPEG_DESCR_LOCAL_TIME_OFFSET_POLARITY, NULL, HFILL
5875 } },
5877 { &hf_mpeg_descr_local_time_offset_offset, {
5878 "Local Time Offset", "mpeg_descr.local_time_offset.offset",
5879 FT_RELATIVE_TIME, BASE_NONE, NULL, 0, NULL, HFILL
5880 } },
5882 { &hf_mpeg_descr_local_time_offset_time_of_change, {
5883 "Time of Change", "mpeg_descr.local_time_offset.time_of_change",
5884 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL
5885 } },
5887 { &hf_mpeg_descr_local_time_offset_next_time_offset, {
5888 "Next Time Offset", "mpeg_descr.local_time_offset.next_time_offset",
5889 FT_RELATIVE_TIME, BASE_NONE, NULL, 0, NULL, HFILL
5890 } },
5892 /* 0x59 Subtitling Descriptor */
5893 { &hf_mpeg_descr_subtitling_lang_code, {
5894 "Language Code", "mpeg_descr.subtitling.lang_code",
5895 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5896 } },
5898 { &hf_mpeg_descr_subtitling_type, {
5899 "Subtitling Type", "mpeg_descr.subtitling.type",
5900 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_subtitling_type_vals_ext, 0, NULL, HFILL
5901 } },
5903 { &hf_mpeg_descr_subtitling_composition_page_id, {
5904 "Composition Page ID", "mpeg_descr.subtitling.composition_page_id",
5905 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
5906 } },
5908 { &hf_mpeg_descr_subtitling_ancillary_page_id, {
5909 "Ancillary Page ID", "mpeg_descr.subtitling.ancillary_page_id",
5910 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
5911 } },
5913 /* 0x5A Terrestrial Delivery System Descriptor */
5914 { &hf_mpeg_descr_terrestrial_delivery_centre_frequency, {
5915 "Centre Frequency", "mpeg_descr.terr_delivery.centre_freq",
5916 FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL
5917 } },
5919 { &hf_mpeg_descr_terrestrial_delivery_bandwidth, {
5920 "Bandwidth", "mpeg_descr.terr_delivery.bandwidth",
5921 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_bandwidth_vals),
5922 MPEG_DESCR_TERRESTRIAL_DELIVERY_BANDWIDTH_MASK, NULL, HFILL
5923 } },
5925 { &hf_mpeg_descr_terrestrial_delivery_priority, {
5926 "Priority", "mpeg_descr.terr_delivery.priority",
5927 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_priority_vals),
5928 MPEG_DESCR_TERRESTRIAL_DELIVERY_PRIORITY_MASK, NULL, HFILL
5929 } },
5931 { &hf_mpeg_descr_terrestrial_delivery_time_slicing_indicator, {
5932 "Time Slicing Indicator", "mpeg_descr.terr_delivery.time_slicing_ind",
5933 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_time_slicing_indicator_vals),
5934 MPEG_DESCR_TERRESTRIAL_DELIVERY_TIME_SLICING_INDICATOR_MASK, NULL, HFILL
5935 } },
5937 { &hf_mpeg_descr_terrestrial_delivery_mpe_fec_indicator, {
5938 "MPE-FEC Indicator", "mpeg_descr.terr_delivery.mpe_fec_ind",
5939 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_mpe_fec_indicator_vals),
5940 MPEG_DESCR_TERRESTRIAL_DELIVERY_MPE_FEC_INDICATOR_MASK, NULL, HFILL
5941 } },
5943 { &hf_mpeg_descr_terrestrial_delivery_reserved1, {
5944 "Reserved", "mpeg_descr.terr_delivery.reserved1",
5945 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TERRESTRIAL_DELIVERY_RESERVED1_MASK, NULL, HFILL
5946 } },
5948 { &hf_mpeg_descr_terrestrial_delivery_constellation, {
5949 "Constellation", "mpeg_descr.terr_delivery.constellation",
5950 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_constellation_vals),
5951 MPEG_DESCR_TERRESTRIAL_DELIVERY_CONSTELLATION_MASK, NULL, HFILL
5952 } },
5954 { &hf_mpeg_descr_terrestrial_delivery_hierarchy_information, {
5955 "Hierarchy Information", "mpeg_descr.terr_delivery.hierarchy_information",
5956 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_hierarchy_information_vals),
5957 MPEG_DESCR_TERRESTRIAL_DELIVERY_HIERARCHY_INFORMATION_MASK, NULL, HFILL
5958 } },
5960 { &hf_mpeg_descr_terrestrial_delivery_code_rate_hp_stream, {
5961 "Code Rate High Priority Stream", "mpeg_descr.terr_delivery.code_rate_hp_stream",
5962 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_code_rate_vals),
5963 MPEG_DESCR_TERRESTRIAL_DELIVERY_CODE_RATE_HP_STREAM_MASK, NULL, HFILL
5964 } },
5966 { &hf_mpeg_descr_terrestrial_delivery_code_rate_lp_stream, {
5967 "Code Rate Low Priority Stream", "mpeg_descr.terr_delivery.code_rate_lp_stream",
5968 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_code_rate_vals),
5969 MPEG_DESCR_TERRESTRIAL_DELIVERY_CODE_RATE_LP_STREAM_MASK, NULL, HFILL
5970 } },
5972 { &hf_mpeg_descr_terrestrial_delivery_guard_interval, {
5973 "Guard Interval", "mpeg_descr.terr_delivery.guard_interval",
5974 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_guard_interval_vals),
5975 MPEG_DESCR_TERRESTRIAL_DELIVERY_GUARD_INTERVAL_MASK, NULL, HFILL
5976 } },
5978 { &hf_mpeg_descr_terrestrial_delivery_transmission_mode, {
5979 "Transmission Mode", "mpeg_descr.terr_delivery.transmission_mode",
5980 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_transmission_mode_vals),
5981 MPEG_DESCR_TERRESTRIAL_DELIVERY_TRANSMISSION_MODE_MASK, NULL, HFILL
5982 } },
5984 { &hf_mpeg_descr_terrestrial_delivery_other_frequency_flag, {
5985 "Other Frequency Flag", "mpeg_descr.terr_delivery.other_freq_flag",
5986 FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_other_frequency_flag_vals),
5987 MPEG_DESCR_TERRESTRIAL_DELIVERY_OTHER_FREQUENCY_FLAG_MASK, NULL, HFILL
5988 } },
5990 { &hf_mpeg_descr_terrestrial_delivery_reserved2, {
5991 "Reserved", "mpeg_descr.terr_delivery.reserved2",
5992 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
5993 } },
5995 /* 0x5B Multilingual Network Name Descriptor */
5996 { &hf_mpeg_descr_multilng_network_name_desc_iso639_language_code, {
5997 "Language ISO 639-2 Code", "mpeg_descr.net_name.lang_code",
5998 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5999 } },
6001 { &hf_mpeg_descr_multilng_network_name_desc_name_length, {
6002 "Network Name Length", "mpeg_descr.net_name.name_length",
6003 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6004 } },
6006 { &hf_mpeg_descr_multilng_network_name_desc_name_encoding, {
6007 "Network Name Encoding", "mpeg_descr.net_name.name_enc",
6008 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6009 } },
6011 { &hf_mpeg_descr_multilng_network_name_desc_name, {
6012 "Network Name", "mpeg_descr.net_name.name",
6013 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6014 } },
6017 /* 0x5C Multilingual Bouquet Name Descriptor */
6018 { &hf_mpeg_descr_multilng_bouquet_name_desc_iso639_language_code, {
6019 "Language ISO 639-2 Code", "mpeg_descr.bouquet_name.lang_code",
6020 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6021 } },
6023 { &hf_mpeg_descr_multilng_bouquet_name_desc_name_length, {
6024 "Bouquet Name Length", "mpeg_descr.bouquet_name.name_length",
6025 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6026 } },
6028 { &hf_mpeg_descr_multilng_bouquet_name_desc_name_encoding, {
6029 "Bouquet Name Encoding", "mpeg_descr.bouquet_name.name_enc",
6030 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6031 } },
6033 { &hf_mpeg_descr_multilng_bouquet_name_desc_name, {
6034 "Bouquet Name", "mpeg_descr.bouquet_name.name",
6035 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6036 } },
6038 /* 0x5D Multilingual Service Name Descriptor */
6039 { &hf_mpeg_descr_multilng_srv_name_desc_iso639_language_code, {
6040 "Language ISO 639-2 Code", "mpeg_descr.svc.lang_code",
6041 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6042 } },
6044 { &hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_length, {
6045 "Service Provider Name Length", "mpeg_descr.svc.provider_name_len",
6046 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6047 } },
6049 { &hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_encoding, {
6050 "Service Provider Name Encoding", "mpeg_descr.svc.provider_name_enc",
6051 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6052 } },
6054 { &hf_mpeg_descr_multilng_srv_name_desc_service_provider_name, {
6055 "Service Provider Name", "mpeg_descr.svc.provider_name",
6056 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6057 } },
6059 { &hf_mpeg_descr_multilng_srv_name_desc_service_name_length, {
6060 "Service Name Length", "mpeg_descr.svc.svc_name_len",
6061 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6062 } },
6064 { &hf_mpeg_descr_multilng_srv_name_desc_service_name_encoding, {
6065 "Service Name Encoding", "mpeg_descr.svc.svn_name_enc",
6066 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6067 } },
6069 { &hf_mpeg_descr_multilng_srv_name_desc_service_name, {
6070 "Service Name", "mpeg_descr.svc.svc_name",
6071 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6072 } },
6074 /* 0x5E Multilingual Component Descriptor */
6075 { &hf_mpeg_descr_multilng_component_desc_tag, {
6076 "Component Tag", "mpeg_descr.component.tag",
6077 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6078 } },
6080 { &hf_mpeg_descr_multilng_component_desc_iso639_language_code, {
6081 "Language ISO 639-2 Code", "mpeg_descr.component.lang_code",
6082 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6083 } },
6085 { &hf_mpeg_descr_multilng_component_desc_text_length, {
6086 "Text Length", "mpeg_descr.component.text_length",
6087 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6088 } },
6090 { &hf_mpeg_descr_multilng_component_desc_text_encoding, {
6091 "Text Encoding", "mpeg_descr.component.text_enc",
6092 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6093 } },
6095 { &hf_mpeg_descr_multilng_component_desc_text, {
6096 "Text", "mpeg_descr.component.text",
6097 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6098 } },
6100 /* 0x5F Private Data Specifier */
6101 { &hf_mpeg_descr_private_data_specifier_id, {
6102 "Private Data Specifier", "mpeg_descr.private_data_specifier.id",
6103 FT_UINT32, BASE_HEX, VALS(mpeg_descr_data_specifier_id_vals), 0, NULL, HFILL
6104 } },
6106 /* 0x61 Short Smoothing Buffer Descriptor */
6107 { &hf_mpeg_descr_short_smoothing_buffer_sb_size, {
6108 "SB Size", "mpeg_descr.ssb.sb_size",
6109 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ssb_sb_size_vals),
6110 MPEG_DESCR_SHORT_SMOOTHING_BUFFER_SB_SIZE_MASK, NULL, HFILL
6111 } },
6113 { &hf_mpeg_descr_short_smoothing_buffer_sb_leak_rate, {
6114 "SB Leak Rate", "mpeg_descr.ssb.sb_leak_rate",
6115 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ssb_sb_leak_rate_vals),
6116 MPEG_DESCR_SHORT_SMOOTHING_BUFFER_SB_LEAK_RATE_MASK, NULL, HFILL
6117 } },
6119 { &hf_mpeg_descr_short_smoothing_buffer_dvb_reserved, {
6120 "DVB Reserved", "mpeg_descr.ssb.dvb_reserved",
6121 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6122 } },
6124 /* 0x63 Partial Transport Stream Descriptor */
6125 { &hf_mpeg_descr_partial_transport_stream_reserved_future_use1, {
6126 "Reserved", "mpeg_descr.partial_transport_stream.reserved_future_use1",
6127 FT_UINT24, BASE_HEX, NULL, PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE1_MASK, NULL, HFILL
6128 } },
6130 { &hf_mpeg_descr_partial_transport_stream_peak_rate, {
6131 "Peak Rate", "mpeg_descr.partial_transport_stream.peak_rate",
6132 FT_UINT24, BASE_HEX, NULL, 0, NULL, HFILL
6133 } },
6135 { &hf_mpeg_descr_partial_transport_stream_reserved_future_use2, {
6136 "Reserved", "mpeg_descr.partial_transport_stream.reserved_future_use2",
6137 FT_UINT24, BASE_HEX, NULL, PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE2_MASK, NULL, HFILL
6138 } },
6140 { &hf_mpeg_descr_partial_transport_stream_minimum_overall_smoothing_rate, {
6141 "Minimum Overall Smoothing Rate", "mpeg_descr.partial_transport_stream.minimum_overall_smoothing_rate",
6142 FT_UINT24, BASE_HEX, NULL, 0, NULL, HFILL
6143 } },
6145 { &hf_mpeg_descr_partial_transport_stream_reserved_future_use3, {
6146 "Reserved", "mpeg_descr.partial_transport_stream.reserved_future_use3",
6147 FT_UINT16, BASE_HEX, NULL, PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE3_MASK, NULL, HFILL
6148 } },
6150 { &hf_mpeg_descr_partial_transport_stream_maximum_overall_smoothing_buffer, {
6151 "Maximum Overall Smoothing Buffer", "mpeg_descr.partial_transport_stream.maximum_overall_smoothing_buffer",
6152 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6153 } },
6155 /* 0x64 Data Broadcast Descriptor */
6156 { &hf_mpeg_descr_data_bcast_bcast_id, {
6157 "Data Broadcast ID", "mpeg_descr.data_bcast.id",
6158 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_data_bcast_id_vals_ext, 0, NULL, HFILL
6159 } },
6161 { &hf_mpeg_descr_data_bcast_component_tag, {
6162 "Component Tag", "mpeg_descr.data_bcast.component_tag",
6163 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6164 } },
6166 { &hf_mpeg_descr_data_bcast_selector_len, {
6167 "Selector Length", "mpeg_descr.data_bcast.selector_len",
6168 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6169 } },
6171 { &hf_mpeg_descr_data_bcast_selector_bytes, {
6172 "Selector Bytes", "mpeg_descr.data_bcast.selector_bytes",
6173 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6174 } },
6176 { &hf_mpeg_descr_data_bcast_lang_code, {
6177 "Language Code", "mpeg_descr.data_bcast.lang_code",
6178 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6179 } },
6181 { &hf_mpeg_descr_data_bcast_text_len, {
6182 "Text Length", "mpeg_descr.data_bcast.text_len",
6183 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6184 } },
6186 { &hf_mpeg_descr_data_bcast_text, {
6187 "Text", "mpeg_descr.data_bcast.text",
6188 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6189 } },
6191 /* 0x66 Data Broadcast ID Descriptor */
6192 { &hf_mpeg_descr_data_bcast_id_bcast_id, {
6193 "Data Broadcast ID", "mpeg_descr.data_bcast_id.id",
6194 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_data_bcast_id_vals_ext, 0, NULL, HFILL
6195 } },
6197 { &hf_mpeg_descr_data_bcast_id_id_selector_bytes, {
6198 "ID Selector Bytes", "mpeg_descr.data_bcast_id.id_selector_bytes",
6199 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6200 } },
6202 /* 0x69 PDC Descriptor */
6203 { &hf_mpeg_descr_pdc_reserved, {
6204 "Reserved Future Use", "mpeg_descr.pdc.reserved",
6205 FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_PDC_RESERVED_MASK, NULL, HFILL
6206 } },
6208 { &hf_mpeg_descr_pdc_pil, {
6209 "Program Identification Label (PIL)", "mpeg_descr.pdc.pil",
6210 FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_PDC_PIL_MASK, NULL, HFILL
6211 } },
6213 { &hf_mpeg_descr_pdc_day, {
6214 "Day", "mpeg_descr.pdc.day",
6215 FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_PDC_DAY_MASK, NULL, HFILL
6216 } },
6218 { &hf_mpeg_descr_pdc_month, {
6219 "Month", "mpeg_descr.pdc.month",
6220 FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_PDC_MONTH_MASK, NULL, HFILL
6221 } },
6223 { &hf_mpeg_descr_pdc_hour, {
6224 "Hour", "mpeg_descr.pdc.hour",
6225 FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_PDC_HOUR_MASK, NULL, HFILL
6226 } },
6228 { &hf_mpeg_descr_pdc_minute, {
6229 "Minute", "mpeg_descr.pdc.minute",
6230 FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_PDC_MINUTE_MASK, NULL, HFILL
6231 } },
6233 /* 0x6A AC-3 Descriptor */
6234 { &hf_mpeg_descr_ac3_component_type_flag, {
6235 "Component Type Flag", "mpeg_descr.ac3.component_type_flag",
6236 FT_UINT8, BASE_DEC, VALS(mpeg_descr_ac3_component_type_flag_vals),
6237 MPEG_DESCR_AC3_COMPONENT_TYPE_FLAG_MASK, NULL, HFILL
6238 } },
6240 { &hf_mpeg_descr_ac3_bsid_flag, {
6241 "BSID Flag", "mpeg_descr.ac3.bsid_flag",
6242 FT_UINT8, BASE_DEC, VALS(mpeg_descr_ac3_bsid_flag_vals),
6243 MPEG_DESCR_AC3_BSID_FLAG_MASK, NULL, HFILL
6244 } },
6246 { &hf_mpeg_descr_ac3_mainid_flag, {
6247 "Main ID Flag", "mpeg_descr.ac3_main_id_flag",
6248 FT_UINT8, BASE_DEC, VALS(mpeg_descr_ac3_mainid_flag_vals),
6249 MPEG_DESCR_AC3_MAINID_FLAG_MASK, NULL, HFILL
6250 } },
6252 { &hf_mpeg_descr_ac3_asvc_flag, {
6253 "ASVC Flag", "mpeg_descr.ac3.asvc_flag",
6254 FT_UINT8, BASE_DEC, VALS(mpeg_descr_ac3_asvc_flag_vals),
6255 MPEG_DESCR_AC3_ASVC_FLAG_MASK, NULL, HFILL
6256 } },
6258 { &hf_mpeg_descr_ac3_reserved, {
6259 "Reserved", "mpeg_descr.ac3.reserved",
6260 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_RESERVED_MASK, NULL, HFILL
6261 } },
6263 { &hf_mpeg_descr_ac3_component_type_reserved_flag, {
6264 "Type Reserved Flag", "mpeg_descr.ac3.component_type.reserved_flag",
6265 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_COMPONENT_TYPE_RESERVED_FLAG_MASK, NULL, HFILL
6266 } },
6268 { &hf_mpeg_descr_ac3_component_type_full_service_flag, {
6269 "Full Service Flag", "mpeg_descr.ac3.component_type.full_service_flag",
6270 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_component_type_full_service_flag_vals),
6271 MPEG_DESCR_AC3_COMPONENT_TYPE_FULL_SERVICE_FLAG_MASK, NULL, HFILL
6272 } },
6274 { &hf_mpeg_descr_ac3_component_type_service_type_flags, {
6275 "Service Type Flags", "mpeg_descr.ac3.component_type.service_type_flags",
6276 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_component_type_service_type_flags_vals),
6277 MPEG_DESCR_AC3_COMPONENT_TYPE_SERVICE_TYPE_FLAGS_MASK, NULL, HFILL
6278 } },
6280 { &hf_mpeg_descr_ac3_component_type_number_of_channels_flags, {
6281 "Number of Channels Flags", "mpeg_descr.ac3.component_type.number_chan_flags",
6282 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_component_type_number_of_channels_flags_vals),
6283 MPEG_DESCR_AC3_COMPONENT_TYPE_NUMBER_OF_CHANNELS_FLAGS, NULL, HFILL
6284 } },
6286 { &hf_mpeg_descr_ac3_bsid, {
6287 "BSID", "mpeg_descr.ac3.bsid",
6288 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6289 } },
6291 { &hf_mpeg_descr_ac3_mainid, {
6292 "Main ID", "mpeg_descr.ac3.mainid",
6293 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6294 } },
6296 { &hf_mpeg_descr_ac3_asvc, {
6297 "ASVC", "mpeg_descr.ac3.asvc",
6298 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6299 } },
6301 { &hf_mpeg_descr_ac3_additional_info, {
6302 "Additional Info", "mpeg_descr.ac3.additional_info",
6303 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6304 } },
6306 /* 0x6F Application Signalling Descriptor */
6307 { &hf_mpeg_descr_app_sig_app_type, {
6308 "Application type", "mpeg_descr.app_sig.app_type",
6309 FT_UINT16, BASE_HEX, NULL, 0x7FFF, NULL, HFILL
6310 } },
6312 { &hf_mpeg_descr_app_sig_ait_ver, {
6313 "AIT version", "mpeg_descr.app_sig.ait_ver",
6314 FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL
6315 } },
6317 /* 0x71 Service Identifier Descriptor */
6318 { &hf_mpeg_descr_service_identifier, {
6319 "Service Textual Identifier", "mpeg_descr.sid.txt_identifier",
6320 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6321 } },
6323 /* 0x72 Service Availability Descriptor */
6324 { &hf_mpeg_descr_service_availability_flag, {
6325 "Availability Flag", "mpeg_descr.srv_avail.flag",
6326 FT_UINT8, BASE_HEX, VALS(mpeg_descr_srv_avail_flag_vals),
6327 MPEG_DESCR_SRV_AVAIL_FLAG_MASK, NULL, HFILL
6328 } },
6330 { &hf_mpeg_descr_service_availability_reserved, {
6331 "Reserved", "mpeg_descr.srv_avail.reserved",
6332 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_SRV_AVAIL_RESERVED_MASK, NULL, HFILL
6333 } },
6335 { &hf_mpeg_descr_service_availability_cell_id, {
6336 "Cell ID", "mpeg_descr.srv_avail.cid",
6337 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6338 } },
6340 /* 0x73 Default Authority Descriptor */
6341 { &hf_mpeg_descr_default_authority_name, {
6342 "Default Authority Name", "mpeg_descr.default_authority.name",
6343 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6344 } },
6346 /* 0x75 TVA ID Descriptor */
6347 { &hf_mpeg_descr_tva_id, {
6348 "TVA ID", "mpeg_descr.tva.id",
6349 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6350 } },
6352 { &hf_mpeg_descr_tva_reserved, {
6353 "Reserved", "mpeg_descr.tva.reserved",
6354 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TVA_RESREVED_MASK, NULL, HFILL
6355 } },
6357 { &hf_mpeg_descr_tva_running_status, {
6358 "Running Status", "mpeg_descr.tva.status",
6359 FT_UINT8, BASE_DEC, VALS(mpeg_descr_tva_running_status_vals),
6360 MPEG_DESCR_TVA_RUNNING_STATUS_MASK, NULL, HFILL
6361 } },
6363 /* 0x76 Content Identifier Descriptor */
6364 { &hf_mpeg_descr_content_identifier_crid_type, {
6365 "CRID Type", "mpeg_descr.content_identifier.crid_type",
6366 FT_UINT8, BASE_HEX, VALS(mpeg_descr_content_identifier_crid_type_vals),
6367 MPEG_DESCR_CONTENT_IDENTIFIER_CRID_TYPE_MASK, NULL, HFILL
6368 } },
6370 { &hf_mpeg_descr_content_identifier_crid_location, {
6371 "CRID Location", "mpeg_descr.content_identifier.crid_location",
6372 FT_UINT8, BASE_HEX, VALS(mpeg_descr_content_identifier_crid_location_vals),
6373 MPEG_DESCR_CONTENT_IDENTIFIER_CRID_LOCATION_MASK, NULL, HFILL
6374 } },
6376 { &hf_mpeg_descr_content_identifier_crid_length, {
6377 "CRID Length", "mpeg_descr.content_identifier.crid_len",
6378 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6379 } },
6381 { &hf_mpeg_descr_content_identifier_crid_bytes, {
6382 "CRID Bytes", "mpeg_descr.content_identifier.crid_bytes",
6383 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6384 } },
6386 { &hf_mpeg_descr_content_identifier_cird_ref, {
6387 "CRID Reference", "mpeg_descr.content_identifier.crid_ref",
6388 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6389 } },
6391 /* 0x7D XAIT Content Location Descriptor */
6392 { &hf_mpeg_descr_xait_onid, {
6393 "Original Network ID", "mpeg_descr.xait.onid",
6394 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6395 } },
6397 { &hf_mpeg_descr_xait_sid, {
6398 "Service ID", "mpeg_descr.xait.sid",
6399 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6400 } },
6402 { &hf_mpeg_descr_xait_version_number, {
6403 "Version Number", "mpeg_descr.xait.version",
6404 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_XAIT_VERSION_NUM_MASK, NULL, HFILL
6405 } },
6407 { &hf_mpeg_descr_xait_update_policy, {
6408 "Update Policy", "mpeg_descr.xait.update_policy",
6409 FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(mpeg_descr_xait_update_policy_vals),
6410 MPEG_DESCR_XAIT_UPDATE_POLICY_MASK, NULL, HFILL
6411 } },
6413 /* 0x7E FTA Content Management Descriptor */
6414 { &hf_mpeg_descr_fta_user_defined, {
6415 "User Defined", "mpeg_descr.fta.user_defined",
6416 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_FTA_USER_DEFINED_MASK, NULL, HFILL
6417 } },
6419 { &hf_mpeg_descr_fta_reserved_future_use, {
6420 "Reserved Future Use", "mpeg_descr.fta.reserved",
6421 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_FTA_RESERVED_MASK, NULL, HFILL
6422 } },
6424 { &hf_mpeg_descr_fta_do_not_scramble, {
6425 "Do Not Scramble Flag", "mpeg_descr.fta.scramble",
6426 FT_BOOLEAN, 8, TFS(&tfs_fta_do_not_scramble), MPEG_DESCR_FTA_DO_NOT_SCRAMBLE_MASK, NULL, HFILL
6427 } },
6429 { &hf_mpeg_descr_fta_control_remote_access_over_internet, {
6430 "Control Remote Access Over Internet", "mpeg_descr.fta.remote",
6431 FT_UINT8, BASE_HEX, VALS(fta_control_remote_access_over_internet_vals),
6432 MPEG_DESCR_FTA_REMOTE_MASK, NULL, HFILL
6433 } },
6435 { &hf_mpeg_descr_fta_do_not_apply_revocation, {
6436 "Do Not Apply Revocation Flag", "mpeg_descr.fta.revocation",
6437 FT_BOOLEAN, 8, TFS(&tfs_fta_do_not_apply_revocation), MPEG_DESCR_FTA_REVOCATION_MASK, NULL, HFILL
6438 } },
6440 /* 0x7F Extension Descriptor */
6441 { &hf_mpeg_descr_extension_tag_extension, {
6442 "Descriptor Tag Extension", "mpeg_descr.ext.tag",
6443 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_extension_tag_extension_vals_ext, 0, NULL, HFILL
6444 } },
6446 { &hf_mpeg_descr_extension_data, {
6447 "Descriptor Extension Data", "mpeg_descr.ext.data",
6448 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6449 } },
6451 /* Supplementary Audio Descriptor (part of Extension Descriptor) */
6452 { &hf_mpeg_descr_extension_supp_audio_mix_type, {
6453 "Mix type", "mpeg_descr.ext.supp_audio.mix_type",
6454 FT_UINT8, BASE_HEX, VALS(supp_audio_mix_type_vals), 0x80, NULL, HFILL
6455 } },
6457 { &hf_mpeg_descr_extension_supp_audio_ed_cla, {
6458 "Editorial classification", "mpeg_descr.ext.supp_audio.ed_cla",
6459 FT_UINT8, BASE_HEX, VALS(supp_audio_ed_cla), 0x7C, NULL, HFILL
6460 } },
6462 { &hf_mpeg_descr_extension_supp_audio_lang_code_present, {
6463 "Language code present", "mpeg_descr.ext.supp_audio.lang_code_present",
6464 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL
6465 } },
6467 { &hf_mpeg_descr_extension_supp_audio_lang_code, {
6468 "ISO 639 language code", "mpeg_descr.ext.supp_audio.lang_code",
6469 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6470 } },
6472 { &hf_mpeg_descr_private_data, {
6473 "Private data", "mpeg_descr.private_data",
6474 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6475 } },
6477 /* 0x81 ATSC A/52 AC-3 Descriptor */
6478 { &hf_mpeg_descr_ac3_sysa_srate, {
6479 "Sample Rate", "mpeg_descr.ac3.sysa_sample_rate",
6480 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_srate_flag_vals),
6481 MPEG_DESCR_AC3_SYSA_SRATE_MASK, NULL, HFILL
6482 } },
6484 { &hf_mpeg_descr_ac3_sysa_bsid, {
6485 "bsid", "mpeg_descr.ac3.sysa_bsid",
6486 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_BSID_MASK, NULL, HFILL
6487 } },
6489 { &hf_mpeg_descr_ac3_sysa_bitrate_limit, {
6490 "Bitrate Code limit type", "mpeg_descr.ac3.sysa_bitrate_code_limit",
6491 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_bitrate_code_limit_vals),
6492 MPEG_DESCR_AC3_SYSA_BITRATE_CODE_LIMIT_MASK, NULL, HFILL
6493 } },
6495 { &hf_mpeg_descr_ac3_sysa_bitrate, {
6496 "Bitrate Code", "mpeg_descr.ac3.sysa_bitrate_code",
6497 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_bitrate_code_vals),
6498 MPEG_DESCR_AC3_SYSA_BITRATE_CODE_MASK, NULL, HFILL
6499 } },
6501 { &hf_mpeg_descr_ac3_sysa_surround, {
6502 "Surround Mode", "mpeg_descr.ac3.sysa_surround_mode",
6503 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_surround_mode_vals),
6504 MPEG_DESCR_AC3_SYSA_SURROUND_MODE_MASK, NULL, HFILL
6505 } },
6507 { &hf_mpeg_descr_ac3_sysa_bsmod, {
6508 "Bsmod", "mpeg_descr.ac3.sysa_bsmod",
6509 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_BSMOD_MASK, NULL, HFILL
6510 } },
6512 { &hf_mpeg_descr_ac3_sysa_num_channels, {
6513 "Number of Channels", "mpeg_descr.ac3.sysa_num_channels",
6514 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_num_channels_vals),
6515 MPEG_DESCR_AC3_SYSA_NUM_CHANNELS_MASK, NULL, HFILL
6516 } },
6518 { &hf_mpeg_descr_ac3_sysa_full_svc, {
6519 "Full Service", "mpeg_descr.ac3.sysa_full_svc",
6520 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_FULL_SVC_MASK, NULL, HFILL
6521 } },
6523 { &hf_mpeg_descr_ac3_sysa_langcode, {
6524 "Language Code (Deprecated)", "mpeg_descr.ac3.sysa_langcode",
6525 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL
6526 } },
6528 { &hf_mpeg_descr_ac3_sysa_langcode2, {
6529 "Language Code 2 (Deprecated)", "mpeg_descr.ac3.sysa_langcode2",
6530 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL
6531 } },
6533 { &hf_mpeg_descr_ac3_sysa_mainid, {
6534 "Main ID", "mpeg_descr.ac3.sysa_mainid",
6535 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_MAINID_MASK, NULL, HFILL
6536 } },
6538 { &hf_mpeg_descr_ac3_sysa_priority, {
6539 "Priority", "mpeg_descr.ac3.sysa_priority",
6540 FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_priority_vals),
6541 MPEG_DESCR_AC3_SYSA_PRIORITY_MASK, NULL, HFILL
6542 } },
6544 { &hf_mpeg_descr_ac3_sysa_reserved, {
6545 "Reserved", "mpeg_descr.ac3.sysa_reserved",
6546 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_RESERVED_MASK, NULL, HFILL
6547 } },
6549 { &hf_mpeg_descr_ac3_sysa_asvcflags, {
6550 "Associated Service Flags", "mpeg_descr.ac3.sysa_asvcflags",
6551 FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL
6552 } },
6554 { &hf_mpeg_descr_ac3_sysa_textlen, {
6555 "Text length", "mpeg_descr.ac3.sysa_textlen",
6556 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_TEXTLEN_MASK, NULL, HFILL
6557 } },
6559 { &hf_mpeg_descr_ac3_sysa_textcode, {
6560 "Text Code", "mpeg_descr.ac3.sysa_textcode",
6561 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_TEXTCODE_MASK, NULL, HFILL
6562 } },
6564 { &hf_mpeg_descr_ac3_sysa_lang1, {
6565 "Language 1 Present", "mpeg_descr.ac3.sysa_lang1",
6566 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_LANG1_MASK, NULL, HFILL
6567 } },
6569 { &hf_mpeg_descr_ac3_sysa_lang2, {
6570 "Language 2 Present", "mpeg_descr.ac3.sysa_lang2",
6571 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_SYSA_LANG2_MASK, NULL, HFILL
6572 } },
6574 { &hf_mpeg_descr_ac3_sysa_lang1_bytes, {
6575 "Language 1 ISO 639 language code", "mpeg_descr.ac3.sysa_lang1_bytes",
6576 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6577 } },
6579 { &hf_mpeg_descr_ac3_sysa_lang2_bytes, {
6580 "Language 2 ISO 639 language code", "mpeg_descr.ac3.sysa_lang2_bytes",
6581 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6582 } },
6584 /* 0x83 NorDig Logical Channel Descriptor (version 1) */
6585 { &hf_mpeg_descr_nordig_lcd_v1_service_list_id, {
6586 "Service ID", "mpeg_descr.nordig.lcd.svc_list.id",
6587 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6588 } },
6590 { &hf_mpeg_descr_nordig_lcd_v1_service_list_visible_service_flag, {
6591 "Visible", "mpeg_descr.nordig.lcd.svc_list.visible",
6592 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V1_VISIBLE_SERVICE_FLAG_MASK, NULL, HFILL
6593 } },
6595 { &hf_mpeg_descr_nordig_lcd_v1_service_list_reserved, {
6596 "Reserved", "mpeg_descr.nordig.lcd.svc_list.reserved",
6597 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V1_RESERVED_MASK, NULL, HFILL
6598 } },
6600 { &hf_mpeg_descr_nordig_lcd_v1_service_list_logical_channel_number, {
6601 "Logical Channel Number", "mpeg_descr.nordig.lcd.svc_list.lcn",
6602 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V1_LCN_MASK, NULL, HFILL
6603 } },
6605 /* 0x87 NorDig Logical Channel Descriptor (version 2) */
6606 { &hf_mpeg_descr_nordig_lcd_v2_channel_list_id, {
6607 "Channel List ID", "mpeg_descr.nordig.lcd.ch_list.id",
6608 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6609 } },
6611 { &hf_mpeg_descr_nordig_lcd_v2_channel_list_name_length, {
6612 "Channel List Name Length", "mpeg_descr.nordig.lcd.ch_list.name_length",
6613 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6614 } },
6616 { &hf_mpeg_descr_nordig_lcd_v2_channel_list_name_encoding, {
6617 "Channel List Name Encoding", "mpeg_descr.nordig.lcd.ch_list.name_enc",
6618 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6619 } },
6621 { &hf_mpeg_descr_nordig_lcd_v2_channel_list_name, {
6622 "Channel List Name", "mpeg_descr.nordig.lcd.ch_list.name",
6623 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6624 } },
6626 { &hf_mpeg_descr_nordig_lcd_v2_country_code, {
6627 "Country Code", "mpeg_descr.nordig.lcd.country_code",
6628 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6629 } },
6631 { &hf_mpeg_descr_nordig_lcd_v2_descriptor_length, {
6632 "Descriptor Length", "mpeg_descr.nordig.lcd.ch_list.descriptor_length",
6633 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6634 } },
6636 { &hf_mpeg_descr_nordig_lcd_v2_service_id, {
6637 "Service ID", "mpeg_descr.nordig.lcd.svc_list.id",
6638 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6639 } },
6641 { &hf_mpeg_descr_nordig_lcd_v2_visible_service_flag, {
6642 "Visible", "mpeg_descr.nordig.lcd.svc_list.visible",
6643 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V2_VISIBLE_SERVICE_FLAG_MASK, NULL, HFILL
6644 } },
6646 { &hf_mpeg_descr_nordig_lcd_v2_reserved, {
6647 "Reserved", "mpeg_descr.nordig.lcd.svc_list.reserved",
6648 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V2_RESERVED_MASK, NULL, HFILL
6649 } },
6651 { &hf_mpeg_descr_nordig_lcd_v2_logical_channel_number, {
6652 "Logical Channel Number", "mpeg_descr.nordig.lcd.svc_list.lcn",
6653 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V2_LCN_MASK, NULL, HFILL
6654 } },
6656 /* 0xA2 Logon Initialize Descriptor */
6657 { &hf_mpeg_descr_logon_initialize_group_id, {
6658 "Group ID", "mpeg_descr.logon_init.group_id",
6659 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6660 } },
6662 { &hf_mpeg_descr_logon_initialize_logon_id, {
6663 "Logon ID", "mpeg_descr.logon_init.logon_id",
6664 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6665 } },
6667 { &hf_mpeg_descr_logon_initialize_continuous_carrier_reserved, {
6668 "Continuous Carrier Reserved", "mpeg_descr.logon_init.continuous_carrier_reserved",
6669 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_CONTINUOUS_CARRIER_RESERVED_MASK, NULL, HFILL
6670 } },
6672 { &hf_mpeg_descr_logon_initialize_continuous_carrier, {
6673 "Continuous Carrier", "mpeg_descr.logon_init.continuous_carrier",
6674 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_CONTINUOUS_CARRIER_MASK, NULL, HFILL
6675 } },
6677 { &hf_mpeg_descr_logon_initialize_security_handshake_required, {
6678 "Security Handshake Required", "mpeg_descr.logon_init.security_handshake_required",
6679 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_SECURITY_HANDSHAKE_REQUIRED_MASK, NULL, HFILL
6680 } },
6682 { &hf_mpeg_descr_logon_initialize_prefix_flag, {
6683 "Prefix Flag", "mpeg_descr.logon_init.prefix_flag",
6684 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_PREFIX_FLAG_MASK, NULL, HFILL
6685 } },
6687 { &hf_mpeg_descr_logon_initialize_data_unit_labelling_flag, {
6688 "Unit Labelling Flag", "mpeg_descr.logon_init.data_unit_labelling_flag",
6689 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_DATA_UNIT_LABELLING_FLAG_MASK, NULL, HFILL
6690 } },
6692 { &hf_mpeg_descr_logon_initialize_mini_slot_flag, {
6693 "Mini Slot Flag", "mpeg_descr.logon_init.mini_slot_flag",
6694 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_MINI_SLOT_FLAG_MASK, NULL, HFILL
6695 } },
6697 { &hf_mpeg_descr_logon_initialize_contention_based_mini_slot_flag, {
6698 "Contention Based Mini Slot Flag", "mpeg_descr.logon_init.contention_based_mini_slot_flag",
6699 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_CONTENTION_BASED_MINI_SLOT_FLAG_MASK, NULL, HFILL
6700 } },
6702 { &hf_mpeg_descr_logon_initialize_capacity_type_flag_reserved, {
6703 "Capacity Type Flag Reserved", "mpeg_descr.logon_init.capacity_type_flag_reserved",
6704 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_RESERVED_MASK, NULL, HFILL
6705 } },
6707 { &hf_mpeg_descr_logon_initialize_capacity_type_flag, {
6708 "Capacity Type Flag", "mpeg_descr.logon_init.capacity_type_flag",
6709 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_MASK, NULL, HFILL
6710 } },
6712 { &hf_mpeg_descr_logon_initialize_traffic_burst_type, {
6713 "Traffic Burst Type", "mpeg_descr.logon_init.traffic_burst_type",
6714 FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_TRAFFIC_BURST_TYPE_MASK, NULL, HFILL
6715 } },
6717 { &hf_mpeg_descr_logon_initialize_return_trf_pid, {
6718 "Return TRF PID", "mpeg_descr.logon_init.return_trf_pid",
6719 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_TRF_PID_MASK, NULL, HFILL
6720 } },
6722 { &hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid_reserved, {
6723 "Return CTRL MNGM PID Reserved", "mpeg_descr.logon_init.return_mngm_pid_reserved",
6724 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_CTRL_MNGM_PID_RESERVED_MASK, NULL, HFILL
6725 } },
6727 { &hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid, {
6728 "Return CTRL MNGM PID", "mpeg_descr.logon_init.return_mngm_pid",
6729 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_CTRL_MNGM_PID_MASK, NULL, HFILL
6730 } },
6732 { &hf_mpeg_descr_logon_initialize_connectivity, {
6733 "Connectivity", "mpeg_descr.logon_init.connectivity",
6734 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_CONNECTIVITY_MASK, NULL, HFILL
6735 } },
6737 { &hf_mpeg_descr_logon_initialize_return_vpi_reserved, {
6738 "Return VPI Reserved", "mpeg_descr.logon_init.return_vpi_reserved",
6739 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_VPI_RESERVED_MASK, NULL, HFILL
6740 } },
6742 { &hf_mpeg_descr_logon_initialize_return_vpi, {
6743 "Return VPI", "mpeg_descr.logon_init.return_vpi",
6744 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_VPI_MASK, NULL, HFILL
6745 } },
6747 { &hf_mpeg_descr_logon_initialize_return_vci, {
6748 "Return VCI", "mpeg_descr.logon_init.return_vci",
6749 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6750 } },
6752 { &hf_mpeg_descr_logon_initialize_return_signalling_vpi_reserved, {
6753 "Return Signalling VPI Reserved", "mpeg_descr.logon_init.return_signalling_vpi_reserved",
6754 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_RESERVED_MASK, NULL, HFILL
6755 } },
6757 { &hf_mpeg_descr_logon_initialize_return_signalling_vpi, {
6758 "Return Signalling VPI", "mpeg_descr.logon_init.return_signalling_vpi",
6759 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_MASK, NULL, HFILL
6760 } },
6762 { &hf_mpeg_descr_logon_initialize_return_signalling_vci, {
6763 "Return Signalling VCI", "mpeg_descr.logon_init.return_signalling_vci",
6764 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6765 } },
6767 { &hf_mpeg_descr_logon_initialize_forward_signalling_vpi_reserved, {
6768 "Forward Signalling VPI Reserved", "mpeg_descr.logon_init.forward_signalling_vpi_reserved",
6769 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_RESERVED_MASK, NULL, HFILL
6770 } },
6772 { &hf_mpeg_descr_logon_initialize_forward_signalling_vpi, {
6773 "Forward Signalling VPI", "mpeg_descr.logon_init.forward_signalling_vpi",
6774 FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_MASK, NULL, HFILL
6775 } },
6777 { &hf_mpeg_descr_logon_initialize_forward_signalling_vci, {
6778 "Forward Signalling VCI", "mpeg_descr.logon_init.forward_signalling_vci",
6779 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6780 } },
6782 { &hf_mpeg_descr_logon_initialize_cra_level, {
6783 "CRA Level", "mpeg_descr.logon_init.cra_level",
6784 FT_UINT24, BASE_DEC, NULL, 0, NULL, HFILL
6785 } },
6787 { &hf_mpeg_descr_logon_initialize_vbdc_max_reserved, {
6788 "VDBC Max Reserved", "mpeg_descr.logon_init.vdbc_max_reserved",
6789 FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_VDBC_MAX_RESERVED_MASK, NULL, HFILL
6790 } },
6792 { &hf_mpeg_descr_logon_initialize_vbdc_max, {
6793 "VDBC Max", "mpeg_descr.logon_init.vdbc_max",
6794 FT_UINT16, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_VDBC_MAX_MASK, NULL, HFILL
6795 } },
6797 { &hf_mpeg_descr_logon_initialize_rbdc_max, {
6798 "RDBC Max", "mpeg_descr.logon_init.rdbc_max",
6799 FT_UINT24, BASE_DEC, NULL, 0, NULL, HFILL
6800 } },
6802 { &hf_mpeg_descr_logon_initialize_rbdc_timeout, {
6803 "RDBC Timeout", "mpeg_descr.logon_init.rdbc_timeout",
6804 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
6805 } },
6807 /* 0xA7 RCS Content Descriptor */
6808 { &hf_mpeg_descr_rcs_content_table_id, {
6809 "Table ID", "mpeg_descr.rcs_content.tid",
6810 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6811 } },
6813 /* 0xCB CI+ Content Label Descriptor */
6814 { &hf_mpeg_descr_ciplus_cl_cb_min, {
6815 "Content byte minimum value", "mpeg_descr.ciplus_content_label.content_byte_min",
6816 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6817 } },
6819 { &hf_mpeg_descr_ciplus_cl_cb_max, {
6820 "Content byte maximum value", "mpeg_descr.ciplus_content_label.content_byte_max",
6821 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6822 } },
6824 { &hf_mpeg_descr_ciplus_cl_lang, {
6825 "ISO 639 language code", "mpeg_descr.ciplus_content_label.lang_code",
6826 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6827 } },
6829 { &hf_mpeg_descr_ciplus_cl_label, {
6830 "Content label", "mpeg_descr.ciplus_content_label.label",
6831 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6832 } },
6834 /* 0xCC CI+ Service Descriptor */
6835 { &hf_mpeg_descr_ciplus_svc_id, {
6836 "Service ID", "mpeg_descr.ciplus_svc.id",
6837 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6838 } },
6840 { &hf_mpeg_descr_ciplus_svc_type, {
6841 "Service type", "mpeg_descr.ciplus_svc.type",
6842 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_service_type_vals_ext, 0, NULL, HFILL
6843 } },
6845 { &hf_mpeg_descr_ciplus_svc_visible, {
6846 "Visible Service Flag", "mpeg_descr.ciplus_svc.visible",
6847 FT_UINT16, BASE_HEX, NULL, 0x8000, NULL, HFILL
6848 } },
6850 { &hf_mpeg_descr_ciplus_svc_selectable, {
6851 "Selectable Service Flag", "mpeg_descr.ciplus_svc.selectable",
6852 FT_UINT16, BASE_HEX, NULL, 0x4000, NULL, HFILL
6853 } },
6855 { &hf_mpeg_descr_ciplus_svc_lcn, {
6856 "Logical Channel Number", "mpeg_descr.ciplus_svc.lcn",
6857 FT_UINT16, BASE_DEC, NULL, 0x3FFF, NULL, HFILL
6858 } },
6860 { &hf_mpeg_descr_ciplus_svc_prov_name, {
6861 "Service Provider Name", "mpeg_descr.ciplus_svc.provider_name",
6862 FT_UINT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6863 } },
6865 { &hf_mpeg_descr_ciplus_svc_name, {
6866 "Service Name", "mpeg_descr.ciplus_svc.name",
6867 FT_UINT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6868 } },
6870 { &hf_mpeg_descr_ciplus_prot_free_ci_mode, {
6871 "Free CI mode", "mpeg_descr.ciplus_prot.free_ci_mode",
6872 FT_BOOLEAN, 8, TFS(&tfs_prot_noprot), 0x80, NULL, HFILL
6873 } },
6875 { &hf_mpeg_descr_ciplus_prot_match_brand_flag, {
6876 "Match brand flag", "mpeg_descr.ciplus_prot.match_brand_flag",
6877 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x40, NULL, HFILL
6878 } },
6880 { &hf_mpeg_descr_ciplus_prot_num_entries, {
6881 "Number of entries", "mpeg_descr.ciplus_prot.num_entries",
6882 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6883 } },
6885 { &hf_mpeg_descr_ciplus_prot_brand_id, {
6886 "CICAM brand identifier", "mpeg_descr.ciplus_prot.brand_id",
6887 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6891 static int *ett[] = {
6892 &ett_mpeg_descriptor,
6893 &ett_mpeg_descriptor_extended_event_item,
6894 &ett_mpeg_descriptor_component_content_type,
6895 &ett_mpeg_descriptor_content_nibble,
6896 &ett_mpeg_descriptor_multilng_network_name_desc_lng,
6897 &ett_mpeg_descriptor_multilng_bouquet_name_desc_lng,
6898 &ett_mpeg_descriptor_multilng_srv_name_desc_lng,
6899 &ett_mpeg_descriptor_multilng_component_desc_lng,
6900 &ett_mpeg_descriptor_country_availability_countries,
6901 &ett_mpeg_descriptor_nvod_reference_triplet,
6902 &ett_mpeg_descriptor_vbi_data_service,
6903 &ett_mpeg_descriptor_srv_avail_cells,
6904 &ett_mpeg_descriptor_tva,
6905 &ett_mpeg_descriptor_content_identifier_crid,
6906 &ett_mpeg_descriptor_mosaic_logical_cell,
6907 &ett_mpeg_descriptor_mosaic_elementary_cells,
6908 &ett_mpeg_descriptor_service_list,
6909 &ett_mpeg_descriptor_telephone_number,
6910 &ett_mpeg_descriptor_pdc_pil,
6911 &ett_mpeg_descriptor_nordig_lcd_v1_service_list,
6912 &ett_mpeg_descriptor_nordig_lcd_v2_channel_list_list,
6913 &ett_mpeg_descriptor_nordig_lcd_v2_service_list,
6914 &ett_mpeg_descriptor_ac3_component_type,
6915 &ett_mpeg_descriptor_linkage_population_id
6918 proto_mpeg_descriptor = proto_register_protocol("MPEG2 Descriptors", "MPEG Descriptor", "mpeg_descr");
6919 proto_register_field_array(proto_mpeg_descriptor, hf, array_length(hf));
6920 proto_register_subtree_array(ett, array_length(ett));
6925 * Editor modelines - https://www.wireshark.org/tools/modelines.html
6927 * Local variables:
6928 * c-basic-offset: 4
6929 * tab-width: 8
6930 * indent-tabs-mode: nil
6931 * End:
6933 * vi: set shiftwidth=4 tabstop=8 expandtab:
6934 * :indentSize=4:tabSize=8:noTabs=true: