Coverage Report

Created: 2025-02-15 06:25

/src/wireshark/epan/dissectors/packet-mpeg-descriptor.c
Line
Count
Source (jump to first uncovered line)
1
/* packet-mpeg-descriptor.c
2
 * Routines for MPEG2 (ISO/ISO 13818-1 and co) descriptors
3
 * Copyright 2012, Guy Martin <gmsoft@tuxicoman.be>
4
 *
5
 * Wireshark - Network traffic analyzer
6
 * By Gerald Combs <gerald@wireshark.org>
7
 * Copyright 1998 Gerald Combs
8
 *
9
 * SPDX-License-Identifier: GPL-2.0-or-later
10
 */
11
12
#include "config.h"
13
14
#include <epan/packet.h>
15
#include <epan/dvb_chartbl.h>
16
#include <epan/tfs.h>
17
#include <epan/unit_strings.h>
18
19
#include <wsutil/array.h>
20
#include "packet-mpeg-sect.h"
21
#include "packet-mpeg-descriptor.h"
22
23
void proto_register_mpeg_descriptor(void);
24
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;
29
30
static int ett_mpeg_descriptor;
31
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" },
53
54
    /* From ETSI TR 101 202 */
55
    { 0x13, "Carousel Identifier Descriptor" },
56
    { 0x14, "Association Tag Descriptor" },
57
    { 0x15, "Deferred Association Tag Descriptor" },
58
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" },
78
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" },
147
148
    /* From ATSC A/52 */
149
    { 0x81, "ATSC A/52 AC-3 Audio Descriptor" },
150
151
    /* From Nordig Unified Requirements */
152
    { 0x83, "NorDig Logical Channel Descriptor v1" },
153
    { 0x87, "NorDig Logical Channel Descriptor v2" },
154
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" },
178
179
    { 0x00, NULL}
180
};
181
static value_string_ext mpeg_descriptor_tag_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descriptor_tag_vals);
182
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;
193
194
14
#define MPEG_DESCR_VIDEO_STREAM_MULTIPLE_FRAME_RATE_FLAG_MASK   0x80
195
14
#define MPEG_DESCR_VIDEO_STREAM_FRAME_RATE_CODE_MASK            0x78
196
204
#define MPEG_DESCR_VIDEO_STREAM_MPEG1_ONLY_FLAG_MASK            0x04
197
14
#define MPEG_DESCR_VIDEO_STREAM_CONSTRAINED_PARAMETER_FLAG_MASK 0x02
198
14
#define MPEG_DESCR_VIDEO_STREAM_STILL_PICTURE_FLAG_MASK         0x01
199
#define MPEG_DESCR_VIDEO_STREAM_CHROMA_FORMAT_MASK              0xC0
200
14
#define MPEG_DESCR_VIDEO_STREAM_FRAME_RATE_EXTENSION_FLAG_MASK  0x20
201
14
#define MPEG_DESCR_VIDEO_STREAM_RESERVED_MASK                   0x1F
202
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" },
206
207
    { 0x00, NULL }
208
};
209
210
static void
211
proto_mpeg_descriptor_dissect_video_stream(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
212
190
{
213
214
190
    uint8_t mpeg1_only_flag;
215
216
190
    mpeg1_only_flag = tvb_get_uint8(tvb, offset) & MPEG_DESCR_VIDEO_STREAM_MPEG1_ONLY_FLAG_MASK;
217
190
    proto_tree_add_item(tree, hf_mpeg_descr_video_stream_multiple_frame_rate_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
218
190
    proto_tree_add_item(tree, hf_mpeg_descr_video_stream_frame_rate_code, tvb, offset, 1, ENC_BIG_ENDIAN);
219
190
    proto_tree_add_item(tree, hf_mpeg_descr_video_stream_mpeg1_only_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
220
190
    proto_tree_add_item(tree, hf_mpeg_descr_video_stream_constrained_parameter_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
221
190
    proto_tree_add_item(tree, hf_mpeg_descr_video_stream_still_picture_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
222
223
190
    offset += 1;
224
225
190
    if (mpeg1_only_flag == 0) {
226
227
170
        proto_tree_add_item(tree, hf_mpeg_descr_video_stream_profile_and_level_indication, tvb, offset, 1, ENC_BIG_ENDIAN);
228
170
        offset += 1;
229
230
170
        proto_tree_add_item(tree, hf_mpeg_descr_video_stream_chroma_format, tvb, offset, 1, ENC_BIG_ENDIAN);
231
170
        proto_tree_add_item(tree, hf_mpeg_descr_video_stream_frame_rate_extension_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
232
170
        proto_tree_add_item(tree, hf_mpeg_descr_video_stream_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
233
170
    }
234
190
}
235
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;
242
243
14
#define MPEG_DESCR_AUDIO_STREAM_FREE_FORMAT_FLAG_MASK                   0x80
244
14
#define MPEG_DESCR_AUDIO_STREAM_ID_MASK                                 0x40
245
14
#define MPEG_DESCR_AUDIO_STREAM_LAYER_MASK                              0x30
246
14
#define MPEG_DESCR_AUDIO_STREAM_VARIABLE_RATE_AUDIO_INDICATOR_MASK      0x08
247
14
#define MPEG_DESCR_AUDIO_STREAM_RESERVED_MASK                           0x07
248
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" },
252
253
    { 0x00, NULL }
254
};
255
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" },
259
260
    { 0x00, NULL }
261
};
262
263
static const value_string mpeg_descr_audio_stream_variable_rate_audio_indicator_vals[] = {
264
    { 0x00, "Constant bitrate" },
265
    { 0x01, "Variable bitrate" },
266
267
    { 0x00, NULL }
268
269
};
270
271
static void
272
proto_mpeg_descriptor_dissect_audio_stream(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
273
50
{
274
50
    proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_free_format_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
275
50
    proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_id, tvb, offset, 1, ENC_BIG_ENDIAN);
276
50
    proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_layer, tvb, offset, 1, ENC_BIG_ENDIAN);
277
50
    proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_variable_rate_audio_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
278
50
    proto_tree_add_item(tree, hf_mpeg_descr_audio_stream_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
279
50
}
280
281
/* 0x05 Registration Descriptor */
282
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" },
367
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" },
378
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" },
389
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" },
400
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" },
411
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" },
422
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" },
433
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" },
444
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" },
455
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" },
466
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" },
477
478
    { 0x00, NULL }
479
};
480
481
static int hf_mpeg_descr_reg_form_id;
482
static int hf_mpeg_descr_reg_add_id_inf;
483
484
static void
485
proto_mpeg_descriptor_dissect_registration(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
486
16
{
487
16
    unsigned  offset_start;
488
489
16
    offset_start = offset;
490
16
    proto_tree_add_item(tree, hf_mpeg_descr_reg_form_id, tvb, offset, 4, ENC_BIG_ENDIAN);
491
16
    offset += 4;
492
493
140
    while (offset-offset_start<len) {
494
124
        proto_tree_add_item(tree, hf_mpeg_descr_reg_add_id_inf, tvb, offset, 1, ENC_BIG_ENDIAN);
495
124
        offset++;
496
124
    }
497
16
}
498
499
/* 0x06 Data Stream Alignment Descriptor */
500
static int hf_mpeg_descr_data_stream_alignment;
501
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" },
508
509
    { 0x00, NULL }
510
};
511
512
static void
513
proto_mpeg_descriptor_dissect_data_stream_alignment(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
514
9
{
515
9
    proto_tree_add_item(tree, hf_mpeg_descr_data_stream_alignment, tvb, offset, 1, ENC_BIG_ENDIAN);
516
9
}
517
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;
523
524
14
#define MPEG_DESCR_CA_RESERVED_MASK 0xE000
525
14
#define MPEG_DESCR_CA_PID_MASK      0x1FFF
526
527
static void
528
proto_mpeg_descriptor_dissect_ca(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
529
24
{
530
24
    proto_tree_add_item(tree, hf_mpeg_descr_ca_system_id, tvb, offset, 2, ENC_BIG_ENDIAN);
531
24
    offset += 2;
532
533
24
    proto_tree_add_item(tree, hf_mpeg_descr_ca_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
534
24
    proto_tree_add_item(tree, hf_mpeg_descr_ca_pid, tvb, offset, 2, ENC_BIG_ENDIAN);
535
24
    offset += 2;
536
537
24
    if (len > 4)
538
20
        proto_tree_add_item(tree, hf_mpeg_descr_ca_private, tvb, offset, len - 4, ENC_NA);
539
24
}
540
541
542
/* 0x0A ISO 639 Language Descriptor */
543
static int hf_mpeg_descr_iso639_lang;
544
static int hf_mpeg_descr_iso639_type;
545
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" },
551
552
    { 0x00, NULL }
553
};
554
555
static void
556
proto_mpeg_descriptor_dissect_iso639(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
557
11
{
558
11
    if (len > 1)
559
10
        proto_tree_add_item(tree, hf_mpeg_descr_iso639_lang, tvb, offset, len - 1, ENC_ASCII);
560
11
    offset += len - 1;
561
11
    proto_tree_add_item(tree, hf_mpeg_descr_iso639_type, tvb, offset, 1, ENC_BIG_ENDIAN);
562
11
}
563
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;
570
571
14
#define MPEG_DESCR_SYSTEM_CLOCK_EXTERNAL_CLOCK_REFERENCE_INDICATOR_MASK 0x80
572
14
#define MPEG_DESCR_SYSTEM_CLOCK_RESERVED1_MASK                          0x40
573
14
#define MPEG_DESCR_SYSTEM_CLOCK_ACCURACY_INTEGER_MASK                   0x3F
574
14
#define MPEG_DESCR_SYSTEM_CLOCK_ACCURACY_EXPONENT_MASK                  0xE0
575
14
#define MPEG_DESCR_SYSTEM_CLOCK_RESERVED2_MASK                          0x1F
576
577
static void
578
proto_mpeg_descriptor_dissect_system_clock(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
579
5
{
580
5
    proto_tree_add_item(tree, hf_mpeg_descr_system_clock_external_clock_reference_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
581
5
    proto_tree_add_item(tree, hf_mpeg_descr_system_clock_reserved1, tvb, offset, 1, ENC_BIG_ENDIAN);
582
5
    proto_tree_add_item(tree, hf_mpeg_descr_system_clock_accuracy_integer, tvb, offset, 1, ENC_BIG_ENDIAN);
583
5
    offset += 1;
584
585
5
    proto_tree_add_item(tree, hf_mpeg_descr_system_clock_accuracy_exponent, tvb, offset, 1, ENC_BIG_ENDIAN);
586
5
    proto_tree_add_item(tree, hf_mpeg_descr_system_clock_reserved2, tvb, offset, 1, ENC_BIG_ENDIAN);
587
5
}
588
589
/* 0x0E Maximum Bitrate Descriptor */
590
static int hf_mpeg_descr_max_bitrate_reserved;
591
static int hf_mpeg_descr_max_bitrate;
592
593
14
#define MPEG_DESCR_MAX_BITRATE_RESERVED_MASK    0xC00000
594
20
#define MPEG_DESCR_MAX_BITRATE_MASK     0x3FFFFF
595
596
static void
597
proto_mpeg_descriptor_dissect_max_bitrate(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
598
6
{
599
6
    proto_item *rate_item;
600
601
6
    uint32_t rate;
602
603
6
    proto_tree_add_item(tree, hf_mpeg_descr_max_bitrate_reserved, tvb, offset, 3, ENC_BIG_ENDIAN);
604
6
    rate = tvb_get_ntoh24(tvb, offset) & MPEG_DESCR_MAX_BITRATE_MASK;
605
6
    rate_item = proto_tree_add_item(tree, hf_mpeg_descr_max_bitrate, tvb, offset, 3, ENC_BIG_ENDIAN);
606
6
    proto_item_append_text(rate_item, " (%u bytes/sec)", rate * 50);
607
6
}
608
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;
614
615
14
#define MPEG_DESCR_SMOOTHING_BUFFER_RESERVED1_MASK  0xC00000
616
80
#define MPEG_DESCR_SMOOTHING_BUFFER_LEAK_RATE_MASK  0x3FFFFF
617
14
#define MPEG_DESCR_SMOOTHING_BUFFER_RESERVED2_MASK  0xC00000
618
14
#define MPEG_DESCR_SMOOTHING_BUFFER_SIZE_MASK       0x3FFFFF
619
620
static void
621
proto_mpeg_descriptor_dissect_smoothing_buffer(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
622
66
{
623
66
    proto_item *leak_rate_item;
624
625
66
    uint32_t leak_rate;
626
627
66
    proto_tree_add_item(tree, hf_mpeg_descr_smoothing_buffer_reserved1, tvb, offset, 3, ENC_BIG_ENDIAN);
628
66
    leak_rate = tvb_get_ntoh24(tvb, offset) & MPEG_DESCR_SMOOTHING_BUFFER_LEAK_RATE_MASK;
629
66
    leak_rate_item = proto_tree_add_item(tree, hf_mpeg_descr_smoothing_buffer_leak_rate, tvb, offset, 3, ENC_BIG_ENDIAN);
630
66
    proto_item_append_text(leak_rate_item, " (%u bytes/sec)", leak_rate * 400 / 8);
631
66
    offset += 3;
632
633
66
    proto_tree_add_item(tree, hf_mpeg_descr_smoothing_buffer_reserved2, tvb, offset, 3, ENC_BIG_ENDIAN);
634
66
    proto_tree_add_item(tree, hf_mpeg_descr_smoothing_buffer_size, tvb, offset, 3, ENC_BIG_ENDIAN);
635
636
66
}
637
638
/* 0x11 STD Descriptor */
639
static int hf_mpeg_descr_std_reserved;
640
static int hf_mpeg_descr_std_leak_valid;
641
642
14
#define MPEG_DESCR_STD_RESERVED_MASK    0xFE
643
14
#define MPEG_DESCR_STD_LEAK_VALID_MASK  0x01
644
645
static void
646
proto_mpeg_descriptor_dissect_std(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
647
27
{
648
27
    proto_tree_add_item(tree, hf_mpeg_descr_std_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
649
27
    proto_tree_add_item(tree, hf_mpeg_descr_std_leak_valid, tvb, offset, 1, ENC_BIG_ENDIAN);
650
27
}
651
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;
665
666
static const value_string mpeg_descr_carousel_identifier_format_id_vals[] = {
667
    { 0x00, "No Format Specifier" },
668
    { 0x01, "Format Specifier" },
669
670
    { 0, NULL }
671
};
672
673
static void
674
proto_mpeg_descriptor_dissect_carousel_identifier(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
675
2
{
676
2
    unsigned  key_len;
677
2
    uint8_t format_id;
678
2
    unsigned  private_len = 0;
679
680
2
    proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_id, tvb, offset, 4, ENC_BIG_ENDIAN);
681
2
    offset += 4;
682
683
2
    format_id = tvb_get_uint8(tvb, offset);
684
2
    proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_format_id, tvb, offset, 1, ENC_BIG_ENDIAN);
685
2
    offset += 1;
686
687
2
    if (format_id == 0x01) {
688
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_module_version, tvb, offset, 1, ENC_BIG_ENDIAN);
689
0
        offset += 1;
690
691
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_module_id, tvb, offset, 2, ENC_BIG_ENDIAN);
692
0
        offset += 2;
693
694
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_block_size, tvb, offset, 2, ENC_BIG_ENDIAN);
695
0
        offset += 2;
696
697
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_module_size, tvb, offset, 4, ENC_BIG_ENDIAN);
698
0
        offset += 4;
699
700
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_compression_method, tvb, offset, 1, ENC_BIG_ENDIAN);
701
0
        offset += 1;
702
703
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_original_size, tvb, offset, 4, ENC_BIG_ENDIAN);
704
0
        offset += 4;
705
706
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_timeout, tvb, offset, 1, ENC_BIG_ENDIAN);
707
0
        offset += 1;
708
709
0
        key_len = tvb_get_uint8(tvb, offset);
710
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_object_key_len, tvb, offset, 1, ENC_BIG_ENDIAN);
711
0
        offset += 1;
712
713
0
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_object_key_data, tvb, offset, key_len, ENC_NA);
714
0
        offset += key_len;
715
716
0
        if (len > (key_len + 20))
717
0
            private_len = len - 20 - key_len;
718
719
2
    } else {
720
2
        if (len > 5)
721
2
            private_len = len - 5;
722
2
    }
723
724
2
    if (private_len)
725
2
        proto_tree_add_item(tree, hf_mpeg_descr_carousel_identifier_private, tvb, offset, private_len, ENC_NA);
726
727
2
}
728
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;
737
738
static void
739
proto_mpeg_descriptor_dissect_association_tag(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
740
2
{
741
2
    unsigned   end = offset + len;
742
2
    uint16_t use;
743
2
    uint8_t selector_len;
744
745
2
    proto_tree_add_item(tree, hf_mpeg_descr_association_tag, tvb, offset, 2, ENC_BIG_ENDIAN);
746
2
    offset += 2;
747
748
2
    use = tvb_get_ntohs(tvb, offset);
749
2
    proto_tree_add_item(tree, hf_mpeg_descr_association_tag_use, tvb, offset, 2, ENC_BIG_ENDIAN);
750
2
    offset += 2;
751
752
2
    selector_len = tvb_get_uint8(tvb, offset);
753
2
    proto_tree_add_item(tree, hf_mpeg_descr_association_tag_selector_len, tvb, offset, 1, ENC_BIG_ENDIAN);
754
2
    offset ++;
755
756
2
    if (use == 0x00) {
757
0
        if (selector_len != 8)
758
0
            return;
759
0
        proto_tree_add_item(tree, hf_mpeg_descr_association_tag_transaction_id, tvb, offset, 4, ENC_BIG_ENDIAN);
760
0
        offset += 4;
761
762
0
        proto_tree_add_item(tree, hf_mpeg_descr_association_tag_timeout, tvb, offset, 4, ENC_BIG_ENDIAN);
763
0
        offset += 4;
764
765
2
    } else {
766
2
        proto_tree_add_item(tree, hf_mpeg_descr_association_tag_selector_bytes, tvb, offset, selector_len, ENC_NA);
767
2
        offset += selector_len;
768
2
    }
769
770
2
    if (offset < end)
771
0
        proto_tree_add_item(tree, hf_mpeg_descr_association_tag_private_bytes, tvb, offset, end - offset, ENC_NA);
772
2
}
773
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;
784
785
14
#define MPEG_DESCR_AVC_VID_CONSTRAINT_SET0_FLAG_MASK    0x80
786
14
#define MPEG_DESCR_AVC_VID_CONSTRAINT_SET1_FLAG_MASK    0x40
787
14
#define MPEG_DESCR_AVC_VID_CONSTRAINT_SET2_FLAG_MASK    0x20
788
14
#define MPEG_DESCR_AVC_VID_COMPATIBLE_FLAGS_MASK        0x1F
789
14
#define MPEG_DESCR_AVC_VID_STILL_PRESENT_MASK           0x80
790
14
#define MPEG_DESCR_AVC_VID_24H_PICTURE_FLAG_MASK        0x40
791
14
#define MPEG_DESCR_AVC_VID_RESERVED_MASK                0x3F
792
793
static void
794
proto_mpeg_descriptor_dissect_avc_vid(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
795
11
{
796
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_profile_idc, tvb, offset, 1, ENC_BIG_ENDIAN);
797
11
    offset += 1;
798
799
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_constraint_set0_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
800
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_constraint_set1_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
801
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_constraint_set2_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
802
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_compatible_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
803
11
    offset += 1;
804
805
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_level_idc, tvb, offset, 1, ENC_BIG_ENDIAN);
806
11
    offset += 1;
807
808
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_still_present, tvb, offset, 1, ENC_BIG_ENDIAN);
809
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_24h_picture_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
810
11
    proto_tree_add_item(tree, hf_mpeg_descr_avc_vid_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
811
11
}
812
813
/* 0x40 Network Name Descriptor */
814
static int hf_mpeg_descr_network_name_encoding;
815
static int hf_mpeg_descr_network_name_descriptor;
816
817
static void
818
proto_mpeg_descriptor_dissect_network_name(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
819
28
{
820
28
    dvb_encoding_e  encoding;
821
28
    unsigned enc_len = dvb_analyze_string_charset(tvb, offset, len, &encoding);
822
28
    dvb_add_chartbl(tree, hf_mpeg_descr_network_name_encoding, tvb, offset, enc_len, encoding);
823
824
28
    proto_tree_add_item(tree, hf_mpeg_descr_network_name_descriptor, tvb, offset+enc_len, len-enc_len, dvb_enc_to_item_enc(encoding));
825
28
}
826
827
/* 0x41 Service List Descriptor */
828
static int hf_mpeg_descr_service_list_id;
829
static int hf_mpeg_descr_service_list_type;
830
831
static int ett_mpeg_descriptor_service_list;
832
833
static void
834
proto_mpeg_descriptor_dissect_service_list(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
835
22
{
836
22
    unsigned   end = offset + len;
837
22
    uint16_t svc_id;
838
839
22
    proto_tree *svc_tree;
840
841
842
362
    while (offset < end) {
843
340
        svc_id = tvb_get_ntohs(tvb, offset);
844
845
340
        svc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3,
846
340
                    ett_mpeg_descriptor_service_list, NULL, "Service 0x%02x", svc_id);
847
848
340
        proto_tree_add_item(svc_tree, hf_mpeg_descr_service_list_id, tvb, offset, 2, ENC_BIG_ENDIAN);
849
340
        offset += 2;
850
851
340
        proto_tree_add_item(svc_tree, hf_mpeg_descr_service_list_type, tvb, offset, 1, ENC_BIG_ENDIAN);
852
340
        offset += 1;
853
340
    }
854
22
}
855
856
/* 0x42 Stuffing Descriptor */
857
static int hf_mpeg_descr_stuffing;
858
859
static void
860
proto_mpeg_descriptor_stuffing(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
861
3
{
862
3
    proto_tree_add_item(tree, hf_mpeg_descr_stuffing, tvb, offset, len, ENC_NA);
863
3
}
864
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;
876
877
14
#define MPEG_DESCR_SATELLITE_DELIVERY_WEST_EAST_FLAG_MASK       0x80
878
14
#define MPEG_DESCR_SATELLITE_DELIVERY_POLARIZATION_MASK         0x60
879
14
#define MPEG_DESCR_SATELLITE_DELIVERY_ROLL_OFF_MASK             0x18
880
14
#define MPEG_DESCR_SATELLITE_DELIVERY_ZERO_MASK                 0x18
881
17
#define MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_SYSTEM_MASK    0x04
882
14
#define MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_TYPE_MASK      0x03
883
14
#define MPEG_DESCR_SATELLITE_DELIVERY_FEC_INNER_MASK            0x0F
884
885
static const value_string mpeg_descr_satellite_delivery_west_east_flag_vals[] = {
886
    { 0x0, "West" },
887
    { 0x1, "East" },
888
889
    { 0x0, NULL }
890
};
891
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" },
897
898
    { 0x0, NULL }
899
};
900
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" },
905
906
    { 0x0, NULL }
907
};
908
909
static const value_string mpeg_descr_satellite_delivery_modulation_system_vals[] = {
910
    { 0x0, "DVB-S" },
911
    { 0x1, "DVB-S2" },
912
913
    { 0x0, NULL }
914
};
915
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)" },
921
922
    { 0x0, NULL }
923
};
924
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" },
937
938
    { 0x0, NULL }
939
};
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);
942
943
static void
944
proto_mpeg_descriptor_dissect_satellite_delivery(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
945
3
{
946
947
3
    double frequency, symbol_rate;
948
3
    float orbital_position;
949
3
    uint8_t modulation_system;
950
951
3
    frequency = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 10.0 +
952
3
                MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) / 10.0 +
953
3
                MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+2)) / 1000.0 +
954
3
                MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+3)) / 100000.0;
955
3
    proto_tree_add_double(tree, hf_mpeg_descr_satellite_delivery_frequency,
956
3
            tvb, offset, 4, frequency);
957
3
    offset += 4;
958
959
3
    orbital_position = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 10.0f +
960
3
                       MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) / 10.0f;
961
3
    proto_tree_add_float(tree, hf_mpeg_descr_satellite_delivery_orbital_position,
962
3
            tvb, offset, 2, orbital_position);
963
3
    offset += 2;
964
965
3
    modulation_system = tvb_get_uint8(tvb, offset) & MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_SYSTEM_MASK;
966
967
3
    proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_west_east_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
968
3
    proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_polarization, tvb, offset, 1, ENC_BIG_ENDIAN);
969
3
    if (modulation_system)
970
1
        proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_roll_off, tvb, offset, 1, ENC_BIG_ENDIAN);
971
2
    else
972
2
        proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_zero, tvb, offset, 1, ENC_BIG_ENDIAN);
973
3
    proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_modulation_system, tvb, offset, 1, ENC_BIG_ENDIAN);
974
3
    proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_modulation_type, tvb, offset, 1, ENC_BIG_ENDIAN);
975
3
    offset += 1;
976
977
3
    symbol_rate = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 10.0 +
978
3
                  MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) / 10.0 +
979
3
                  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
3
                  MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+3)>>4) / 10000.0;
982
3
    proto_tree_add_double_format_value(tree, hf_mpeg_descr_satellite_delivery_symbol_rate,
983
3
            tvb, offset, 4, symbol_rate, "%3.4f MSym/s", symbol_rate);
984
3
    offset += 3;
985
986
3
    proto_tree_add_item(tree, hf_mpeg_descr_satellite_delivery_fec_inner, tvb, offset, 1, ENC_BIG_ENDIAN);
987
988
3
}
989
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;
997
998
14
#define MPEG_DESCR_CABLE_DELIVERY_RESERVED_MASK     0xFFF0
999
14
#define MPEG_DESCR_CABLE_DELIVERY_FEC_OUTER_MASK    0x000F
1000
14
#define MPEG_DESCR_CABLE_DELIVERY_FEC_INNER_MASK    0x0F
1001
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)" },
1006
1007
    { 0x0, NULL }
1008
};
1009
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" },
1017
1018
    { 0x0, NULL }
1019
};
1020
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" },
1033
1034
    { 0x0, NULL }
1035
};
1036
static value_string_ext mpeg_descr_cable_delivery_fec_inner_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_cable_delivery_fec_inner_vals);
1037
1038
static void
1039
2
proto_mpeg_descriptor_dissect_cable_delivery(tvbuff_t *tvb, unsigned offset, proto_tree *tree) {
1040
1041
2
    double frequency, symbol_rate;
1042
1043
2
    frequency = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 100.0 +
1044
2
                MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) +
1045
2
                MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+2)) / 100.0 +
1046
2
                MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+3)) / 10000.0;
1047
2
    proto_tree_add_double_format_value(tree, hf_mpeg_descr_cable_delivery_frequency,
1048
2
            tvb, offset, 4, frequency, "%4.4f MHz", frequency);
1049
2
    offset += 4;
1050
1051
2
    proto_tree_add_item(tree, hf_mpeg_descr_cable_delivery_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
1052
2
    proto_tree_add_item(tree, hf_mpeg_descr_cable_delivery_fec_outer, tvb, offset, 2, ENC_BIG_ENDIAN);
1053
2
    offset += 2;
1054
1055
2
    proto_tree_add_item(tree, hf_mpeg_descr_cable_delivery_modulation, tvb, offset, 1, ENC_BIG_ENDIAN);
1056
2
    offset += 1;
1057
1058
2
    symbol_rate = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset)) * 10.0 +
1059
2
                  MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1)) / 10.0 +
1060
2
                  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
2
                  MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+3)>>4) / 10000.0;
1063
2
    proto_tree_add_double_format_value(tree, hf_mpeg_descr_cable_delivery_symbol_rate,
1064
2
            tvb, offset, 4, symbol_rate, "%3.4f MSymbol/s", symbol_rate);
1065
2
    offset += 3;
1066
2
    proto_tree_add_item(tree, hf_mpeg_descr_cable_delivery_fec_inner, tvb, offset, 1, ENC_BIG_ENDIAN);
1067
1068
1069
2
}
1070
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;
1078
1079
14
#define MPEG_DESCR_VBI_DATA_RESERVED1_MASK  0xC0
1080
14
#define MPEG_DESCR_VBI_DATA_FIELD_PARITY_MASK   0x20
1081
#define MPEG_DESCR_VBI_DATA_LINE_OFFSET_MASK    0x1F
1082
1083
static int ett_mpeg_descriptor_vbi_data_service;
1084
1085
static const value_string mpeg_descr_vbi_data_service_id_vals[] = {
1086
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" },
1095
1096
    { 0, NULL }
1097
};
1098
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" },
1102
1103
    { 0, NULL }
1104
};
1105
1106
static void
1107
proto_mpeg_descriptor_dissect_vbi_data(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1108
9
{
1109
1110
9
    uint8_t svc_id, svc_len;
1111
9
    unsigned  end = offset + len, svc_end;
1112
1113
9
    proto_tree *svc_tree;
1114
1115
36
    while (offset < end) {
1116
32
        svc_id  = tvb_get_uint8(tvb, offset);
1117
32
        svc_len = tvb_get_uint8(tvb, offset + 1);
1118
32
        svc_tree = proto_tree_add_subtree_format(tree, tvb, offset, svc_len + 2,
1119
32
                    ett_mpeg_descriptor_vbi_data_service, NULL, "Service 0x%02x", svc_id);
1120
1121
32
        proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_service_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1122
32
        offset += 1;
1123
1124
32
        proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_descr_len, tvb, offset, 1, ENC_BIG_ENDIAN);
1125
32
        offset += 1;
1126
1127
32
        switch (svc_id) {
1128
0
            case 0x01:
1129
0
            case 0x02:
1130
0
            case 0x04:
1131
1
            case 0x05:
1132
1
            case 0x06:
1133
1
            case 0x07:
1134
1
                svc_end = offset + svc_len;
1135
70
                while (offset < svc_end) {
1136
69
                    proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_reserved1, tvb, offset, 1, ENC_BIG_ENDIAN);
1137
69
                    proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_field_parity, tvb, offset, 1, ENC_BIG_ENDIAN);
1138
69
                    proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_line_offset, tvb, offset, 1, ENC_BIG_ENDIAN);
1139
69
                    offset += 1;
1140
69
                }
1141
1
                break;
1142
31
            default:
1143
31
                proto_tree_add_item(svc_tree, hf_mpeg_descr_vbi_data_reserved2, tvb, offset, svc_len, ENC_NA);
1144
31
                offset += svc_len;
1145
31
                break;
1146
32
        }
1147
1148
32
    }
1149
9
}
1150
1151
/* 0x47 Bouquet Name Descriptor */
1152
static int hf_mpeg_descr_bouquet_name_encoding;
1153
static int hf_mpeg_descr_bouquet_name;
1154
1155
static void
1156
proto_mpeg_descriptor_dissect_bouquet_name(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1157
4
{
1158
4
    dvb_encoding_e  encoding;
1159
4
    unsigned enc_len = dvb_analyze_string_charset(tvb, offset, len, &encoding);
1160
4
    dvb_add_chartbl(tree, hf_mpeg_descr_bouquet_name_encoding, tvb, offset, enc_len, encoding);
1161
1162
4
    proto_tree_add_item(tree, hf_mpeg_descr_bouquet_name, tvb, offset+enc_len, len-enc_len, dvb_enc_to_item_enc(encoding));
1163
4
}
1164
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;
1173
1174
static const value_string mpeg_descr_service_type_vals[] = {
1175
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." },
1206
1207
    { 0x00, NULL }
1208
};
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);
1211
1212
static void
1213
proto_mpeg_descriptor_dissect_service(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1214
2
{
1215
2
    uint8_t         prov_len, name_len;
1216
2
    unsigned        enc_len;
1217
2
    dvb_encoding_e  encoding;
1218
1219
2
    proto_tree_add_item(tree, hf_mpeg_descr_service_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1220
2
    offset += 1;
1221
1222
2
    prov_len = tvb_get_uint8(tvb, offset);
1223
2
    proto_tree_add_item(tree, hf_mpeg_descr_service_provider_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1224
2
    offset += 1;
1225
1226
2
    if (prov_len>0) {
1227
2
        enc_len = dvb_analyze_string_charset(tvb, offset, prov_len, &encoding);
1228
2
        dvb_add_chartbl(tree, hf_mpeg_descr_service_provider_name_encoding, tvb, offset, enc_len, encoding);
1229
1230
2
        proto_tree_add_item(tree, hf_mpeg_descr_service_provider,
1231
2
                tvb, offset+enc_len, prov_len-enc_len, dvb_enc_to_item_enc(encoding));
1232
2
    }
1233
2
    offset += prov_len;
1234
1235
2
    name_len = tvb_get_uint8(tvb, offset);
1236
2
    proto_tree_add_item(tree, hf_mpeg_descr_service_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1237
2
    offset += 1;
1238
1239
2
    if (name_len>0) {
1240
2
        enc_len = dvb_analyze_string_charset(tvb, offset, name_len, &encoding);
1241
2
        dvb_add_chartbl(tree, hf_mpeg_descr_service_name_encoding, tvb, offset, enc_len, encoding);
1242
1243
2
        proto_tree_add_item(tree, hf_mpeg_descr_service_name,
1244
2
                tvb, offset+enc_len, name_len-enc_len, dvb_enc_to_item_enc(encoding));
1245
2
    }
1246
1247
2
}
1248
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;
1253
1254
static int ett_mpeg_descriptor_country_availability_countries;
1255
1256
14
#define MPEG_DESCR_COUNTRY_AVAILABILITY_FLAG_MASK           0x80
1257
14
#define MPEG_DESCR_COUNTRY_AVAILABILITY_RESERVED_MASK       0x7F
1258
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" },
1262
1263
    { 0x0, NULL }
1264
};
1265
1266
static void
1267
proto_mpeg_descriptor_dissect_country_availability_descriptor(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1268
7
{
1269
7
    unsigned end = offset+len;
1270
1271
7
    proto_tree *countries_tree;
1272
1273
7
    proto_tree_add_item(tree, hf_mpeg_descr_country_availability_flag , tvb, offset, 1, ENC_BIG_ENDIAN);
1274
7
    proto_tree_add_item(tree, hf_mpeg_descr_country_availability_reserved_future_use , tvb, offset, 1, ENC_BIG_ENDIAN);
1275
7
    offset += 1;
1276
1277
7
    countries_tree = proto_tree_add_subtree_format(tree, tvb, offset, end - offset, ett_mpeg_descriptor_country_availability_countries, NULL, "Countries");
1278
1279
175
    while (offset < end) {
1280
168
        proto_tree_add_item(countries_tree, hf_mpeg_descr_country_availability_country_code, tvb, offset, 3, ENC_ASCII);
1281
168
        offset += 3;
1282
168
    }
1283
7
}
1284
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;
1290
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;
1296
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;
1301
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;
1307
1308
static int hf_mpeg_descr_linkage_private_data_byte;
1309
1310
static int ett_mpeg_descriptor_linkage_population_id;
1311
1312
14
#define MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_MASK  0xF0
1313
0
#define MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_SHIFT 0x04
1314
14
#define MPEG_DESCR_LINKAGE_RESERVED1_MASK   0x0E
1315
0
#define MPEG_DESCR_LINKAGE_ORIGIN_TYPE_MASK 0x01
1316
1317
14
#define MPEG_DESCR_LINKAGE_TARGET_LISTED_MASK   0x80
1318
14
#define MPEG_DESCR_LINKAGE_EVENT_SIMULCAST_MASK 0x40
1319
14
#define MPEG_DESCR_LINKAGE_RESERVED2_MASK   0x3F
1320
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" },
1336
1337
    { 0x00, NULL }
1338
};
1339
static value_string_ext mpeg_descr_linkage_linkage_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_linkage_linkage_type_vals);
1340
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" },
1346
1347
    { 0x00, NULL }
1348
};
1349
#endif
1350
1351
static const value_string mpeg_descr_linkage_origin_type_vals[] = {
1352
    { 0x0, "NIT" },
1353
    { 0x1, "SDT" },
1354
1355
    { 0x0, NULL }
1356
};
1357
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" },
1361
1362
    { 0x0, NULL}
1363
};
1364
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" },
1368
1369
    { 0x0, NULL }
