4.5.4 PSIs and the pointer_field.
The program_association_table and the program_map_tables that describe the organization of a multiplexed DTTB bit stream are a part of the PSI layer. PSI tables, in general, are transmitted in the appropriate bit stream sequentially without a gap between the tables. This implies that tables need not necessarily start at the beginning of a transport packet and that, therefore, there needs to be an indicator as to where these begin in the bit stream. This functionality is achieved with the pointer_field. The pointer_field is present in the packet if a PSI table begins the in the packet. This event is signalled at the link level by setting the payload_unit_start_indicator to 1. The pointer_field indicates the number of bytes that follow it before the start of a PSI table. As an example, a pointer_field value of 0x00 indicates that a new PSI table begins immediately following it.
figure 40
Program Association Segment and Table Header Formats
The program_association_table is transmitted as the payload of the bit stream with PID=0 and describes how program numbers associated with program services map on to bit streams containing the program_map_tables for the indicated programs. The program_association_table may be transmitted as multiple program_association_segments with each segment having a maximum length of 1024 bytes. The program_association_table is described in Table 11. The transport decoder can extract individual table segments from the bits stream in whatever order it desires. As shown in Fig. 40, each table segment has a fixed length 8 byte header component for table segment identification, a variable length component that depends on the number of entities contained and a 4 byte CRC-32 field.
Table 11
program_association_table header
field |
Function/Usage |
table_id |
1 byte; indicates the nature of the table. 0x00 indicates a program_association_table. |
section_length |
12 bits; length of the section of the program_association_table. The length includes all bytes following this field up to and including the CRC. The two most significant bits of the field are set to 00 giving a maximum field value of 1024. This field allows the transport decoder to skip sections when reading from the bit stream if desired. |
transport_stream_id |
2 bytes; identification of a particular multiplex from several in the network (may be used in terrestrial applications to indicate service number). |
version_number |
5 bits; incremented each time there is a change in the program_association_table being transmitted. |
current_next_indicator |
1 bit; 1 indicates that the map is currently valid. 0 indicates that the map is not currently in use and will be used next. |
section_number |
1 byte; identifies the particular section being transmitted. |
last_section_number |
1 byte; section_number for the last section in the program_association_table. Needed to confirm when an entire program_association_table has been received at the decoder. |
Reserved bit values are undefined. The 2 bit value "10" following the table_id needs to be received correctly.
figure 41
Program Association Table Entry Format
The variable length program table list consists of program_count number of fixed length entries corresponding to each program and stuffing_bytes (to make up the program_association_segment_length). The format for each fixed entry is shown in Fig. 41.
The program identity "0" is reserved for the network_PID (the PID of the bit stream carrying information about the configuration of the entire system). This bit stream is meant to be a private bit stream. For all other program identities, the program_map_PID is the PID of the bit stream containing the program_map_table for the particular program.
The program_association_table ends with a four byte CRC field that contains the results of a CRC calculated over the entire program map segment starting with the segment_start_code_prefix. The CRC is based on the polynomial x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1.
figure 42
TS Program Map Formats
The program_map_table is transmitted as the payload of the bit stream with PID = program_map_PID (as indicated in the program_association_table). The program_map_table carries information about the applications that make up programs. Each program_map_table is transmitted as a single TS_program_map_section. The format for a TS_program_map_section can be described as a combination of an overall header field, fields that describe each program within the table, and a CRC field as shown in Fig. 42. The CRC is the same as that used for the program_association_table. Each program_map_PID may contain more than one TS_program_map_section, with each one describing a different program.
The header format for the TS_program_map_section is shown in Fig. 42. The format consists of the table_id field contents (0x02); two bytes used to identify the program_number of the program being described; the two bytes following the current_next_indicator are set to "0" since the description of each program is defined as fitting into one section; a 13-bit PCR_PID identifies the PID of the particular packetized elementary bit stream in the program that contains the PCR values for the program; and the program_info_length field indicates the number of bytes of program_descriptors that follow. All other fields have the same format and functionality as found in the program_association_table.
The program description that follows the header consists of the optional, variable length, program_descriptor field (whose length was indicated by the program_info_length field), followed by descriptions of each of the individual elementary bit streams that make up the program.
figure 43
Elementary Stream Description
Each elementary stream description consists of a 5 byte fixed length component and a variable length elementary_stream_descriptor component as shown in Fig. 43 and described in Table 12.
Table 12
Elementary Stream Description
field |
Function/Usage |
stream_type |
Indicates the application being considered in this elementary stream 0x00 ITU-T/ISO/IEC Reserved |
elementary_PID |
Indicates the PID of the transport bit stream containing the elementary bit stream. |
ES_info_length |
Indicates the length of a variable length elementary_stream_descriptor field that follows. |
* The stream_type for AC-3 audio is 0x81.
Descriptors are transmitted in the program_descriptor and the elementary_stream_descriptor fields to describe certain characteristics of the program or the elementary bit stream. Each program_descriptor and elementary_stream_descriptor can consist of a number of individual descriptor field elements transmitted sequentially.
A mechanism for indication the presence of descriptors is required in order to use descriptors. This functionality is achieved in the PSI tables described by the length field that precedes the descriptor with a zero value indicating that no descriptor is present. Identification of the descriptor is also required. This is achieved within the descriptor header itself which consists of a one-byte descriptor_tag field followed by a one-byte descriptor_length field that specifies the number of bytes in the descriptor that follows. The set of valid descriptor_tags in the system are defined in the MPEG-2 documentation.
Return to DTTB Tutorial Table Of Contents