Extended MPEG descriptor id.
For convenience, it is sometimes useful to identify descriptors using an "extended DID" because a descriptor tag is not always enough to uniquely identify a descriptor.
A descriptor usually falls into one of the following categories:
- Regular descriptor (tag in the range 0x00-0x3F for MPEG, 0x40-7F for DVB, unspecified for other standards). This descriptor is usually associated to a standard (MPEG, DVB, ATSC, ISDB, etc.)
- Private MPEG descriptor (unofficial name). Must be associated with a 32-bit registration id, or REGID, in a preceding MPEG registration_descriptor. This descriptor can be in the same descriptor list or a higher descriptor list.
- Private DVB descriptor (tag in the range 0x80-0xFF). Must be associated with a 32-bit private data specifier or PDS, in a preceding private_data_specifier descriptor in the same descriptor list.
- Dual private descriptor: Can be used either as private MPEG or private DVB descriptor. The same 32-bit value is used as MPEG registration id and DVB private data specifier.
- MPEG or DVB extension descriptor (tag == 0x3F or 0x7F). Must be associated with a 8-bit tag extension.
- Table-specific descriptor. Its tag reuses a tag which is otherwise used by some regular descriptor, typically in the MPEG-defined range 0x00-0x3F. Such a descriptor can only be found in one or more specific tables such as AIT, INT or UNT (DVB). In these tables, the descriptor tag is interpreted as this table-specific descriptor. Of course, the regular descriptor which normally uses this tag value cannot be present in these tables. The descriptor tag must be associated with an 8-bit table id (and the associated standard). If the table-specific descriptor is used in several tables, up to 4 different table ids can be set in the EDID. Table-specific descriptors for more than 4 tables are not supported (in practice, the maximum is 2 tables).
The "extended DID" or EDID is a 64-bit value as used in the file tsDID.names. The C++ class EDID encapsulates this value, nothing more.
The EDID 64-bit value is structured as follow: 0xSSSSTTRRRRRRRRDD.
- 0xSSSS, 16 bits: Mask of associated standards. See enum class Standards.
- 0xTT, 8 bits: Descriptor type. The possible values are:
- 0x00: Regular descriptor for the specified standard.
- 0x01: Private descriptor, needs a registration id or private data specifier.
- 0x02: Extension descriptor. The descriptor tag must be 0x3F (MPEG) or 0x7F (DVB).
- 0x03: Table-specific descriptor.
- 0xFF: Invalid.
- 0xRRRRRRRR, 32 bits: Registration value. It depends on the descriptor type.
- 0x00: Unused, registration value = 0xFFFFFFFF.
- 0x01: Registration value = 32-bit REGID and/or PDS.
- 0x02: Registration value = 0xFFFFFFVV where 0xVV is the extended descriptor tag.
- 0x03: Registration value = 0xYYXXWWVV where 0xVV, 0xWW, 0xXX, 0xYY are the parent table ids, in increasing order. The unused table id values are set to 0xFF.
- other: Unused, registration value = 0xFFFFFFFF.
- 0xDD, 8 bits: Descriptor id or tag.