1370
};
1371
1372
static void
1373
proto_mpeg_descriptor_dissect_linkage(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1374
12
{
1375
1376
12
    uint8_t linkage_type, hand_over_type, origin_type;
1377
12
    unsigned   end = offset + len;
1378
12
    unsigned   population_id_loop_count;
1379
12
    uint16_t population_id_base, population_id_mask;
1380
1381
12
    proto_item *pi;
1382
12
    proto_tree *population_tree;
1383
1384
12
    proto_tree_add_item(tree, hf_mpeg_descr_linkage_transport_stream_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1385
12
    offset += 2;
1386
1387
12
    proto_tree_add_item(tree, hf_mpeg_descr_linkage_original_network_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1388
12
    offset += 2;
1389
1390
12
    proto_tree_add_item(tree, hf_mpeg_descr_linkage_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1391
12
    offset += 2;
1392
1393
12
    proto_tree_add_item(tree, hf_mpeg_descr_linkage_linkage_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1394
12
    linkage_type = tvb_get_uint8(tvb, offset);
1395
12
    offset += 1;
1396
1397
12
    if (linkage_type == 0x08) {
1398
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_hand_over_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1399
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_reserved1, tvb, offset, 1, ENC_BIG_ENDIAN);
1400
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_origin_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1401
0
        hand_over_type = (tvb_get_uint8(tvb, offset) & MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_MASK) >> MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_SHIFT;
1402
0
        origin_type = tvb_get_uint8(tvb, offset) & MPEG_DESCR_LINKAGE_ORIGIN_TYPE_MASK;
1403
0
        offset += 1;
1404
1405
0
        if ((hand_over_type == 1) || (hand_over_type == 2) || (hand_over_type == 3)) {
1406
0
            proto_tree_add_item(tree, hf_mpeg_descr_linkage_network_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1407
0
            offset += 2;
1408
0
        }
1409
1410
0
        if (origin_type) {
1411
0
            proto_tree_add_item(tree, hf_mpeg_descr_linkage_initial_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1412
0
            offset += 2;
1413
0
        }
1414
1415
12
    } else if (linkage_type == 0x0D) {
1416
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_target_event_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1417
0
        offset += 2;
1418
1419
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_target_listed, tvb, offset, 1, ENC_BIG_ENDIAN);
1420
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_event_simulcast, tvb, offset, 1, ENC_BIG_ENDIAN);
1421
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_reserved2, tvb, offset, 1, ENC_BIG_ENDIAN);
1422
12
    } 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
0
        if (offset+7>end)
1428
0
            return;
1429
1430
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_interactive_network_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1431
0
        offset += 2;
1432
1433
0
        population_id_loop_count = tvb_get_uint8(tvb, offset) + 1;
1434
0
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_population_id_loop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
1435
0
        offset += 1;
1436
1437
0
        while (population_id_loop_count--) {
1438
0
            population_id_base = tvb_get_ntohs(tvb, offset);
1439
0
            population_id_mask = tvb_get_ntohs(tvb, offset + 2);
1440
0
            pi = proto_tree_add_uint_format_value(tree, hf_mpeg_descr_linkage_population_id, tvb, offset, 4,
1441
0
                    population_id_base<<16|population_id_mask,
1442
0
                    "0x%04x / 0x%04x", population_id_base, population_id_mask);
1443
0
            population_tree = proto_item_add_subtree(pi, ett_mpeg_descriptor_linkage_population_id);
1444
1445
0
            proto_tree_add_item(population_tree, hf_mpeg_descr_linkage_population_id_base, tvb, offset, 2, ENC_BIG_ENDIAN);
1446
0
            offset += 2;
1447
1448
0
            proto_tree_add_item(population_tree, hf_mpeg_descr_linkage_population_id_mask, tvb, offset, 2, ENC_BIG_ENDIAN);
1449
0
            offset += 2;
1450
0
        }
1451
1452
0
    }
1453
1454
12
    if (end - offset > 0)
1455
12
        proto_tree_add_item(tree, hf_mpeg_descr_linkage_private_data_byte, tvb, offset, end - offset, ENC_NA);
1456
12
}
1457
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;
1462
1463
static int ett_mpeg_descriptor_nvod_reference_triplet;
1464
1465
static void
1466
proto_mpeg_descriptor_dissect_nvod_reference(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1467
5
{
1468
5
    unsigned end = offset + len;
1469
1470
5
    proto_tree * triplet_tree;
1471
1472
60
    while (offset < end) {
1473
55
        unsigned tsid = tvb_get_uint16(tvb, offset + 0, ENC_BIG_ENDIAN);
1474
55
        unsigned onid = tvb_get_uint16(tvb, offset + 2, ENC_BIG_ENDIAN);
1475
55
        unsigned sid  = tvb_get_uint16(tvb, offset + 4, ENC_BIG_ENDIAN);
1476
1477
55
        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);
1478
1479
55
        proto_tree_add_item(triplet_tree, hf_mpeg_descr_nvod_reference_tsid, tvb, offset, 2, ENC_BIG_ENDIAN);
1480
55
        offset += 2;
1481
1482
55
        proto_tree_add_item(triplet_tree, hf_mpeg_descr_nvod_reference_onid, tvb, offset, 2, ENC_BIG_ENDIAN);
1483
55
        offset += 2;
1484
1485
55
        proto_tree_add_item(triplet_tree, hf_mpeg_descr_nvod_reference_sid,  tvb, offset, 2, ENC_BIG_ENDIAN);
1486
55
        offset += 2;
1487
55
    }
1488
5
}
1489
1490
/* 0x4C Time Shifted Service Descriptor */
1491
static int hf_mpeg_descr_time_shifted_service_id;
1492
1493
static void
1494
proto_mpeg_descriptor_dissect_time_shifted_service(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1495
3
{
1496
3
    proto_tree_add_item(tree, hf_mpeg_descr_time_shifted_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1497
3
}
1498
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;
1507
1508
static void
1509
proto_mpeg_descriptor_dissect_short_event(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1510
18
{
1511
18
    uint8_t         name_len, text_len;
1512
18
    unsigned        enc_len;
1513
18
    dvb_encoding_e  encoding;
1514
1515
18
    proto_tree_add_item(tree, hf_mpeg_descr_short_event_lang_code, tvb, offset, 3, ENC_ASCII);
1516
18
    offset += 3;
1517
1518
18
    name_len = tvb_get_uint8(tvb, offset);
1519
18
    proto_tree_add_item(tree, hf_mpeg_descr_short_event_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1520
18
    offset += 1;
1521
1522
18
    if (name_len>0) {
1523
17
        enc_len = dvb_analyze_string_charset(tvb, offset, name_len, &encoding);
1524
17
        dvb_add_chartbl(tree, hf_mpeg_descr_short_event_name_encoding, tvb, offset, enc_len, encoding);
1525
17
        proto_tree_add_item(tree, hf_mpeg_descr_short_event_name,
1526
17
                tvb, offset+enc_len, name_len-enc_len, dvb_enc_to_item_enc(encoding));
1527
17
    }
1528
18
    offset += name_len;
1529
1530
18
    text_len = tvb_get_uint8(tvb, offset);
1531
18
    proto_tree_add_item(tree, hf_mpeg_descr_short_event_text_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1532
18
    offset += 1;
1533
1534
18
    if (text_len>0) {
1535
7
        enc_len = dvb_analyze_string_charset(tvb, offset, text_len, &encoding);
1536
7
        dvb_add_chartbl(tree, hf_mpeg_descr_short_event_text_encoding, tvb, offset, enc_len, encoding);
1537
7
        proto_tree_add_item(tree, hf_mpeg_descr_short_event_text,
1538
7
                tvb, offset+enc_len, text_len-enc_len, dvb_enc_to_item_enc(encoding));
1539
7
    }
1540
18
}
1541
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;
1554
1555
14
#define MPEG_DESCR_EXTENDED_EVENT_DESCRIPTOR_NUMBER_MASK    0xF0
1556
14
#define MPEG_DESCR_EXTENDED_EVENT_LAST_DESCRIPTOR_NUMBER_MASK   0x0F
1557
1558
static int ett_mpeg_descriptor_extended_event_item;
1559
1560
static void
1561
proto_mpeg_descriptor_dissect_extended_event(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1562
3
{
1563
1564
3
    uint8_t         items_len, item_descr_len, item_len, text_len;
1565
3
    unsigned        items_end;
1566
3
    proto_tree     *item_tree;
1567
3
    unsigned        enc_len;
1568
3
    dvb_encoding_e  encoding;
1569
1570
3
    proto_tree_add_item(tree, hf_mpeg_descr_extended_event_descriptor_number, tvb, offset, 1, ENC_BIG_ENDIAN);
1571
3
    proto_tree_add_item(tree, hf_mpeg_descr_extended_event_last_descriptor_number, tvb, offset, 1, ENC_BIG_ENDIAN);
1572
3
    offset += 1;
1573
1574
3
    proto_tree_add_item(tree, hf_mpeg_descr_extended_event_lang_code, tvb, offset, 3, ENC_ASCII);
1575
3
    offset += 3;
1576
1577
3
    items_len = tvb_get_uint8(tvb, offset);
1578
3
    proto_tree_add_item(tree, hf_mpeg_descr_extended_event_length_of_items, tvb, offset, 1, ENC_BIG_ENDIAN);
1579
3
    offset += 1;
1580
1581
3
    items_end = offset + items_len;
1582
1583
11
    while (offset < items_end) {
1584
8
        item_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_mpeg_descriptor_extended_event_item, NULL, "Item");
1585
1586
8
        item_descr_len = tvb_get_uint8(tvb, offset);
1587
8
        proto_tree_add_item(item_tree, hf_mpeg_descr_extended_event_item_description_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1588
8
        offset += 1;
1589
1590
8
        proto_tree_add_item(item_tree, hf_mpeg_descr_extended_event_item_description_char, tvb, offset, item_descr_len, ENC_ASCII);
1591
8
        offset += item_descr_len;
1592
1593
8
        item_len = tvb_get_uint8(tvb, offset);
1594
8
        proto_tree_add_item(item_tree, hf_mpeg_descr_extended_event_item_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1595
8
        offset += 1;
1596
1597
8
        proto_tree_add_item(item_tree, hf_mpeg_descr_extended_event_item_char, tvb, offset, item_len, ENC_ASCII);
1598
8
        offset += item_len;
1599
8
    }
1600
1601
3
    text_len = tvb_get_uint8(tvb, offset);
1602
3
    proto_tree_add_item(tree, hf_mpeg_descr_extended_event_text_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1603
3
    offset += 1;
1604
1605
3
    if (text_len>0) {
1606
1
        enc_len = dvb_analyze_string_charset(tvb, offset, text_len, &encoding);
1607
1
        dvb_add_chartbl(tree, hf_mpeg_descr_extended_event_text_encoding, tvb, offset, enc_len, encoding);
1608
1
        proto_tree_add_item(tree, hf_mpeg_descr_extended_event_text,
1609
1
                tvb, offset+enc_len, text_len-enc_len, dvb_enc_to_item_enc(encoding));
1610
1
    }
1611
1612
3
}
1613
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;
1617
1618
static void
1619
proto_mpeg_descriptor_dissect_time_shifted_event(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
1620
5
{
1621
5
    proto_tree_add_item(tree, hf_mpeg_descr_time_shifted_event_reference_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1622
5
    offset += 2;
1623
1624
5
    proto_tree_add_item(tree, hf_mpeg_descr_time_shifted_event_reference_event_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1625
5
}
1626
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;
1636
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;
1642
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;
1650
1651
14
#define MPEG_DESCR_COMPONENT_STREAM_CONTENT_EXT_MASK      0xF0
1652
14
#define MPEG_DESCR_COMPONENT_STREAM_CONTENT_MASK    0x0F
1653
14
#define MPEG_DESCR_COMPONENT_CONTENT_TYPE_MASK      0x0FFF
1654
1655
14
#define MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_EXT_MASK       0xF000
1656
14
#define MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_MASK           0x0F00
1657
14
#define MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_BOTH_MASK      0xFF00
1658
14
#define MPEG_DESCR_COMPONENT_HIGH_COMPONENT_TYPE_MASK           0x00FF
1659
14
#define MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_N_COMPONENT_TYPE_MASK      0xFFFF
1660
1661
14
#define MPEG_DESCR_COMPONENT_NGA_BITS_B7_MASK    0x0080
1662
14
#define MPEG_DESCR_COMPONENT_NGA_BITS_B6_MASK    0x0040
1663
14
#define MPEG_DESCR_COMPONENT_NGA_BITS_B5_MASK    0x0020
1664
14
#define MPEG_DESCR_COMPONENT_NGA_BITS_B4_MASK    0x0010
1665
14
#define MPEG_DESCR_COMPONENT_NGA_BITS_B3_MASK    0x0008
1666
14
#define MPEG_DESCR_COMPONENT_NGA_BITS_B2_MASK    0x0004
1667
14
#define MPEG_DESCR_COMPONENT_NGA_BITS_B10_MASK   0x0003
1668
1669
static int ett_mpeg_descriptor_component_content_type;
1670
1671
static const value_string mpeg_descr_component_stream_content_vals[] = {
1672
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)" },
1680
1681
    { 0x0, NULL }
1682
};
1683
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"},
1690
1691
    { 0x0, NULL }
1692
};
1693
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" },
1699
1700
    { 0x0, NULL }
1701
};
1702
1703
static const value_string mpeg_descr_component_content_type_vals[] = {
1704
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" },
1788
1789
    { 0x0, NULL }
1790
};
1791
static value_string_ext mpeg_descr_component_content_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_component_content_type_vals);
1792
1793
static const value_string mpeg_descr_component_high_content_type_vals[] = {
1794
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" },
1851
1852
    { 0x0, NULL }
1853
};
1854
static value_string_ext mpeg_descr_component_high_content_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_component_high_content_type_vals);
1855
1856
static void
1857
proto_mpeg_descriptor_dissect_component(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
1858
7
{
1859
1860
7
    proto_item *cti;
1861
7
    proto_tree *content_type_tree;
1862
7
    unsigned end = offset + len;
1863
1864
7
    if (len < 6) {
1865
0
        return;
1866
0
    }
1867
1868
7
    unsigned stream_content     = tvb_get_bits8(tvb, offset * 8 + 4, 4);
1869
1870
7
    if (stream_content >= 0x09) {
1871
4
        unsigned stream_content_ext = tvb_get_bits8(tvb, offset * 8, 4);
1872
1873
4
        cti = proto_tree_add_item(tree, hf_mpeg_descr_component_high_stream_content_n_component_type, tvb, offset, 2, ENC_BIG_ENDIAN);
1874
4
        content_type_tree = proto_item_add_subtree(cti, ett_mpeg_descriptor_component_content_type);
1875
1876
4
        proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_high_stream_content_both, tvb, offset, 2, ENC_BIG_ENDIAN);
1877
4
        proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_high_stream_content_ext, tvb, offset, 2, ENC_BIG_ENDIAN);
1878
4
        proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_high_stream_content, tvb, offset, 2, ENC_BIG_ENDIAN);
1879
1880
4
        if (stream_content_ext == 0x0E && stream_content == 0x0B) {
1881
0
            proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b7_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
1882
0
            proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b6_headphones, tvb, offset, 2, ENC_BIG_ENDIAN);
1883
0
            proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b5_interactivity, tvb, offset, 2, ENC_BIG_ENDIAN);
1884
0
            proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b4_dialogue_enhancement, tvb, offset, 2, ENC_BIG_ENDIAN);
1885
0
            proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b3_spoken_subtitles, tvb, offset, 2, ENC_BIG_ENDIAN);
1886
0
            proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b2_audio_description, tvb, offset, 2, ENC_BIG_ENDIAN);
1887
0
            proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_nga_bits_b10_channel_layout, tvb, offset, 2, ENC_BIG_ENDIAN);
1888
4
        } else {
1889
4
            proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_high_component_type, tvb, offset, 2, ENC_BIG_ENDIAN);
1890
4
        }
1891
4
        offset += 2;
1892
4
        goto mpeg_descr_component_tail;
1893
4
    }
1894
1895
3
    proto_tree_add_item(tree, hf_mpeg_descr_component_stream_content_ext, tvb, offset, 1, ENC_BIG_ENDIAN);
1896
1897
3
    cti = proto_tree_add_item(tree, hf_mpeg_descr_component_content_type, tvb, offset, 2, ENC_BIG_ENDIAN);
1898
3
    content_type_tree = proto_item_add_subtree(cti, ett_mpeg_descriptor_component_content_type);
1899
1900
3
    proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_stream_content, tvb, offset, 1, ENC_BIG_ENDIAN);
1901
3
    offset += 1;
1902
1903
3
    proto_tree_add_item(content_type_tree, hf_mpeg_descr_component_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1904
3
    offset += 1;
1905
1906
7
mpeg_descr_component_tail:
1907
1908
7
    proto_tree_add_item(tree, hf_mpeg_descr_component_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
1909
7
    offset += 1;
1910
1911
7
    proto_tree_add_item(tree, hf_mpeg_descr_component_lang_code, tvb, offset, 3, ENC_ASCII);
1912
7
    offset += 3;
1913
1914
7
    if (offset < end)
1915
7
    {
1916
7
        dvb_encoding_e  encoding;
1917
7
        unsigned enc_len = dvb_analyze_string_charset(tvb, offset, end - offset, &encoding);
1918
7
        dvb_add_chartbl(tree, hf_mpeg_descr_component_text_encoding, tvb, offset, enc_len, encoding);
1919
1920
7
        proto_tree_add_item(tree, hf_mpeg_descr_component_text, tvb, offset+enc_len, end-offset-enc_len, dvb_enc_to_item_enc(encoding));
1921
7
    }
1922
7
}
1923
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;
1941
1942
14
#define MPEG_DESCR_MOSAIC_ENTRY_POINT_MASK              0x80
1943
14
#define MPEG_DESCR_MOSAIC_NUM_OF_H_CELLS_MASK           0x70
1944
14
#define MPEG_DESCR_MOSAIC_RESERVED1_MASK                0x08
1945
14
#define MPEG_DESCR_MOSAIC_NUM_OF_V_CELLS_MASK           0x07
1946
14
#define MPEG_DESCR_MOSAIC_LOGICAL_CELL_ID_MASK          0xFC00
1947
14
#define MPEG_DESCR_MOSAIC_RESERVED2_MASK                0x03F8
1948
14
#define MPEG_DESCR_MOSAIC_CELL_PRESENTATION_INFO_MASK   0x0007
1949
14
#define MPEG_DESCR_MOSAIC_RESERVED3_MASK                0xC0
1950
14
#define MPEG_DESCR_MOSAIC_ELEMENTARY_CELL_ID_MASK       0x3F
1951
1952
static int ett_mpeg_descriptor_mosaic_logical_cell;
1953
static int ett_mpeg_descriptor_mosaic_elementary_cells;
1954
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" },
1964
1965
    { 0, NULL }
1966
};
1967
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" },
1974
1975
    { 0x00, 0x00, NULL }
1976
};
1977
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" },
1985
1986
    { 0x00, 0x00, NULL }
1987
};
1988
1989
static unsigned
1990
proto_mpeg_descriptor_dissect_mosaic_measure_l_cell_len(tvbuff_t *tvb, unsigned offset)
1991
83
{
1992
83
    unsigned l_offset = offset;
1993
1994
83
    l_offset += 2;
1995
83
    uint8_t elementary_cell_field_length = tvb_get_uint8(tvb, l_offset);
1996
83
    l_offset += 1;
1997
83
    l_offset += elementary_cell_field_length;
1998
1999
83
    uint8_t cell_linkage_info = tvb_get_uint8(tvb, l_offset);
2000
83
    l_offset += 1;
2001
2002
83
    switch (cell_linkage_info) {
2003
20
        case 0x01 :
2004
20
            l_offset += 2;
2005
20
            break;
2006
19
        case 0x02 :
2007
19
        case 0x03 :
2008
19
            l_offset += 6;
2009
19
            break;
2010
0
        case 0x04 :
2011
0
            l_offset += 8;
2012
0
            break;
2013
83
    }
2014
2015
75
    return l_offset - offset;
2016
83
}
2017
2018
static void
2019
proto_mpeg_descriptor_dissect_mosaic(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2020
17
{
2021
17
    unsigned end = offset + len;
2022
2023
17
    proto_tree_add_item(tree, hf_mpeg_descr_mosaic_mosaic_entry_point, tvb, offset, 1, ENC_BIG_ENDIAN);
2024
17
    proto_tree_add_item(tree, hf_mpeg_descr_mosaic_number_of_horizontal_elementary_cells, tvb, offset, 1, ENC_BIG_ENDIAN);
2025
17
    proto_tree_add_item(tree, hf_mpeg_descr_mosaic_reserved_future_use1, tvb, offset, 1, ENC_BIG_ENDIAN);
2026
17
    proto_tree_add_item(tree, hf_mpeg_descr_mosaic_number_of_vertical_elementary_cells, tvb, offset, 1, ENC_BIG_ENDIAN);
2027
17
    offset += 1;
2028
2029
92
    while (offset < end) {
2030
83
        unsigned l_cell_len = proto_mpeg_descriptor_dissect_mosaic_measure_l_cell_len(tvb, offset);
2031
2032
83
        uint8_t logical_cell_id = tvb_get_bits(tvb, offset*8, 6, ENC_BIG_ENDIAN);
2033
83
        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
83
        proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_logical_cell_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2035
83
        proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_reserved_future_use2, tvb, offset, 2, ENC_BIG_ENDIAN);
2036
83
        proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_logical_cell_presentation_info, tvb, offset, 2, ENC_BIG_ENDIAN);
2037
83
        offset += 2;
2038
2039
83
        uint8_t elementary_cell_field_length = tvb_get_uint8(tvb, offset);
2040
83
        proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_elementary_cell_field_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2041
83
        offset += 1;
2042
2043
83
        proto_tree *field_tree = NULL;
2044
83
        if (elementary_cell_field_length > 0) {
2045
52
            field_tree = proto_tree_add_subtree(cell_tree, tvb, offset, elementary_cell_field_length, ett_mpeg_descriptor_mosaic_elementary_cells, NULL, "Elementary Cells");
2046
52
        }
2047
1.17k
        while (elementary_cell_field_length > 0) {
2048
1.08k
            proto_tree_add_item(field_tree, hf_mpeg_descr_mosaic_reserved_future_use3, tvb, offset, 1, ENC_BIG_ENDIAN);
2049
1.08k
            proto_tree_add_item(field_tree, hf_mpeg_descr_mosaic_elementary_cell_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2050
1.08k
            offset += 1;
2051
1.08k
            elementary_cell_field_length -= 1;
2052
1.08k
        }
2053
2054
83
        uint8_t cell_linkage_info = tvb_get_uint8(tvb, offset);
2055
83
        proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_cell_linkage_info, tvb, offset, 1, ENC_BIG_ENDIAN);
2056
83
        offset += 1;
2057
2058
83
        switch (cell_linkage_info) {
2059
20
            case 0x01 :
2060
20
                proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_bouquet_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2061
20
                offset += 2;
2062
20
                break;
2063
19
            case 0x02 :
2064
19
            case 0x03 :
2065
19
            case 0x04 :
2066
19
                proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_original_network_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2067
19
                offset += 2;
2068
2069
19
                proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_transport_stream_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2070
19
                offset += 2;
2071
2072
19
                proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2073
19
                offset += 2;
2074
19
                break;
2075
83
        }
2076
2077
75
        if (cell_linkage_info == 0x04) {
2078
0
            proto_tree_add_item(cell_tree, hf_mpeg_descr_mosaic_event_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2079
0
            offset += 2;
2080
0
        }
2081
75
    }
2082
17
}
2083
2084
/* 0x52 Stream Identifier Descriptor */
2085
static int hf_mpeg_descr_stream_identifier_component_tag;
2086
2087
static void
2088
proto_mpeg_descriptor_dissect_stream_identifier(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
2089
3
{
2090
3
    proto_tree_add_item(tree, hf_mpeg_descr_stream_identifier_component_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
2091
3
}
2092
2093
/* 0x53 CA Identifier Descriptor */
2094
static int hf_mpeg_descr_ca_identifier_system_id;
2095
2096
static void
2097
proto_mpeg_descriptor_dissect_ca_identifier(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2098
43
{
2099
43
    unsigned end = offset + len;
2100
2101
1.41k
    while (offset < end) {
2102
1.37k
        proto_tree_add_item(tree, hf_mpeg_descr_ca_identifier_system_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2103
1.37k
        offset += 2;
2104
1.37k
    }
2105
2106
43
}
2107
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;
2113
2114
14
#define MPEG_DESCR_CONTENT_NIBBLE_LEVEL_1_MASK  0xF0
2115
14
#define MPEG_DESCR_CONTENT_NIBBLE_LEVEL_2_MASK  0x0F
2116
2117
static int ett_mpeg_descriptor_content_nibble;
2118
2119
static const value_string mpeg_descr_content_nibble_vals[] = {
2120
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)" },
2131
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)" },
2138
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)" },
2144
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)" },
2158
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)" },
2166
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)" },
2175
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)" },
2189
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)" },
2195
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)" },
2205
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)" },
2215
2216
    { 0xB0, "original language" },
2217
    { 0xB1, "black and white" },
2218
    { 0xB2, "unpublished" },
2219
    { 0xB3, "live broadcast" },
2220
    { 0xBF, "user defined (special characteristics)" },
2221
2222
    { 0x00, NULL }
2223
};
2224
static value_string_ext mpeg_descr_content_nibble_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_content_nibble_vals);
2225
2226
static const value_string mpeg_descr_content_nibble_level_1_vals[] = {
2227
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" },
2239
2240
    { 0x00, NULL }
2241
};
2242
static value_string_ext mpeg_descr_content_nibble_level_1_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_content_nibble_level_1_vals);
2243
2244
static void
2245
proto_mpeg_descriptor_dissect_content(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2246
16
{
2247
16
    proto_item *ni;
2248
16
    proto_tree *nibble_tree;
2249
2250
16
    unsigned end = offset + len;
2251
2252
585
    while (offset < end) {
2253
569
        ni = proto_tree_add_item(tree, hf_mpeg_descr_content_nibble, tvb, offset, 1, ENC_BIG_ENDIAN);
2254
569
        nibble_tree = proto_item_add_subtree(ni, ett_mpeg_descriptor_content_nibble);
2255
2256
569
        proto_tree_add_item(nibble_tree, hf_mpeg_descr_content_nibble_level_1, tvb, offset, 1, ENC_BIG_ENDIAN);
2257
569
        proto_tree_add_item(nibble_tree, hf_mpeg_descr_content_nibble_level_2, tvb, offset, 1, ENC_BIG_ENDIAN);
2258
569
        offset += 1;
2259
2260
569
        proto_tree_add_item(tree, hf_mpeg_descr_content_user_byte, tvb, offset, 1, ENC_BIG_ENDIAN);
2261
569
        offset += 1;
2262
569
    }
2263
2264
16
}
2265
2266
/* 0x55 Parental Rating Descriptor */
2267
static int hf_mpeg_descr_parental_rating_country_code;
2268
static int hf_mpeg_descr_parental_rating_rating;
2269
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" },
2287
2288
    { 0x00, NULL }
2289
};
2290
static value_string_ext mpeg_descr_parental_rating_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_parental_rating_vals);
2291
2292
2293
static void
2294
proto_mpeg_descriptor_dissect_parental_rating(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
2295
3
{
2296
3
    proto_tree_add_item(tree, hf_mpeg_descr_parental_rating_country_code, tvb, offset, 3, ENC_ASCII);
2297
3
    offset += 3;
2298
2299
3
    proto_tree_add_item(tree, hf_mpeg_descr_parental_rating_rating, tvb, offset, 1, ENC_BIG_ENDIAN);
2300
3
}
2301
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;
2307
2308
14
#define MPEG_DESCR_TELETEXT_TYPE_MASK           0xF8
2309
14
#define MPEG_DESCR_TELETEXT_MAGAZINE_NUMBER_MASK    0x07
2310
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" },
2318
2319
    { 0, NULL }
2320
2321
};
2322
2323
static void
2324
proto_mpeg_descriptor_dissect_teletext(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2325
7
{
2326
7
    unsigned end = offset + len;
2327
2328
92
    while (offset < end) {
2329
85
        proto_tree_add_item(tree, hf_mpeg_descr_teletext_lang_code, tvb, offset, 3, ENC_ASCII);
2330
85
        offset += 3;
2331
2332
85
        proto_tree_add_item(tree, hf_mpeg_descr_teletext_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2333
85
        proto_tree_add_item(tree, hf_mpeg_descr_teletext_magazine_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2334
85
        offset += 1;
2335
2336
85
        proto_tree_add_item(tree, hf_mpeg_descr_teletext_page_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2337
85
        offset += 1;
2338
85
    }
2339
7
}
2340
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;
2358
2359
14
#define MPEG_DESCR_TELEPHONE_RESERVED1_MASK                 0xC0
2360
14
#define MPEG_DESCR_TELEPHONE_FOREIGN_AVAILABILITY_MASK      0x20
2361
14
#define MPEG_DESCR_TELEPHONE_CONNECTION_TYPE_MASK           0x1F
2362
14
#define MPEG_DESCR_TELEPHONE_RESERVED2_MASK                 0x80
2363
14
#define MPEG_DESCR_TELEPHONE_COUNTRY_PREFIX_LEN_MASK        0x60
2364
14
#define MPEG_DESCR_TELEPHONE_INTERNATIONAL_CODE_LEN_MASK    0x1C
2365
14
#define MPEG_DESCR_TELEPHONE_OPERATOR_CODE_LEN_MASK         0x03
2366
14
#define MPEG_DESCR_TELEPHONE_RESERVED3_MASK                 0x80
2367
14
#define MPEG_DESCR_TELEPHONE_NATIONAL_CODE_LEN_MASK         0x70
2368
14
#define MPEG_DESCR_TELEPHONE_CORE_NUMBER_LEN_MASK           0x0F
2369
2370
static const value_string mpeg_descr_telephone_foreign_availability_vals[] = {
2371
    { 0x0, "Inside country only" },
2372
    { 0x1, "Foreign call available" },
2373
2374
    { 0x0, NULL }
2375
};
2376
2377
static const range_string mpeg_descr_telephone_connection_type_vals[] = {
2378
    { 0x00, 0x1F, "Unknown" },
2379
2380
    { 0, 0, NULL }
2381
};
2382
2383
static int ett_mpeg_descriptor_telephone_number;
2384
2385
static void
2386
proto_mpeg_descriptor_dissect_telephone(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
2387
13
{
2388
13
    uint32_t country_prefix_length;
2389
13
    uint32_t international_area_code_length;
2390
13
    uint32_t operator_code_length;
2391
13
    uint32_t national_area_code_length;
2392
13
    uint32_t core_number_length;
2393
2394
13
    proto_item * ni;
2395
13
    proto_tree * number_tree;
2396
2397
13
    proto_tree_add_item(tree, hf_mpeg_descr_telephone_reserved_future_use1, tvb, offset, 1, ENC_BIG_ENDIAN);
2398
13
    proto_tree_add_item(tree, hf_mpeg_descr_telephone_foreign_availability, tvb, offset, 1, ENC_BIG_ENDIAN);
2399
13
    proto_tree_add_item(tree, hf_mpeg_descr_telephone_connection_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2400
13
    offset += 1;
2401
2402
13
    proto_tree_add_item(tree, hf_mpeg_descr_telephone_reserved_future_use2, tvb, offset, 1, ENC_BIG_ENDIAN);
2403
13
    proto_tree_add_item_ret_uint(tree, hf_mpeg_descr_telephone_country_prefix_length, tvb, offset, 1, ENC_BIG_ENDIAN, &country_prefix_length);
2404
13
    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
13
    proto_tree_add_item_ret_uint(tree, hf_mpeg_descr_telephone_operator_code_length, tvb, offset, 1, ENC_BIG_ENDIAN, &operator_code_length);
2406
13
    offset += 1;
2407
2408
13
    proto_tree_add_item(tree, hf_mpeg_descr_telephone_reserved_future_use3, tvb, offset, 1, ENC_BIG_ENDIAN);
2409
13
    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
13
    proto_tree_add_item_ret_uint(tree, hf_mpeg_descr_telephone_core_number_length, tvb, offset, 1, ENC_BIG_ENDIAN, &core_number_length);
2411
13
    offset += 1;
2412
2413
13
    uint32_t number_l = country_prefix_length + international_area_code_length + operator_code_length + national_area_code_length + core_number_length;
2414
2415
13
    if (number_l == 0) return;
2416
13
    ni = proto_tree_add_item(tree, hf_mpeg_descr_telephone_number, tvb, offset, number_l, ENC_ISO_8859_1);
2417
13
    number_tree = proto_item_add_subtree(ni, ett_mpeg_descriptor_telephone_number);
2418
2419
13
    if (country_prefix_length != 0) {
2420
10
        proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_country_prefix, tvb, offset, country_prefix_length, ENC_ISO_8859_1);
2421
10
        offset += country_prefix_length;
2422
10
    }
2423
2424
13
    if (international_area_code_length != 0) {
2425
12
        proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_international_area_code, tvb, offset, international_area_code_length, ENC_ISO_8859_1);
2426
12
        offset += international_area_code_length;
2427
12
    }
2428
2429
13
    if (operator_code_length != 0) {
2430
10
        proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_operator_code, tvb, offset, operator_code_length, ENC_ISO_8859_1);
2431
10
        offset += operator_code_length;
2432
10
    }
2433
2434
13
    if (national_area_code_length != 0) {
2435
12
        proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_national_area_code, tvb, offset, national_area_code_length, ENC_ISO_8859_1);
2436
12
        offset += national_area_code_length;
2437
12
    }
2438
2439
13
    if (core_number_length == 0) return;
2440
13
    proto_tree_add_item(number_tree, hf_mpeg_descr_telephone_core_number, tvb, offset, core_number_length, ENC_ISO_8859_1);
2441
13
}
2442
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;
2451
2452
14
#define MPEG_DESCR_LOCAL_TIME_OFFSET_COUNTRY_REGION_ID_MASK 0xFC
2453
14
#define MPEG_DESCR_LOCAL_TIME_OFFSET_RESERVED_MASK      0x02
2454
14
#define MPEG_DESCR_LOCAL_TIME_OFFSET_POLARITY           0x01
2455
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)" },
2459
2460
    { 0x0, NULL }
2461
};
2462
2463
static void
2464
proto_mpeg_descriptor_dissect_local_time_offset(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2465
25
{
2466
25
    unsigned end = offset + len;
2467
25
    uint8_t  hour, min;
2468
25
    nstime_t local_time_offset, time_of_change, next_time_offset;
2469
2470
160
    while (offset < end) {
2471
135
        proto_tree_add_item(tree, hf_mpeg_descr_local_time_offset_country_code, tvb, offset, 3, ENC_ASCII);
2472
135
        offset += 3;
2473
2474
135
        proto_tree_add_item(tree, hf_mpeg_descr_local_time_offset_region_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2475
135
        proto_tree_add_item(tree, hf_mpeg_descr_local_time_offset_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
2476
135
        proto_tree_add_item(tree, hf_mpeg_descr_local_time_offset_polarity, tvb, offset, 1, ENC_BIG_ENDIAN);
2477
135
        offset += 1;
2478
2479
135
        hour = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset));
2480
135
        min = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1));
2481
135
        nstime_set_zero(&local_time_offset);
2482
135
        local_time_offset.secs = hour*60*60 + min*60;
2483
135
        proto_tree_add_time_format_value(tree, hf_mpeg_descr_local_time_offset_offset,
2484
135
                tvb, offset, 2, &local_time_offset, "%02d:%02d", hour, min);
2485
135
        offset += 2;
2486
2487
2488
135
        if (packet_mpeg_sect_mjd_to_utc_time(tvb, offset, &time_of_change) < 0) {
2489
98
            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
98
        } else {
2491
37
            proto_tree_add_time(tree, hf_mpeg_descr_local_time_offset_time_of_change, tvb, offset, 5, &time_of_change);
2492
37
        }
2493
135
        offset += 5;
2494
2495
135
        hour = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset));
2496
135
        min = MPEG_SECT_BCD44_TO_DEC(tvb_get_uint8(tvb, offset+1));
2497
135
        nstime_set_zero(&next_time_offset);
2498
135
        next_time_offset.secs = hour*60*60 + min*60;
2499
135
        proto_tree_add_time_format_value(tree, hf_mpeg_descr_local_time_offset_next_time_offset,
2500
135
                tvb, offset, 2, &next_time_offset, "%02d:%02d", hour, min);
2501
135
        offset += 2;
2502
135
    }
2503
25
}
2504
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;
2510
2511
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" },
2529
2530
    { 0, NULL }
2531
};
2532
static value_string_ext mpeg_descr_subtitling_type_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_subtitling_type_vals);
2533
2534
static void
2535
proto_mpeg_descriptor_dissect_subtitling(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2536
9
{
2537
9
    unsigned end = offset + len;
2538
2539
89
    while (offset < end) {
2540
80
        proto_tree_add_item(tree, hf_mpeg_descr_subtitling_lang_code, tvb, offset, 3, ENC_ASCII);
2541
80
        offset += 3;
2542
2543
80
        proto_tree_add_item(tree, hf_mpeg_descr_subtitling_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2544
80
        offset += 1;
2545
2546
80
        proto_tree_add_item(tree, hf_mpeg_descr_subtitling_composition_page_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2547
80
        offset += 2;
2548
2549
80
        proto_tree_add_item(tree, hf_mpeg_descr_subtitling_ancillary_page_id, tvb, offset, 2, ENC_BIG_ENDIAN);
2550
80
        offset += 2;
2551
2552
80
    }
2553
9
}
2554
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;
2570
2571
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_BANDWIDTH_MASK          0xE0
2572
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_PRIORITY_MASK           0x10
2573
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_TIME_SLICING_INDICATOR_MASK 0x08
2574
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_MPE_FEC_INDICATOR_MASK      0x04
2575
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_RESERVED1_MASK          0x03
2576
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_CONSTELLATION_MASK      0xC0
2577
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_HIERARCHY_INFORMATION_MASK  0x38
2578
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_CODE_RATE_HP_STREAM_MASK    0x07
2579
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_CODE_RATE_LP_STREAM_MASK    0xE0
2580
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_GUARD_INTERVAL_MASK     0x18
2581
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_TRANSMISSION_MODE_MASK      0x06
2582
14
#define MPEG_DESCR_TERRESTRIAL_DELIVERY_OTHER_FREQUENCY_FLAG_MASK   0x01
2583
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" },
2589
2590
    { 0x0, NULL }
2591
};
2592
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)" },
2596
2597
    { 0x0, NULL }
2598
};
2599
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" },
2603
2604
    { 0x0, NULL }
2605
};
2606
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" },
2610
2611
    { 0x0, NULL }
2612
};
2613
2614
static const value_string mpeg_descr_terrestrial_delivery_constellation_vals[] = {
2615
    { 0x0, "QPSK" },
2616
    { 0x1, "16-QAM" },
2617
    { 0x2, "64-QAM" },
2618
2619
    { 0x0, NULL }
2620
};
2621
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" },
2631
2632
    { 0x0, NULL }
2633
};
2634
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" },
2641
2642
    { 0x0, NULL }
2643
};
2644
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" },
2650
2651
    { 0x0, NULL }
2652
};
2653
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" },
2657
2658
    { 0x0, NULL }
2659
};
2660
2661
static const value_string mpeg_descr_terrestrial_delivery_transmission_mode_vals[] = {
2662
    { 0x0, "2k mode" },
2663
    { 0x1, "8k mode" },
2664
    { 0x2, "4k mode" },
2665
2666
    { 0x0, NULL }
2667
};
2668
2669
static void
2670
proto_mpeg_descriptor_dissect_terrestrial_delivery(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
2671
4
{
2672
4
    uint64_t centre_freq;
2673
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
4
    centre_freq = tvb_get_ntohl(tvb, offset) * 10;
2677
2678
4
    proto_tree_add_uint64_format_value(tree, hf_mpeg_descr_terrestrial_delivery_centre_frequency, tvb, offset, 4,
2679
4
        centre_freq, "%d.%06d MHz", (unsigned)centre_freq/(1000*1000), (unsigned)centre_freq%(1000*1000));
2680
4
    offset += 4;
2681
2682
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_bandwidth, tvb, offset, 1, ENC_BIG_ENDIAN);
2683
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
2684
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_time_slicing_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
2685
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_mpe_fec_indicator, tvb, offset, 1, ENC_BIG_ENDIAN);
2686
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_reserved1, tvb, offset, 1, ENC_BIG_ENDIAN);
2687
4
    offset += 1;
2688
2689
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_constellation, tvb, offset, 1, ENC_BIG_ENDIAN);
2690
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_hierarchy_information, tvb, offset, 1, ENC_BIG_ENDIAN);
2691
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_code_rate_hp_stream, tvb, offset, 1, ENC_BIG_ENDIAN);
2692
4
    offset += 1;
2693
2694
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_code_rate_lp_stream, tvb, offset, 1, ENC_BIG_ENDIAN);
2695
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_guard_interval, tvb, offset, 1, ENC_BIG_ENDIAN);
2696
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_transmission_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
2697
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_other_frequency_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
2698
4
    offset += 1;
2699
2700
4
    proto_tree_add_item(tree, hf_mpeg_descr_terrestrial_delivery_reserved2, tvb, offset, 4, ENC_BIG_ENDIAN);
2701
2702
4
}
2703
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;
2709
2710
static int ett_mpeg_descriptor_multilng_network_name_desc_lng;
2711
2712
static unsigned
2713
proto_mpeg_descriptor_dissect_multilng_network_name_desc_measure_lng_len(tvbuff_t *tvb, unsigned offset, unsigned len)
2714
386
{
2715
386
    unsigned l_offset = offset;
2716
386
    unsigned cnt = len;
2717
2718
386
    if (cnt < 3) return l_offset - offset;
2719
386
    cnt      -= 3;
2720
386
    l_offset += 3;
2721
2722
386
    if (cnt < 1) return l_offset - offset;
2723
376
    unsigned network_name_length = tvb_get_uint8(tvb, l_offset);
2724
376
    cnt      -= 1;
2725
376
    l_offset += 1;
2726
2727
376
    network_name_length = MIN(network_name_length, cnt);
2728
376
    l_offset += network_name_length;
2729
2730
376
    return l_offset - offset;
2731
386
}
2732
2733
static void
2734
proto_mpeg_descriptor_dissect_multilng_network_name_desc(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2735
61
{
2736
61
    unsigned cnt = len;
2737
2738
437
    while (cnt > 0)
2739
388
    {
2740
388
        char *lng_str;
2741
388
        proto_tree * lng_tree;
2742
388
        proto_item * lng_item;
2743
2744
388
        if (cnt < 3) return;
2745
386
        unsigned lng_len = proto_mpeg_descriptor_dissect_multilng_network_name_desc_measure_lng_len(tvb, offset, cnt);
2746
386
        lng_tree = proto_tree_add_subtree(tree, tvb, offset, lng_len,
2747
386
                    ett_mpeg_descriptor_multilng_network_name_desc_lng, &lng_item, NULL);
2748
2749
386
        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
386
                                                wmem_packet_scope(), &lng_str);
2751
386
        proto_item_set_text(lng_item, "Language \"%s\"", lng_str);
2752
386
        offset += 3;
2753
386
        cnt    -= 3;
2754
2755
386
        if (cnt < 1) return;
2756
376
        unsigned network_name_length = tvb_get_uint8(tvb, offset);
2757
376
        proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_network_name_desc_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2758
376
        offset += 1;
2759
376
        cnt    -= 1;
2760
2761
376
        network_name_length = MIN(network_name_length, cnt);
2762
376
        if (cnt < network_name_length) return;
2763
376
        dvb_encoding_e  encoding;
2764
376
        unsigned enc_len = dvb_analyze_string_charset(tvb, offset, network_name_length, &encoding);
2765
376
        dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_network_name_desc_name_encoding, tvb, offset, enc_len, encoding);
2766
2767
376
        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
376
        offset += network_name_length;
2769
376
        cnt    -= network_name_length;
2770
376
    }
2771
61
}
2772
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;
2778
2779
static int ett_mpeg_descriptor_multilng_bouquet_name_desc_lng;
2780
2781
static unsigned
2782
proto_mpeg_descriptor_dissect_multilng_bouquet_name_desc_measure_lng_len(tvbuff_t *tvb, unsigned offset, unsigned len)
2783
47
{
2784
47
    unsigned l_offset = offset;
2785
47
    unsigned cnt = len;
2786
2787
47
    if (cnt < 3) return l_offset - offset;
2788
47
    cnt      -= 3;
2789
47
    l_offset += 3;
2790
2791
47
    if (cnt < 1) return l_offset - offset;
2792
45
    unsigned bouquet_name_length = tvb_get_uint8(tvb, l_offset);
2793
45
    cnt      -= 1;
2794
45
    l_offset += 1;
2795
2796
45
    bouquet_name_length = MIN(bouquet_name_length, cnt);
2797
45
    l_offset += bouquet_name_length;
2798
2799
45
    return l_offset - offset;
2800
47
}
2801
2802
static void
2803
proto_mpeg_descriptor_dissect_multilng_bouquet_name_desc(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2804
21
{
2805
21
    unsigned cnt = len;
2806
2807
66
    while (cnt > 0)
2808
49
    {
2809
49
        char* lng_str;
2810
49
        proto_tree * lng_tree;
2811
49
        proto_item * lng_item;
2812
2813
49
        if (cnt < 3) return;
2814
47
        unsigned lng_len = proto_mpeg_descriptor_dissect_multilng_bouquet_name_desc_measure_lng_len(tvb, offset, cnt);
2815
47
        lng_tree = proto_tree_add_subtree(tree, tvb, offset, lng_len,
2816
47
                    ett_mpeg_descriptor_multilng_bouquet_name_desc_lng, &lng_item, NULL);
2817
2818
47
        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
47
                                                wmem_packet_scope(), &lng_str);
2820
47
        proto_item_set_text(lng_item, "Language \"%s\"", lng_str);
2821
47
        offset += 3;
2822
47
        cnt    -= 3;
2823
2824
47
        if (cnt < 1) return;
2825
45
        unsigned bouquet_name_length = tvb_get_uint8(tvb, offset);
2826
45
        proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_bouquet_name_desc_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2827
45
        offset += 1;
2828
45
        cnt    -= 1;
2829
2830
45
        bouquet_name_length = MIN(bouquet_name_length, cnt);
2831
45
        if (cnt < bouquet_name_length) return;
2832
45
        dvb_encoding_e  encoding;
2833
45
        unsigned enc_len = dvb_analyze_string_charset(tvb, offset, bouquet_name_length, &encoding);
2834
45
        dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_bouquet_name_desc_name_encoding, tvb, offset, enc_len, encoding);
2835
2836
45
        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
45
        offset += bouquet_name_length;
2838
45
        cnt    -= bouquet_name_length;
2839
45
    }
2840
21
}
2841
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;
2850
2851
static int ett_mpeg_descriptor_multilng_srv_name_desc_lng;
2852
2853
static unsigned
2854
proto_mpeg_descriptor_dissect_multilng_srv_name_desc_measure_lng_len(tvbuff_t *tvb, unsigned offset, unsigned len)
2855
19
{
2856
19
    unsigned l_offset = offset;
2857
19
    unsigned cnt = len;
2858
2859
19
    if (cnt < 3) return l_offset - offset;
2860
19
    cnt      -= 3;
2861
19
    l_offset += 3;
2862
2863
19
    if (cnt < 1) return l_offset - offset;
2864
18
    unsigned service_provider_name_length = tvb_get_uint8(tvb, l_offset);
2865
18
    cnt      -= 1;
2866
18
    l_offset += 1;
2867
2868
18
    service_provider_name_length = MIN(service_provider_name_length, cnt);
2869
18
    cnt      -= service_provider_name_length;
2870
18
    l_offset += service_provider_name_length;
2871
2872
18
    if (cnt < 1) return l_offset - offset;
2873
13
    unsigned service_name_length = tvb_get_uint8(tvb, l_offset);
2874
13
    cnt      -= 1;
2875
13
    l_offset += 1;
2876
2877
13
    service_name_length = MIN(service_name_length, cnt);
2878
13
    l_offset += service_name_length;
2879
2880
13
    return l_offset - offset;
2881
18
}
2882
2883
static void
2884
proto_mpeg_descriptor_dissect_multilng_srv_name_desc(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2885
8
{
2886
8
    unsigned cnt = len;
2887
2888
21
    while (cnt > 0)
2889
19
    {
2890
19
        char *lng_str;
2891
19
        proto_tree * lng_tree;
2892
19
        proto_item * lng_item;
2893
2894
19
        if (cnt < 3) return;
2895
19
        unsigned lng_len = proto_mpeg_descriptor_dissect_multilng_srv_name_desc_measure_lng_len(tvb, offset, cnt);
2896
19
        lng_tree = proto_tree_add_subtree(tree, tvb, offset, lng_len,
2897
19
                    ett_mpeg_descriptor_multilng_srv_name_desc_lng, &lng_item, NULL);
2898
2899
19
        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
19
                                                wmem_packet_scope(), &lng_str);
2901
19
        proto_item_set_text(lng_item, "Language \"%s\"", lng_str);
2902
19
        offset += 3;
2903
19
        cnt    -= 3;
2904
2905
19
        if (cnt < 1) return;
2906
18
        unsigned service_provider_name_length = tvb_get_uint8(tvb, offset);
2907
18
        proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2908
18
        offset += 1;
2909
18
        cnt    -= 1;
2910
2911
18
        service_provider_name_length = MIN(service_provider_name_length, cnt);
2912
18
        if (cnt < service_provider_name_length) return;
2913
18
        dvb_encoding_e  encoding;
2914
18
        unsigned enc_len = dvb_analyze_string_charset(tvb, offset, service_provider_name_length, &encoding);
2915
18
        dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_encoding, tvb, offset, enc_len, encoding);
2916
2917
18
        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
18
        offset += service_provider_name_length;
2919
18
        cnt    -= service_provider_name_length;
2920
2921
18
        if (cnt < 1) return;
2922
13
        unsigned service_name_length = tvb_get_uint8(tvb, offset);
2923
13
        proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2924
13
        offset += 1;
2925
13
        cnt    -= 1;
2926
2927
13
        service_name_length = MIN(service_name_length, cnt);
2928
13
        if (cnt < service_name_length) return;
2929
13
        enc_len = dvb_analyze_string_charset(tvb, offset, service_name_length, &encoding);
2930
13
        dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_srv_name_desc_service_name_encoding, tvb, offset, enc_len, encoding);
2931
2932
13
        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
13
        offset += service_name_length;
2934
13
        cnt    -= service_name_length;
2935
13
    }
2936
8
}
2937
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;
2944
2945
static int ett_mpeg_descriptor_multilng_component_desc_lng;
2946
2947
static unsigned
2948
proto_mpeg_descriptor_dissect_multilng_component_desc_measure_lng_len(tvbuff_t *tvb, unsigned offset, unsigned len)
2949
21
{
2950
21
    unsigned l_offset = offset;
2951
21
    unsigned cnt = len;
2952
2953
21
    if (cnt < 3) return l_offset - offset;
2954
21
    cnt      -= 3;
2955
21
    l_offset += 3;
2956
2957
21
    if (cnt < 1) return l_offset - offset;
2958
19
    unsigned text_length = tvb_get_uint8(tvb, l_offset);
2959
19
    cnt      -= 1;
2960
19
    l_offset += 1;
2961
2962
19
    text_length = MIN(text_length, cnt);
2963
19
    l_offset += text_length;
2964
2965
19
    return l_offset - offset;
2966
21
}
2967
2968
static void
2969
proto_mpeg_descriptor_dissect_multilng_component_desc(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
2970
15
{
2971
15
    unsigned cnt = len;
2972
2973
15
    if (cnt < 1) return;
2974
15
    proto_tree_add_item(tree, hf_mpeg_descr_multilng_component_desc_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
2975
15
    offset += 1;
2976
15
    cnt    -= 1;
2977
2978
34
    while (cnt > 0)
2979
21
    {
2980
21
        char *lng_str;
2981
21
        proto_tree * lng_tree;
2982
21
        proto_item * lng_item;
2983
2984
21
        if (cnt < 3) return;
2985
21
        unsigned lng_len = proto_mpeg_descriptor_dissect_multilng_component_desc_measure_lng_len(tvb, offset, cnt);
2986
21
        lng_tree = proto_tree_add_subtree(tree, tvb, offset, lng_len,
2987
21
                    ett_mpeg_descriptor_multilng_component_desc_lng, &lng_item, NULL);
2988
2989
21
        proto_tree_add_item_ret_display_string(lng_tree, hf_mpeg_descr_multilng_component_desc_iso639_language_code, tvb, offset, 3, ENC_ASCII,
2990
21
                                                wmem_packet_scope(), &lng_str);
2991
21
        proto_item_set_text(lng_item, "Language \"%s\"", lng_str);
2992
21
        offset += 3;
2993
21
        cnt    -= 3;
2994
2995
21
        if (cnt < 1) return;
2996
19
        unsigned text_length = tvb_get_uint8(tvb, offset);
2997
19
        proto_tree_add_item(lng_tree, hf_mpeg_descr_multilng_component_desc_text_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2998
19
        offset += 1;
2999
19
        cnt    -= 1;
3000
3001
19
        text_length = MIN(text_length, cnt);
3002
19
        if (cnt < text_length) return;
3003
19
        dvb_encoding_e  encoding;
3004
19
        unsigned enc_len = dvb_analyze_string_charset(tvb, offset, text_length, &encoding);
3005
19
        dvb_add_chartbl(lng_tree, hf_mpeg_descr_multilng_component_desc_text_encoding, tvb, offset, enc_len, encoding);
3006
3007
19
        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
19
        offset += text_length;
3009
19
        cnt    -= text_length;
3010
19
    }
3011
15
}
3012
3013
/* 0x5F Private Data Specifier */
3014
static int hf_mpeg_descr_private_data_specifier_id;
3015
3016
627
#define PRIVATE_DATA_SPECIFIER_RESERVED    0x00000000
3017
#define PRIVATE_DATA_SPECIFIER_NORDIG      0x00000029
3018
0
#define PRIVATE_DATA_SPECIFIER_CIPLUS_LLP  0x00000040
3019
#define PRIVATE_DATA_SPECIFIER_EUTELSAT_SA 0x0000055F
3020
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 */
3027
3028
    { 0, NULL }
3029
};
3030
3031
static void
3032
proto_mpeg_descriptor_dissect_private_data_specifier(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
3033
12
{
3034
12
    proto_tree_add_item(tree, hf_mpeg_descr_private_data_specifier_id, tvb, offset, 4, ENC_BIG_ENDIAN);
3035
12
}
3036
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;
3041
3042
14
#define MPEG_DESCR_SHORT_SMOOTHING_BUFFER_SB_SIZE_MASK      0xC0
3043
14
#define MPEG_DESCR_SHORT_SMOOTHING_BUFFER_SB_LEAK_RATE_MASK 0x3F
3044
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 }
3051
};
3052
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 }
3119
};
3120
3121
static void
3122
proto_mpeg_descriptor_dissect_short_smoothing_buffer(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3123
24
{
3124
24
    proto_tree_add_item(tree, hf_mpeg_descr_short_smoothing_buffer_sb_size, tvb, offset, 1, ENC_BIG_ENDIAN);
3125
24
    proto_tree_add_item(tree, hf_mpeg_descr_short_smoothing_buffer_sb_leak_rate, tvb, offset, 1, ENC_BIG_ENDIAN);
3126
24
    offset += 1;
3127
3128
24
    if (len == 1) return;
3129
3130
24
    proto_tree_add_item(tree, hf_mpeg_descr_short_smoothing_buffer_dvb_reserved, tvb, offset, len-1, ENC_NA);
3131
24
}
3132
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;
3140
3141
14
#define PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE1_MASK   0xC00000
3142
4
#define PARTIAL_TRANSPORT_STREAM_DESCR_PEAK_RATE_MASK              0x3FFFFF
3143
14
#define PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE2_MASK   0xC00000
3144
4
#define PARTIAL_TRANSPORT_STREAM_DESCR_MINIMUM_SMOOTHING_RATE_MASK 0x3FFFFF
3145
14
#define PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE3_MASK     0xC000
3146
4
#define PARTIAL_TRANSPORT_STREAM_DESCR_MAXIMUM_SMOOTHING_BUFF_MASK   0x3FFF
3147
3148
static void
3149
proto_mpeg_descriptor_dissect_partial_transport_stream(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3150
5
{
3151
5
    unsigned cnt = len;
3152
3153
5
    if (cnt < 3) return;
3154
4
    proto_tree_add_item(tree, hf_mpeg_descr_partial_transport_stream_reserved_future_use1, tvb, offset, 3, ENC_BIG_ENDIAN);
3155
4
    unsigned rate = tvb_get_uint24(tvb, offset, ENC_NA) & PARTIAL_TRANSPORT_STREAM_DESCR_PEAK_RATE_MASK;
3156
4
    proto_tree_add_uint_bits_format_value(tree, hf_mpeg_descr_partial_transport_stream_peak_rate, tvb, (offset*8)+2,
3157
4
    22, rate, ENC_BIG_ENDIAN, "%u bits/s", rate*400);
3158
4
    offset += 3;
3159
4
    cnt    -= 3;
3160
3161
4
    if (cnt < 3) return;
3162
4
    proto_tree_add_item(tree, hf_mpeg_descr_partial_transport_stream_reserved_future_use2, tvb, offset, 3, ENC_BIG_ENDIAN);
3163
4
    rate = tvb_get_uint24(tvb, offset, ENC_BIG_ENDIAN) & PARTIAL_TRANSPORT_STREAM_DESCR_MINIMUM_SMOOTHING_RATE_MASK;
3164
4
    proto_tree_add_uint_bits_format_value(tree, hf_mpeg_descr_partial_transport_stream_minimum_overall_smoothing_rate, tvb,
3165
4
    (offset*8)+2, 22, rate, ENC_BIG_ENDIAN, (rate==0x3FFFFFu)?"Underfined (0x3FFFFF)":"%u bits/s", rate*400u);
3166
4
    offset += 3;
3167
4
    cnt    -= 3;
3168
3169
4
    if (cnt < 2) return;
3170
4
    proto_tree_add_item(tree, hf_mpeg_descr_partial_transport_stream_reserved_future_use3, tvb, offset, 2, ENC_BIG_ENDIAN);
3171
4
    unsigned buffer = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN) & PARTIAL_TRANSPORT_STREAM_DESCR_MAXIMUM_SMOOTHING_BUFF_MASK;
3172
4
    proto_tree_add_uint_bits_format_value(tree, hf_mpeg_descr_partial_transport_stream_maximum_overall_smoothing_buffer, tvb,
3173
4
    (offset*8)+2, 14, buffer, ENC_BIG_ENDIAN, (buffer==0x3FFFu)?"Underfined (0x3FFF)":"%u bytes", buffer);
3174
4
}
3175
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;
3184
3185
static const value_string mpeg_descr_data_bcast_id_vals[] = {
3186
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 */
3203
3204
    { 0, NULL }
3205
};
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);
3208
3209
static void
3210
proto_mpeg_descriptor_dissect_data_bcast(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
3211
18
{
3212
3213
18
    uint8_t selector_len, text_len;
3214
3215
18
    proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_bcast_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3216
18
    offset += 2;
3217
3218
18
    proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_component_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
3219
18
    offset += 1;
3220
3221
18
    selector_len = tvb_get_uint8(tvb, offset);
3222
18
    proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_selector_len, tvb, offset, 1, ENC_BIG_ENDIAN);
3223
18
    offset += 1;
3224
3225
18
    if (selector_len > 0) {
3226
16
        proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_selector_bytes, tvb, offset, selector_len, ENC_NA);
3227
16
        offset += selector_len;
3228
16
    }
3229
3230
18
    proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_lang_code, tvb, offset, 3, ENC_ASCII);
3231
18
    offset += 3;
3232
3233
18
    text_len = tvb_get_uint8(tvb, offset);
3234
18
    proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_text_len, tvb, offset, 1, ENC_BIG_ENDIAN);
3235
18
    offset += 1;
3236
3237
18
    if (text_len > 0)
3238
11
        proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_text, tvb, offset, text_len, ENC_ASCII);
3239
18
}
3240
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;
3244
3245
static void
3246
proto_mpeg_descriptor_dissect_data_bcast_id(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3247
17
{
3248
17
    proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_id_bcast_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3249
17
    offset += 2;
3250
3251
17
    if (len > 2)
3252
16
        proto_tree_add_item(tree, hf_mpeg_descr_data_bcast_id_id_selector_bytes, tvb, offset, len - 2, ENC_NA);
3253
17
}
3254
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;
3262
3263
14
#define MPEG_DESCR_PDC_RESERVED_MASK    0xF00000
3264
14
#define MPEG_DESCR_PDC_PIL_MASK         0x0FFFFF
3265
14
#define MPEG_DESCR_PDC_DAY_MASK         0x0F8000
3266
14
#define MPEG_DESCR_PDC_MONTH_MASK       0x007800
3267
14
#define MPEG_DESCR_PDC_HOUR_MASK        0x0007C0
3268
14
#define MPEG_DESCR_PDC_MINUTE_MASK      0x00003F
3269
3270
static int ett_mpeg_descriptor_pdc_pil;
3271
3272
static void
3273
proto_mpeg_descriptor_dissect_pdc(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
3274
9
{
3275
9
    proto_item * pi;
3276
9
    proto_tree * pil_tree;
3277
3278
9
    proto_tree_add_item(tree, hf_mpeg_descr_pdc_reserved, tvb, offset, 3, ENC_BIG_ENDIAN);
3279
9
    pi = proto_tree_add_item(tree, hf_mpeg_descr_pdc_pil, tvb, offset, 3, ENC_BIG_ENDIAN);
3280
9
    pil_tree = proto_item_add_subtree(pi, ett_mpeg_descriptor_pdc_pil);
3281
9
    proto_tree_add_item(pil_tree, hf_mpeg_descr_pdc_day, tvb, offset, 3, ENC_BIG_ENDIAN);
3282
9
    proto_tree_add_item(pil_tree, hf_mpeg_descr_pdc_month, tvb, offset, 3, ENC_BIG_ENDIAN);
3283
9
    proto_tree_add_item(pil_tree, hf_mpeg_descr_pdc_hour, tvb, offset, 3, ENC_BIG_ENDIAN);
3284
9
    proto_tree_add_item(pil_tree, hf_mpeg_descr_pdc_minute, tvb, offset, 3, ENC_BIG_ENDIAN);
3285
9
}
3286
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;
3301
3302
static int ett_mpeg_descriptor_ac3_component_type;
3303
3304
40
#define MPEG_DESCR_AC3_COMPONENT_TYPE_FLAG_MASK 0x80
3305
40
#define MPEG_DESCR_AC3_BSID_FLAG_MASK           0x40
3306
40
#define MPEG_DESCR_AC3_MAINID_FLAG_MASK         0x20
3307
40
#define MPEG_DESCR_AC3_ASVC_FLAG_MASK           0x10
3308
14
#define MPEG_DESCR_AC3_RESERVED_MASK            0x0F
3309
3310
14
#define MPEG_DESCR_AC3_COMPONENT_TYPE_RESERVED_FLAG_MASK        0x80
3311
14
#define MPEG_DESCR_AC3_COMPONENT_TYPE_FULL_SERVICE_FLAG_MASK    0x40
3312
14
#define MPEG_DESCR_AC3_COMPONENT_TYPE_SERVICE_TYPE_FLAGS_MASK   0x38
3313
14
#define MPEG_DESCR_AC3_COMPONENT_TYPE_NUMBER_OF_CHANNELS_FLAGS  0x07
3314
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" },
3318
3319
    { 0x0, NULL }
3320
};
3321
3322
static const value_string mpeg_descr_ac3_bsid_flag_vals[] = {
3323
    { 0x0, "BSID field not included" },
3324
    { 0x1, "BSID field included" },
3325
3326
    { 0x0, NULL }
3327
};
3328
3329
static const value_string mpeg_descr_ac3_mainid_flag_vals[] = {
3330
    { 0x0, "Main ID field not included" },
3331
    { 0x1, "Main ID field included" },
3332
3333
    { 0x0, NULL }
3334
};
3335
3336
static const value_string mpeg_descr_ac3_asvc_flag_vals[] = {
3337
    { 0x0, "ASVC field not included" },
3338
    { 0x1, "ASVC field included" },
3339
3340
    { 0x0, NULL }
3341
};
3342
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" },
3346
3347
    { 0x0, NULL}
3348
};
3349
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" },
3359
3360
    { 0x0, NULL }
3361
};
3362
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)" },
3369
3370
    { 0x0, NULL }
3371
};
3372
3373
static void
3374
proto_mpeg_descriptor_dissect_ac3(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3375
26
{
3376
26
    unsigned  end = offset + len;
3377
26
    uint8_t flags, component_type;
3378
3379
26
    proto_tree *component_type_tree;
3380
3381
26
    flags = tvb_get_uint8(tvb, offset);
3382
26
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_component_type_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3383
26
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_bsid_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3384
26
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_mainid_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3385
26
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_asvc_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3386
26
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3387
26
    offset += 1;
3388
3389
26
    if (flags & MPEG_DESCR_AC3_COMPONENT_TYPE_FLAG_MASK) {
3390
1
        component_type = tvb_get_uint8(tvb, offset);
3391
1
        component_type_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3,
3392
1
                    ett_mpeg_descriptor_ac3_component_type, NULL, "Component Type 0x%02x", component_type);
3393
1
        proto_tree_add_item(component_type_tree, hf_mpeg_descr_ac3_component_type_reserved_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3394
1
        proto_tree_add_item(component_type_tree, hf_mpeg_descr_ac3_component_type_full_service_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3395
1
        proto_tree_add_item(component_type_tree, hf_mpeg_descr_ac3_component_type_service_type_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
3396
1
        proto_tree_add_item(component_type_tree, hf_mpeg_descr_ac3_component_type_number_of_channels_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
3397
1
        offset += 1;
3398
1
    }
3399
3400
26
    if (flags & MPEG_DESCR_AC3_BSID_FLAG_MASK) {
3401
22
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_bsid, tvb, offset, 1, ENC_BIG_ENDIAN);
3402
22
        offset += 1;
3403
22
    }
3404
3405
26
    if (flags & MPEG_DESCR_AC3_MAINID_FLAG_MASK) {
3406
22
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_mainid, tvb, offset, 1, ENC_BIG_ENDIAN);
3407
22
        offset += 1;
3408
22
    }
3409
3410
26
    if (flags & MPEG_DESCR_AC3_ASVC_FLAG_MASK) {
3411
1
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_asvc, tvb, offset, 1, ENC_BIG_ENDIAN);
3412
1
        offset += 1;
3413
1
    }
3414
3415
26
    if (offset < end)
3416
25
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_additional_info, tvb, offset, end - offset, ENC_NA);
3417
26
}
3418
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;
3422
3423
static void
3424
proto_mpeg_descriptor_dissect_app_sig(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3425
17
{
3426
17
    unsigned  offset_start;
3427
3428
17
    offset_start = offset;
3429
399
    while ((offset - offset_start) < len) {
3430
382
        proto_tree_add_item(tree, hf_mpeg_descr_app_sig_app_type, tvb, offset, 2, ENC_BIG_ENDIAN);
3431
382
        offset += 2;
3432
382
        proto_tree_add_item(tree, hf_mpeg_descr_app_sig_ait_ver, tvb, offset, 1, ENC_BIG_ENDIAN);
3433
382
        offset += 1;
3434
382
    }
3435
17
}
3436
3437
/* 0x71 Service Identifier Descriptor */
3438
static int hf_mpeg_descr_service_identifier;
3439
3440
static void
3441
proto_mpeg_descriptor_dissect_service_identifier(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3442
3
{
3443
3
    proto_tree_add_item(tree, hf_mpeg_descr_service_identifier, tvb, offset, len, ENC_ASCII);
3444
3
}
3445
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;
3450
3451
14
#define MPEG_DESCR_SRV_AVAIL_FLAG_MASK      0x80
3452
14
#define MPEG_DESCR_SRV_AVAIL_RESERVED_MASK  0x7F
3453
3454
static int ett_mpeg_descriptor_srv_avail_cells;
3455
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" },
3459
3460
    { 0x0, NULL }
3461
};
3462
3463
static void
3464
proto_mpeg_descriptor_dissect_service_availability(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3465
6
{
3466
6
    unsigned end = offset + len;
3467
3468
6
    proto_tree * cells_tree;
3469
3470
6
    proto_tree_add_item(tree, hf_mpeg_descr_service_availability_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
3471
6
    proto_tree_add_item(tree, hf_mpeg_descr_service_availability_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3472
6
    offset += 1;
3473
3474
6
    cells_tree = proto_tree_add_subtree(tree, tvb, offset, end - offset, ett_mpeg_descriptor_srv_avail_cells, NULL, "Cells");
3475
3476
150
    while (offset < end) {
3477
144
        proto_tree_add_item(cells_tree, hf_mpeg_descr_service_availability_cell_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3478
144
        offset += 2;
3479
144
    }
3480
6
}
3481
3482
/* 0x73 Default Authority Descriptor */
3483
static int hf_mpeg_descr_default_authority_name;
3484
3485
static void
3486
proto_mpeg_descriptor_dissect_default_authority(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3487
7
{
3488
7
    proto_tree_add_item(tree, hf_mpeg_descr_default_authority_name, tvb, offset, len, ENC_ASCII);
3489
7
}
3490
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;
3495
3496
static int ett_mpeg_descriptor_tva;
3497
3498
14
#define MPEG_DESCR_TVA_RESREVED_MASK        0xF8
3499
14
#define MPEG_DESCR_TVA_RUNNING_STATUS_MASK  0x07
3500
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 }
3511
};
3512
3513
static void
3514
proto_mpeg_descriptor_dissect_tva_id(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3515
10
{
3516
10
    unsigned end = offset + len;
3517
10
    unsigned tva_cnt = 0;
3518
3519
10
    proto_tree * tva_tree;
3520
3521
219
    while (offset < end) {
3522
209
        unsigned id = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN);
3523
209
        tva_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3, ett_mpeg_descriptor_tva, NULL, "TVA %u (0x%04X)", tva_cnt, id);
3524
209
        proto_tree_add_item(tva_tree, hf_mpeg_descr_tva_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3525
209
        offset += 2;
3526
209
        tva_cnt += 1;
3527
3528
209
        proto_tree_add_item(tva_tree, hf_mpeg_descr_tva_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3529
209
        proto_tree_add_item(tva_tree, hf_mpeg_descr_tva_running_status, tvb, offset, 1, ENC_BIG_ENDIAN);
3530
209
        offset += 1;
3531
209
    }
3532
10
}
3533
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;
3540
3541
590
#define MPEG_DESCR_CONTENT_IDENTIFIER_CRID_TYPE_MASK        0xFC
3542
590
#define MPEG_DESCR_CONTENT_IDENTIFIER_CRID_LOCATION_MASK    0x03
3543
3544
static int ett_mpeg_descriptor_content_identifier_crid;
3545
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" },
3551
3552
    { 0, NULL }
3553
};
3554
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)" },
3558
3559
    { 0, NULL }
3560
};
3561
3562
static void
3563
proto_mpeg_descriptor_dissect_content_identifier(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3564
23
{
3565
23
    unsigned  end = offset + len, crid_len;
3566
23
    uint8_t crid, crid_location, crid_type;
3567
3568
23
    proto_tree *crid_tree;
3569
3570
599
    while (offset < end) {
3571
576
        crid = tvb_get_uint8(tvb, offset);
3572
576
        crid_type = (crid & MPEG_DESCR_CONTENT_IDENTIFIER_CRID_TYPE_MASK) >> 2;
3573
576
        crid_location = crid & MPEG_DESCR_CONTENT_IDENTIFIER_CRID_LOCATION_MASK;
3574
3575
576
        if (crid_location == 0) {
3576
35
            crid_len = 2 + tvb_get_uint8(tvb, offset + 1);
3577
541
        } else if (crid_location == 1) {
3578
35
            crid_len = 3;
3579
506
        } else {
3580
506
            crid_len = 1;
3581
506
        }
3582
3583
576
        crid_tree = proto_tree_add_subtree_format(tree, tvb, offset, crid_len,
3584
576
                ett_mpeg_descriptor_content_identifier_crid, NULL, "CRID type=0%02x", crid_type);
3585
3586
576
        proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_crid_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3587
576
        proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_crid_location, tvb, offset, 1, ENC_BIG_ENDIAN);
3588
576
        offset += 1;
3589
3590
576
        if (crid_location == 0x00) {
3591
35
            crid_len = tvb_get_uint8(tvb, offset);
3592
35
            proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_crid_length, tvb, offset, 1, ENC_BIG_ENDIAN);
3593
35
            offset += 1;
3594
3595
35
            proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_crid_bytes, tvb, offset, crid_len, ENC_NA);
3596
35
            offset += crid_len;
3597
541
        } else if (crid_location == 0x01) {
3598
35
            proto_tree_add_item(crid_tree, hf_mpeg_descr_content_identifier_cird_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
3599
35
        }
3600
3601
576
    }
3602
3603
3604
23
}
3605
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;
3611
3612
14
#define MPEG_DESCR_XAIT_VERSION_NUM_MASK    0xF8
3613
14
#define MPEG_DESCR_XAIT_UPDATE_POLICY_MASK  0x07
3614
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 }
3620
};
3621
3622
static void
3623
4
proto_mpeg_descriptor_dissect_xait(tvbuff_t *tvb, unsigned offset, proto_tree *tree) {
3624
4
    proto_tree_add_item(tree, hf_mpeg_descr_xait_onid, tvb, offset, 2, ENC_BIG_ENDIAN);
3625
4
    offset += 2;
3626
3627
4
    proto_tree_add_item(tree, hf_mpeg_descr_xait_sid, tvb, offset, 2, ENC_BIG_ENDIAN);
3628
4
    offset += 2;
3629
3630
4
    proto_tree_add_item(tree, hf_mpeg_descr_xait_version_number, tvb, offset, 1, ENC_BIG_ENDIAN);
3631
4
    proto_tree_add_item(tree, hf_mpeg_descr_xait_update_policy, tvb, offset, 1, ENC_BIG_ENDIAN);
3632
4
}
3633
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;
3640
3641
14
#define MPEG_DESCR_FTA_USER_DEFINED_MASK 0x80
3642
14
#define MPEG_DESCR_FTA_RESERVED_MASK 0x70
3643
14
#define MPEG_DESCR_FTA_DO_NOT_SCRAMBLE_MASK 0x08
3644
14
#define MPEG_DESCR_FTA_REMOTE_MASK 0x06
3645
14
#define MPEG_DESCR_FTA_REVOCATION_MASK 0x01
3646
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 }
3653
};
3654
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" };
3657
3658
static void
3659
11
proto_mpeg_descriptor_dissect_fta(tvbuff_t *tvb, unsigned offset, proto_tree *tree) {
3660
11
    proto_tree_add_item(tree, hf_mpeg_descr_fta_user_defined, tvb, offset, 1, ENC_BIG_ENDIAN);
3661
11
    proto_tree_add_item(tree, hf_mpeg_descr_fta_reserved_future_use, tvb, offset, 1, ENC_BIG_ENDIAN);
3662
11
    proto_tree_add_item(tree, hf_mpeg_descr_fta_do_not_scramble, tvb, offset, 1, ENC_BIG_ENDIAN);
3663
11
    proto_tree_add_item(tree, hf_mpeg_descr_fta_control_remote_access_over_internet, tvb, offset, 1, ENC_BIG_ENDIAN);
3664
11
    proto_tree_add_item(tree, hf_mpeg_descr_fta_do_not_apply_revocation, tvb, offset, 1, ENC_BIG_ENDIAN);
3665
11
}
3666
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;
3675
3676
static int hf_mpeg_descr_private_data;
3677
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
1
#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
3690
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 }
3705
};
3706
static value_string_ext mpeg_descr_extension_tag_extension_vals_ext = VALUE_STRING_EXT_INIT(mpeg_descr_extension_tag_extension_vals);
3707
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 }
3712
};
3713
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 }
3722
};
3723
3724
3725
static void
3726
proto_mpeg_descriptor_dissect_extension(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3727
4
{
3728
4
    unsigned  offset_start;
3729
4
    uint8_t   tag_ext;
3730
4
    bool      lang_code_present;
3731
4
    unsigned  already_dissected;
3732
3733
4
    offset_start = offset;
3734
3735
4
    tag_ext = tvb_get_uint8(tvb, offset);
3736
4
    proto_tree_add_item(tree, hf_mpeg_descr_extension_tag_extension, tvb, offset, 1, ENC_BIG_ENDIAN);
3737
4
    offset += 1;
3738
3739
4
    switch (tag_ext) {
3740
1
        case EXT_TAG_SUPP_AUDIO:
3741
1
            proto_tree_add_item(tree, hf_mpeg_descr_extension_supp_audio_mix_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3742
1
            proto_tree_add_item(tree, hf_mpeg_descr_extension_supp_audio_ed_cla, tvb, offset, 1, ENC_BIG_ENDIAN);
3743
1
            lang_code_present = ((tvb_get_uint8(tvb, offset) & 0x01) == 0x01);
3744
1
            proto_tree_add_item(tree, hf_mpeg_descr_extension_supp_audio_lang_code_present, tvb, offset, 1, ENC_BIG_ENDIAN);
3745
1
            offset += 1;
3746
1
            if (lang_code_present) {
3747
1
                proto_tree_add_item(tree, hf_mpeg_descr_extension_supp_audio_lang_code, tvb, offset, 3, ENC_ASCII);
3748
1
                offset += 3;
3749
1
            }
3750
1
            already_dissected = offset-offset_start;
3751
1
            if (already_dissected<len)
3752
1
                proto_tree_add_item(tree, hf_mpeg_descr_private_data, tvb, offset, len-already_dissected, ENC_NA);
3753
1
            break;
3754
3
        default:
3755
3
            already_dissected = offset-offset_start;
3756
3
            if (already_dissected<len)
3757
3
                proto_tree_add_item(tree, hf_mpeg_descr_extension_data, tvb, offset, len-already_dissected, ENC_NA);
3758
3
            break;
3759
4
    }
3760
3761
4
}
3762
3763
14
#define MPEG_DESCR_AC3_SYSA_SRATE_MASK 0xe0
3764
14
#define MPEG_DESCR_AC3_SYSA_BSID_MASK 0x1f
3765
14
#define MPEG_DESCR_AC3_SYSA_BITRATE_CODE_LIMIT_MASK 0x80
3766
14
#define MPEG_DESCR_AC3_SYSA_BITRATE_CODE_MASK 0x7c
3767
14
#define MPEG_DESCR_AC3_SYSA_SURROUND_MODE_MASK 0x03
3768
14
#define MPEG_DESCR_AC3_SYSA_BSMOD_MASK 0xe0
3769
14
#define MPEG_DESCR_AC3_SYSA_NUM_CHANNELS_MASK 0x1e
3770
14
#define MPEG_DESCR_AC3_SYSA_FULL_SVC_MASK 0x01
3771
14
#define MPEG_DESCR_AC3_SYSA_MAINID_MASK 0xe0
3772
14
#define MPEG_DESCR_AC3_SYSA_PRIORITY_MASK 0x18
3773
14
#define MPEG_DESCR_AC3_SYSA_RESERVED_MASK 0x07
3774
14
#define MPEG_DESCR_AC3_SYSA_TEXTLEN_MASK 0xfe
3775
14
#define MPEG_DESCR_AC3_SYSA_TEXTCODE_MASK 0x01
3776
14
#define MPEG_DESCR_AC3_SYSA_LANG1_MASK 0x80
3777
14
#define MPEG_DESCR_AC3_SYSA_LANG2_MASK 0x40
3778
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;
3799
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 }
3811
};
3812
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 }
3818
};
3819
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 }
3841
};
3842
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 }
3850
};
3851
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 }
3871
};
3872
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 }
3880
};
3881
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)
3886
10
{
3887
10
    unsigned  end = offset + len;
3888
10
    uint8_t bsmod_chans_fullsvc, bsmod, num_channels, textlen, lang;
3889
3890
10
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_srate, tvb, offset, 1, ENC_BIG_ENDIAN);
3891
10
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_bsid, tvb, offset, 1, ENC_BIG_ENDIAN);
3892
10
    offset += 1;
3893
3894
10
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_bitrate_limit, tvb, offset, 1, ENC_BIG_ENDIAN);
3895
10
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_bitrate, tvb, offset, 1, ENC_BIG_ENDIAN);
3896
10
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_surround, tvb, offset, 1, ENC_BIG_ENDIAN);
3897
10
    offset += 1;
3898
3899
10
    bsmod_chans_fullsvc = tvb_get_uint8(tvb, offset);
3900
10
    bsmod = (bsmod_chans_fullsvc & 0xe0) >> 5;
3901
10
    num_channels = (bsmod_chans_fullsvc & 0x1e) >> 1;
3902
10
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_bsmod, tvb, offset, 1, ENC_BIG_ENDIAN);
3903
10
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_num_channels, tvb, offset, 1, ENC_BIG_ENDIAN);
3904
10
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_full_svc, tvb, offset, 1, ENC_BIG_ENDIAN);
3905
10
    offset += 1;
3906
3907
10
    if (offset >= end) return;
3908
3909
9
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_langcode, tvb, offset, 1, ENC_BIG_ENDIAN);
3910
9
    offset += 1;
3911
3912
9
    if (offset >= end) return;
3913
3914
9
    if (num_channels == 0) {
3915
        /* 1+1 mode, so there is the possibility the second mono is in a different language */
3916
4
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_langcode2, tvb, offset, 1, ENC_BIG_ENDIAN);
3917
4
        offset += 1;
3918
4
    }
3919
3920
9
    if (offset >= end) return;
3921
3922
9
    if (bsmod < 2) {
3923
4
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_mainid, tvb, offset, 1, ENC_BIG_ENDIAN);
3924
4
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
3925
4
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3926
5
    } else {
3927
5
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_asvcflags, tvb, offset, 1, ENC_BIG_ENDIAN);
3928
5
    }
3929
9
    offset += 1;
3930
3931
9
    if (offset >= end) return;
3932
3933
9
    textlen = tvb_get_uint8(tvb, offset) >> 1;
3934
9
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_textlen, tvb, offset, 1, ENC_BIG_ENDIAN);
3935
9
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_textcode, tvb, offset, 1, ENC_BIG_ENDIAN);
3936
9
    offset += 1;
3937
9
    offset += textlen;
3938
3939
9
    if (offset >= end) return;
3940
3941
8
    lang = tvb_get_uint8(tvb, offset);
3942
8
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_lang1, tvb, offset, 1, ENC_BIG_ENDIAN);
3943
8
    proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_lang2, tvb, offset, 1, ENC_BIG_ENDIAN);
3944
8
    offset += 1;
3945
3946
8
    if (offset >= end) return;
3947
3948
7
    if (lang & 0x80) {
3949
1
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_lang1_bytes, tvb, offset, 3, ENC_ASCII);
3950
1
        offset += 3;
3951
1
    }
3952
3953
7
    if (offset >= end) return;
3954
3955
7
    if (lang & 0x40) {
3956
4
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_sysa_lang2_bytes, tvb, offset, 3, ENC_ASCII);
3957
4
        offset += 3;
3958
4
    }
3959
3960
7
    if (offset < end)
3961
7
        proto_tree_add_item(tree, hf_mpeg_descr_ac3_additional_info, tvb, offset, end - offset, ENC_NA);
3962
7
}
3963
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;
3969
3970
static int ett_mpeg_descriptor_nordig_lcd_v1_service_list;
3971
3972
14
#define MPEG_DESCR_NORDIG_LCD_V1_VISIBLE_SERVICE_FLAG_MASK 0x8000
3973
14
#define MPEG_DESCR_NORDIG_LCD_V1_RESERVED_MASK             0x4000
3974
14
#define MPEG_DESCR_NORDIG_LCD_V1_LCN_MASK                  0x3fff
3975
3976
static void
3977
proto_mpeg_descriptor_dissect_nordig_lcd_v1(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
3978
3
{
3979
3
    unsigned   end    = offset + len;
3980
3981
3
    if (len%4 != 0) {
3982
3
        return;
3983
3
    }
3984
3985
0
    uint16_t svc_id;
3986
0
    proto_tree * svc_tree;
3987
3988
0
    while (offset < end) {
3989
0
        svc_id = tvb_get_ntohs(tvb, offset);
3990
3991
0
        svc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3,
3992
0
                    ett_mpeg_descriptor_nordig_lcd_v1_service_list, NULL, "Service 0x%04x", svc_id);
3993
3994
0
        proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v1_service_list_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3995
0
        offset += 2;
3996
3997
0
        proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v1_service_list_visible_service_flag, tvb, offset, 2, ENC_BIG_ENDIAN);
3998
0
        proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v1_service_list_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
3999
0
        proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v1_service_list_logical_channel_number, tvb, offset, 2, ENC_BIG_ENDIAN);
4000
0
        offset += 2;
4001
0
    }
4002
4003
0
}
4004
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;
4016
4017
static int ett_mpeg_descriptor_nordig_lcd_v2_channel_list_list;
4018
static int ett_mpeg_descriptor_nordig_lcd_v2_service_list;
4019
4020
14
#define MPEG_DESCR_NORDIG_LCD_V2_VISIBLE_SERVICE_FLAG_MASK 0x8000
4021
14
#define MPEG_DESCR_NORDIG_LCD_V2_RESERVED_MASK             0x7c00
4022
14
#define MPEG_DESCR_NORDIG_LCD_V2_LCN_MASK                  0x03ff
4023
4024
static int
4025
proto_mpeg_descriptor_dissect_nordig_lcd_v2_measure_ch_list(tvbuff_t *tvb, unsigned offset, unsigned len)
4026
9
{
4027
9
    unsigned l_offset = offset;
4028
9
    if (len < 2) {
4029
0
        return len;
4030
0
    }
4031
9
    uint8_t channel_list_name_length = tvb_get_uint8(tvb, l_offset + 1);
4032
9
    l_offset += 2 + channel_list_name_length + 4;
4033
9
    if (l_offset > offset + len) {
4034
4
        return len;
4035
4
    }
4036
5
    uint8_t descriptor_len = tvb_get_uint8(tvb, l_offset - 1);
4037
5
    l_offset += descriptor_len;
4038
5
    if (l_offset > offset + len) {
4039
1
        return len;
4040
4
    } else {
4041
4
        return l_offset - offset;
4042
4
    }
4043
5
}
4044
4045
static void
4046
proto_mpeg_descriptor_dissect_nordig_lcd_v2(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
4047
8
{
4048
8
    unsigned   cnt    = len;
4049
8
    unsigned   end    = offset + len;
4050
4051
8
    proto_tree * channel_list_tree;
4052
4053
12
    while (cnt > 0) {
4054
9
        int ch_list_len = proto_mpeg_descriptor_dissect_nordig_lcd_v2_measure_ch_list(tvb, offset, end - offset);
4055
9
        uint8_t channel_list_id;
4056
9
        uint8_t channel_list_name_length;
4057
9
        uint8_t descriptor_length;
4058
4059
9
        channel_list_id = tvb_get_uint8(tvb, offset);
4060
9
        channel_list_tree = proto_tree_add_subtree_format(tree, tvb, offset, ch_list_len,
4061
9
                    ett_mpeg_descriptor_nordig_lcd_v2_channel_list_list, NULL, "Channel list 0x%02x", channel_list_id);
4062
9
        proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_channel_list_id, tvb, offset, 1, ENC_BIG_ENDIAN);
4063
9
        offset += 1;
4064
9
        cnt    -= 1;
4065
4066
9
        if (cnt < 1) return;
4067
9
        channel_list_name_length = tvb_get_uint8(tvb, offset);
4068
9
        proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_channel_list_name_length, tvb, offset, 1, ENC_BIG_ENDIAN);
4069
9
        offset += 1;
4070
9
        cnt    -= 1;
4071
4072
9
        channel_list_name_length = MIN(cnt, channel_list_name_length);
4073
9
        dvb_encoding_e  encoding;
4074
9
        unsigned enc_len = dvb_analyze_string_charset(tvb, offset, channel_list_name_length, &encoding);
4075
9
        dvb_add_chartbl(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_channel_list_name_encoding, tvb, offset, enc_len, encoding);
4076
4077
9
        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
9
        offset += channel_list_name_length;
4079
9
        cnt    -= channel_list_name_length;
4080
4081
9
        if (cnt < 3) return;
4082
5
        proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_country_code, tvb, offset, 3, ENC_ASCII);
4083
5
        offset += 3;
4084
5
        cnt    -= 3;
4085
4086
5
        if (cnt < 1) return;
4087
5
        descriptor_length = tvb_get_uint8(tvb, offset);
4088
5
        proto_tree_add_item(channel_list_tree, hf_mpeg_descr_nordig_lcd_v2_descriptor_length, tvb, offset, 1, ENC_BIG_ENDIAN);
4089
5
        offset += 1;
4090
5
        cnt    -= 1;
4091
4092
5
        descriptor_length = MIN(descriptor_length, cnt);
4093
100
        while (descriptor_length > 0) {
4094
96
            uint16_t svc_id;
4095
96
            proto_tree * svc_tree;
4096
4097
96
            if (cnt < 2) return;
4098
96
            svc_id = tvb_get_ntohs(tvb, offset);
4099
4100
96
            svc_tree = proto_tree_add_subtree_format(channel_list_tree, tvb, offset, 4,
4101
96
                        ett_mpeg_descriptor_nordig_lcd_v2_service_list, NULL, "Service 0x%04x", svc_id);
4102
4103
96
            proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v2_service_id, tvb, offset, 2, ENC_BIG_ENDIAN);
4104
96
            offset += 2;
4105
96
            cnt    -= 2;
4106
96
            descriptor_length -= 2;
4107
4108
96
            if (cnt < 2) return;
4109
95
            proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v2_visible_service_flag, tvb, offset, 2, ENC_BIG_ENDIAN);
4110
95
            proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v2_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
4111
95
            proto_tree_add_item(svc_tree, hf_mpeg_descr_nordig_lcd_v2_logical_channel_number, tvb, offset, 2, ENC_BIG_ENDIAN);
4112
95
            offset += 2;
4113
95
            cnt    -= 2;
4114
95
            descriptor_length -= 2;
4115
95
        }
4116
4117
5
    }
4118
8
}
4119
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;
4143
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;
4147
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;
4153
4154
4155
14
#define MPEG_DESCR_LOGON_INITIALIZE_CONTINUOUS_CARRIER_RESERVED_MASK              0xC0
4156
14
#define MPEG_DESCR_LOGON_INITIALIZE_CONTINUOUS_CARRIER_MASK                       0x20
4157
14
#define MPEG_DESCR_LOGON_INITIALIZE_SECURITY_HANDSHAKE_REQUIRED_MASK              0x10
4158
14
#define MPEG_DESCR_LOGON_INITIALIZE_PREFIX_FLAG_MASK                              0x08
4159
14
#define MPEG_DESCR_LOGON_INITIALIZE_DATA_UNIT_LABELLING_FLAG_MASK                 0x04
4160
14
#define MPEG_DESCR_LOGON_INITIALIZE_MINI_SLOT_FLAG_MASK                           0x02
4161
14
#define MPEG_DESCR_LOGON_INITIALIZE_CONTENTION_BASED_MINI_SLOT_FLAG_MASK          0x01
4162
4163
14
#define MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_RESERVED_MASK              0x80
4164
17
#define MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_MASK                       0x40
4165
17
#define MPEG_DESCR_LOGON_INITIALIZE_TRAFFIC_BURST_TYPE_MASK                       0x20
4166
4167
14
#define MPEG_DESCR_LOGON_INITIALIZE_RETURN_TRF_PID_MASK                         0x1FFF
4168
14
#define MPEG_DESCR_LOGON_INITIALIZE_RETURN_CTRL_MNGM_PID_RESERVED_MASK          0xE000
4169
14
#define MPEG_DESCR_LOGON_INITIALIZE_RETURN_CTRL_MNGM_PID_MASK                   0x1FFF
4170
4171
15
#define MPEG_DESCR_LOGON_INITIALIZE_CONNECTIVITY_MASK                           0x1000
4172
14
#define MPEG_DESCR_LOGON_INITIALIZE_RETURN_VPI_RESERVED_MASK                    0xF0
4173
14
#define MPEG_DESCR_LOGON_INITIALIZE_RETURN_VPI_MASK                             0x0F
4174
4175
28
#define MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_RESERVED_MASK         0xF0
4176
28
#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
4179
4180
14
#define MPEG_DESCR_LOGON_INITIALIZE_VDBC_MAX_RESERVED_MASK                      0xF800
4181
14
#define MPEG_DESCR_LOGON_INITIALIZE_VDBC_MAX_MASK                               0x07FF
4182
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)
4186
3
{
4187
4188
3
    unsigned   end    = offset + len;
4189
3
    uint8_t flags;
4190
3
    uint16_t flags2;
4191
4192
3
    if (len >= 1)
4193
3
    {
4194
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_group_id,                        tvb, offset, 1, ENC_BIG_ENDIAN);
4195
3
        offset += 1;
4196
3
    }
4197
4198
3
    if (len >= 3)
4199
3
    {
4200
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_logon_id,                        tvb, offset, 2, ENC_BIG_ENDIAN);
4201
3
        offset += 2;
4202
3
    }
4203
4204
3
    if (len >= 4)
4205
3
    {
4206
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_continuous_carrier_reserved,     tvb, offset, 1, ENC_BIG_ENDIAN);
4207
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_continuous_carrier,              tvb, offset, 1, ENC_BIG_ENDIAN);
4208
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_security_handshake_required,     tvb, offset, 1, ENC_BIG_ENDIAN);
4209
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_prefix_flag,                     tvb, offset, 1, ENC_BIG_ENDIAN);
4210
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_data_unit_labelling_flag,        tvb, offset, 1, ENC_BIG_ENDIAN);
4211
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_mini_slot_flag,                  tvb, offset, 1, ENC_BIG_ENDIAN);
4212
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_contention_based_mini_slot_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
4213
3
        offset += 1;
4214
3
    }
4215
4216
3
    if (len >= 5)
4217
3
    {
4218
3
        flags = tvb_get_uint8(tvb, offset);
4219
4220
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_capacity_type_flag_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4221
3
        proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_capacity_type_flag,          tvb, offset, 1, ENC_BIG_ENDIAN);
4222
3
        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
3
        if (flags & MPEG_DESCR_LOGON_INITIALIZE_TRAFFIC_BURST_TYPE_MASK) {
4225
            /* Connectivity */
4226
1
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_connectivity, tvb, offset, 2, ENC_BIG_ENDIAN);
4227
1
            flags2 = tvb_get_ntohs(tvb, offset);
4228
1
            if (flags2 & MPEG_DESCR_LOGON_INITIALIZE_CONNECTIVITY_MASK) {
4229
                /* Else    { (out of order) */
4230
4231
                /* Return_signalling_VPI (4 bits reserved, 4 bits) */
4232
0
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_signalling_vpi_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4233
0
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_signalling_vpi, tvb, offset, 1, ENC_BIG_ENDIAN);
4234
0
                offset += 1;
4235
4236
                /* Return_signalling_VCI (16 bits) */
4237
0
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_signalling_vci, tvb, offset, 2, ENC_BIG_ENDIAN);
4238
0
                offset += 2;
4239
4240
                /* Forward_signalling_VPI (4 bits reserved, then 4 bits) */
4241
0
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_forward_signalling_vpi_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4242
0
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_forward_signalling_vpi, tvb, offset, 1, ENC_BIG_ENDIAN);
4243
0
                offset += 1;
4244
4245
                /* Forward_signalling_VCI (16 bits) */
4246
0
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_forward_signalling_vci, tvb, offset, 2, ENC_BIG_ENDIAN);
4247
0
                offset += 2;
4248
1
            } else {
4249
                /* If (Connectivity == 0) {  */
4250
4251
                /* Return_signalling_VPI (4 bits reserved, then 4 bits) */
4252
1
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_vpi_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
4253
1
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_vpi, tvb, offset, 1, ENC_BIG_ENDIAN);
4254
1
                offset += 1;
4255
4256
                /* Return_signalling_VCI (16 bits) */
4257
1
                proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_vci, tvb, offset, 2, ENC_BIG_ENDIAN);
4258
1
                offset += 2;
4259
4260
1
            }
4261
2
        } else {
4262
2
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_trf_pid, tvb, offset, 2, ENC_BIG_ENDIAN);
4263
2
            offset += 2;
4264
4265
2
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
4266
2
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid, tvb, offset, 2, ENC_BIG_ENDIAN);
4267
2
            offset += 2;
4268
2
        }
4269
4270
3
        if ((offset < end) && (flags & MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_MASK)) {
4271
4272
            /* CRA_level (3 bytes) */
4273
3
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_cra_level,         tvb, offset, 3, ENC_BIG_ENDIAN);
4274
3
            offset += 3;
4275
4276
            /* VBDC_max (5 bits reserved, 11 bits) */
4277
3
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_vbdc_max_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
4278
3
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_vbdc_max,          tvb, offset, 2, ENC_BIG_ENDIAN);
4279
3
            offset += 2;
4280
4281
            /* RBDC_max (3 bytes) */
4282
3
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_rbdc_max,          tvb, offset, 3, ENC_BIG_ENDIAN);
4283
3
            offset += 3;
4284
4285
            /* RBDC timeout (2 bytes) */
4286
3
            proto_tree_add_item(tree, hf_mpeg_descr_logon_initialize_rbdc_timeout,      tvb, offset, 2, ENC_BIG_ENDIAN);
4287
            /*offset += 2;*/
4288
3
        }
4289
3
    }
4290
3
}
4291
4292
/* 0xA7 RCS Content Descriptor */
4293
static int hf_mpeg_descr_rcs_content_table_id;
4294
4295
static void
4296
proto_mpeg_descriptor_dissect_rcs_content(tvbuff_t *tvb, unsigned offset, unsigned len, proto_tree *tree)
4297
6
{
4298
6
    unsigned end = offset + len;
4299
4300
481
    while (offset < end) {
4301
475
        proto_tree_add_item(tree, hf_mpeg_descr_rcs_content_table_id, tvb, offset, 1, ENC_BIG_ENDIAN);
4302
475
        offset += 1;
4303
475
    }
4304
6
}
4305
4306
/* Private descriptors
4307
   these functions replace proto_mpeg_descriptor_dissect(), they get to see the whole descriptor */
4308
4309
0
#define CIPLUS_DESC_TAG_CNT_LBL 0xCB
4310
0
#define CIPLUS_DESC_TAG_SVC     0xCC
4311
0
#define CIPLUS_DESC_TAG_PROT    0xCE
4312
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}
4319
};
4320
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;
4326
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;
4335
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;
4341
4342
static const true_false_string tfs_prot_noprot = { "CI+ protection required", "CI+ protection not required" };
4343
4344
4345
static unsigned
4346
proto_mpeg_descriptor_dissect_private_ciplus(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4347
0
{
4348
0
    unsigned     offset_start;
4349
0
    uint8_t      tag, len;
4350
0
    const char *tag_str;
4351
0
    proto_item  *di;
4352
0
    proto_tree  *descriptor_tree;
4353
4354
0
    offset_start=offset;
4355
4356
0
    tag = tvb_get_uint8(tvb, offset);
4357
0
    tag_str = try_val_to_str(tag, mpeg_descriptor_ciplus_tag_vals);
4358
0
    if (!tag_str)
4359
0
        return 0;
4360
4361
0
    descriptor_tree = proto_tree_add_subtree_format(tree, tvb, offset_start, -1,
4362
0
                ett_mpeg_descriptor, &di, "CI+ private descriptor Tag=0x%02x", tag);
4363
4364
0
    proto_tree_add_uint_format(descriptor_tree, hf_mpeg_descriptor_tag,
4365
0
            tvb, offset, 1, tag, "Descriptor Tag: %s (0x%02x)", tag_str, tag);
4366
0
    offset += 1;
4367
4368
0
    len = tvb_get_uint8(tvb, offset);
4369
0
    proto_tree_add_item(descriptor_tree, hf_mpeg_descriptor_length, tvb, offset, 1, ENC_BIG_ENDIAN);
4370
0
    offset += 1;
4371
4372
0
    if (tag==CIPLUS_DESC_TAG_CNT_LBL) {
4373
0
        proto_tree_add_item(tree, hf_mpeg_descr_ciplus_cl_cb_min, tvb, offset, 1, ENC_BIG_ENDIAN);
4374
0
        offset += 1;
4375
4376
0
        proto_tree_add_item(tree, hf_mpeg_descr_ciplus_cl_cb_max, tvb, offset, 1, ENC_BIG_ENDIAN);
4377
0
        offset += 1;
4378
4379
0
        proto_tree_add_item(tree, hf_mpeg_descr_ciplus_cl_lang, tvb, offset, 3, ENC_ASCII);
4380
0
        offset += 3;
4381
4382
0
        proto_tree_add_item(tree, hf_mpeg_descr_ciplus_cl_label, tvb, offset, len-offset, ENC_ASCII);
4383
0
        offset += len-offset;
4384
0
    }
4385
0
    else if (tag==CIPLUS_DESC_TAG_SVC) {
4386
0
        uint8_t str_len_byte;
4387
4388
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_id, tvb, offset, 2, ENC_BIG_ENDIAN);
4389
0
        offset += 2;
4390
4391
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_type, tvb, offset, 1, ENC_BIG_ENDIAN);
4392
0
        offset += 1;
4393
4394
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_visible, tvb, offset, 2, ENC_BIG_ENDIAN);
4395
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_selectable, tvb, offset, 2, ENC_BIG_ENDIAN);
4396
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_lcn, tvb, offset, 2, ENC_BIG_ENDIAN);
4397
0
        offset += 2;
4398
4399
0
        str_len_byte = tvb_get_uint8(tvb, offset);
4400
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_prov_name, tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN);
4401
0
        offset += 1+str_len_byte;
4402
4403
0
        str_len_byte = tvb_get_uint8(tvb, offset);
4404
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_svc_name, tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN);
4405
0
        offset += 1+str_len_byte;
4406
0
    }
4407
0
    else if (tag==CIPLUS_DESC_TAG_PROT) {
4408
0
        bool      match_brand_flag;
4409
0
        uint8_t   num_brands, i;
4410
0
        unsigned  remaining;
4411
4412
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_prot_free_ci_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
4413
0
        match_brand_flag = ((tvb_get_uint8(tvb, offset) & 0x40) == 0x40);
4414
0
        proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_prot_match_brand_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
4415
0
        offset++;
4416
4417
0
        if (match_brand_flag) {
4418
0
            num_brands = tvb_get_uint8(tvb, offset);
4419
0
            proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_prot_num_entries, tvb, offset, 1, ENC_BIG_ENDIAN);
4420
0
            offset++;
4421
0
            for (i=0; i<num_brands; i++) {
4422
0
                proto_tree_add_item(descriptor_tree, hf_mpeg_descr_ciplus_prot_brand_id, tvb, offset, 2, ENC_BIG_ENDIAN);
4423
0
                offset += 2;
4424
0
            }
4425
0
        }
4426
4427
0
        remaining = offset_start+2+len - offset;
4428
0
        if (remaining > 0) {
4429
0
            proto_tree_add_item(descriptor_tree, hf_mpeg_descr_private_data, tvb, offset, remaining, ENC_NA);
4430
0
            offset += remaining;
4431
0
        }
4432
0
    }
4433
4434
0
    proto_item_set_len(di, offset-offset_start);
4435
0
    return offset-offset_start;
4436
0
}
4437
4438
4439
/* Common dissector */
4440
4441
unsigned
4442
proto_mpeg_descriptor_dissect(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4443
2.84k
{
4444
2.84k
    unsigned    tag, len;
4445
4446
2.84k
    proto_tree *descriptor_tree;
4447
4448
2.84k
    tag = tvb_get_uint8(tvb, offset);
4449
2.84k
    len = tvb_get_uint8(tvb, offset + 1);
4450
4451
2.84k
    descriptor_tree = proto_tree_add_subtree_format(tree, tvb, offset, len + 2,
4452
2.84k
                        ett_mpeg_descriptor, NULL, "Descriptor Tag=0x%02x", tag);
4453
4454
2.84k
    proto_tree_add_item(descriptor_tree, hf_mpeg_descriptor_tag,    tvb, offset, 1, ENC_BIG_ENDIAN);
4455
2.84k
    offset += 1;
4456
4457
2.84k
    proto_tree_add_item(descriptor_tree, hf_mpeg_descriptor_length, tvb, offset, 1, ENC_BIG_ENDIAN);
4458
2.84k
    offset += 1;
4459
4460
2.84k
    if (len == 0)
4461
1.12k
        return 2;
4462
4463
1.71k
    switch (tag) {
4464
190
        case 0x02: /* Video Stream Descriptor */
4465
190
            proto_mpeg_descriptor_dissect_video_stream(tvb, offset, descriptor_tree);
4466
190
            break;
4467
50
        case 0x03: /* Audio Stream Descriptor */
4468
50
            proto_mpeg_descriptor_dissect_audio_stream(tvb, offset, descriptor_tree);
4469
50
            break;
4470
16
        case 0x05: /* Registration Descriptor */
4471
16
            proto_mpeg_descriptor_dissect_registration(tvb, offset, len, descriptor_tree);
4472
16
            break;
4473
9
        case 0x06: /* Data Stream Alignment Descriptor */
4474
9
            proto_mpeg_descriptor_dissect_data_stream_alignment(tvb, offset, descriptor_tree);
4475
9
            break;
4476
24
        case 0x09: /* CA Descriptor */
4477
24
            proto_mpeg_descriptor_dissect_ca(tvb, offset, len, descriptor_tree);
4478
24
            break;
4479
11
        case 0x0A: /* ISO 639 Language Descriptor */
4480
11
            proto_mpeg_descriptor_dissect_iso639(tvb, offset, len, descriptor_tree);
4481
11
            break;
4482
5
        case 0x0B: /* System Clock Descriptor */
4483
5
            proto_mpeg_descriptor_dissect_system_clock(tvb, offset, descriptor_tree);
4484
5
            break;
4485
6
        case 0x0E: /* Maximum Bitrate Descriptor */
4486
6
            proto_mpeg_descriptor_dissect_max_bitrate(tvb, offset, descriptor_tree);
4487
6
            break;
4488
66
        case 0x10: /* Smoothing Buffer Descriptor */
4489
66
            proto_mpeg_descriptor_dissect_smoothing_buffer(tvb, offset, descriptor_tree);
4490
66
            break;
4491
27
        case 0x11: /* STD Descriptor */
4492
27
            proto_mpeg_descriptor_dissect_std(tvb, offset, descriptor_tree);
4493
27
            break;
4494
2
        case 0x13: /* Carousel Identifier Descriptor */
4495
2
            proto_mpeg_descriptor_dissect_carousel_identifier(tvb, offset, len, descriptor_tree);
4496
2
            break;
4497
2
        case 0x14: /* Association Tag Descriptor */
4498
2
            proto_mpeg_descriptor_dissect_association_tag(tvb, offset, len, descriptor_tree);
4499
2
            break;
4500
11
        case 0x28: /* AVC Video Descriptor */
4501
11
            proto_mpeg_descriptor_dissect_avc_vid(tvb, offset, descriptor_tree);
4502
11
            break;
4503
28
        case 0x40: /* Network Name Descriptor */
4504
28
            proto_mpeg_descriptor_dissect_network_name(tvb, offset, len, descriptor_tree);
4505
28
            break;
4506
22
        case 0x41: /* Service List Descriptor */
4507
22
            proto_mpeg_descriptor_dissect_service_list(tvb, offset, len, descriptor_tree);
4508
22
            break;
4509
3
        case 0x42: /* Stuffing Descriptor */
4510
3
            proto_mpeg_descriptor_stuffing(tvb, offset, len, descriptor_tree);
4511
3
            break;
4512
3
        case 0x43: /* Satellite Delivery System Descriptor */
4513
3
            proto_mpeg_descriptor_dissect_satellite_delivery(tvb, offset, descriptor_tree);
4514
3
            break;
4515
2
        case 0x44: /* Cable Delivery System Descriptor */
4516
2
            proto_mpeg_descriptor_dissect_cable_delivery(tvb, offset, descriptor_tree);
4517
2
            break;
4518
9
        case 0x45: /* VBI Data Descriptor */
4519
9
            proto_mpeg_descriptor_dissect_vbi_data(tvb, offset, len, descriptor_tree);
4520
9
            break;
4521
4
        case 0x47: /* Bouquet Name Descriptor */
4522
4
            proto_mpeg_descriptor_dissect_bouquet_name(tvb, offset, len, descriptor_tree);
4523
4
            break;
4524
2
        case 0x48: /* Service Descriptor */
4525
2
            proto_mpeg_descriptor_dissect_service(tvb, offset, descriptor_tree);
4526
2
            break;
4527
7
        case 0x49: /* Country Availability Descriptor */
4528
7
            proto_mpeg_descriptor_dissect_country_availability_descriptor(tvb, offset, len, descriptor_tree);
4529
7
            break;
4530
12
        case 0x4A: /* Linkage Descriptor */
4531
12
            proto_mpeg_descriptor_dissect_linkage(tvb, offset, len, descriptor_tree);
4532
12
            break;
4533
5
        case 0x4B: /* NVOD Reference Descriptor */
4534
5
            proto_mpeg_descriptor_dissect_nvod_reference(tvb, offset, len, descriptor_tree);
4535
5
            break;
4536
3
        case 0x4C: /* Time Shifted Service Descriptor */
4537
3
            proto_mpeg_descriptor_dissect_time_shifted_service(tvb, offset, descriptor_tree);
4538
3
            break;
4539
18
        case 0x4D: /* Short Event Descriptor */
4540
18
            proto_mpeg_descriptor_dissect_short_event(tvb, offset, descriptor_tree);
4541
18
            break;
4542
3
        case 0x4E: /* Extended Event Descriptor */
4543
3
            proto_mpeg_descriptor_dissect_extended_event(tvb, offset, descriptor_tree);
4544
3
            break;
4545
5
        case 0x4F: /* Time Shifted Event Descriptor */
4546
5
            proto_mpeg_descriptor_dissect_time_shifted_event(tvb, offset, descriptor_tree);
4547
5
            break;
4548
7
        case 0x50: /* Component Descriptor */
4549
7
            proto_mpeg_descriptor_dissect_component(tvb, offset, len, descriptor_tree);
4550
7
            break;
4551
17
        case 0x51: /* Mosaic Descriptor */
4552
17
            proto_mpeg_descriptor_dissect_mosaic(tvb, offset, len, descriptor_tree);
4553
17
            break;
4554
3
        case 0x52: /* Stream Identifier Descriptor */
4555
3
            proto_mpeg_descriptor_dissect_stream_identifier(tvb, offset, descriptor_tree);
4556
3
            break;
4557
43
        case 0x53: /* CA Identifier Descriptor */
4558
43
            proto_mpeg_descriptor_dissect_ca_identifier(tvb, offset, len, descriptor_tree);
4559
43
            break;
4560
16
        case 0x54: /* Content Descriptor */
4561
16
            proto_mpeg_descriptor_dissect_content(tvb, offset, len, descriptor_tree);
4562
16
            break;
4563
3
        case 0x55: /* Parental Rating Descriptor */
4564
3
            proto_mpeg_descriptor_dissect_parental_rating(tvb, offset, descriptor_tree);
4565
3
            break;
4566
7
        case 0x56: /* Teletext Descriptor */
4567
7
            proto_mpeg_descriptor_dissect_teletext(tvb, offset, len, descriptor_tree);
4568
7
            break;
4569
13
        case 0x57: /* Telephone Descriptor */
4570
13
            proto_mpeg_descriptor_dissect_telephone(tvb, offset, descriptor_tree);
4571
13
            break;
4572
25
        case 0x58: /* Local Time Offset Descriptor */
4573
25
            proto_mpeg_descriptor_dissect_local_time_offset(tvb, offset, len, descriptor_tree);
4574
25
            break;
4575
9
        case 0x59: /* Subtitling Descriptor */
4576
9
            proto_mpeg_descriptor_dissect_subtitling(tvb, offset, len, descriptor_tree);
4577
9
            break;
4578
4
        case 0x5A: /* Terrestrial Delivery System Descriptor */
4579
4
            proto_mpeg_descriptor_dissect_terrestrial_delivery(tvb, offset, descriptor_tree);
4580
4
            break;
4581
61
        case 0x5B: /* Multilingual Network Name Descriptor */
4582
61
            proto_mpeg_descriptor_dissect_multilng_network_name_desc(tvb, offset, len, descriptor_tree);
4583
61
            break;
4584
21
        case 0x5C: /* Multilingual Bouquet Name Descriptor */
4585
21
            proto_mpeg_descriptor_dissect_multilng_bouquet_name_desc(tvb, offset, len, descriptor_tree);
4586
21
            break;
4587
8
        case 0x5D: /* Multilingual Service Name Descriptor */
4588
8
            proto_mpeg_descriptor_dissect_multilng_srv_name_desc(tvb, offset, len, descriptor_tree);
4589
8
            break;
4590
15
        case 0x5E: /* Multilingual Component Descriptor */
4591
15
            proto_mpeg_descriptor_dissect_multilng_component_desc(tvb, offset, len, descriptor_tree);
4592
15
            break;
4593
12
        case 0x5F: /* Private Data Specifier Descriptor */
4594
12
            proto_mpeg_descriptor_dissect_private_data_specifier(tvb, offset, descriptor_tree);
4595
12
            break;
4596
24
        case 0x61: /* Short Smoothing Buffer Descriptor */
4597
24
            proto_mpeg_descriptor_dissect_short_smoothing_buffer(tvb, offset, len, descriptor_tree);
4598
24
            break;
4599
5
        case 0x63: /* Partial Transport Stream Descriptor */
4600
5
            proto_mpeg_descriptor_dissect_partial_transport_stream(tvb, offset, len, descriptor_tree);
4601
5
            break;
4602
18
        case 0x64: /* Data Broadcast Descriptor */
4603
18
            proto_mpeg_descriptor_dissect_data_bcast(tvb, offset, descriptor_tree);
4604
18
            break;
4605
17
        case 0x66: /* Data Broadcast ID Descriptor */
4606
17
            proto_mpeg_descriptor_dissect_data_bcast_id(tvb, offset, len, descriptor_tree);
4607
17
            break;
4608
9
        case 0x69: /* PDC Descriptor */
4609
9
            proto_mpeg_descriptor_dissect_pdc(tvb, offset, descriptor_tree);
4610
9
            break;
4611
26
        case 0x6A: /* AC-3 Descriptor */
4612
26
            proto_mpeg_descriptor_dissect_ac3(tvb, offset, len, descriptor_tree);
4613
26
            break;
4614
17
        case 0x6F: /* Application Signalling Descriptor */
4615
17
            proto_mpeg_descriptor_dissect_app_sig(tvb, offset, len, descriptor_tree);
4616
17
            break;
4617
3
        case 0x71: /* Service Identifier Descriptor */
4618
3
            proto_mpeg_descriptor_dissect_service_identifier(tvb, offset, len, descriptor_tree);
4619
3
            break;
4620
6
        case 0x72: /* Service Availability Descriptor */
4621
6
            proto_mpeg_descriptor_dissect_service_availability(tvb, offset, len, descriptor_tree);
4622
6
            break;
4623
7
        case 0x73: /* Default Authority Descriptor */
4624
7
            proto_mpeg_descriptor_dissect_default_authority(tvb, offset, len, descriptor_tree);
4625
7
            break;
4626
10
        case 0x75: /* TVA ID Descriptor */
4627
10
            proto_mpeg_descriptor_dissect_tva_id(tvb, offset, len, descriptor_tree);
4628
10
            break;
4629
23
        case 0x76: /* Content Identifier Descriptor */
4630
23
            proto_mpeg_descriptor_dissect_content_identifier(tvb, offset, len, descriptor_tree);
4631
23
            break;
4632
4
        case 0x7D: /* XAIT Content Location Descriptor */
4633
4
            proto_mpeg_descriptor_dissect_xait(tvb, offset, descriptor_tree);
4634
4
            break;
4635
11
        case 0x7E: /* FTA Content Management Descriptor */
4636
11
            proto_mpeg_descriptor_dissect_fta(tvb, offset, descriptor_tree);
4637
11
            break;
4638
4
        case 0x7F: /* Extension Descriptor */
4639
4
            proto_mpeg_descriptor_dissect_extension(tvb, offset, len, descriptor_tree);
4640
4
            break;
4641
10
        case 0x81: /* ATSC A/52 AC-3 Audio Descriptor */
4642
10
            proto_mpeg_descriptor_dissect_ac3_system_a(tvb, offset, len, descriptor_tree);
4643
10
            break;
4644
3
        case 0x83: /* NorDig Logical Channel Descriptor (version 1) */
4645
3
            proto_mpeg_descriptor_dissect_nordig_lcd_v1(tvb, offset, len, descriptor_tree);
4646
3
            break;
4647
8
        case 0x87: /* NorDig Logical Channel Descriptor (version 2) */
4648
8
            proto_mpeg_descriptor_dissect_nordig_lcd_v2(tvb, offset, len, descriptor_tree);
4649
8
            break;
4650
3
        case 0xA2: /* Logon Initialize Descriptor */
4651
3
            proto_mpeg_descriptor_dissect_logon_initialize(tvb, offset, len, descriptor_tree);
4652
3
            break;
4653
6
        case 0xA7: /* RCS Content Descriptor */
4654
6
            proto_mpeg_descriptor_dissect_rcs_content(tvb, offset, len, descriptor_tree);
4655
6
            break;
4656
685
        default:
4657
685
            proto_tree_add_item(descriptor_tree, hf_mpeg_descriptor_data, tvb, offset, len, ENC_NA);
4658
685
            break;
4659
1.71k
    }
4660
4661
1.31k
    return len + 2;
4662
1.71k
}
4663
4664
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)
4669
627
{
4670
    /* we use the reserved value to indicate that no private context is active */
4671
627
    uint32_t private_data_specifier = PRIVATE_DATA_SPECIFIER_RESERVED;
4672
627
    unsigned   offset_start;
4673
627
    unsigned   desc_len;
4674
627
    uint8_t tag;
4675
4676
627
    offset_start = offset;
4677
4678
2.73k
    while ((offset - offset_start) < loop_len) {
4679
        /* don't increment offset in our pre-checks */
4680
2.15k
        tag = tvb_get_uint8(tvb, offset);
4681
2.15k
        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
12
            private_data_specifier = tvb_get_ntohl(tvb, offset+2);
4685
12
        }
4686
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
2.15k
        if (try_val_to_str(tag, mpeg_descriptor_tag_vals)) {
4691
1.91k
            desc_len = proto_mpeg_descriptor_dissect(tvb, offset, tree);
4692
1.91k
        }
4693
236
        else {
4694
236
            switch (private_data_specifier) {
4695
0
                case PRIVATE_DATA_SPECIFIER_CIPLUS_LLP:
4696
0
                    desc_len = proto_mpeg_descriptor_dissect_private_ciplus(tvb, offset, tree);
4697
0
                    break;
4698
186
                default:
4699
186
                    desc_len = 0;
4700
186
                    break;
4701
236
            }
4702
186
            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
186
                desc_len = proto_mpeg_descriptor_dissect(tvb, offset, tree);
4706
186
            }
4707
186
        }
4708
4709
2.10k
        offset += desc_len;
4710
2.10k
    }
4711
4712
577
    return offset-offset_start;
4713
627
}
4714
4715
4716
void
4717
proto_register_mpeg_descriptor(void)
4718
14
{
4719
4720
14
    static hf_register_info hf[] = {
4721
14
        { &hf_mpeg_descriptor_tag, {
4722
14
            "Descriptor Tag", "mpeg_descr.tag",
4723
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descriptor_tag_vals_ext, 0, NULL, HFILL
4724
14
        } },
4725
4726
14
        { &hf_mpeg_descriptor_length, {
4727
14
            "Descriptor Length", "mpeg_descr.len",
4728
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
4729
14
        } },
4730
4731
14
        { &hf_mpeg_descriptor_data, {
4732
14
            "Descriptor Data", "mpeg_descr.data",
4733
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
4734
14
        } },
4735
4736
        /* 0x02 Video Stream Descriptor */
4737
14
        { &hf_mpeg_descr_video_stream_multiple_frame_rate_flag, {
4738
14
            "Multiple Frame Rate Flag", "mpeg_descr.video_stream.multiple_frame_rate_flag",
4739
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_video_stream_multiple_frame_rate_flag_vals),
4740
14
            MPEG_DESCR_VIDEO_STREAM_MULTIPLE_FRAME_RATE_FLAG_MASK, NULL, HFILL
4741
14
        } },
4742
4743
14
        { &hf_mpeg_descr_video_stream_frame_rate_code, {
4744
14
            "Frame Rate Code", "mpeg_descr.video_stream.frame_rate_code",
4745
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_VIDEO_STREAM_FRAME_RATE_CODE_MASK, NULL, HFILL
4746
14
        } },
4747
4748
14
        { &hf_mpeg_descr_video_stream_mpeg1_only_flag, {
4749
14
            "MPEG1 Only Flag", "mpeg_descr.video_stream.mpeg1_only_flag",
4750
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_VIDEO_STREAM_MPEG1_ONLY_FLAG_MASK, NULL, HFILL
4751
14
        } },
4752
4753
14
        { &hf_mpeg_descr_video_stream_constrained_parameter_flag, {
4754
14
            "Constrained Parameter Flag", "mpeg_descr.video_stream.constrained_parameter_flag",
4755
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_VIDEO_STREAM_CONSTRAINED_PARAMETER_FLAG_MASK, NULL, HFILL
4756
14
        } },
4757
4758
14
        { &hf_mpeg_descr_video_stream_still_picture_flag, {
4759
14
            "Still Picture Flag", "mpeg_descr.video_stream.still_picture_flag",
4760
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_VIDEO_STREAM_STILL_PICTURE_FLAG_MASK, NULL, HFILL
4761
14
        } },
4762
4763
14
        { &hf_mpeg_descr_video_stream_profile_and_level_indication, {
4764
14
            "Profile and Level Indication", "mpeg_descr.video_stream.profile_level_ind",
4765
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
4766
14
        } },
4767
4768
14
        { &hf_mpeg_descr_video_stream_chroma_format, {
4769
14
            "Chroma Format", "mpeg_descr.video_stream.chroma_format",
4770
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
4771
14
        } },
4772
4773
14
        { &hf_mpeg_descr_video_stream_frame_rate_extension_flag, {
4774
14
            "Frame Rate Extension Flag", "mpeg_descr.video_stream.frame_rate_extension_flag",
4775
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_VIDEO_STREAM_FRAME_RATE_EXTENSION_FLAG_MASK, NULL, HFILL
4776
14
        } },
4777
4778
14
        { &hf_mpeg_descr_video_stream_reserved, {
4779
14
            "Reserved", "mpeg_descr.video_stream.reserved",
4780
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_VIDEO_STREAM_RESERVED_MASK, NULL, HFILL
4781
14
        } },
4782
4783
        /* 0x03 Audio Stream Descriptor */
4784
14
        { &hf_mpeg_descr_audio_stream_free_format_flag, {
4785
14
            "Free Format Flag", "mpeg_descr.audio_stream.free_format_flag",
4786
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_audio_stream_free_format_flag_vals), MPEG_DESCR_AUDIO_STREAM_FREE_FORMAT_FLAG_MASK, NULL, HFILL
4787
14
        } },
4788
4789
14
        { &hf_mpeg_descr_audio_stream_id, {
4790
14
            "ID", "mpeg_descr.audio_stream.id",
4791
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_audio_stream_id_vals), MPEG_DESCR_AUDIO_STREAM_ID_MASK, NULL, HFILL
4792
14
        } },
4793
4794
14
        { &hf_mpeg_descr_audio_stream_layer, {
4795
14
            "Layer", "mpeg_descr.audio_stream.layer",
4796
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AUDIO_STREAM_LAYER_MASK, NULL, HFILL
4797
14
        } },
4798
4799
14
        { &hf_mpeg_descr_audio_stream_variable_rate_audio_indicator, {
4800
14
            "Variable Rate Audio Indicator", "mpeg_descr.audio_stream.vbr_indicator",
4801
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_audio_stream_variable_rate_audio_indicator_vals),
4802
14
            MPEG_DESCR_AUDIO_STREAM_VARIABLE_RATE_AUDIO_INDICATOR_MASK, NULL, HFILL
4803
14
        } },
4804
4805
14
        { &hf_mpeg_descr_audio_stream_reserved, {
4806
14
            "Reserved", "mpeg_descr.audio_stream.reserved",
4807
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AUDIO_STREAM_RESERVED_MASK, NULL, HFILL
4808
14
        } },
4809
4810
        /* 0x05 Registration Descriptor */
4811
14
        { &hf_mpeg_descr_reg_form_id, {
4812
14
            "Format identifier", "mpeg_descr.registration.format_identifier",
4813
14
            FT_UINT32, BASE_HEX, VALS(mpeg_descr_registration_reg_form_vals), 0, NULL, HFILL
4814
14
        } },
4815
4816
14
        { &hf_mpeg_descr_reg_add_id_inf, {
4817
14
            "Additional identification info", "mpeg_descr.registration.add_id_info",
4818
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
4819
14
        } },
4820
4821
        /* 0x06 Data Stream Alignment Descriptor */
4822
14
        { &hf_mpeg_descr_data_stream_alignment, {
4823
14
            "Data Stream Alignment", "mpeg_descr.data_stream_alignment.alignment",
4824
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_data_stream_alignment_vals), 0, NULL, HFILL
4825
14
        } },
4826
4827
        /* 0x09 CA Descriptor */
4828
14
        { &hf_mpeg_descr_ca_system_id, {
4829
14
            "System ID", "mpeg_descr.ca.sys_id",
4830
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
4831
14
        } },
4832
4833
14
        { &hf_mpeg_descr_ca_reserved, {
4834
14
            "Reserved", "mpeg_descr.ca.reserved",
4835
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_CA_RESERVED_MASK, NULL, HFILL
4836
14
        } },
4837
4838
14
        { &hf_mpeg_descr_ca_pid, {
4839
14
            "CA PID", "mpeg_descr.ca.pid",
4840
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_CA_PID_MASK, NULL, HFILL
4841
14
        } },
4842
4843
14
        { &hf_mpeg_descr_ca_private, {
4844
14
            "Private bytes", "mpeg_descr.ca.private",
4845
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
4846
14
        } },
4847
4848
        /* 0x0A ISO 639 Language Descriptor */
4849
14
        { &hf_mpeg_descr_iso639_lang, {
4850
14
            "ISO 639 Language Code", "mpeg_descr.lang.code",
4851
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
4852
14
        } },
4853
4854
14
        { &hf_mpeg_descr_iso639_type, {
4855
14
            "ISO 639 Language Type", "mpeg_descr.lang.type",
4856
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_iso639_type_vals), 0, NULL, HFILL
4857
14
        } },
4858
4859
        /* 0x0B System Clock Descriptor */
4860
14
        { &hf_mpeg_descr_system_clock_external_clock_reference_indicator, {
4861
14
            "External Clock Reference Indicator", "mpeg_descr.sys_clk.external_clk_ref_ind",
4862
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_SYSTEM_CLOCK_EXTERNAL_CLOCK_REFERENCE_INDICATOR_MASK, NULL, HFILL
4863
14
        } },
4864
4865
14
        { &hf_mpeg_descr_system_clock_reserved1, {
4866
14
            "Reserved", "mpeg_descr.sys_clk.reserved1",
4867
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_SYSTEM_CLOCK_RESERVED1_MASK, NULL, HFILL
4868
14
        } },
4869
4870
14
        { &hf_mpeg_descr_system_clock_accuracy_integer, {
4871
14
            "Accuracy Integer", "mpeg_descr.sys_clk.accuracy_integer",
4872
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_SYSTEM_CLOCK_ACCURACY_INTEGER_MASK, NULL, HFILL
4873
14
        } },
4874
4875
14
        { &hf_mpeg_descr_system_clock_accuracy_exponent, {
4876
14
            "Accuracy Exponent", "mpeg_descr.sys_clk.accuracy_exponent",
4877
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_SYSTEM_CLOCK_ACCURACY_EXPONENT_MASK, NULL, HFILL
4878
14
        } },
4879
4880
14
        { &hf_mpeg_descr_system_clock_reserved2, {
4881
14
            "Reserved", "mpeg_descr.sys_clk.reserved2",
4882
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_SYSTEM_CLOCK_RESERVED2_MASK, NULL, HFILL
4883
14
        } },
4884
4885
        /* 0x0E Maximum Bitrate Descriptor */
4886
14
        { &hf_mpeg_descr_max_bitrate_reserved, {
4887
14
            "Maximum Bitrate Reserved", "mpeg_descr.max_bitrate.reserved",
4888
14
            FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_MAX_BITRATE_RESERVED_MASK, NULL, HFILL
4889
14
        } },
4890
4891
14
        { &hf_mpeg_descr_max_bitrate, {
4892
14
            "Maximum Bitrate", "mpeg_descr.max_bitrate.rate",
4893
14
            FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_MAX_BITRATE_MASK, NULL, HFILL
4894
14
        } },
4895
4896
        /* 0x10 Smoothing Buffer Descriptor */
4897
14
        { &hf_mpeg_descr_smoothing_buffer_reserved1, {
4898
14
            "Reserved", "mpeg_descr.smoothing_buf.reserved1",
4899
14
            FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_SMOOTHING_BUFFER_RESERVED1_MASK, NULL, HFILL
4900
14
        } },
4901
4902
14
        { &hf_mpeg_descr_smoothing_buffer_leak_rate, {
4903
14
            "Leak Rate", "mpeg_descr.smoothing_buf.leak_rate",
4904
14
            FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_SMOOTHING_BUFFER_LEAK_RATE_MASK, NULL, HFILL
4905
14
        } },
4906
4907
14
        { &hf_mpeg_descr_smoothing_buffer_reserved2, {
4908
14
            "Reserved", "mpeg_descr.smoothing_buf.reserved2",
4909
14
            FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_SMOOTHING_BUFFER_RESERVED2_MASK, NULL, HFILL
4910
14
        } },
4911
4912
14
        { &hf_mpeg_descr_smoothing_buffer_size, {
4913
14
            "Buffer Size", "mpeg_descr.smoothing_buf.size",
4914
14
            FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_SMOOTHING_BUFFER_SIZE_MASK, NULL, HFILL
4915
14
        } },
4916
4917
        /* 0x11 STD Descriptor */
4918
14
        { &hf_mpeg_descr_std_reserved, {
4919
14
            "Reserved", "mpeg_descr.std.reserved",
4920
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_STD_RESERVED_MASK, NULL, HFILL
4921
14
        } },
4922
4923
14
        { &hf_mpeg_descr_std_leak_valid, {
4924
14
            "Leak Valid", "mpeg_descr.std.leak_valid",
4925
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_STD_LEAK_VALID_MASK, NULL, HFILL
4926
14
        } },
4927
4928
        /* 0x13 Carousel Identifier Descriptor */
4929
14
        { &hf_mpeg_descr_carousel_identifier_id, {
4930
14
            "Carousel ID", "mpeg_descr.carousel_identifier.id",
4931
14
            FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
4932
14
        } },
4933
4934
14
        { &hf_mpeg_descr_carousel_identifier_format_id, {
4935
14
            "Format ID", "mpeg_descr.carousel_identifier.format_id",
4936
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_carousel_identifier_format_id_vals), 0, NULL, HFILL
4937
14
        } },
4938
4939
14
        { &hf_mpeg_descr_carousel_identifier_module_version, {
4940
14
            "Module Version", "mpeg_descr.carousel_identifier.module_version",
4941
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
4942
14
        } },
4943
4944
14
        { &hf_mpeg_descr_carousel_identifier_module_id, {
4945
14
            "Module ID", "mpeg_descr.carousel_identifier.module_id",
4946
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
4947
14
        } },
4948
4949
14
        { &hf_mpeg_descr_carousel_identifier_block_size, {
4950
14
            "Block Size", "mpeg_descr.carousel_identifier.block_size",
4951
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
4952
14
        } },
4953
4954
14
        { &hf_mpeg_descr_carousel_identifier_module_size, {
4955
14
            "Module Size", "mpeg_descr.carousel_identifier.module_size",
4956
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
4957
14
        } },
4958
4959
14
        { &hf_mpeg_descr_carousel_identifier_compression_method, {
4960
14
            "Compression Method", "mpeg_descr.carousel_identifier.comp_method",
4961
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
4962
14
        } },
4963
4964
14
        { &hf_mpeg_descr_carousel_identifier_original_size, {
4965
14
            "Original Size", "mpeg_descr.carousel_identifier.orig_size",
4966
14
            FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
4967
14
        } },
4968
4969
14
        { &hf_mpeg_descr_carousel_identifier_timeout, {
4970
14
            "Timeout", "mpeg_descr.carousel_identifier.timeout",
4971
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
4972
14
        } },
4973
4974
14
        { &hf_mpeg_descr_carousel_identifier_object_key_len, {
4975
14
            "Object Key Length", "mpeg_descr.carousel_identifier.key_len",
4976
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
4977
14
        } },
4978
4979
14
        { &hf_mpeg_descr_carousel_identifier_object_key_data, {
4980
14
            "Object Key Data", "mpeg_descr.carousel_identifier.key_data",
4981
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
4982
14
        } },
4983
4984
14
        { &hf_mpeg_descr_carousel_identifier_private, {
4985
14
            "Private Bytes", "mpeg_descr.carousel_identifier.private",
4986
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
4987
14
        } },
4988
4989
        /* 0x14 Association Tag Descriptor */
4990
14
        { &hf_mpeg_descr_association_tag, {
4991
14
            "Association Tag", "mpeg_descr.assoc_tag.tag",
4992
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
4993
14
        } },
4994
4995
14
        { &hf_mpeg_descr_association_tag_use, {
4996
14
            "Use", "mpeg_descr.assoc_tag.use",
4997
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
4998
14
        } },
4999
5000
14
        { &hf_mpeg_descr_association_tag_selector_len, {
5001
14
            "Selector Length", "mpeg_descr.assoc_tag.selector_len",
5002
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5003
14
        } },
5004
5005
14
        { &hf_mpeg_descr_association_tag_transaction_id, {
5006
14
            "Transaction ID", "mpeg_descr.assoc_tag.transaction_id",
5007
14
            FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
5008
14
        } },
5009
5010
14
        { &hf_mpeg_descr_association_tag_timeout, {
5011
14
            "Timeout", "mpeg_descr.assoc_tag.timeout",
5012
14
            FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
5013
14
        } },
5014
5015
14
        { &hf_mpeg_descr_association_tag_selector_bytes, {
5016
14
            "Selector Bytes", "mpeg_descr.assoc_tag.selector_bytes",
5017
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5018
14
        } },
5019
5020
14
        { &hf_mpeg_descr_association_tag_private_bytes, {
5021
14
            "Private Bytes", "mpeg_descr.assoc_tag.private_bytes",
5022
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5023
14
        } },
5024
5025
        /* 0x28 AVC Video Descriptor */
5026
14
        { &hf_mpeg_descr_avc_vid_profile_idc, {
5027
14
            "Profile IDC", "mpeg_descr.avc_vid.profile_idc",
5028
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5029
14
        } },
5030
5031
14
        { &hf_mpeg_descr_avc_vid_constraint_set0_flag, {
5032
14
            "Constraint Set0 Flag", "mpeg_descr.avc_vid.constraint_set0",
5033
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_CONSTRAINT_SET0_FLAG_MASK, NULL, HFILL
5034
14
        } },
5035
5036
14
        { &hf_mpeg_descr_avc_vid_constraint_set1_flag, {
5037
14
            "Constraint Set1 Flag", "mpeg_descr.avc_vid.constraint_set1",
5038
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_CONSTRAINT_SET1_FLAG_MASK, NULL, HFILL
5039
14
        } },
5040
5041
14
        { &hf_mpeg_descr_avc_vid_constraint_set2_flag, {
5042
14
            "Constraint Set2 Flag", "mpeg_descr.avc_vid.constraint_set2",
5043
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_CONSTRAINT_SET2_FLAG_MASK, NULL, HFILL
5044
14
        } },
5045
5046
14
        { &hf_mpeg_descr_avc_vid_compatible_flags, {
5047
14
            "Constraint Compatible Flags", "mpeg_descr.avc_vid.compatible_flags",
5048
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AVC_VID_COMPATIBLE_FLAGS_MASK, NULL, HFILL
5049
14
        } },
5050
5051
14
        { &hf_mpeg_descr_avc_vid_level_idc, {
5052
14
            "Level IDC", "mpeg_descr.avc_vid.level_idc",
5053
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5054
14
        } },
5055
5056
14
        { &hf_mpeg_descr_avc_vid_still_present, {
5057
14
            "AVC Still Present", "mpeg_descr.avc_vid.still_present",
5058
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_STILL_PRESENT_MASK, NULL, HFILL
5059
14
        } },
5060
5061
14
        { &hf_mpeg_descr_avc_vid_24h_picture_flag, {
5062
14
            "AVC 24 Hour Picture Flag", "mpeg_descr.avc_vid.24h_picture_flag",
5063
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_AVC_VID_24H_PICTURE_FLAG_MASK, NULL, HFILL
5064
14
        } },
5065
5066
14
        { &hf_mpeg_descr_avc_vid_reserved, {
5067
14
            "Reserved", "mpeg_descr.avc_vid.reserved",
5068
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AVC_VID_RESERVED_MASK, NULL, HFILL
5069
14
        } },
5070
5071
        /* 0x40 Network Name Descriptor */
5072
14
        { &hf_mpeg_descr_network_name_encoding, {
5073
14
            "Network Name Encoding", "mpeg_descr.net_name.name_enc",
5074
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5075
14
        } },
5076
5077
14
        { &hf_mpeg_descr_network_name_descriptor, {
5078
14
            "Network Name", "mpeg_descr.net_name.name",
5079
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5080
14
        } },
5081
5082
        /* 0x41 Service List Descriptor */
5083
14
        { &hf_mpeg_descr_service_list_id, {
5084
14
            "Service ID", "mpeg_descr.svc_list.id",
5085
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5086
14
        } },
5087
5088
14
        { &hf_mpeg_descr_service_list_type, {
5089
14
            "Service Type", "mpeg_descr.svc_list.type",
5090
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_service_type_vals_ext, 0, NULL, HFILL
5091
14
        } },
5092
5093
        /* 0x42 Stuffing Descriptor */
5094
14
        { &hf_mpeg_descr_stuffing, {
5095
14
            "Stuffing", "mpeg_descr.stuffing",
5096
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5097
14
        } },
5098
5099
        /* 0x43 Satellite Delivery System Descriptor */
5100
14
        { &hf_mpeg_descr_satellite_delivery_frequency, {
5101
14
            "Frequency", "mpeg_descr.sat_delivery.freq",
5102
14
            FT_DOUBLE, BASE_NONE|BASE_UNIT_STRING, UNS(&units_ghz), 0, NULL, HFILL
5103
14
        } },
5104
5105
14
        { &hf_mpeg_descr_satellite_delivery_orbital_position, {
5106
14
            "Orbital Position", "mpeg_descr.sat_delivery.orbital_pos",
5107
14
            FT_FLOAT, BASE_NONE|BASE_UNIT_STRING, UNS(&units_degree_degrees), 0, NULL, HFILL
5108
14
        } },
5109
5110
14
        { &hf_mpeg_descr_satellite_delivery_west_east_flag, {
5111
14
            "West East Flag", "mpeg_descr.sat_delivery.west_east_flag",
5112
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_west_east_flag_vals),
5113
14
            MPEG_DESCR_SATELLITE_DELIVERY_WEST_EAST_FLAG_MASK, NULL, HFILL
5114
14
        } },
5115
5116
14
        { &hf_mpeg_descr_satellite_delivery_polarization, {
5117
14
            "Polarization", "mpeg_descr.sat_delivery.polarization",
5118
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_polarization_vals),
5119
14
            MPEG_DESCR_SATELLITE_DELIVERY_POLARIZATION_MASK, NULL, HFILL
5120
14
        } },
5121
5122
14
        { &hf_mpeg_descr_satellite_delivery_roll_off, {
5123
14
            "Roll Off", "mpeg_descr.sat_delivery.roll_off",
5124
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_roll_off_vals),
5125
14
            MPEG_DESCR_SATELLITE_DELIVERY_ROLL_OFF_MASK, NULL, HFILL
5126
14
        } },
5127
5128
14
        { &hf_mpeg_descr_satellite_delivery_zero, {
5129
14
            "Zero", "mpeg_descr.sat_delivery.zero",
5130
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_SATELLITE_DELIVERY_ZERO_MASK, NULL, HFILL
5131
14
        } },
5132
5133
14
        { &hf_mpeg_descr_satellite_delivery_modulation_system, {
5134
14
            "Modulation System", "mpeg_descr.sat_delivery.modulation_system",
5135
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_modulation_system_vals),
5136
14
            MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_SYSTEM_MASK, NULL, HFILL
5137
14
        } },
5138
5139
14
        { &hf_mpeg_descr_satellite_delivery_modulation_type, {
5140
14
            "Modulation Type", "mpeg_descr.sat_delivery.modulation_type",
5141
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_satellite_delivery_modulation_type_vals),
5142
14
            MPEG_DESCR_SATELLITE_DELIVERY_MODULATION_TYPE_MASK, NULL, HFILL
5143
14
        } },
5144
5145
14
        { &hf_mpeg_descr_satellite_delivery_symbol_rate, {
5146
14
            "Symbol Rate", "mpeg_descr.sat_delivery.symbol_rate",
5147
14
            FT_DOUBLE, BASE_NONE, NULL, 0, NULL, HFILL
5148
14
        } },
5149
5150
14
        { &hf_mpeg_descr_satellite_delivery_fec_inner, {
5151
14
            "FEC Inner", "mpeg_descr.sat_delivery.fec_inner",
5152
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_satellite_delivery_fec_inner_vals_ext,
5153
14
            MPEG_DESCR_SATELLITE_DELIVERY_FEC_INNER_MASK, NULL, HFILL
5154
14
        } },
5155
5156
        /* 0x44 Cable Delivery System Descriptor */
5157
14
        { &hf_mpeg_descr_cable_delivery_frequency, {
5158
14
            "Frequency", "mpeg_descr.cable_delivery.freq",
5159
14
            FT_DOUBLE, BASE_NONE, NULL, 0, NULL, HFILL
5160
14
        } },
5161
5162
14
        { &hf_mpeg_descr_cable_delivery_reserved, {
5163
14
            "Reserved", "mpeg_descr.cable_delivery.reserved",
5164
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_CABLE_DELIVERY_RESERVED_MASK, NULL, HFILL
5165
14
        } },
5166
5167
14
        { &hf_mpeg_descr_cable_delivery_fec_outer, {
5168
14
            "FEC Outer", "mpeg_descr.cable_delivery.fec_outer",
5169
14
            FT_UINT16, BASE_HEX, VALS(mpeg_descr_cable_delivery_fec_outer_vals),
5170
14
            MPEG_DESCR_CABLE_DELIVERY_FEC_OUTER_MASK, NULL, HFILL
5171
14
        } },
5172
5173
14
        { &hf_mpeg_descr_cable_delivery_modulation, {
5174
14
            "Modulation", "mpeg_descr.cable_delivery.modulation",
5175
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_cable_delivery_modulation_vals), 0, NULL, HFILL
5176
14
        } },
5177
5178
14
        { &hf_mpeg_descr_cable_delivery_symbol_rate, {
5179
14
            "Symbol Rate", "mpeg_descr.cable_delivery.sym_rate",
5180
14
            FT_DOUBLE, BASE_NONE, NULL, 0, NULL, HFILL
5181
14
        } },
5182
5183
14
        { &hf_mpeg_descr_cable_delivery_fec_inner, {
5184
14
            "FEC Inner", "mpeg_descr.cable_delivery.fec_inner",
5185
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_cable_delivery_fec_inner_vals_ext,
5186
14
            MPEG_DESCR_CABLE_DELIVERY_FEC_INNER_MASK, NULL, HFILL
5187
14
        } },
5188
5189
        /* 0x45 VBI Data Descriptor */
5190
14
        { &hf_mpeg_descr_vbi_data_service_id, {
5191
14
            "Data Service ID", "mpeg_descr.vbi_data.svc_id",
5192
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_vbi_data_service_id_vals), 0, NULL, HFILL
5193
14
        } },
5194
5195
14
        { &hf_mpeg_descr_vbi_data_descr_len, {
5196
14
            "Data Descriptor Length", "mpeg_descr.vbi_data.decr_len",
5197
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5198
14
        } },
5199
5200
14
        { &hf_mpeg_descr_vbi_data_reserved1, {
5201
14
            "Reserved", "mpeg_descr.vbi_data.reserved1",
5202
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_VBI_DATA_RESERVED1_MASK, NULL, HFILL
5203
14
        } },
5204
5205
14
        { &hf_mpeg_descr_vbi_data_field_parity, {
5206
14
            "Field Parity", "mpeg_descr.vbi_data.field_parity",
5207
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_vbi_data_field_parity_vals),
5208
14
            MPEG_DESCR_VBI_DATA_FIELD_PARITY_MASK, NULL, HFILL
5209
14
        } },
5210
5211
14
        { &hf_mpeg_descr_vbi_data_line_offset, {
5212
14
            "Line offset", "mpeg_descr.vbi_data.line_offset",
5213
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5214
14
        } },
5215
5216
14
        { &hf_mpeg_descr_vbi_data_reserved2, {
5217
14
            "Reserved", "mpeg_descr.vbi_data.reserved2",
5218
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5219
14
        } },
5220
5221
        /* 0x47 Bouquet Name Descriptor */
5222
14
        { &hf_mpeg_descr_bouquet_name_encoding, {
5223
14
            "Bouquet Name Encoding", "mpeg_descr.bouquet_name.name_enc",
5224
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5225
14
        } },
5226
5227
14
        { &hf_mpeg_descr_bouquet_name, {
5228
14
            "Bouquet Name", "mpeg_descr.bouquet_name.name",
5229
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5230
14
        } },
5231
5232
        /* 0x48 Service Descriptor */
5233
14
        { &hf_mpeg_descr_service_type, {
5234
14
            "Service Type", "mpeg_descr.svc.type",
5235
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_service_type_vals_ext, 0, NULL, HFILL
5236
14
        } },
5237
5238
14
        { &hf_mpeg_descr_service_provider_name_length, {
5239
14
            "Provider Name Length", "mpeg_descr.svc.provider_name_len",
5240
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5241
14
        } },
5242
5243
14
        { &hf_mpeg_descr_service_provider_name_encoding, {
5244
14
            "Provider Name Encoding", "mpeg_descr.svc.provider_name_enc",
5245
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5246
14
        } },
5247
5248
14
        { &hf_mpeg_descr_service_provider, {
5249
14
            "Service Provider Name", "mpeg_descr.svc.provider_name",
5250
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5251
14
        } },
5252
5253
14
        { &hf_mpeg_descr_service_name_length, {
5254
14
            "Service Name Length", "mpeg_descr.svc.svc_name_len",
5255
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5256
14
        } },
5257
5258
14
        { &hf_mpeg_descr_service_name_encoding, {
5259
14
            "Service Name Encoding", "mpeg_descr.svc.svn_name_enc",
5260
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5261
14
        } },
5262
5263
14
        { &hf_mpeg_descr_service_name, {
5264
14
            "Service Name", "mpeg_descr.svc.svc_name",
5265
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5266
14
        } },
5267
5268
        /* 0x49 Country Availability Descriptor */
5269
14
        { &hf_mpeg_descr_country_availability_flag, {
5270
14
            "Country Availability Flag", "mpeg_descr.country_avail.avail_flag",
5271
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_country_availability_flag_vals),
5272
14
            MPEG_DESCR_COUNTRY_AVAILABILITY_FLAG_MASK, NULL, HFILL
5273
14
        } },
5274
5275
14
        { &hf_mpeg_descr_country_availability_reserved_future_use, {
5276
14
            "Reserved Future Use", "mpeg_descr.country_avail.reserved",
5277
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_COUNTRY_AVAILABILITY_RESERVED_MASK, NULL, HFILL
5278
14
        } },
5279
5280
14
        { &hf_mpeg_descr_country_availability_country_code, {
5281
14
            "Country Code", "mpeg_descr.country_avail.country_code",
5282
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5283
14
        } },
5284
5285
        /* 0x4A Linkage Descriptor */
5286
14
        { &hf_mpeg_descr_linkage_transport_stream_id, {
5287
14
            "Transport Stream ID", "mpeg_descr.linkage.tsid",
5288
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5289
14
        } },
5290
5291
14
        { &hf_mpeg_descr_linkage_original_network_id, {
5292
14
            "Original Network ID", "mpeg_descr.linkage.original_nid",
5293
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5294
14
        } },
5295
5296
14
        { &hf_mpeg_descr_linkage_service_id, {
5297
14
            "Service ID", "mpeg_descr.linkage.svc_id",
5298
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5299
14
        } },
5300
5301
14
        { &hf_mpeg_descr_linkage_linkage_type, {
5302
14
            "Linkage Type", "mpeg_descr.linkage.type",
5303
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_linkage_linkage_type_vals_ext, 0, NULL, HFILL
5304
14
        } },
5305
5306
14
        { &hf_mpeg_descr_linkage_hand_over_type, {
5307
14
            "Hand-Over Type", "mpeg_descr.linkage.hand_over_type",
5308
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LINKAGE_HAND_OVER_TYPE_MASK, NULL, HFILL
5309
14
        } },
5310
5311
14
        { &hf_mpeg_descr_linkage_reserved1, {
5312
14
            "Reserved", "mpeg_descr.linkage.reserved1",
5313
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LINKAGE_RESERVED1_MASK, NULL, HFILL
5314
14
        } },
5315
5316
14
        { &hf_mpeg_descr_linkage_origin_type, {
5317
14
            "Origin Type", "mpeg_descr.linkage.origin_type",
5318
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_linkage_origin_type_vals), 0, NULL, HFILL
5319
14
        } },
5320
5321
14
        { &hf_mpeg_descr_linkage_network_id, {
5322
14
            "Network ID", "mpeg_descr.linkage.network_id",
5323
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5324
14
        } },
5325
5326
14
        { &hf_mpeg_descr_linkage_initial_service_id, {
5327
14
            "Initial Service ID", "mpeg_descr.linkage.initial_svc_id",
5328
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5329
14
        } },
5330
5331
14
        { &hf_mpeg_descr_linkage_target_event_id, {
5332
14
            "Target Event ID", "mpeg_descr.linkage.target_evt_id",
5333
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5334
14
        } },
5335
5336
14
        { &hf_mpeg_descr_linkage_target_listed, {
5337
14
            "Target Listed", "mpeg_descr.linkage.target_listed",
5338
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_linkage_target_listed_vals),
5339
14
            MPEG_DESCR_LINKAGE_TARGET_LISTED_MASK, NULL, HFILL
5340
14
        } },
5341
5342
14
        { &hf_mpeg_descr_linkage_event_simulcast, {
5343
14
            "Event Simulcast", "mpeg_descr.linkage.evt_simulcast",
5344
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_linkage_event_simulcast_vals),
5345
14
            MPEG_DESCR_LINKAGE_EVENT_SIMULCAST_MASK, NULL, HFILL
5346
14
        } },
5347
5348
14
        { &hf_mpeg_descr_linkage_reserved2, {
5349
14
            "Reserved", "mpeg_descr.linkage.reserved2",
5350
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LINKAGE_RESERVED2_MASK, NULL, HFILL
5351
14
        } },
5352
5353
14
        { &hf_mpeg_descr_linkage_private_data_byte, {
5354
14
            "Private Data", "mpeg_descr.linkage.private_data",
5355
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5356
14
        } },
5357
5358
14
        { &hf_mpeg_descr_linkage_interactive_network_id, {
5359
14
            "Interactive Network ID", "mpeg_descr.interactive_network_id",
5360
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5361
14
        } },
5362
5363
14
        { &hf_mpeg_descr_linkage_population_id_loop_count, {
5364
14
            "Population ID loop count", "mpeg_descr.population_id_loop_count",
5365
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5366
14
        } },
5367
5368
14
        { &hf_mpeg_descr_linkage_population_id, {
5369
14
            "Population ID", "mpeg_descr.population_id",
5370
14
            FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
5371
14
        } },
5372
5373
14
        { &hf_mpeg_descr_linkage_population_id_base, {
5374
14
            "Population ID Base", "mpeg_descr.population_id_base",
5375
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5376
14
        } },
5377
5378
14
        { &hf_mpeg_descr_linkage_population_id_mask, {
5379
14
            "Population ID Mask", "mpeg_descr.population_id_mask",
5380
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5381
14
        } },
5382
5383
        /* 0x4B NVOD Reference Descriptor */
5384
14
        { &hf_mpeg_descr_nvod_reference_tsid, {
5385
14
            "Transport Stream ID", "mpeg_descr.nvod_ref.tsid",
5386
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5387
14
        } },
5388
5389
14
        { &hf_mpeg_descr_nvod_reference_onid, {
5390
14
            "Original Network ID", "mpeg_descr.nvod_ref.onid",
5391
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5392
14
        } },
5393
5394
14
        { &hf_mpeg_descr_nvod_reference_sid, {
5395
14
            "Stream ID", "mpeg_descr.nvod_ref.sid",
5396
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5397
14
        } },
5398
5399
        /* 0x4C Time Shifted Service Descriptor */
5400
14
        { &hf_mpeg_descr_time_shifted_service_id, {
5401
14
            "Reference Service ID", "mpeg_descr.time_shifted_service.id",
5402
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5403
14
        } },
5404
5405
        /* 0x4D Short Event Descriptor */
5406
14
        { &hf_mpeg_descr_short_event_lang_code, {
5407
14
            "Language Code", "mpeg_descr.short_evt.lang_code",
5408
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5409
14
        } },
5410
5411
14
        { &hf_mpeg_descr_short_event_name_length, {
5412
14
            "Event Name Length", "mpeg_descr.short_evt.name_len",
5413
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5414
14
        } },
5415
5416
14
        { &hf_mpeg_descr_short_event_name_encoding, {
5417
14
            "Event Name Encoding", "mpeg_descr.short_evt.name_enc",
5418
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5419
14
        } },
5420
5421
14
        { &hf_mpeg_descr_short_event_name, {
5422
14
            "Event Name", "mpeg_descr.short_evt.name",
5423
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5424
14
        } },
5425
5426
14
        { &hf_mpeg_descr_short_event_text_length, {
5427
14
            "Event Text Length", "mpeg_descr.short_evt.txt_len",
5428
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5429
14
        } },
5430
5431
14
        { &hf_mpeg_descr_short_event_text_encoding, {
5432
14
            "Event Text Encoding", "mpeg_descr.short_evt.txt_enc",
5433
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5434
14
        } },
5435
5436
14
        { &hf_mpeg_descr_short_event_text, {
5437
14
            "Event Text", "mpeg_descr.short_evt.txt",
5438
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5439
14
        } },
5440
5441
        /* 0x4E Extended Event Descriptor */
5442
14
        { &hf_mpeg_descr_extended_event_descriptor_number, {
5443
14
            "Descriptor Number", "mpeg_descr.ext_evt.descr_num",
5444
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_EXTENDED_EVENT_DESCRIPTOR_NUMBER_MASK, NULL, HFILL
5445
14
        } },
5446
5447
14
        { &hf_mpeg_descr_extended_event_last_descriptor_number, {
5448
14
            "Last Descriptor Number", "mpeg_descr.ext_evt.last_descr_num",
5449
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_EXTENDED_EVENT_LAST_DESCRIPTOR_NUMBER_MASK, NULL, HFILL
5450
14
        } },
5451
5452
14
        { &hf_mpeg_descr_extended_event_lang_code, {
5453
14
            "Language Code", "mpeg_descr.ext_evt.lang_code",
5454
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5455
14
        } },
5456
5457
14
        { &hf_mpeg_descr_extended_event_length_of_items, {
5458
14
            "Length of items", "mpeg_descr.ext_evt.items_len",
5459
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5460
14
        } },
5461
5462
14
        { &hf_mpeg_descr_extended_event_item_description_length, {
5463
14
            "Item Description Length", "mpeg_descr.ext_evt.item_descr_len",
5464
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5465
14
        } },
5466
5467
14
        { &hf_mpeg_descr_extended_event_item_description_char, {
5468
14
            "Item Description", "mpeg_descr.ext_evt.item_descr",
5469
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5470
14
        } },
5471
5472
14
        { &hf_mpeg_descr_extended_event_item_length, {
5473
14
            "Item Length", "mpeg_descr.ext_evt.item_len",
5474
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5475
14
        } },
5476
5477
14
        { &hf_mpeg_descr_extended_event_item_char, {
5478
14
            "Item", "mpeg_descr.ext_evt.item",
5479
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5480
14
        } },
5481
5482
14
        { &hf_mpeg_descr_extended_event_text_length, {
5483
14
            "Text Length", "mpeg_descr.ext_evt.txt_len",
5484
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5485
14
        } },
5486
5487
14
        { &hf_mpeg_descr_extended_event_text_encoding, {
5488
14
            "Text Encoding", "mpeg_descr.ext_evt.txt_enc",
5489
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5490
14
        } },
5491
5492
14
        { &hf_mpeg_descr_extended_event_text, {
5493
14
            "Text", "mpeg_descr.ext_evt.txt",
5494
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5495
14
        } },
5496
5497
        /* 0x4F Time Shifted Event Descriptor */
5498
14
        { &hf_mpeg_descr_time_shifted_event_reference_service_id, {
5499
14
            "Reference Service ID", "mpeg_descr.tshift_evt.sid",
5500
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5501
14
        } },
5502
5503
14
        { &hf_mpeg_descr_time_shifted_event_reference_event_id, {
5504
14
            "Reference Event ID", "mpeg_descr.tshift_evt.eid",
5505
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5506
14
        } },
5507
5508
        /* 0x50 Component Descriptor */
5509
14
        { &hf_mpeg_descr_component_nga_bits_b7_reserved, {
5510
14
            "Reserved zero for future use", "mpeg_descr.component.nga.reserved",
5511
14
            FT_UINT16, BASE_HEX, NULL,
5512
14
            MPEG_DESCR_COMPONENT_NGA_BITS_B7_MASK, NULL, HFILL
5513
14
        } },
5514
5515
14
        { &hf_mpeg_descr_component_nga_bits_b6_headphones, {
5516
14
            "Pre-rendered for consumption with headphones", "mpeg_descr.component.nga.headphones",
5517
14
            FT_UINT16, BASE_HEX, NULL,
5518
14
            MPEG_DESCR_COMPONENT_NGA_BITS_B6_MASK, NULL, HFILL
5519
14
        } },
5520
5521
14
        { &hf_mpeg_descr_component_nga_bits_b5_interactivity, {
5522
14
            "Enables interactivity", "mpeg_descr.component.nga.interactivity",
5523
14
            FT_UINT16, BASE_HEX, NULL,
5524
14
            MPEG_DESCR_COMPONENT_NGA_BITS_B5_MASK, NULL, HFILL
5525
14
        } },
5526
5527
14
        { &hf_mpeg_descr_component_nga_bits_b4_dialogue_enhancement, {
5528
14
            "Enables dialogue enhancement", "mpeg_descr.component.nga.dialogue_enhancement",
5529
14
            FT_UINT16, BASE_HEX, NULL,
5530
14
            MPEG_DESCR_COMPONENT_NGA_BITS_B4_MASK, NULL, HFILL
5531
14
        } },
5532
5533
14
        { &hf_mpeg_descr_component_nga_bits_b3_spoken_subtitles, {
5534
14
            "Contains spoken subtitles", "mpeg_descr.component.nga.spoken_subtitles",
5535
14
            FT_UINT16, BASE_HEX, NULL,
5536
14
            MPEG_DESCR_COMPONENT_NGA_BITS_B3_MASK, NULL, HFILL
5537
14
        } },
5538
5539
14
        { &hf_mpeg_descr_component_nga_bits_b2_audio_description, {
5540
14
            "Contains audio description", "mpeg_descr.component.nga.audio_description",
5541
14
            FT_UINT16, BASE_HEX, NULL,
5542
14
            MPEG_DESCR_COMPONENT_NGA_BITS_B2_MASK, NULL, HFILL
5543
14
        } },
5544
5545
14
        { &hf_mpeg_descr_component_nga_bits_b10_channel_layout, {
5546
14
            "Preferred reproduction channel layout", "mpeg_descr.component.nga.channel_layout",
5547
14
            FT_UINT16, BASE_HEX, VALS(mpeg_descr_component_preferred_reproduction_channel_layout_vals),
5548
14
            MPEG_DESCR_COMPONENT_NGA_BITS_B10_MASK, NULL, HFILL
5549
14
        } },
5550
5551
14
        { &hf_mpeg_descr_component_high_stream_content_n_component_type, {
5552
14
            "Stream Content and Component Type", "mpeg_descr.component.content_type",
5553
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_component_high_content_type_vals_ext,
5554
14
            MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_N_COMPONENT_TYPE_MASK, NULL, HFILL
5555
14
        } },
5556
5557
14
        { &hf_mpeg_descr_component_high_stream_content_both, {
5558
14
            "Stream Content both", "mpeg_descr.component.stream_content_both",
5559
14
            FT_UINT16, BASE_HEX, VALS(mpeg_descr_component_high_stream_content_vals),
5560
14
            MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_BOTH_MASK, NULL, HFILL
5561
14
        } },
5562
5563
14
        { &hf_mpeg_descr_component_high_stream_content_ext, {
5564
14
            "Stream Content Ext", "mpeg_descr.component.stream_content_ext",
5565
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_EXT_MASK, NULL, HFILL
5566
14
        } },
5567
5568
14
        { &hf_mpeg_descr_component_high_stream_content, {
5569
14
            "Stream Content", "mpeg_descr.component.stream_content",
5570
14
            FT_UINT16, BASE_HEX, NULL,
5571
14
            MPEG_DESCR_COMPONENT_HIGH_STREAM_CONTENT_MASK, NULL, HFILL
5572
14
        } },
5573
5574
14
        { &hf_mpeg_descr_component_high_component_type, {
5575
14
            "Component Type", "mpeg_descr.component.type",
5576
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_COMPONENT_HIGH_COMPONENT_TYPE_MASK, NULL, HFILL
5577
14
        } },
5578
5579
14
        { &hf_mpeg_descr_component_stream_content_ext, {
5580
14
            "Stream Content Ext", "mpeg_descr.component.stream_content_ext",
5581
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_COMPONENT_STREAM_CONTENT_EXT_MASK, NULL, HFILL
5582
14
        } },
5583
5584
14
        { &hf_mpeg_descr_component_stream_content, {
5585
14
            "Stream Content", "mpeg_descr.component.stream_content",
5586
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_component_stream_content_vals),
5587
14
            MPEG_DESCR_COMPONENT_STREAM_CONTENT_MASK, NULL, HFILL
5588
14
        } },
5589
5590
14
        { &hf_mpeg_descr_component_type, {
5591
14
            "Component Type", "mpeg_descr.component.type",
5592
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5593
14
        } },
5594
5595
14
        { &hf_mpeg_descr_component_content_type, {
5596
14
            "Stream Content and Component Type", "mpeg_descr.component.content_type",
5597
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_component_content_type_vals_ext,
5598
14
            MPEG_DESCR_COMPONENT_CONTENT_TYPE_MASK, NULL, HFILL
5599
14
        } },
5600
5601
14
        { &hf_mpeg_descr_component_tag, {
5602
14
            "Component Tag", "mpeg_descr.component.tag",
5603
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5604
14
        } },
5605
5606
14
        { &hf_mpeg_descr_component_lang_code, {
5607
14
            "Language Code", "mpeg_descr.component.lang_code",
5608
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5609
14
        } },
5610
5611
14
        { &hf_mpeg_descr_component_text_encoding, {
5612
14
            "Text Encoding", "mpeg_descr.component.text_enc",
5613
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
5614
14
        } },
5615
5616
14
        { &hf_mpeg_descr_component_text, {
5617
14
            "Text", "mpeg_descr.component.text",
5618
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5619
14
        } },
5620
5621
        /* 0x51 Mosaic Descriptor */
5622
14
        { &hf_mpeg_descr_mosaic_mosaic_entry_point, {
5623
14
            "Mosaic Entry Point", "mpeg_descr.mosaic.entry_point",
5624
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_ENTRY_POINT_MASK, NULL, HFILL
5625
14
        } },
5626
5627
14
        { &hf_mpeg_descr_mosaic_number_of_horizontal_elementary_cells, {
5628
14
            "Number Of Horizontal Elementary Cells", "mpeg_descr.mosaic.h_cells_num",
5629
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_mosaic_number_of_e_cells_vals),
5630
14
            MPEG_DESCR_MOSAIC_NUM_OF_H_CELLS_MASK, NULL, HFILL
5631
14
        } },
5632
5633
14
        { &hf_mpeg_descr_mosaic_reserved_future_use1, {
5634
14
            "Reserved Future Use", "mpeg_descr.mosaic.reserved1",
5635
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_RESERVED1_MASK, NULL, HFILL
5636
14
        } },
5637
5638
14
        { &hf_mpeg_descr_mosaic_number_of_vertical_elementary_cells, {
5639
14
            "Number Of Vertical Elementary Cells", "mpeg_descr.mosaic.v_cells_num",
5640
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_mosaic_number_of_e_cells_vals),
5641
14
            MPEG_DESCR_MOSAIC_NUM_OF_V_CELLS_MASK, NULL, HFILL
5642
14
        } },
5643
5644
14
        { &hf_mpeg_descr_mosaic_logical_cell_id, {
5645
14
            "Logical Cell ID", "mpeg_descr.mosaic.l_cell_id",
5646
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_LOGICAL_CELL_ID_MASK, NULL, HFILL
5647
14
        } },
5648
5649
14
        { &hf_mpeg_descr_mosaic_reserved_future_use2, {
5650
14
            "Reserved Future Use", "mpeg_descr.mosaic.reserved2",
5651
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_RESERVED2_MASK, NULL, HFILL
5652
14
        } },
5653
5654
14
        { &hf_mpeg_descr_mosaic_logical_cell_presentation_info, {
5655
14
            "Logical Cell Presentation Info", "mpeg_descr.mosaic.l_cell_pr_info",
5656
14
            FT_UINT16, BASE_HEX|BASE_RANGE_STRING, RVALS(mpeg_descr_mosaic_logical_cell_presentation_info_vals),
5657
14
            MPEG_DESCR_MOSAIC_CELL_PRESENTATION_INFO_MASK, NULL, HFILL
5658
14
        } },
5659
5660
14
        { &hf_mpeg_descr_mosaic_elementary_cell_field_length, {
5661
14
            "Elementary Cell Field Length", "mpeg_descr.mosaic.e_cell_field_len",
5662
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5663
14
        } },
5664
5665
14
        { &hf_mpeg_descr_mosaic_reserved_future_use3, {
5666
14
            "Reserved Future Use", "mpeg_descr.mosaic.reserved3",
5667
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_RESERVED3_MASK, NULL, HFILL
5668
14
        } },
5669
5670
14
        { &hf_mpeg_descr_mosaic_elementary_cell_id, {
5671
14
            "Elementary Cell ID", "mpeg_descr.mosaic.e_cell_id",
5672
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_MOSAIC_ELEMENTARY_CELL_ID_MASK, NULL, HFILL
5673
14
        } },
5674
5675
14
        { &hf_mpeg_descr_mosaic_cell_linkage_info, {
5676
14
            "Cell Linkage Info", "mpeg_descr.mosaic.cell_link_info",
5677
14
            FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(mpeg_descr_mosaic_cell_linkage_info_vals), 0, NULL, HFILL
5678
14
        } },
5679
5680
14
        { &hf_mpeg_descr_mosaic_bouquet_id, {
5681
14
            "Bouquet ID", "mpeg_descr.mosaic.bouquet_id",
5682
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5683
14
        } },
5684
5685
14
        { &hf_mpeg_descr_mosaic_original_network_id, {
5686
14
            "Original Network ID", "mpeg_descr.mosaic.onid",
5687
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5688
14
        } },
5689
5690
14
        { &hf_mpeg_descr_mosaic_transport_stream_id, {
5691
14
            "Transport Stream ID", "mpeg_descr.mosaic.tsid",
5692
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5693
14
        } },
5694
5695
14
        { &hf_mpeg_descr_mosaic_service_id, {
5696
14
            "Service ID", "mpeg_descr.mosaic.sid",
5697
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5698
14
        } },
5699
5700
14
        { &hf_mpeg_descr_mosaic_event_id, {
5701
14
            "Event ID", "mpeg_descr.mosaic.event_id",
5702
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5703
14
        } },
5704
5705
        /* 0x52 Stream Identifier Descriptor */
5706
14
        { &hf_mpeg_descr_stream_identifier_component_tag, {
5707
14
            "Component Tag", "mpeg_descr.stream_id.component_tag",
5708
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5709
14
        } },
5710
5711
        /* 0x53 CA Identifier Descriptor */
5712
14
        { &hf_mpeg_descr_ca_identifier_system_id, {
5713
14
            "CA System ID", "mpeg_descr.ca_id.sys_id",
5714
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
5715
14
        } },
5716
5717
        /* 0x54 Content Descriptor */
5718
14
        { &hf_mpeg_descr_content_nibble, {
5719
14
            "Nibble Level 1 and 2", "mpeg_descr.content.nibble_1_2",
5720
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_content_nibble_vals_ext, 0, NULL, HFILL
5721
14
        } },
5722
5723
14
        { &hf_mpeg_descr_content_nibble_level_1, {
5724
14
            "Nibble Level 1", "mpeg_descr.content.nibble_lvl_1",
5725
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_content_nibble_level_1_vals_ext,
5726
14
            MPEG_DESCR_CONTENT_NIBBLE_LEVEL_1_MASK, NULL, HFILL
5727
14
        } },
5728
5729
14
        { &hf_mpeg_descr_content_nibble_level_2, {
5730
14
            "Nibble Level 2", "mpeg_descr.content.nibble_lvl_2",
5731
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_CONTENT_NIBBLE_LEVEL_2_MASK, NULL, HFILL
5732
14
        } },
5733
5734
14
        { &hf_mpeg_descr_content_user_byte, {
5735
14
            "User Byte", "mpeg_descr.content.user",
5736
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
5737
14
        } },
5738
5739
        /* 0x56 Teletext Descriptor */
5740
14
        { &hf_mpeg_descr_teletext_lang_code, {
5741
14
            "Language Code", "mpeg_descr.teletext.lang_code",
5742
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5743
14
        } },
5744
5745
14
        { &hf_mpeg_descr_teletext_type, {
5746
14
            "Teletext Type", "mpeg_descr.teletext.type",
5747
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_teletext_type_vals),
5748
14
            MPEG_DESCR_TELETEXT_TYPE_MASK, NULL, HFILL
5749
14
        } },
5750
5751
14
        { &hf_mpeg_descr_teletext_magazine_number, {
5752
14
            "Magazine Number", "mpeg_descr.teletext.magazine_num",
5753
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELETEXT_MAGAZINE_NUMBER_MASK, NULL, HFILL
5754
14
        } },
5755
5756
14
        { &hf_mpeg_descr_teletext_page_number, {
5757
14
            "Page Number", "mpeg_descr.teletext.page_num",
5758
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
5759
14
        } },
5760
5761
        /* 0x55 Parental Rating Descriptor */
5762
14
        { &hf_mpeg_descr_parental_rating_country_code, {
5763
14
            "Country Code", "mpeg_descr.parental_rating.country_code",
5764
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5765
14
        } },
5766
5767
14
        { &hf_mpeg_descr_parental_rating_rating, {
5768
14
            "Rating", "mpeg_descr.parental_rating.rating",
5769
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_parental_rating_vals_ext, 0, NULL, HFILL
5770
14
        } },
5771
5772
        /* 0x57 Telephone Descriptor */
5773
14
        { &hf_mpeg_descr_telephone_reserved_future_use1, {
5774
14
            "Reserved Future Use", "mpeg_descr.phone.reserved1",
5775
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TELEPHONE_RESERVED1_MASK, NULL, HFILL
5776
14
        } },
5777
5778
14
        { &hf_mpeg_descr_telephone_foreign_availability, {
5779
14
            "Foreign Availability", "mpeg_descr.phone.foreign",
5780
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_telephone_foreign_availability_vals),
5781
14
            MPEG_DESCR_TELEPHONE_FOREIGN_AVAILABILITY_MASK, NULL, HFILL
5782
14
        } },
5783
5784
14
        { &hf_mpeg_descr_telephone_connection_type, {
5785
14
            "Connection Type", "mpeg_descr.phone.conn_t",
5786
14
            FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(mpeg_descr_telephone_connection_type_vals),
5787
14
            MPEG_DESCR_TELEPHONE_CONNECTION_TYPE_MASK, NULL, HFILL
5788
14
        } },
5789
5790
14
        { &hf_mpeg_descr_telephone_reserved_future_use2, {
5791
14
            "Reserved Future Use", "mpeg_descr.phone.reserved2",
5792
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TELEPHONE_RESERVED2_MASK, NULL, HFILL
5793
14
        } },
5794
5795
14
        { &hf_mpeg_descr_telephone_country_prefix_length, {
5796
14
            "Country Prefix Length", "mpeg_descr.phone.nat_code_len",
5797
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_COUNTRY_PREFIX_LEN_MASK, NULL, HFILL
5798
14
        } },
5799
5800
14
        { &hf_mpeg_descr_telephone_international_area_code_length, {
5801
14
            "International Area Code Length", "mpeg_descr.phone.int_code_len",
5802
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_INTERNATIONAL_CODE_LEN_MASK, NULL, HFILL
5803
14
        } },
5804
5805
14
        { &hf_mpeg_descr_telephone_operator_code_length, {
5806
14
            "Operator Code Length", "mpeg_descr.phone.op_code_len",
5807
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_OPERATOR_CODE_LEN_MASK, NULL, HFILL
5808
14
        } },
5809
5810
14
        { &hf_mpeg_descr_telephone_reserved_future_use3, {
5811
14
            "Reserved Future Use", "mpeg_descr.phone.reserved3",
5812
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TELEPHONE_RESERVED3_MASK, NULL, HFILL
5813
14
        } },
5814
5815
14
        { &hf_mpeg_descr_telephone_national_area_code_length, {
5816
14
            "National Area Code Length", "mpeg_descr.phone.nat_code_len",
5817
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_NATIONAL_CODE_LEN_MASK, NULL, HFILL
5818
14
        } },
5819
5820
14
        { &hf_mpeg_descr_telephone_core_number_length, {
5821
14
            "Core Number Length", "mpeg_descr.phone.core_n_len",
5822
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_TELEPHONE_CORE_NUMBER_LEN_MASK, NULL, HFILL
5823
14
        } },
5824
5825
14
        { &hf_mpeg_descr_telephone_number, {
5826
14
            "Telephone Number", "mpeg_descr.phone.number",
5827
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5828
14
        } },
5829
5830
14
        { &hf_mpeg_descr_telephone_country_prefix, {
5831
14
            "Country Prefix", "mpeg_descr.phone.country",
5832
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5833
14
        } },
5834
5835
14
        { &hf_mpeg_descr_telephone_international_area_code, {
5836
14
            "International Area Code", "mpeg_descr.phone.int_area",
5837
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5838
14
        } },
5839
5840
14
        { &hf_mpeg_descr_telephone_operator_code, {
5841
14
            "Operator Code", "mpeg_descr.phone.operator",
5842
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5843
14
        } },
5844
5845
14
        { &hf_mpeg_descr_telephone_national_area_code, {
5846
14
            "National Area Code", "mpeg_descr.phone.nat_code",
5847
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5848
14
        } },
5849
5850
14
        { &hf_mpeg_descr_telephone_core_number, {
5851
14
            "Core Number", "mpeg_descr.phone.core",
5852
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5853
14
        } },
5854
5855
        /* 0x58 Local Time Offset Descriptor */
5856
14
        { &hf_mpeg_descr_local_time_offset_country_code, {
5857
14
            "Country Code", "mpeg_descr.local_time_offset.country_code",
5858
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5859
14
        } },
5860
5861
14
        { &hf_mpeg_descr_local_time_offset_region_id, {
5862
14
            "Region ID", "mpeg_descr.local_time_offset.region_id",
5863
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOCAL_TIME_OFFSET_COUNTRY_REGION_ID_MASK, NULL, HFILL
5864
14
        } },
5865
5866
14
        { &hf_mpeg_descr_local_time_offset_reserved, {
5867
14
            "Reserved", "mpeg_descr.local_time_offset.reserved",
5868
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOCAL_TIME_OFFSET_RESERVED_MASK, NULL, HFILL
5869
14
        } },
5870
5871
14
        { &hf_mpeg_descr_local_time_offset_polarity, {
5872
14
            "Time Offset Polarity", "mpeg_descr.local_time_offset.polarity",
5873
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_local_time_offset_polarity_vals),
5874
14
            MPEG_DESCR_LOCAL_TIME_OFFSET_POLARITY, NULL, HFILL
5875
14
        } },
5876
5877
14
        { &hf_mpeg_descr_local_time_offset_offset, {
5878
14
            "Local Time Offset", "mpeg_descr.local_time_offset.offset",
5879
14
            FT_RELATIVE_TIME, BASE_NONE, NULL, 0, NULL, HFILL
5880
14
        } },
5881
5882
14
        { &hf_mpeg_descr_local_time_offset_time_of_change, {
5883
14
            "Time of Change", "mpeg_descr.local_time_offset.time_of_change",
5884
14
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL
5885
14
        } },
5886
5887
14
        { &hf_mpeg_descr_local_time_offset_next_time_offset, {
5888
14
            "Next Time Offset", "mpeg_descr.local_time_offset.next_time_offset",
5889
14
            FT_RELATIVE_TIME, BASE_NONE, NULL, 0, NULL, HFILL
5890
14
        } },
5891
5892
        /* 0x59 Subtitling Descriptor */
5893
14
        { &hf_mpeg_descr_subtitling_lang_code, {
5894
14
            "Language Code", "mpeg_descr.subtitling.lang_code",
5895
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5896
14
        } },
5897
5898
14
        { &hf_mpeg_descr_subtitling_type, {
5899
14
            "Subtitling Type", "mpeg_descr.subtitling.type",
5900
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_subtitling_type_vals_ext, 0, NULL, HFILL
5901
14
        } },
5902
5903
14
        { &hf_mpeg_descr_subtitling_composition_page_id, {
5904
14
            "Composition Page ID", "mpeg_descr.subtitling.composition_page_id",
5905
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
5906
14
        } },
5907
5908
14
        { &hf_mpeg_descr_subtitling_ancillary_page_id, {
5909
14
            "Ancillary Page ID", "mpeg_descr.subtitling.ancillary_page_id",
5910
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
5911
14
        } },
5912
5913
        /* 0x5A Terrestrial Delivery System Descriptor */
5914
14
        { &hf_mpeg_descr_terrestrial_delivery_centre_frequency, {
5915
14
            "Centre Frequency", "mpeg_descr.terr_delivery.centre_freq",
5916
14
            FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL
5917
14
        } },
5918
5919
14
        { &hf_mpeg_descr_terrestrial_delivery_bandwidth, {
5920
14
            "Bandwidth", "mpeg_descr.terr_delivery.bandwidth",
5921
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_bandwidth_vals),
5922
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_BANDWIDTH_MASK, NULL, HFILL
5923
14
        } },
5924
5925
14
        { &hf_mpeg_descr_terrestrial_delivery_priority, {
5926
14
            "Priority", "mpeg_descr.terr_delivery.priority",
5927
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_priority_vals),
5928
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_PRIORITY_MASK, NULL, HFILL
5929
14
        } },
5930
5931
14
        { &hf_mpeg_descr_terrestrial_delivery_time_slicing_indicator, {
5932
14
            "Time Slicing Indicator", "mpeg_descr.terr_delivery.time_slicing_ind",
5933
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_time_slicing_indicator_vals),
5934
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_TIME_SLICING_INDICATOR_MASK, NULL, HFILL
5935
14
        } },
5936
5937
14
        { &hf_mpeg_descr_terrestrial_delivery_mpe_fec_indicator, {
5938
14
            "MPE-FEC Indicator", "mpeg_descr.terr_delivery.mpe_fec_ind",
5939
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_mpe_fec_indicator_vals),
5940
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_MPE_FEC_INDICATOR_MASK, NULL, HFILL
5941
14
        } },
5942
5943
14
        { &hf_mpeg_descr_terrestrial_delivery_reserved1, {
5944
14
            "Reserved", "mpeg_descr.terr_delivery.reserved1",
5945
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TERRESTRIAL_DELIVERY_RESERVED1_MASK, NULL, HFILL
5946
14
        } },
5947
5948
14
        { &hf_mpeg_descr_terrestrial_delivery_constellation, {
5949
14
            "Constellation", "mpeg_descr.terr_delivery.constellation",
5950
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_constellation_vals),
5951
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_CONSTELLATION_MASK, NULL, HFILL
5952
14
        } },
5953
5954
14
        { &hf_mpeg_descr_terrestrial_delivery_hierarchy_information, {
5955
14
            "Hierarchy Information", "mpeg_descr.terr_delivery.hierarchy_information",
5956
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_hierarchy_information_vals),
5957
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_HIERARCHY_INFORMATION_MASK, NULL, HFILL
5958
14
        } },
5959
5960
14
        { &hf_mpeg_descr_terrestrial_delivery_code_rate_hp_stream, {
5961
14
            "Code Rate High Priority Stream", "mpeg_descr.terr_delivery.code_rate_hp_stream",
5962
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_code_rate_vals),
5963
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_CODE_RATE_HP_STREAM_MASK, NULL, HFILL
5964
14
        } },
5965
5966
14
        { &hf_mpeg_descr_terrestrial_delivery_code_rate_lp_stream, {
5967
14
            "Code Rate Low Priority Stream", "mpeg_descr.terr_delivery.code_rate_lp_stream",
5968
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_code_rate_vals),
5969
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_CODE_RATE_LP_STREAM_MASK, NULL, HFILL
5970
14
        } },
5971
5972
14
        { &hf_mpeg_descr_terrestrial_delivery_guard_interval, {
5973
14
            "Guard Interval", "mpeg_descr.terr_delivery.guard_interval",
5974
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_guard_interval_vals),
5975
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_GUARD_INTERVAL_MASK, NULL, HFILL
5976
14
        } },
5977
5978
14
        { &hf_mpeg_descr_terrestrial_delivery_transmission_mode, {
5979
14
            "Transmission Mode", "mpeg_descr.terr_delivery.transmission_mode",
5980
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_transmission_mode_vals),
5981
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_TRANSMISSION_MODE_MASK, NULL, HFILL
5982
14
        } },
5983
5984
14
        { &hf_mpeg_descr_terrestrial_delivery_other_frequency_flag, {
5985
14
            "Other Frequency Flag", "mpeg_descr.terr_delivery.other_freq_flag",
5986
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_terrestrial_delivery_other_frequency_flag_vals),
5987
14
            MPEG_DESCR_TERRESTRIAL_DELIVERY_OTHER_FREQUENCY_FLAG_MASK, NULL, HFILL
5988
14
        } },
5989
5990
14
        { &hf_mpeg_descr_terrestrial_delivery_reserved2, {
5991
14
            "Reserved", "mpeg_descr.terr_delivery.reserved2",
5992
14
            FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
5993
14
        } },
5994
5995
        /* 0x5B Multilingual Network Name Descriptor */
5996
14
        { &hf_mpeg_descr_multilng_network_name_desc_iso639_language_code, {
5997
14
            "Language ISO 639-2 Code", "mpeg_descr.net_name.lang_code",
5998
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
5999
14
        } },
6000
6001
14
        { &hf_mpeg_descr_multilng_network_name_desc_name_length, {
6002
14
            "Network Name Length", "mpeg_descr.net_name.name_length",
6003
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6004
14
        } },
6005
6006
14
        { &hf_mpeg_descr_multilng_network_name_desc_name_encoding, {
6007
14
            "Network Name Encoding", "mpeg_descr.net_name.name_enc",
6008
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6009
14
        } },
6010
6011
14
        { &hf_mpeg_descr_multilng_network_name_desc_name, {
6012
14
            "Network Name", "mpeg_descr.net_name.name",
6013
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6014
14
        } },
6015
6016
6017
        /* 0x5C Multilingual Bouquet Name Descriptor */
6018
14
        { &hf_mpeg_descr_multilng_bouquet_name_desc_iso639_language_code, {
6019
14
            "Language ISO 639-2 Code", "mpeg_descr.bouquet_name.lang_code",
6020
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6021
14
        } },
6022
6023
14
        { &hf_mpeg_descr_multilng_bouquet_name_desc_name_length, {
6024
14
            "Bouquet Name Length", "mpeg_descr.bouquet_name.name_length",
6025
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6026
14
        } },
6027
6028
14
        { &hf_mpeg_descr_multilng_bouquet_name_desc_name_encoding, {
6029
14
            "Bouquet Name Encoding", "mpeg_descr.bouquet_name.name_enc",
6030
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6031
14
        } },
6032
6033
14
        { &hf_mpeg_descr_multilng_bouquet_name_desc_name, {
6034
14
            "Bouquet Name", "mpeg_descr.bouquet_name.name",
6035
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6036
14
        } },
6037
6038
        /* 0x5D Multilingual Service Name Descriptor */
6039
14
        { &hf_mpeg_descr_multilng_srv_name_desc_iso639_language_code, {
6040
14
            "Language ISO 639-2 Code", "mpeg_descr.svc.lang_code",
6041
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6042
14
        } },
6043
6044
14
        { &hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_length, {
6045
14
            "Service Provider Name Length", "mpeg_descr.svc.provider_name_len",
6046
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6047
14
        } },
6048
6049
14
        { &hf_mpeg_descr_multilng_srv_name_desc_service_provider_name_encoding, {
6050
14
            "Service Provider Name Encoding", "mpeg_descr.svc.provider_name_enc",
6051
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6052
14
        } },
6053
6054
14
        { &hf_mpeg_descr_multilng_srv_name_desc_service_provider_name, {
6055
14
            "Service Provider Name", "mpeg_descr.svc.provider_name",
6056
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6057
14
        } },
6058
6059
14
        { &hf_mpeg_descr_multilng_srv_name_desc_service_name_length, {
6060
14
            "Service Name Length", "mpeg_descr.svc.svc_name_len",
6061
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6062
14
        } },
6063
6064
14
        { &hf_mpeg_descr_multilng_srv_name_desc_service_name_encoding, {
6065
14
            "Service Name Encoding", "mpeg_descr.svc.svn_name_enc",
6066
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6067
14
        } },
6068
6069
14
        { &hf_mpeg_descr_multilng_srv_name_desc_service_name, {
6070
14
            "Service Name", "mpeg_descr.svc.svc_name",
6071
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6072
14
        } },
6073
6074
        /* 0x5E Multilingual Component Descriptor */
6075
14
        { &hf_mpeg_descr_multilng_component_desc_tag, {
6076
14
            "Component Tag", "mpeg_descr.component.tag",
6077
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6078
14
        } },
6079
6080
14
        { &hf_mpeg_descr_multilng_component_desc_iso639_language_code, {
6081
14
            "Language ISO 639-2 Code", "mpeg_descr.component.lang_code",
6082
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6083
14
        } },
6084
6085
14
        { &hf_mpeg_descr_multilng_component_desc_text_length, {
6086
14
            "Text Length", "mpeg_descr.component.text_length",
6087
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6088
14
        } },
6089
6090
14
        { &hf_mpeg_descr_multilng_component_desc_text_encoding, {
6091
14
            "Text Encoding", "mpeg_descr.component.text_enc",
6092
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6093
14
        } },
6094
6095
14
        { &hf_mpeg_descr_multilng_component_desc_text, {
6096
14
            "Text", "mpeg_descr.component.text",
6097
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6098
14
        } },
6099
6100
        /* 0x5F Private Data Specifier */
6101
14
        { &hf_mpeg_descr_private_data_specifier_id, {
6102
14
            "Private Data Specifier", "mpeg_descr.private_data_specifier.id",
6103
14
            FT_UINT32, BASE_HEX, VALS(mpeg_descr_data_specifier_id_vals), 0, NULL, HFILL
6104
14
        } },
6105
6106
        /* 0x61 Short Smoothing Buffer Descriptor */
6107
14
        { &hf_mpeg_descr_short_smoothing_buffer_sb_size, {
6108
14
            "SB Size", "mpeg_descr.ssb.sb_size",
6109
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ssb_sb_size_vals),
6110
14
            MPEG_DESCR_SHORT_SMOOTHING_BUFFER_SB_SIZE_MASK, NULL, HFILL
6111
14
        } },
6112
6113
14
        { &hf_mpeg_descr_short_smoothing_buffer_sb_leak_rate, {
6114
14
            "SB Leak Rate", "mpeg_descr.ssb.sb_leak_rate",
6115
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ssb_sb_leak_rate_vals),
6116
14
            MPEG_DESCR_SHORT_SMOOTHING_BUFFER_SB_LEAK_RATE_MASK, NULL, HFILL
6117
14
        } },
6118
6119
14
        { &hf_mpeg_descr_short_smoothing_buffer_dvb_reserved, {
6120
14
            "DVB Reserved", "mpeg_descr.ssb.dvb_reserved",
6121
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6122
14
        } },
6123
6124
        /* 0x63 Partial Transport Stream Descriptor */
6125
14
        { &hf_mpeg_descr_partial_transport_stream_reserved_future_use1, {
6126
14
            "Reserved", "mpeg_descr.partial_transport_stream.reserved_future_use1",
6127
14
            FT_UINT24, BASE_HEX, NULL, PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE1_MASK, NULL, HFILL
6128
14
        } },
6129
6130
14
        { &hf_mpeg_descr_partial_transport_stream_peak_rate, {
6131
14
            "Peak Rate", "mpeg_descr.partial_transport_stream.peak_rate",
6132
14
            FT_UINT24, BASE_HEX, NULL, 0, NULL, HFILL
6133
14
        } },
6134
6135
14
        { &hf_mpeg_descr_partial_transport_stream_reserved_future_use2, {
6136
14
            "Reserved", "mpeg_descr.partial_transport_stream.reserved_future_use2",
6137
14
            FT_UINT24, BASE_HEX, NULL, PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE2_MASK, NULL, HFILL
6138
14
        } },
6139
6140
14
        { &hf_mpeg_descr_partial_transport_stream_minimum_overall_smoothing_rate, {
6141
14
            "Minimum Overall Smoothing Rate", "mpeg_descr.partial_transport_stream.minimum_overall_smoothing_rate",
6142
14
            FT_UINT24, BASE_HEX, NULL, 0, NULL, HFILL
6143
14
        } },
6144
6145
14
        { &hf_mpeg_descr_partial_transport_stream_reserved_future_use3, {
6146
14
            "Reserved", "mpeg_descr.partial_transport_stream.reserved_future_use3",
6147
14
            FT_UINT16, BASE_HEX, NULL, PARTIAL_TRANSPORT_STREAM_DESCR_RESERVED_FUTURE_USE3_MASK, NULL, HFILL
6148
14
        } },
6149
6150
14
        { &hf_mpeg_descr_partial_transport_stream_maximum_overall_smoothing_buffer, {
6151
14
            "Maximum Overall Smoothing Buffer", "mpeg_descr.partial_transport_stream.maximum_overall_smoothing_buffer",
6152
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6153
14
        } },
6154
6155
        /* 0x64 Data Broadcast Descriptor */
6156
14
        { &hf_mpeg_descr_data_bcast_bcast_id, {
6157
14
            "Data Broadcast ID", "mpeg_descr.data_bcast.id",
6158
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_data_bcast_id_vals_ext, 0, NULL, HFILL
6159
14
        } },
6160
6161
14
        { &hf_mpeg_descr_data_bcast_component_tag, {
6162
14
            "Component Tag", "mpeg_descr.data_bcast.component_tag",
6163
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6164
14
        } },
6165
6166
14
        { &hf_mpeg_descr_data_bcast_selector_len, {
6167
14
            "Selector Length", "mpeg_descr.data_bcast.selector_len",
6168
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6169
14
        } },
6170
6171
14
        { &hf_mpeg_descr_data_bcast_selector_bytes, {
6172
14
            "Selector Bytes", "mpeg_descr.data_bcast.selector_bytes",
6173
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6174
14
        } },
6175
6176
14
        { &hf_mpeg_descr_data_bcast_lang_code, {
6177
14
            "Language Code", "mpeg_descr.data_bcast.lang_code",
6178
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6179
14
        } },
6180
6181
14
        { &hf_mpeg_descr_data_bcast_text_len, {
6182
14
            "Text Length", "mpeg_descr.data_bcast.text_len",
6183
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6184
14
        } },
6185
6186
14
        { &hf_mpeg_descr_data_bcast_text, {
6187
14
            "Text", "mpeg_descr.data_bcast.text",
6188
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6189
14
        } },
6190
6191
        /* 0x66 Data Broadcast ID Descriptor */
6192
14
        { &hf_mpeg_descr_data_bcast_id_bcast_id, {
6193
14
            "Data Broadcast ID", "mpeg_descr.data_bcast_id.id",
6194
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_data_bcast_id_vals_ext, 0, NULL, HFILL
6195
14
        } },
6196
6197
14
        { &hf_mpeg_descr_data_bcast_id_id_selector_bytes, {
6198
14
            "ID Selector Bytes", "mpeg_descr.data_bcast_id.id_selector_bytes",
6199
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6200
14
        } },
6201
6202
        /* 0x69 PDC Descriptor */
6203
14
        { &hf_mpeg_descr_pdc_reserved, {
6204
14
            "Reserved Future Use", "mpeg_descr.pdc.reserved",
6205
14
            FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_PDC_RESERVED_MASK, NULL, HFILL
6206
14
        } },
6207
6208
14
        { &hf_mpeg_descr_pdc_pil, {
6209
14
            "Program Identification Label (PIL)", "mpeg_descr.pdc.pil",
6210
14
            FT_UINT24, BASE_HEX, NULL, MPEG_DESCR_PDC_PIL_MASK, NULL, HFILL
6211
14
        } },
6212
6213
14
        { &hf_mpeg_descr_pdc_day, {
6214
14
            "Day", "mpeg_descr.pdc.day",
6215
14
            FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_PDC_DAY_MASK, NULL, HFILL
6216
14
        } },
6217
6218
14
        { &hf_mpeg_descr_pdc_month, {
6219
14
            "Month", "mpeg_descr.pdc.month",
6220
14
            FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_PDC_MONTH_MASK, NULL, HFILL
6221
14
        } },
6222
6223
14
        { &hf_mpeg_descr_pdc_hour, {
6224
14
            "Hour", "mpeg_descr.pdc.hour",
6225
14
            FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_PDC_HOUR_MASK, NULL, HFILL
6226
14
        } },
6227
6228
14
        { &hf_mpeg_descr_pdc_minute, {
6229
14
            "Minute", "mpeg_descr.pdc.minute",
6230
14
            FT_UINT24, BASE_DEC, NULL, MPEG_DESCR_PDC_MINUTE_MASK, NULL, HFILL
6231
14
        } },
6232
6233
        /* 0x6A AC-3 Descriptor */
6234
14
        { &hf_mpeg_descr_ac3_component_type_flag, {
6235
14
            "Component Type Flag", "mpeg_descr.ac3.component_type_flag",
6236
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_ac3_component_type_flag_vals),
6237
14
            MPEG_DESCR_AC3_COMPONENT_TYPE_FLAG_MASK, NULL, HFILL
6238
14
        } },
6239
6240
14
        { &hf_mpeg_descr_ac3_bsid_flag, {
6241
14
            "BSID Flag", "mpeg_descr.ac3.bsid_flag",
6242
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_ac3_bsid_flag_vals),
6243
14
            MPEG_DESCR_AC3_BSID_FLAG_MASK, NULL, HFILL
6244
14
        } },
6245
6246
14
        { &hf_mpeg_descr_ac3_mainid_flag, {
6247
14
            "Main ID Flag", "mpeg_descr.ac3_main_id_flag",
6248
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_ac3_mainid_flag_vals),
6249
14
            MPEG_DESCR_AC3_MAINID_FLAG_MASK, NULL, HFILL
6250
14
        } },
6251
6252
14
        { &hf_mpeg_descr_ac3_asvc_flag, {
6253
14
            "ASVC Flag", "mpeg_descr.ac3.asvc_flag",
6254
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_ac3_asvc_flag_vals),
6255
14
            MPEG_DESCR_AC3_ASVC_FLAG_MASK, NULL, HFILL
6256
14
        } },
6257
6258
14
        { &hf_mpeg_descr_ac3_reserved, {
6259
14
            "Reserved", "mpeg_descr.ac3.reserved",
6260
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_RESERVED_MASK, NULL, HFILL
6261
14
        } },
6262
6263
14
        { &hf_mpeg_descr_ac3_component_type_reserved_flag, {
6264
14
            "Type Reserved Flag", "mpeg_descr.ac3.component_type.reserved_flag",
6265
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_AC3_COMPONENT_TYPE_RESERVED_FLAG_MASK, NULL, HFILL
6266
14
        } },
6267
6268
14
        { &hf_mpeg_descr_ac3_component_type_full_service_flag, {
6269
14
            "Full Service Flag", "mpeg_descr.ac3.component_type.full_service_flag",
6270
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_component_type_full_service_flag_vals),
6271
14
            MPEG_DESCR_AC3_COMPONENT_TYPE_FULL_SERVICE_FLAG_MASK, NULL, HFILL
6272
14
        } },
6273
6274
14
        { &hf_mpeg_descr_ac3_component_type_service_type_flags, {
6275
14
            "Service Type Flags", "mpeg_descr.ac3.component_type.service_type_flags",
6276
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_component_type_service_type_flags_vals),
6277
14
            MPEG_DESCR_AC3_COMPONENT_TYPE_SERVICE_TYPE_FLAGS_MASK, NULL, HFILL
6278
14
        } },
6279
6280
14
        { &hf_mpeg_descr_ac3_component_type_number_of_channels_flags, {
6281
14
            "Number of Channels Flags", "mpeg_descr.ac3.component_type.number_chan_flags",
6282
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_component_type_number_of_channels_flags_vals),
6283
14
            MPEG_DESCR_AC3_COMPONENT_TYPE_NUMBER_OF_CHANNELS_FLAGS, NULL, HFILL
6284
14
        } },
6285
6286
14
        { &hf_mpeg_descr_ac3_bsid, {
6287
14
            "BSID", "mpeg_descr.ac3.bsid",
6288
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6289
14
        } },
6290
6291
14
        { &hf_mpeg_descr_ac3_mainid, {
6292
14
            "Main ID", "mpeg_descr.ac3.mainid",
6293
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6294
14
        } },
6295
6296
14
        { &hf_mpeg_descr_ac3_asvc, {
6297
14
            "ASVC", "mpeg_descr.ac3.asvc",
6298
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6299
14
        } },
6300
6301
14
        { &hf_mpeg_descr_ac3_additional_info, {
6302
14
            "Additional Info", "mpeg_descr.ac3.additional_info",
6303
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6304
14
        } },
6305
6306
        /* 0x6F Application Signalling Descriptor */
6307
14
        { &hf_mpeg_descr_app_sig_app_type, {
6308
14
            "Application type", "mpeg_descr.app_sig.app_type",
6309
14
            FT_UINT16, BASE_HEX, NULL, 0x7FFF, NULL, HFILL
6310
14
        } },
6311
6312
14
        { &hf_mpeg_descr_app_sig_ait_ver, {
6313
14
            "AIT version", "mpeg_descr.app_sig.ait_ver",
6314
14
            FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL
6315
14
        } },
6316
6317
        /* 0x71 Service Identifier Descriptor */
6318
14
        { &hf_mpeg_descr_service_identifier, {
6319
14
            "Service Textual Identifier", "mpeg_descr.sid.txt_identifier",
6320
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6321
14
        } },
6322
6323
        /* 0x72 Service Availability Descriptor */
6324
14
        { &hf_mpeg_descr_service_availability_flag, {
6325
14
            "Availability Flag", "mpeg_descr.srv_avail.flag",
6326
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_srv_avail_flag_vals),
6327
14
            MPEG_DESCR_SRV_AVAIL_FLAG_MASK, NULL, HFILL
6328
14
        } },
6329
6330
14
        { &hf_mpeg_descr_service_availability_reserved, {
6331
14
            "Reserved", "mpeg_descr.srv_avail.reserved",
6332
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_SRV_AVAIL_RESERVED_MASK, NULL, HFILL
6333
14
        } },
6334
6335
14
        { &hf_mpeg_descr_service_availability_cell_id, {
6336
14
            "Cell ID", "mpeg_descr.srv_avail.cid",
6337
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6338
14
        } },
6339
6340
        /* 0x73 Default Authority Descriptor */
6341
14
        { &hf_mpeg_descr_default_authority_name, {
6342
14
            "Default Authority Name", "mpeg_descr.default_authority.name",
6343
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6344
14
        } },
6345
6346
        /* 0x75 TVA ID Descriptor */
6347
14
        { &hf_mpeg_descr_tva_id, {
6348
14
            "TVA ID", "mpeg_descr.tva.id",
6349
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6350
14
        } },
6351
6352
14
        { &hf_mpeg_descr_tva_reserved, {
6353
14
            "Reserved", "mpeg_descr.tva.reserved",
6354
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_TVA_RESREVED_MASK, NULL, HFILL
6355
14
        } },
6356
6357
14
        { &hf_mpeg_descr_tva_running_status, {
6358
14
            "Running Status", "mpeg_descr.tva.status",
6359
14
            FT_UINT8, BASE_DEC, VALS(mpeg_descr_tva_running_status_vals),
6360
14
            MPEG_DESCR_TVA_RUNNING_STATUS_MASK, NULL, HFILL
6361
14
        } },
6362
6363
        /* 0x76 Content Identifier Descriptor */
6364
14
        { &hf_mpeg_descr_content_identifier_crid_type, {
6365
14
            "CRID Type", "mpeg_descr.content_identifier.crid_type",
6366
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_content_identifier_crid_type_vals),
6367
14
            MPEG_DESCR_CONTENT_IDENTIFIER_CRID_TYPE_MASK, NULL, HFILL
6368
14
        } },
6369
6370
14
        { &hf_mpeg_descr_content_identifier_crid_location, {
6371
14
            "CRID Location", "mpeg_descr.content_identifier.crid_location",
6372
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_content_identifier_crid_location_vals),
6373
14
            MPEG_DESCR_CONTENT_IDENTIFIER_CRID_LOCATION_MASK, NULL, HFILL
6374
14
        } },
6375
6376
14
        { &hf_mpeg_descr_content_identifier_crid_length, {
6377
14
            "CRID Length", "mpeg_descr.content_identifier.crid_len",
6378
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6379
14
        } },
6380
6381
14
        { &hf_mpeg_descr_content_identifier_crid_bytes, {
6382
14
            "CRID Bytes", "mpeg_descr.content_identifier.crid_bytes",
6383
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6384
14
        } },
6385
6386
14
        { &hf_mpeg_descr_content_identifier_cird_ref, {
6387
14
            "CRID Reference", "mpeg_descr.content_identifier.crid_ref",
6388
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6389
14
        } },
6390
6391
        /* 0x7D XAIT Content Location Descriptor */
6392
14
        { &hf_mpeg_descr_xait_onid, {
6393
14
            "Original Network ID", "mpeg_descr.xait.onid",
6394
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6395
14
        } },
6396
6397
14
        { &hf_mpeg_descr_xait_sid, {
6398
14
            "Service ID", "mpeg_descr.xait.sid",
6399
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6400
14
        } },
6401
6402
14
        { &hf_mpeg_descr_xait_version_number, {
6403
14
            "Version Number", "mpeg_descr.xait.version",
6404
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_XAIT_VERSION_NUM_MASK, NULL, HFILL
6405
14
        } },
6406
6407
14
        { &hf_mpeg_descr_xait_update_policy, {
6408
14
            "Update Policy", "mpeg_descr.xait.update_policy",
6409
14
            FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(mpeg_descr_xait_update_policy_vals),
6410
14
            MPEG_DESCR_XAIT_UPDATE_POLICY_MASK, NULL, HFILL
6411
14
        } },
6412
6413
        /* 0x7E FTA Content Management Descriptor */
6414
14
        { &hf_mpeg_descr_fta_user_defined, {
6415
14
            "User Defined", "mpeg_descr.fta.user_defined",
6416
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_FTA_USER_DEFINED_MASK, NULL, HFILL
6417
14
        } },
6418
6419
14
        { &hf_mpeg_descr_fta_reserved_future_use, {
6420
14
            "Reserved Future Use", "mpeg_descr.fta.reserved",
6421
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_FTA_RESERVED_MASK, NULL, HFILL
6422
14
        } },
6423
6424
14
        { &hf_mpeg_descr_fta_do_not_scramble, {
6425
14
            "Do Not Scramble Flag", "mpeg_descr.fta.scramble",
6426
14
            FT_BOOLEAN, 8, TFS(&tfs_fta_do_not_scramble), MPEG_DESCR_FTA_DO_NOT_SCRAMBLE_MASK, NULL, HFILL
6427
14
        } },
6428
6429
14
        { &hf_mpeg_descr_fta_control_remote_access_over_internet, {
6430
14
            "Control Remote Access Over Internet", "mpeg_descr.fta.remote",
6431
14
            FT_UINT8, BASE_HEX, VALS(fta_control_remote_access_over_internet_vals),
6432
14
            MPEG_DESCR_FTA_REMOTE_MASK, NULL, HFILL
6433
14
        } },
6434
6435
14
        { &hf_mpeg_descr_fta_do_not_apply_revocation, {
6436
14
            "Do Not Apply Revocation Flag", "mpeg_descr.fta.revocation",
6437
14
            FT_BOOLEAN, 8, TFS(&tfs_fta_do_not_apply_revocation), MPEG_DESCR_FTA_REVOCATION_MASK, NULL, HFILL
6438
14
        } },
6439
6440
        /* 0x7F Extension Descriptor */
6441
14
        { &hf_mpeg_descr_extension_tag_extension, {
6442
14
            "Descriptor Tag Extension", "mpeg_descr.ext.tag",
6443
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_extension_tag_extension_vals_ext, 0, NULL, HFILL
6444
14
        } },
6445
6446
14
        { &hf_mpeg_descr_extension_data, {
6447
14
            "Descriptor Extension Data", "mpeg_descr.ext.data",
6448
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6449
14
        } },
6450
6451
        /* Supplementary Audio Descriptor (part of Extension Descriptor) */
6452
14
        { &hf_mpeg_descr_extension_supp_audio_mix_type, {
6453
14
            "Mix type", "mpeg_descr.ext.supp_audio.mix_type",
6454
14
            FT_UINT8, BASE_HEX, VALS(supp_audio_mix_type_vals), 0x80, NULL, HFILL
6455
14
        } },
6456
6457
14
        { &hf_mpeg_descr_extension_supp_audio_ed_cla, {
6458
14
            "Editorial classification", "mpeg_descr.ext.supp_audio.ed_cla",
6459
14
            FT_UINT8, BASE_HEX, VALS(supp_audio_ed_cla), 0x7C, NULL, HFILL
6460
14
        } },
6461
6462
14
        { &hf_mpeg_descr_extension_supp_audio_lang_code_present, {
6463
14
            "Language code present", "mpeg_descr.ext.supp_audio.lang_code_present",
6464
14
            FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL
6465
14
        } },
6466
6467
14
        { &hf_mpeg_descr_extension_supp_audio_lang_code, {
6468
14
            "ISO 639 language code", "mpeg_descr.ext.supp_audio.lang_code",
6469
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6470
14
        } },
6471
6472
14
        { &hf_mpeg_descr_private_data, {
6473
14
            "Private data", "mpeg_descr.private_data",
6474
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6475
14
        } },
6476
6477
        /* 0x81 ATSC A/52 AC-3 Descriptor */
6478
14
        { &hf_mpeg_descr_ac3_sysa_srate, {
6479
14
            "Sample Rate", "mpeg_descr.ac3.sysa_sample_rate",
6480
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_srate_flag_vals),
6481
14
            MPEG_DESCR_AC3_SYSA_SRATE_MASK, NULL, HFILL
6482
14
        } },
6483
6484
14
        { &hf_mpeg_descr_ac3_sysa_bsid, {
6485
14
            "bsid", "mpeg_descr.ac3.sysa_bsid",
6486
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_BSID_MASK, NULL, HFILL
6487
14
        } },
6488
6489
14
        { &hf_mpeg_descr_ac3_sysa_bitrate_limit, {
6490
14
            "Bitrate Code limit type", "mpeg_descr.ac3.sysa_bitrate_code_limit",
6491
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_bitrate_code_limit_vals),
6492
14
            MPEG_DESCR_AC3_SYSA_BITRATE_CODE_LIMIT_MASK, NULL, HFILL
6493
14
        } },
6494
6495
14
        { &hf_mpeg_descr_ac3_sysa_bitrate, {
6496
14
            "Bitrate Code", "mpeg_descr.ac3.sysa_bitrate_code",
6497
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_bitrate_code_vals),
6498
14
            MPEG_DESCR_AC3_SYSA_BITRATE_CODE_MASK, NULL, HFILL
6499
14
        } },
6500
6501
14
        { &hf_mpeg_descr_ac3_sysa_surround, {
6502
14
            "Surround Mode", "mpeg_descr.ac3.sysa_surround_mode",
6503
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_surround_mode_vals),
6504
14
            MPEG_DESCR_AC3_SYSA_SURROUND_MODE_MASK, NULL, HFILL
6505
14
        } },
6506
6507
14
        { &hf_mpeg_descr_ac3_sysa_bsmod, {
6508
14
            "Bsmod", "mpeg_descr.ac3.sysa_bsmod",
6509
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_BSMOD_MASK, NULL, HFILL
6510
14
        } },
6511
6512
14
        { &hf_mpeg_descr_ac3_sysa_num_channels, {
6513
14
            "Number of Channels", "mpeg_descr.ac3.sysa_num_channels",
6514
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_num_channels_vals),
6515
14
            MPEG_DESCR_AC3_SYSA_NUM_CHANNELS_MASK, NULL, HFILL
6516
14
        } },
6517
6518
14
        { &hf_mpeg_descr_ac3_sysa_full_svc, {
6519
14
            "Full Service", "mpeg_descr.ac3.sysa_full_svc",
6520
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_FULL_SVC_MASK, NULL, HFILL
6521
14
        } },
6522
6523
14
        { &hf_mpeg_descr_ac3_sysa_langcode, {
6524
14
            "Language Code (Deprecated)", "mpeg_descr.ac3.sysa_langcode",
6525
14
            FT_UINT8, BASE_HEX, NULL,  0x0, NULL, HFILL
6526
14
        } },
6527
6528
14
        { &hf_mpeg_descr_ac3_sysa_langcode2, {
6529
14
            "Language Code 2 (Deprecated)", "mpeg_descr.ac3.sysa_langcode2",
6530
14
            FT_UINT8, BASE_HEX, NULL,  0x0, NULL, HFILL
6531
14
        } },
6532
6533
14
        { &hf_mpeg_descr_ac3_sysa_mainid, {
6534
14
            "Main ID", "mpeg_descr.ac3.sysa_mainid",
6535
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_MAINID_MASK, NULL, HFILL
6536
14
        } },
6537
6538
14
        { &hf_mpeg_descr_ac3_sysa_priority, {
6539
14
            "Priority", "mpeg_descr.ac3.sysa_priority",
6540
14
            FT_UINT8, BASE_HEX, VALS(mpeg_descr_ac3_sysa_priority_vals),
6541
14
            MPEG_DESCR_AC3_SYSA_PRIORITY_MASK, NULL, HFILL
6542
14
        } },
6543
6544
14
        { &hf_mpeg_descr_ac3_sysa_reserved, {
6545
14
            "Reserved", "mpeg_descr.ac3.sysa_reserved",
6546
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_RESERVED_MASK, NULL, HFILL
6547
14
        } },
6548
6549
14
        { &hf_mpeg_descr_ac3_sysa_asvcflags, {
6550
14
            "Associated Service Flags", "mpeg_descr.ac3.sysa_asvcflags",
6551
14
            FT_UINT8, BASE_HEX, NULL,  0xff, NULL, HFILL
6552
14
        } },
6553
6554
14
        { &hf_mpeg_descr_ac3_sysa_textlen, {
6555
14
            "Text length", "mpeg_descr.ac3.sysa_textlen",
6556
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_TEXTLEN_MASK, NULL, HFILL
6557
14
        } },
6558
6559
14
        { &hf_mpeg_descr_ac3_sysa_textcode, {
6560
14
            "Text Code", "mpeg_descr.ac3.sysa_textcode",
6561
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_TEXTCODE_MASK, NULL, HFILL
6562
14
        } },
6563
6564
14
        { &hf_mpeg_descr_ac3_sysa_lang1, {
6565
14
            "Language 1 Present", "mpeg_descr.ac3.sysa_lang1",
6566
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_LANG1_MASK, NULL, HFILL
6567
14
        } },
6568
6569
14
        { &hf_mpeg_descr_ac3_sysa_lang2, {
6570
14
            "Language 2 Present", "mpeg_descr.ac3.sysa_lang2",
6571
14
            FT_UINT8, BASE_HEX, NULL,  MPEG_DESCR_AC3_SYSA_LANG2_MASK, NULL, HFILL
6572
14
        } },
6573
6574
14
        { &hf_mpeg_descr_ac3_sysa_lang1_bytes, {
6575
14
            "Language 1 ISO 639 language code", "mpeg_descr.ac3.sysa_lang1_bytes",
6576
14
            FT_STRING, BASE_NONE, NULL,  0, NULL, HFILL
6577
14
        } },
6578
6579
14
        { &hf_mpeg_descr_ac3_sysa_lang2_bytes, {
6580
14
            "Language 2 ISO 639 language code", "mpeg_descr.ac3.sysa_lang2_bytes",
6581
14
            FT_STRING, BASE_NONE, NULL,  0, NULL, HFILL
6582
14
        } },
6583
6584
        /* 0x83 NorDig Logical Channel Descriptor (version 1) */
6585
14
        { &hf_mpeg_descr_nordig_lcd_v1_service_list_id, {
6586
14
            "Service ID", "mpeg_descr.nordig.lcd.svc_list.id",
6587
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6588
14
        } },
6589
6590
14
        { &hf_mpeg_descr_nordig_lcd_v1_service_list_visible_service_flag, {
6591
14
            "Visible", "mpeg_descr.nordig.lcd.svc_list.visible",
6592
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V1_VISIBLE_SERVICE_FLAG_MASK, NULL, HFILL
6593
14
        } },
6594
6595
14
        { &hf_mpeg_descr_nordig_lcd_v1_service_list_reserved, {
6596
14
            "Reserved", "mpeg_descr.nordig.lcd.svc_list.reserved",
6597
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V1_RESERVED_MASK, NULL, HFILL
6598
14
        } },
6599
6600
14
        { &hf_mpeg_descr_nordig_lcd_v1_service_list_logical_channel_number, {
6601
14
            "Logical Channel Number", "mpeg_descr.nordig.lcd.svc_list.lcn",
6602
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V1_LCN_MASK, NULL, HFILL
6603
14
        } },
6604
6605
        /* 0x87 NorDig Logical Channel Descriptor (version 2) */
6606
14
        { &hf_mpeg_descr_nordig_lcd_v2_channel_list_id, {
6607
14
            "Channel List ID", "mpeg_descr.nordig.lcd.ch_list.id",
6608
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6609
14
        } },
6610
6611
14
        { &hf_mpeg_descr_nordig_lcd_v2_channel_list_name_length, {
6612
14
            "Channel List Name Length", "mpeg_descr.nordig.lcd.ch_list.name_length",
6613
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6614
14
        } },
6615
6616
14
        { &hf_mpeg_descr_nordig_lcd_v2_channel_list_name_encoding, {
6617
14
            "Channel List Name Encoding", "mpeg_descr.nordig.lcd.ch_list.name_enc",
6618
14
            FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
6619
14
        } },
6620
6621
14
        { &hf_mpeg_descr_nordig_lcd_v2_channel_list_name, {
6622
14
            "Channel List Name", "mpeg_descr.nordig.lcd.ch_list.name",
6623
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6624
14
        } },
6625
6626
14
        { &hf_mpeg_descr_nordig_lcd_v2_country_code, {
6627
14
            "Country Code", "mpeg_descr.nordig.lcd.country_code",
6628
14
            FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6629
14
        } },
6630
6631
14
        { &hf_mpeg_descr_nordig_lcd_v2_descriptor_length, {
6632
14
            "Descriptor Length", "mpeg_descr.nordig.lcd.ch_list.descriptor_length",
6633
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6634
14
        } },
6635
6636
14
        { &hf_mpeg_descr_nordig_lcd_v2_service_id, {
6637
14
            "Service ID", "mpeg_descr.nordig.lcd.svc_list.id",
6638
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6639
14
        } },
6640
6641
14
        { &hf_mpeg_descr_nordig_lcd_v2_visible_service_flag, {
6642
14
            "Visible", "mpeg_descr.nordig.lcd.svc_list.visible",
6643
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V2_VISIBLE_SERVICE_FLAG_MASK, NULL, HFILL
6644
14
        } },
6645
6646
14
        { &hf_mpeg_descr_nordig_lcd_v2_reserved, {
6647
14
            "Reserved", "mpeg_descr.nordig.lcd.svc_list.reserved",
6648
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V2_RESERVED_MASK, NULL, HFILL
6649
14
        } },
6650
6651
14
        { &hf_mpeg_descr_nordig_lcd_v2_logical_channel_number, {
6652
14
            "Logical Channel Number", "mpeg_descr.nordig.lcd.svc_list.lcn",
6653
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_NORDIG_LCD_V2_LCN_MASK, NULL, HFILL
6654
14
        } },
6655
6656
        /* 0xA2 Logon Initialize Descriptor */
6657
14
        { &hf_mpeg_descr_logon_initialize_group_id, {
6658
14
            "Group ID", "mpeg_descr.logon_init.group_id",
6659
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6660
14
        } },
6661
6662
14
        { &hf_mpeg_descr_logon_initialize_logon_id, {
6663
14
            "Logon ID", "mpeg_descr.logon_init.logon_id",
6664
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6665
14
        } },
6666
6667
14
        { &hf_mpeg_descr_logon_initialize_continuous_carrier_reserved, {
6668
14
            "Continuous Carrier Reserved", "mpeg_descr.logon_init.continuous_carrier_reserved",
6669
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_CONTINUOUS_CARRIER_RESERVED_MASK, NULL, HFILL
6670
14
        } },
6671
6672
14
        { &hf_mpeg_descr_logon_initialize_continuous_carrier, {
6673
14
            "Continuous Carrier", "mpeg_descr.logon_init.continuous_carrier",
6674
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_CONTINUOUS_CARRIER_MASK, NULL, HFILL
6675
14
        } },
6676
6677
14
        { &hf_mpeg_descr_logon_initialize_security_handshake_required, {
6678
14
            "Security Handshake Required", "mpeg_descr.logon_init.security_handshake_required",
6679
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_SECURITY_HANDSHAKE_REQUIRED_MASK, NULL, HFILL
6680
14
        } },
6681
6682
14
        { &hf_mpeg_descr_logon_initialize_prefix_flag, {
6683
14
            "Prefix Flag", "mpeg_descr.logon_init.prefix_flag",
6684
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_PREFIX_FLAG_MASK, NULL, HFILL
6685
14
        } },
6686
6687
14
        { &hf_mpeg_descr_logon_initialize_data_unit_labelling_flag, {
6688
14
            "Unit Labelling Flag", "mpeg_descr.logon_init.data_unit_labelling_flag",
6689
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_DATA_UNIT_LABELLING_FLAG_MASK, NULL, HFILL
6690
14
        } },
6691
6692
14
        { &hf_mpeg_descr_logon_initialize_mini_slot_flag, {
6693
14
            "Mini Slot Flag", "mpeg_descr.logon_init.mini_slot_flag",
6694
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_MINI_SLOT_FLAG_MASK, NULL, HFILL
6695
14
        } },
6696
6697
14
        { &hf_mpeg_descr_logon_initialize_contention_based_mini_slot_flag, {
6698
14
            "Contention Based Mini Slot Flag", "mpeg_descr.logon_init.contention_based_mini_slot_flag",
6699
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_CONTENTION_BASED_MINI_SLOT_FLAG_MASK, NULL, HFILL
6700
14
        } },
6701
6702
14
        { &hf_mpeg_descr_logon_initialize_capacity_type_flag_reserved, {
6703
14
            "Capacity Type Flag Reserved", "mpeg_descr.logon_init.capacity_type_flag_reserved",
6704
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_RESERVED_MASK, NULL, HFILL
6705
14
        } },
6706
6707
14
        { &hf_mpeg_descr_logon_initialize_capacity_type_flag, {
6708
14
            "Capacity Type Flag", "mpeg_descr.logon_init.capacity_type_flag",
6709
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_CAPACITY_TYPE_FLAG_MASK, NULL, HFILL
6710
14
        } },
6711
6712
14
        { &hf_mpeg_descr_logon_initialize_traffic_burst_type, {
6713
14
            "Traffic Burst Type", "mpeg_descr.logon_init.traffic_burst_type",
6714
14
            FT_UINT8, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_TRAFFIC_BURST_TYPE_MASK, NULL, HFILL
6715
14
        } },
6716
6717
14
        { &hf_mpeg_descr_logon_initialize_return_trf_pid, {
6718
14
            "Return TRF PID", "mpeg_descr.logon_init.return_trf_pid",
6719
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_TRF_PID_MASK, NULL, HFILL
6720
14
        } },
6721
6722
14
        { &hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid_reserved, {
6723
14
            "Return CTRL MNGM PID Reserved", "mpeg_descr.logon_init.return_mngm_pid_reserved",
6724
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_CTRL_MNGM_PID_RESERVED_MASK, NULL, HFILL
6725
14
        } },
6726
6727
14
        { &hf_mpeg_descr_logon_initialize_return_ctrl_mngm_pid, {
6728
14
            "Return CTRL MNGM PID", "mpeg_descr.logon_init.return_mngm_pid",
6729
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_CTRL_MNGM_PID_MASK, NULL, HFILL
6730
14
        } },
6731
6732
14
        { &hf_mpeg_descr_logon_initialize_connectivity, {
6733
14
            "Connectivity", "mpeg_descr.logon_init.connectivity",
6734
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_CONNECTIVITY_MASK, NULL, HFILL
6735
14
        } },
6736
6737
14
        { &hf_mpeg_descr_logon_initialize_return_vpi_reserved, {
6738
14
            "Return VPI Reserved", "mpeg_descr.logon_init.return_vpi_reserved",
6739
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_VPI_RESERVED_MASK, NULL, HFILL
6740
14
        } },
6741
6742
14
        { &hf_mpeg_descr_logon_initialize_return_vpi, {
6743
14
            "Return VPI", "mpeg_descr.logon_init.return_vpi",
6744
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_VPI_MASK, NULL, HFILL
6745
14
        } },
6746
6747
14
        { &hf_mpeg_descr_logon_initialize_return_vci, {
6748
14
            "Return VCI", "mpeg_descr.logon_init.return_vci",
6749
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6750
14
        } },
6751
6752
14
        { &hf_mpeg_descr_logon_initialize_return_signalling_vpi_reserved, {
6753
14
            "Return Signalling VPI Reserved", "mpeg_descr.logon_init.return_signalling_vpi_reserved",
6754
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_RESERVED_MASK, NULL, HFILL
6755
14
        } },
6756
6757
14
        { &hf_mpeg_descr_logon_initialize_return_signalling_vpi, {
6758
14
            "Return Signalling VPI", "mpeg_descr.logon_init.return_signalling_vpi",
6759
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_MASK, NULL, HFILL
6760
14
        } },
6761
6762
14
        { &hf_mpeg_descr_logon_initialize_return_signalling_vci, {
6763
14
            "Return Signalling VCI", "mpeg_descr.logon_init.return_signalling_vci",
6764
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6765
14
        } },
6766
6767
14
        { &hf_mpeg_descr_logon_initialize_forward_signalling_vpi_reserved, {
6768
14
            "Forward Signalling VPI Reserved", "mpeg_descr.logon_init.forward_signalling_vpi_reserved",
6769
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_RESERVED_MASK, NULL, HFILL
6770
14
        } },
6771
6772
14
        { &hf_mpeg_descr_logon_initialize_forward_signalling_vpi, {
6773
14
            "Forward Signalling VPI", "mpeg_descr.logon_init.forward_signalling_vpi",
6774
14
            FT_UINT8, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_RETURN_SIGNALLING_VPI_MASK, NULL, HFILL
6775
14
        } },
6776
6777
14
        { &hf_mpeg_descr_logon_initialize_forward_signalling_vci, {
6778
14
            "Forward Signalling VCI", "mpeg_descr.logon_init.forward_signalling_vci",
6779
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6780
14
        } },
6781
6782
14
        { &hf_mpeg_descr_logon_initialize_cra_level, {
6783
14
            "CRA Level", "mpeg_descr.logon_init.cra_level",
6784
14
            FT_UINT24, BASE_DEC, NULL, 0, NULL, HFILL
6785
14
        } },
6786
6787
14
        { &hf_mpeg_descr_logon_initialize_vbdc_max_reserved, {
6788
14
            "VDBC Max Reserved", "mpeg_descr.logon_init.vdbc_max_reserved",
6789
14
            FT_UINT16, BASE_HEX, NULL, MPEG_DESCR_LOGON_INITIALIZE_VDBC_MAX_RESERVED_MASK, NULL, HFILL
6790
14
        } },
6791
6792
14
        { &hf_mpeg_descr_logon_initialize_vbdc_max, {
6793
14
            "VDBC Max", "mpeg_descr.logon_init.vdbc_max",
6794
14
            FT_UINT16, BASE_DEC, NULL, MPEG_DESCR_LOGON_INITIALIZE_VDBC_MAX_MASK, NULL, HFILL
6795
14
        } },
6796
6797
14
        { &hf_mpeg_descr_logon_initialize_rbdc_max, {
6798
14
            "RDBC Max", "mpeg_descr.logon_init.rdbc_max",
6799
14
            FT_UINT24, BASE_DEC, NULL, 0, NULL, HFILL
6800
14
        } },
6801
6802
14
        { &hf_mpeg_descr_logon_initialize_rbdc_timeout, {
6803
14
            "RDBC Timeout", "mpeg_descr.logon_init.rdbc_timeout",
6804
14
            FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
6805
14
        } },
6806
6807
        /* 0xA7 RCS Content Descriptor */
6808
14
        { &hf_mpeg_descr_rcs_content_table_id, {
6809
14
            "Table ID", "mpeg_descr.rcs_content.tid",
6810
14
            FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6811
14
        } },
6812
6813
        /* 0xCB CI+ Content Label Descriptor */
6814
14
        { &hf_mpeg_descr_ciplus_cl_cb_min, {
6815
14
           "Content byte minimum value", "mpeg_descr.ciplus_content_label.content_byte_min",
6816
14
           FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6817
14
        } },
6818
6819
14
        { &hf_mpeg_descr_ciplus_cl_cb_max, {
6820
14
           "Content byte maximum value", "mpeg_descr.ciplus_content_label.content_byte_max",
6821
14
           FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6822
14
        } },
6823
6824
14
        { &hf_mpeg_descr_ciplus_cl_lang, {
6825
14
         "ISO 639 language code", "mpeg_descr.ciplus_content_label.lang_code",
6826
14
         FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6827
14
        } },
6828
6829
14
        { &hf_mpeg_descr_ciplus_cl_label, {
6830
14
          "Content label", "mpeg_descr.ciplus_content_label.label",
6831
14
          FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6832
14
        } },
6833
6834
        /* 0xCC CI+ Service Descriptor */
6835
14
        { &hf_mpeg_descr_ciplus_svc_id, {
6836
14
            "Service ID", "mpeg_descr.ciplus_svc.id",
6837
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6838
14
        } },
6839
6840
14
        { &hf_mpeg_descr_ciplus_svc_type, {
6841
14
            "Service type", "mpeg_descr.ciplus_svc.type",
6842
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mpeg_descr_service_type_vals_ext, 0, NULL, HFILL
6843
14
        } },
6844
6845
14
        { &hf_mpeg_descr_ciplus_svc_visible, {
6846
14
            "Visible Service Flag", "mpeg_descr.ciplus_svc.visible",
6847
14
            FT_UINT16, BASE_HEX, NULL, 0x8000, NULL, HFILL
6848
14
        } },
6849
6850
14
        { &hf_mpeg_descr_ciplus_svc_selectable, {
6851
14
            "Selectable Service Flag", "mpeg_descr.ciplus_svc.selectable",
6852
14
            FT_UINT16, BASE_HEX, NULL, 0x4000, NULL, HFILL
6853
14
        } },
6854
6855
14
        { &hf_mpeg_descr_ciplus_svc_lcn, {
6856
14
            "Logical Channel Number", "mpeg_descr.ciplus_svc.lcn",
6857
14
            FT_UINT16, BASE_DEC, NULL, 0x3FFF, NULL, HFILL
6858
14
        } },
6859
6860
14
        { &hf_mpeg_descr_ciplus_svc_prov_name, {
6861
14
            "Service Provider Name", "mpeg_descr.ciplus_svc.provider_name",
6862
14
            FT_UINT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6863
14
        } },
6864
6865
14
        { &hf_mpeg_descr_ciplus_svc_name, {
6866
14
            "Service Name", "mpeg_descr.ciplus_svc.name",
6867
14
            FT_UINT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6868
14
        } },
6869
6870
14
        { &hf_mpeg_descr_ciplus_prot_free_ci_mode, {
6871
14
            "Free CI mode", "mpeg_descr.ciplus_prot.free_ci_mode",
6872
14
            FT_BOOLEAN, 8, TFS(&tfs_prot_noprot), 0x80, NULL, HFILL
6873
14
        } },
6874
6875
14
        { &hf_mpeg_descr_ciplus_prot_match_brand_flag, {
6876
14
            "Match brand flag", "mpeg_descr.ciplus_prot.match_brand_flag",
6877
14
            FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x40, NULL, HFILL
6878
14
        } },
6879
6880
14
        { &hf_mpeg_descr_ciplus_prot_num_entries, {
6881
14
            "Number of entries", "mpeg_descr.ciplus_prot.num_entries",
6882
14
            FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6883
14
        } },
6884
6885
14
        { &hf_mpeg_descr_ciplus_prot_brand_id, {
6886
14
            "CICAM brand identifier", "mpeg_descr.ciplus_prot.brand_id",
6887
14
            FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6888
14
        } }
6889
14
    };
6890
6891
14
    static int *ett[] = {
6892
14
        &ett_mpeg_descriptor,
6893
14
        &ett_mpeg_descriptor_extended_event_item,
6894
14
        &ett_mpeg_descriptor_component_content_type,
6895
14
        &ett_mpeg_descriptor_content_nibble,
6896
14
        &ett_mpeg_descriptor_multilng_network_name_desc_lng,
6897
14
        &ett_mpeg_descriptor_multilng_bouquet_name_desc_lng,
6898
14
        &ett_mpeg_descriptor_multilng_srv_name_desc_lng,
6899
14
        &ett_mpeg_descriptor_multilng_component_desc_lng,
6900
14
        &ett_mpeg_descriptor_country_availability_countries,
6901
14
        &ett_mpeg_descriptor_nvod_reference_triplet,
6902
14
        &ett_mpeg_descriptor_vbi_data_service,
6903
14
        &ett_mpeg_descriptor_srv_avail_cells,
6904
14
        &ett_mpeg_descriptor_tva,
6905
14
        &ett_mpeg_descriptor_content_identifier_crid,
6906
14
        &ett_mpeg_descriptor_mosaic_logical_cell,
6907
14
        &ett_mpeg_descriptor_mosaic_elementary_cells,
6908
14
        &ett_mpeg_descriptor_service_list,
6909
14
        &ett_mpeg_descriptor_telephone_number,
6910
14
        &ett_mpeg_descriptor_pdc_pil,
6911
14
        &ett_mpeg_descriptor_nordig_lcd_v1_service_list,
6912
14
        &ett_mpeg_descriptor_nordig_lcd_v2_channel_list_list,
6913
14
        &ett_mpeg_descriptor_nordig_lcd_v2_service_list,
6914
14
        &ett_mpeg_descriptor_ac3_component_type,
6915
14
        &ett_mpeg_descriptor_linkage_population_id
6916
14
    };
6917
6918
14
    proto_mpeg_descriptor = proto_register_protocol("MPEG2 Descriptors", "MPEG Descriptor", "mpeg_descr");
6919
14
    proto_register_field_array(proto_mpeg_descriptor, hf, array_length(hf));
6920
14
    proto_register_subtree_array(ett, array_length(ett));
6921
6922
14
}
6923
6924
/*
6925
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
6926
 *
6927
 * Local variables:
6928
 * c-basic-offset: 4
6929
 * tab-width: 8
6930
 * indent-tabs-mode: nil
6931
 * End:
6932
 *
6933
 * vi: set shiftwidth=4 tabstop=8 expandtab:
6934
 * :indentSize=4:tabSize=8:noTabs=true:
6935
 */