US20080288663A1 - Method and system for handling errors - Google Patents
Method and system for handling errors Download PDFInfo
- Publication number
- US20080288663A1 US20080288663A1 US12/031,584 US3158408A US2008288663A1 US 20080288663 A1 US20080288663 A1 US 20080288663A1 US 3158408 A US3158408 A US 3158408A US 2008288663 A1 US2008288663 A1 US 2008288663A1
- Authority
- US
- United States
- Prior art keywords
- packet
- data
- pes
- field
- transport
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/434—Disassembling of a multiplex stream, e.g. demultiplexing audio and video streams, extraction of additional data from a video stream; Remultiplexing of multiplex streams; Extraction or processing of SI; Disassembling of packetised elementary stream
Definitions
- the present disclosure relates generally to detecting and handling errors in the packetized data, and more specifically to detection and handling of MPEG-2 transport stream errors.
- MPEG-2 moving pictures experts group
- MPEG-2 The international organization for standards (ISO) moving pictures experts group (MPEG group), approved an audio video digital compression standard known as MPEG-2 in an effort to provide a versatile compression standard capable of being utilized for a wide variety of data.
- the MPEG-2 standard provides explanations needed to implement an MPEG-2 decoder through the use of syntax and semantics of a coded bit stream.
- MPEG-2 is an open standard which continues to evolve and be applied to a variety of applications ranging from video conferencing to high definition television.
- MPEG-2 is intended to be used for variety of audio and video coding applications.
- Part one of the MPEG-2 standard (ISO 13818-1), was designated to improve error resilience and carry multiple programs simultaneously without a common time base between programs.
- the transport stream (TS) specified by the MPEG-2 standard offers a high degree of robustness for noisy channels, and can be used to carry multiple programs, such as multiple TV services.
- the transport stream is based on a 188 byte long packet suited for hardware error correction and processing schemes.
- the use of a robust protocol, such as the transport stream allows for reception over noisy environments such as terrestrial and satellite transmissions. Even in these environments it is possible to obtain fast program access, channel hopping, and synchronization between multiple elementary streams carried within the packetized elementary streams which are subdivided into transport packets.
- FIG. 1 illustrates a Transport Packet Stream defined by the MPEG-2 standard.
- the transport stream based on a 188 byte long packet, is well suited for hardware error correction and processing schemes.
- Such a configuration can carry multiple programs within the same multiplex, even when the transmission environment is noisy.
- MPEG-2 data can be transferred successfully over coaxial cable networks and satellite transponders with asynchronous multiplexing of constant or variable bit-rate programs to allow fast program access, channel hoping and synchronization between services.
- MPEG-2 transport stream consists of fixed length Transport Stream Packets (TSP or packets) based on 4 bytes of header followed by 184 bytes of TSP payload.
- TSP payload carries Packetized Elementary Stream (PES) data obtained by chopping up an Elementary Stream (ES), which consists of data of a common type and program. For example, audio for a specific program would form one elementary stream, while video for the same program would form a second elementary stream.
- PES Packetized Elementary Stream
- the TS header consists of a synchronization byte (SyncByte), flags, information indicators for error detection and timing, an adaptation field indicator, and a Packet_ID (PID) field used to identify Elementary Streams carried in the payload.
- the adaptation field when present, contains flags, and timing information.
- the PID Field is used not only to distinguish separate Elementary Streams, but also separate Program Specific Information (PSI) tables.
- PSI Program Specific Information
- FIG. 2 illustrates two types of PSI tables—a Program Association Table 210 (PAT), and a Program Map Table 220 (PMT).
- the PAT table lists unique program numbers as identifiers for each program, or elementary stream, in a multiplex, and the PID number associated with each program number.
- a fixed PID number of 0x0000 is assigned to the PAT table, making it possible for the system to download the PAT table on startup by retrieving PID 0x0000 packets.
- Each program identified the PAT table has a related Program Map Table (PMT) having its own PID identifier.
- PMT table lists the PIDs for all Elementary Streams (components) making a given program associated with the PMT.
- a specific PMT table maybe constructed for each program separately, or may be common for a group of programs. In the first case, there are many PMT tables with just one section, and each PMT table has a different PID value. In the second case one PMT table may have many sections, each relevant to one program.
- data associated with different multimedia services are transmitted, with packet multiplexing, such that data packets from several Elementary Streams of audio, video, data, and others are interleaved on a packet by packet basis into a single MPEG-2 transport stream.
- Synchronization between Elementary Streams forming a common program is achieved using presentation time stamps and program clock references which can be transmitted as part of the adaptation field specified in the header.
- FIG. 3 illustrates the fields associated with a PES stream.
- Each PES stream contains a header portion and a data portion.
- an optional header portion may exist.
- the header portion includes a Packet Start Prefix, a stream ID, and a packet length indicator.
- Transport stream information can be provided either through a direct broadcast, or through a service provider broadcast.
- Direct broadcast generally refers to signals which are received directly by an end user. Examples of direct broadcasts include satellite broadcasts received by satellite dishes and provided to a decoder at the end user's location, which receives and decodes the transport stream data.
- Another type of direct broadcast is the traditional composite television/radio broadcast. In their most elementary forms, these broadcasts are not digital broadcasts. However, the transmission of digital broadcast in MPEG-2 format is being explored and occurring as an alternative. In this manner, the user would have a tuner capable of receiving the direct terrestrial link information containing the television or radio signals. Once demodulated, the transport stream information could be provided to a desktop unit, or decoder, owned by the end user.
- Service provider broadcast would include broadcast to the home provided by cable television providers, telephone company providers, or other independent providers.
- the service provider first receives the number of signals which can be ultimately provided to the end user. Examples of such received signals include satellite feeds, terrestrial feeds, switched video sources, local video sources such as tapes, or laser disk DVD's, as well as traditional table feeds. Based upon the end users demands, the received information can be selectively provided to the end user.
- the selected feed by the service provider can be provided directly to an end user through a twisted pair connection, which may include a high speed digital subscriber link (DSL) capable of providing data at higher rates than traditionally associated with plain old telephone system (POTS) connections.
- DSL digital subscriber link
- POTS plain old telephone system
- the service provider would provide information from a central office or a head-end to a fiber node.
- a specific fiber node is generally used to support more than one end user. Examples of the use of such fiber nodes includes a fiber coaxial bus (FCB) whereby a fiber link provides the signal containing a large amount of data to a fiber node which in turn drives coaxial cable having a taps.
- FCB fiber coaxial bus
- a decoding device attached to taps at user side can receive the appropriate broadcasting signal.
- fiber node is bi-directional fiber coaxial bus. While similar to the FCB bus, the bi-directional FCB bus is also capable of transmitting data back to the central office or the head-end as well as receiving it.
- fiber node example is a hybrid fiber coax, which uses coaxial cable and branch topology toward network interface units.
- fiber to the curb Yet another example associated with service providers is known as fiber to the curb, whereby digital signaling is carried from the central office to the optical network unit which serves only a few dozen homes. Locally, a hybrid twisted pair coaxial pairs will connect to the optical network unit with the consumer's decoder. Twist repair cable carries digital video in the 5 to 40 megahertz range to no more than 500 feet from the fiber connection. Therefore, the number of homes capable of being served by a single optical network unit is limited. Analog television signals are carried in a coaxial cable from the fiber node.
- One problem associated with the flexibility of the MPEG-2 standard is that once the transport stream is received, demodulated, and decrypted, the resulting data stream can still have a variety of variations which need be known before the data stream can be properly utilized.
- the MPEG-2 specification does not indicate a specific set of control signals to be provided with the transport stream, how received data and control signals are qualified, nor the precise format of the actual data transmitted.
- implementations of set top boxes require specific service provider information. Specific service provider information results in an incompatibility among transport streams schemes provided by different service providers or cable operators. As a result, chip sets are designed and dedicated to support specific service provider's set top boxes.
- FIG. 54 shows the fields associated with section packets.
- Section packets are used for transporting PSI tables (as shown in prior art FIG. 2 ) and system information (SI) tables.
- An eight-bit table ID (TID) field is used to identify the content associated with the section packet. For example, a TID of 0x00 identifies a program association section packet related to a PAT; while a TID of 0x01 relates to a conditional access section packet related to a conditional access table.
- a three-bit section length field provides information regarding the length of the section packet, allowing a host system to know the amount of memory needed to handle a particular section packet. Multiple sections may be used in representing a single table. Each section would carry a portion of the table data.
- An eight-bit section number field can be provided to indicate a specific portion of the table being represented by the section packet. For example, if 100 section packets are used to represent a PAT, a section number of 0x07 would indicate the seventh section packet of the set of 100 section packets. As shown in prior art FIG. 54 , other fields are included in the section packet to identify the data represented in the section packet. A host system attempting to reproduce a specific PSI or SI table can identify specific section packets needed.
- FIG. 4 illustrates a prior art system for parsing a packetized stream.
- the transport parser of the prior art would receive individual packets from the framer. Based upon the PID value, the transport parser would store the PSP data to be used by the system or the graphics engine in a local buffer. When the transport parser's local buffer was filled, the transport parser would cause a bus request to the appropriate controller (system or video) to initialize a transfer of at least some of the buffered data.
- the appropriate controller system or video
- the system would initialize the transfer by generating a request to access data in the transport parser buffer. Since the bus used internally by the transport parser buffer may have other clients, the host system may have to wait to access the bus. The overall performance of the host system is reduced as a result of the system waiting on data.
- FIG. 1 illustrates, in block diagram form, prior art fields associated with a transport stream packet.
- FIG. 2 illustrates, in tabular form, a prior art Program Specific Information tables.
- FIG. 3 illustrates, in block diagram form, prior art fields associated with Packetized Elementary Stream.
- FIG. 4 illustrates, in block diagram form, a prior art representation of a parser system.
- FIG. 5 illustrates, in block diagram form, a transport stream core in accordance with one embodiment of the present disclosure.
- FIG. 6 illustrates a tabular representation of a register set.
- FIG. 7 illustrates, in block diagram form, a transport stream core in accordance with one embodiment of the present disclosure.
- FIG. 8 illustrates, in block diagram form, a framer receiving a transport stream signal.
- FIG. 9 illustrates, in timing diagram form, the relationship among individual data signals comprising a transport stream.
- FIG. 10 illustrates, in flow diagram form, a state diagram for implementing a function associated with the framer of FIG. 3 .
- FIG. 11 illustrates an algorithmic state machine associated with the framer of FIG. 3 .
- FIG. 12 illustrates, in tabular form, global status registers associated with a portion of FIG. 6 .
- FIG. 13 illustrates, in tabular form, interrupt registers associated with a portion of FIG. 6 .
- FIG. 14 illustrates, in tabular form, global control registers associated with a portion of FIG. 6 .
- FIG. 15 illustrates, in block and logic form, a portion of a framer in accordance with one embodiment of the present disclosure.
- FIG. 16 illustrates, in block and logic form, a transport packet parser in greater detail.
- FIG. 17 illustrates, in block and tabular form, a data output controller in greater detail.
- FIG. 18 illustrates, in tabular form, video control registers associated with a portion of FIG. 6 .
- FIG. 19 illustrates, in tabular form, auxiliary PID control registers associated with a portion of FIG. 6 .
- FIG. 20 illustrates, in flow diagram form, a method in accordance with one embodiment of the present disclosures.
- FIG. 21 illustrates, in block and logic form, a video packetized elementary stream parser in greater detail.
- FIG. 22 illustrates, in flow diagram form, a method in accordance with one embodiment of the present disclosures.
- FIG. 23 illustrates, in block diagram form, a video packetized elementary stream parser.
- FIG. 24 illustrates, in tabular form, global status registers associated with a portion of FIG. 6 and associated with FIGS. 21 and 23 .
- FIG. 25 illustrates, in tabular form, interrupt registers associated with a portion of FIG. 6 and fully associated with FIGS. 21 and 23 .
- FIG. 26 illustrates, in block diagram form, an output controller and memory in accordance with one embodiment of the present disclosure.
- FIG. 27 illustrates, in flow diagram form, a method in accordance with one embodiment of the present disclosure.
- FIG. 28 illustrates, in block diagram form, a detailed view of an adaptation field parser.
- FIG. 29 illustrates, in tabular form, global status registers associated with a portion of FIG. 6 and fully associated with FIG. 28 .
- FIG. 30 illustrates, in tabular form, interrupt registers associated with a portion of FIG. 6 and fully associated with FIG. 28 .
- FIG. 31 illustrates, in tabular form, global status registers associated with a portion of FIG. 6 and fully associated with FIG. 28 .
- FIG. 32 illustrates, in block diagram form, an alternate embodiment of a transport packet demultiplexor.
- FIG. 33 illustrates, in block diagram form, a detailed view of a private packet packetizer of FIG. 32 .
- FIG. 34 illustrates, in block form, representations of private packets from the packetizer of FIG. 33 .
- FIGS. 35-38 illustrate, in flow diagram form, a method of splicing video in accordance with one embodiment of the present disclosure.
- FIGS. 39-42 illustrate, in flow diagram form, a method of performing blind acquisition of an MPEG-2 data stream.
- FIG. 43 illustrates, in block form, a general purpose computer system in accordance with one embodiment of the present disclosures.
- FIG. 48 illustrates, in block diagram form, an alternate embodiment of a portion of the system of FIG. 7 .
- FIG. 49 illustrates, in block diagram form, an alternate embodiment of a portion of the transport packet parser of FIG. 16 .
- FIG. 50 illustrates, in block diagram form, an alternative embodiment of a portion of the PESP of FIG. 23 .
- FIG. 51 illustrates, in flow diagram form, a method in accordance with one embodiment of the present disclosure.
- FIGS. 52 and 53 illustrate, in tabular form, portions of the register set accordance with the system of FIG. 7 .
- FIG. 54 illustrates, in block diagram form, prior art fields associated with section packets.
- FIG. 55 illustrates, in block diagram form, a set of cascaded filters for paring section data in a packetized stream packet in accordance with one embodiment of the present disclosure.
- FIG. 56 illustrates, in flow diagram form, a method of parsing packetized stream packets containing section data in accordance with one embodiment of the present disclosure.
- detection and/or handling of error condition is enabled for an error being in the transport packet stream.
- a determination is made whether received data contains detectable error. If so, an error recovery operation is performed that includes the following: notification of the host CPU, MPEG video decoder, a display processor, and/or disregarding the data.
- a system and for parsing section packet data are provided.
- the system includes a data bus with a predetermined number of nodes for transmitting a plurality of data words and a clock node for transmitting an indication when a valid data word is being transmitted on the data bus.
- the system also includes a section parser.
- the section parser includes a first storage location for storing a first value representing a valid data word having a first section field.
- the section parser also includes a second storage location for storing a second value representing a comparable section field.
- the section parser further includes a first section field for analyzing the first value with respect to the second value.
- a host system stores a value describing a specific section packet or set of section packets it needs. The first filter then uses the value in the second storage location to allow only that packet or set of packets it needs.
- an exemplary packetized stream (PS) core 400 is illustrated in accordance with one embodiment of the present disclosure.
- the PS core 400 receives transport stream packets. Each packet is synchronized to the PS core 400 , and demultiplexed. Each packet is demultiplexed based upon its Packet IDentifier (PID), which identifies the type of data carried in the packet.
- PID Packet IDentifier
- the PS core 400 is bufferless in that no packet data is stored within the PS core 400 for access by video or system processing. Instead, the demultiplexed data is stored in one or more locations within each of the Video memory 471 , and the system memory 472 .
- the PS Core 400 includes a Framer 410 , Transport Packet Parser 420 (TPP), a PES Parser (PESP) 430 , an Adaptation Field Parser (AFP) 450 , a buffer controller 460 , and register set 480 .
- TPP Transport Packet Parser
- PESP PES Parser
- AFP Adaptation Field Parser
- the register set 480 is further illustrated in FIG. 6 .
- the register set 480 includes interrupt mask registers, control registers, status registers, and system interface registers. Interrupt mask registers are used to enable or disable specific interrupts.
- Control registers specify how various aspects of the PS core 400 are to operate. Further examples of types of control registers include Global Control Registers; Video Control Registers, which control how video packets are handled by the PS core; and Non-Video Control Registers, which control how non-video packets are handled by the PS core.
- the framer 410 receives a raw transport stream which is analyzed to isolate and provide individual transport stream packets (TSP) to the bus 405 .
- the bus 405 receives byte wide data (the data bus width could also be 16 or 32 bits) and a control signal to indicate when the current byte of data is valid.
- the Framer 410 generates a signal labeled PACKET START to indicate the first byte of a packet, and a signal labeled IN_SYNC to indicate when the data on the bus 405 is synchronized, or locked onto by the Framer 410 .
- the TPP 420 is connected to the bus 405 , and receives the IN_SYNC and PACKET START signals. Parsing of a TSP (packet) by the TPP 420 is enabled when the IN_SYNC signal and the PACKET START signals are asserted indicating the beginning of a new packet. During parsing of the header portion of a packet the PID number is obtained. Based upon the value of the PID number, registers are updated, and a determination is made whether the TSP is to be saved, further processed, or discarded.
- the TPP 420 When it is determined to save the packet, the TPP 420 asserts the signal labeled TPP_DEN which is received by the buffer controller 460 . Based upon this enable signal, the Buffer controller 460 retrieves the packet data and stores it in a predefined memory location. When it is determined to discard the packet, no further action by the TPP 420 is needed, resulting in the remainder of the TSP being ignored.
- the TPP 420 When it is determined to further process the packet by one of the other parsers 450 or 430 , the TPP 420 asserts one of their respective enable signals. For example, if it is determined that the packet contains video data, the TPP 420 will assert the signal labeled EN_PESP, likewise, if it is determined that the packet contains adaptation field data, the TPP 420 will assert the signal labeled AFP EN. Based upon these signal being active, the respective parser will further process the packed data. For example, the AFP_EN signal activates FP 450 , the PESP_EN signal activates PESP 430 , and the SP_EN activates section parser 455 .
- the Video PES Parser 430 In response to being enabled by the TPP 420 , the Video PES Parser 430 further processes the packet by parsing the header of the video PES. Based upon information carried in the header of the video PES, registers are updated, and the video payload may be stored or discarded. When it is determined to save the video payload, the PESP 430 asserts the signal labeled PESP_DEN which is received by the buffer controller 460 . Based upon this enable signal, the Buffer Controller 460 retrieves the packet data and stores it in a predefined location of video memory.
- AFP 450 processes the packet according to adaptation field data present in the packet.
- An adaptation field comparator (not shown) is used to match adaptation field data to a predetermined value. Based upon the comparison, AFP 450 can assert the signal labeled AFP_DEN. Based upon the signal, the buffer controller 460 can retrieve the packet data and store it in memory, such as video memory 471 , or system memory 472 .
- Section parser 455 processes the packet according to section fields in the packet.
- the section packets are related to particular system information (SI) or program specific information (PSI) tables, such as a Program Association Table (PAT), Conditional Access Table (CAT), Network Information Table (NIT), or Program Map Table (PMT), as shown in the following table:
- SI System Information
- PSI program specific information
- Table data is broken down into sections and each section is sent as a packet.
- a table can be represented using a single section.
- a table can also be represented over multiple sections.
- the sections include different fields identifying the nature of the section data.
- the section fields include a table_id defining the PSI or SI table the section is associated with, a version_number indicating the version of the section data, and a section_length field providing the length of the data in the section.
- the packet is processed through a series of field filters (not shown), within Section parser 455 , to compare specific fields to pre-determined values, as described further in FIG. 55 . Dependent on whether or not the values of the fields in the packet match the pre-determined values, the packet is either parsed or discarded. If the values of the fields and the ore-determined values match, the SP_DEN signal is asserted and the buffer controller 460 retrieves the parsed data and stores it accordingly.
- SI tables may be represented, other than those described herein, such as a time and data table (TDT), a running status table (RST), a bouquet association table (BAT), a service description table (SDT), or an event information table (EIT).
- Other fields may also be present in the packet for describing various aspects of the tables.
- the buffer controller 460 receives and stores the data payload based upon control signals received from the parsers. Because the packet data is stored directly in the system memory 472 , associated with a main system (not shown), or the video memory 471 , associated with a video adapter (not shown), the packet data is not stored in PS core 400 . Therefore, the core 400 and each of its parsers are described as bufferless. By storing data directly in the system memory 472 and the video memory 471 , the system does not have to access memory space within the PS core 400 . This eliminates delays associated with the prior art which occurred when the system had to wait on PS core bus accesses to be completed before the needed data could be retrieved.
- the bus connections between the buffer controller 460 and the system memory 472 can vary depending upon the implementation chosen.
- both the video memory 471 and system memory 472 can be connected to the buffer controller 460 through a PCI (Peripheral Components Interconnect) bus, or the system memory 472 can be connected to the buffer controller 460 through a PCI bus, while the video memory 471 is connected to the buffer controller 460 through an AGP (Accelerated Graphics Port).
- PCI Peripheral Components Interconnect
- FIG. 7 illustrates another embodiment of a PS core in accordance with the present disclosure.
- the PS core of FIG. 7 includes framer 710 , TPP 720 , AFP 750 , PESP 730 , buffer controller 760 , and registers 780 .
- the registers 780 are analogous to registers described with reference to FIG. 5 .
- the framer 710 provides transport stream data labeled FRAMER_DATA on an eight-bit bus, (or a 16-bit or 32-bit bus, etc.) and provides a signal labeled FRAMER_DEN.
- the FRAMER_DATA an eight-bit wide data byte, or word, which has been received from the transport stream.
- the FRAMER_DATA is qualified by the signal FRAMER_DEN, which is an enable signal.
- the signal FRAMER_DEN is asserted during each valid FRAMER_DATA.
- the FRAMER_DATA and FRAMER_DEN signals are provided to each of the parsers of FIG. 7 , the AFP 750 , the PESP 730 , and the Section Parser 755 , and the buffer controller 760 .
- the TPP parser 720 receives the header information of new packets when the framer 710 asserts an IN_SYNC signal and a PACKET_START signal. The combination of these signals, when asserted, indicate that the present FRAMER_DATA is part of the packet header. As a result, the TPP 720 receives the FRAMER_DATA from the data bus for parsing.
- the IN_SYNC signal provided by the framer 710 will be active whenever the framer 710 is locked onto, or synchronized with, the transport stream. If the IN_SYNC signal is deasserted, the TPP will not receive the data.
- the PACKET START signal can be a single pulse asserted during the first byte of a new packet, or it can be a signal that is asserted during the first byte of the packet and not deasserted until the last byte of the packet.
- the first byte of the packet can be defined in different manners. For example, the first byte can be defined to be the sync byte of a packet, or the first byte after the sync byte.
- the TPP 720 can maintain a byte count indicating the location of a current byte within the packet being received. Based upon this count, the TPP 720 will parse the header of the packet which is the first four bytes.
- the TPP receives the PID of the current packet. Based upon the PID value, the TPP can enable other parsers to perform additional parsing operations. For example, when the PESP 730 of FIG. 7 is a dedicated video PES parser, and the PID associated with a packet received by the TPP is the video PID, the TPP will enable the PESP 730 by asserting the signal labeled VIDEO. Additionally, TPP asserts the signal labeled VSTART when the current frame is the first frame of a PES stream. This indicates to the PESP that the elementary stream header is at least partially within the current frame.
- the VSTART signal allows the PESP to locate and parse the header of the video PES, while the VIDEO signal allows subsequent video payload to be retrieved.
- the TPP will provide a signal labeled AFSTART to indicate the beginning of the adaptation field.
- the AFP 750 will parse the adaptation field of the current packet.
- the TPP When a current packet, that is not a video packet, is to be received by the TS Core of FIG. 7 , the TPP will receive the packet from FRAMER_DATA and provide the entire packet one byte at a time as TPP DATA to the Buffer controller 760 .
- the PESP 730 will receive video data payload from the FRAMER_DATA and provide it to the Buffer controller 760 , which is subsequently framing data bytes into double words as PESP DATA. Any data associated with the adaptation field of the packet will be provided to the buffer controller 760 from the AFP parser 750 as AFP data.
- TPP 720 may assert the SPSTART signal.
- Section Parser 755 includes a variety of registers to enable different section fields to filter on. If any of those fields are activated, the TPP 720 may have all section packets parsed by Section Parser 755 .
- the SPSTART signal activates Section Parser 755 .
- Section Parser 755 can then compare the fields presented in the packet in deciding whether to accept or discard the packet, sending the packet through SP_DATA and asserting SP_DEN to the buffer controller 760 is the packet is accepted by Section Parser 755 .
- the buffer controller 760 may store the data.
- the FRAMER_DATA and control signal FRAMER_DEN can be received directly at the buffer controller 760 for storage.
- each of the parser modules 720 , 730 , 750 and 755 , and the framer 710 , as well as any other module which may be included, are implemented to have modular layouts.
- the layout of the TPP 720 is modular when its layout is performed independent of the layout of any of the other module.
- the TPP 720 will have a localized layout independent of the other modules.
- Independent development and reuse of modules is readily accomplished using modular layouts for modules having independent functions. This is an advantage over the prior art, which did not differentiate the parsing functions using modular layouts, in that it provides greater flexibility and reuse in the design and implementation of transport stream parsers.
- FIG. 8 illustrates a block diagram representation of the transport stream signal received at framer 710 .
- the transport stream includes five signals.
- the TDATA signal can be either a single or multiple bit wide data stream.
- Each of the control signals of FIG. 8 is a single bit signal received by the framer 710 .
- the transport stream data and control signals can be received either from a direct broadcast or through a specific service provider.
- the signals actually received by the framer 710 e.g., TCLOCK and TDATA, can vary depending on the specific network interface module (NIM) provider of direct broadcast implementation.
- the TCLOCK and TDATA signals contain the basic information necessary to retrieve this information. While FIG. 8 illustrates separate TDATA and TCLOCK signals, it is possible to provide the data and clock as an integrated signal, whereby the clock signal would be extracted from the received data.
- the TCLOCK signal may be active, i.e., toggled, only when data is transmitted.
- TCLOCK can be a constantly running synchronous clock. In that case the data is qualified with the TVALID signal.
- the TSTART signal when provided, is used to indicate when transmission of a new transport stream packet occurs.
- TSTART is available, the synchronization process is trivial because the provider of the transport stream NIM is required to specify the start of each new packet.
- the TERROR signal when present, indicates that the data being received may be corrupted due to a potential error in the data path. TERROR the decoder that the information at this point is at best suspect, if not incorrect.
- TCLOCK can qualify the TDATA signal on either a rising edge or a falling edge.
- the TCLOCK edge that qualifies TDATA can be defined in the framer 710 .
- TDATA can be transmitted in one of either MSB first or a LSB first mode. When transmitted in MSB first mode the most significant bit of each data byte is received first, and in LSB first mode the least significant bit of each data byte is received first. In accordance with a specific embodiment of the present disclosure, whether data is transmitted LSB first or MSB first can be defined in the framer 710 to properly receive bytes of TDATA.
- control signal can be active at either a logic level 1 or a logic level 0, depending upon the system implementation.
- the polarity of control signals can be defined in the framer 710 to properly identify the correct asserted logic level.
- TDATA can be received bit-by-bit, byte-by-byte, or by other various word size.
- the individual units of data are referred to having a location.
- the first byte associated with the data stream is referred to being at a first location, while the 188 th byte would be referred to as the 188 th location.
- location also implies a point in time, whereby a first byte would occur at a first time, or period, and the 188 th byte would occur at a 188 th time period as references to the TCLOCK.
- FIG. 9 illustrates the relationship between the various control and data signals of the transport stream. Specifically, FIG. 9 illustrates a TCLOCK signal having a rising edge for qualifying each data byte of the TDATA signal. Likewise, in the illustration of FIG. 9 , the TVALID signal is always asserted during the first byte indicating that the data is valid. The TSTART signal is synchronized to the first byte of the TDATA signal, which is a synchronization byte. In a specific implementation, the synchronization byte of the TDATA signal will always have the Hexadecimal value 47h. The TERROR signal is not illustrated, however it would be asserted to indicate when an error has occurred.
- FIG. 9 does not explicitly show bits of TDATA being received serially, it should be understood that for each byte representation of TDATA in FIG. 9 , 8 individual data bits can be received, qualified by eight TCLOCK pulses, to form the bytes illustrated.
- TDATA is received in a bit-by-bit manner, without a TSTART signal, there is no knowledge as to which of the bits being received represents the first bit of a byte, where by “first bit” it is meant the first bit received when the device is turned on and started latching the data.
- first bit it is meant the first bit received when the device is turned on and started latching the data.
- the state diagram of FIG. 10 is a state diagram describing synchronizing the decoder of FIG. 7 to the transport stream being received.
- FIG. 10 illustrates a state diagram for the framer 710 .
- the state diagram of FIG. 10 includes four states. State A is the synchronization lost state. State B is a synchronization search state. State C is a synchronization verify state. State D is a synchronization lock state.
- State A Upon a hardware or software reset the system in accordance with the present disclosure enters State A through transition 504 .
- State A synchronization to the data packets has been lost.
- synchronization to the transport stream has been lost, it is not known where a new packet begins or an old packet ends. As a result, it is not possible to receive data.
- the first byte is a sync byte for the transport stream, and has a predetermined value.
- the synchronization byte has the hexadecimal value 47h.
- Transition path 511 loops into State A whenever a byte received is not equal to the synchronization value 47h.
- a synchronization lock counter (SyncLockCnt) is set to a stored value. This value of the synchronization lock counter indicates the number of consecutive successful synchronization bytes that must be detected prior to determining the system is synchronized.
- each byte is received by the framer is compared to the value 47h.
- bit-stream is monitored on a shifted 8-bit basis in order to monitor every possible combination of the bits in the stream to detect the synchronization value.
- the transition path 513 is taken once the synchronization value is detected.
- the synchronization lock counter is decremented to indicate a successful detection of the synchronization value.
- the synchronization lock count is decremented the first time. Note that if the synchronization byte value is equal to 47h and the synchronization lock count is equal to zero the transition 512 is taken to State D to indicate successful synchronization.
- transition path 522 is taken for each received byte until the expected location of the next synchronization byte is reached. Because MPEG-2 transport stream packet is 188 bytes long, there will be additional 187 bytes before the next synchronization byte is expected. This is necessary because the value 47h might occur elsewhere in the stream (i.e. this value is not a reserved value). Therefore, on the 187 byte of the packet transition path 521 is taken to return to State A so that the next byte can be evaluated. If at State A it is determined that the 188 th byte is has a valid synchronization value of 47h the state machine will transition either on transition path 512 , or transition path 513 depending on how many valid synchronization bytes have been identified. In the event that the 188 th byte doesn't have synchronization value, transition 511 is taken, the synchronization lock count is set to the synchronization lock register value, and the system returns to State A.
- the framer 710 is able to monitor a data stream and determine a valid synchronization location using only the TCLOCK and TDATA signals. Once the valid synchronization location has been identified, by receiving a predefined number of correct sync values, the transition path 512 is taken to State D.
- State D indicates that the framer 710 has currently obtained a synchronization lock state.
- the transition 542 is used to determine when the next expected sync byte location is to occur.
- Transition 541 places the system in state C at reception of the transport stream sync byte to verify synchronization. If synchronization is verified, the system transits to state D along transition path 533 .
- a drop count is reset to a stored value, which indicates how many sync bytes must be missed before synchronization is lost. This way the incoming stream is continuously monitored for any errors.
- transition path 533 is taken back to state D.
- the synchronization drop count (SyncDropCnt) is decremented to indicate the sync value was not valid, but SyncDropCnt is not yet zero.
- transition path 531 is taken to State A when the synchronization drop count is equal to zero indicating synchronization has been lost.
- the state machine of FIG. 10 allows synchronization to be detected by framer 710 based upon a predetermined number of recognized synchronization values.
- the predetermined number specifies how many valid packets need to be detected sequentially before it is determined that a valid synchronization lock state has occurred. Likewise, once a valid synchronization lock state has been encountered, the number of missed transport stream packets that must occur can be user defined.
- FIG. 11 illustrates an Algorithmic State Machine (ASM) diagram in accordance with the framer. Upon reset the flow proceeds to step 602 .
- ASM Algorithmic State Machine
- a variable labeled ByteCnt is set equal to zero indicating the current byte is believed to be the transport stream sync byte, while the variable InSync is also set equal to zero indicating the system is not yet synchronized.
- the framer 710 is in a state labeled frame_byte indicating that the current byte is expected to be a transport stream sync byte, and therefore is to be evaluated.
- a variable synchronization lock count (SyncLockCnt) is set equal to a register value that specifies the number of valid synchronization bytes needed before synchronization is declared. From step 621 flow proceeds back to step 602 .
- step 604 a variable byte boundary (Byte_Boundary) is set equal to a value bit count (BitCnt), which is zero at step 604 .
- the synchronization lock count variable is decremented to indicate a successful transport stream sync frame detection.
- a next byte is received.
- the framer 710 is in a state labeled sync_search to indicate the next expected sync byte is being identified.
- step 607 a determination is made whether or not the next byte is the byte to be evaluated for synchronization. If the byte is not to be evaluated the flow proceeds to steps 622 and 606 where the byte count is incremented and a new byte received. In this manner the loop comprising step 606 , 607 and 622 is expected until the next byte is the expected sync byte to be evaluated is received, and the flow proceeds to step 608 .
- the variable ByteCnt is set equal to zero, allowing for the next transport packet to be identified. Also, the InSync flag is set equal to zero.
- the framer 710 is in a state labeled sync_lost.
- variable SyncLockCnt is decremented to indicate successful detection of the transport stream sync value.
- the synchronization lock count is decremented, when the SyncLockCnt value is equal to zero the condition has been met. If the desired number of consecutive synchronization bytes have not been received, the flow proceeds to step 608 . However, if the desired number of consecutive synchronization has been made the flow proceeds to step 612 .
- the synchronization drop count is set equal to the register value indicating how many sync frames must be missed before synchronization is declared lost, and an interrupt is issued to indicate synchronization lock (SyncLock) has been obtained.
- a variable InSync is set equal to one to indicate the system is synchronized to the transport stream. Therefore, at step 602 , the framer is in a state labeled sync_lock.
- step 636 a determination is made as to whether or the current byte is the expected sync byte value. If not, the flow proceeds to steps 644 and 635 receiving the next byte and incrementing the byte count value. If so, the flow proceeds to step 632 .
- the InSync variable is maintained equal to one, and the byte count variable is set to zero.
- the framer is in a state labeled sync_verify.
- step 633 a comparison is made of the value of the received byte in order to determine if it is equal to the synchronization value.
- the sync drop count register is set equal to a predefined register value.
- step 633 the flow continues at step 641 .
- step 641 the SyncDropCnt is decremented to monitor how many synchronization bytes missed.
- the SyncLockCnt is set to the number of a valid synchronization values which must be recognized before synchronization lock is achieved, and an interrupt is generated indicating that synchronization has been lost (SyncLost). The flow proceeds from step 643 to step 624 .
- FIGS. 12-14 illustrate specific registers capable of being utilized to implement specific framer features. For example, various variables described herein are described in the registers of FIGS. 12-14
- FIG. 12 illustrates the status and state registers of the framer 710 .
- a field labeled FramerSyncLock is used to indicate that frame synchronization has been acquired, this is analogous to State D of FIG. 10 , and/or having arrived at sync_lock, step 635 , of FIG. 11 .
- a field labeled FramerSyncDrop is utilized to indicate when synchronization has been lost. This is analogous to State A of FIG. 10 , and/or having arrived at SyncLost, step 608 , of FIG. 11 . This is analogous to the FramerSyncLock variable.
- the register Field labeled CurrentFramerState indicates one of five states. In a first state, the framer is in the process of capturing a new byte. In a second state the framer is out of transport packet frame synchronization. In the third state, the framer is searching for synchronization. In a fourth state of the framer is checking for synchronization. Finally, in the third state, the framer is in transport packet frame synchronization. Depending upon the location within the state machine of FIG. 10 , or the diagram of FIG. 12 , the values of FIG. 12 will be updated.
- FIG. 13 illustrates a list of the interrupt registers.
- a field labeled enable global demultiplexer interrupt (EnableGlobalDemuxInterrupt) is utilized to enable all core interrupts. When negated all the core interrupts would be disabled.
- EventInterruptMask An event interrupt mask field (EventInterruptMask) is utilized to mask specific interrupt sources including the FrameSyncLock interrupt, and the FrameSyncDrop interrupt.
- the framer synchronization drop bit is used to disable an interrupt that would occur when drop synchronization drop has occurred.
- FIG. 14 illustrates a portion of a configuration register illustrating various field options associated with the framer.
- a framer sync lock length field (FramerSyncLockLength) comprises 5 bit field used to select the number of consecutive transport packets, with valid sync bytes, that need to occur sequentially to determine synchronization lock has occurred.
- the field FramerSyncLockLenth is analogous to the variable SyncLockReg of FIG. 5 , and the register value indicated at steps 621 and 643 of FIG. 11 .
- a framer sync drop length field (FramerSyncDropLength) comprises a 3 bit field to select a number of consecutive transport packets that must be consecutively missed before the synchronization is declared lost.
- the field FramerSyncDropLenth is analogous to the variable SyncDropReg of FIG. 10 , and the register value indicated at steps 612 and 634 of FIG. 11 .
- a framer bit polarity field (FramerBitPolarity) is a single bit used to indicate whether the transport stream data is being received MSB first or LSB first.
- a framer clock polarity field (FramerClockPolarity) is a single bit that when asserted indicates transport stream data that is latched on a rising clock edge. Conversely, when negated, data is latched on a falling clock edge.
- a framer mode field comprises two bits for defining a combination of external transport stream control signals to be used to determine synchronization. In a first mode, only the TSTART value is used to determine when the latched data is valid. In a second mode, the TVALID signal is used determine when synchronization is valid. In the third mode, the framer will use both TSTART and TVALID to determine when synchronization is valid. In the fourth mode, the framer will use TCLOCK and TDATA to latch the bit stream in.
- Each of the control signals TVALID, TSTART, and TERROR have an respective register fields TVALID Polarity, TSTART Polarity, and TERROR Polarity to indicate whether the signals are active high signals, or active low signals.
- FIG. 15 illustrates a specific implementation of a portion of the framer 710 using the control register information.
- the implementation utilizes various configuration registers to select modes of operation.
- the transport stream data (t data) is received serially and loaded into four registers 1010 through 1013 .
- the serially loaded data is provided at a parallel output associated with each of the registers.
- the parallel outputs of registers 1010 and 1011 are received at inputs of multiplexer 1020 .
- Parallel outputs of registers 1012 and 1013 are provided to the inputs of a multiplexer 1021 .
- the parallel outputs from the multiplexers 1020 and 1021 are provided to inputs associated with the multiplexer 1022 .
- the output of multiplexer 1022 is provided to two bit shifters 1030 and 1031 . Parallel outputs of the bit shifters 1030 and 1031 are provided to a comparator 1040 .
- registers 1010 and 1011 receive the serial bits of data on rising clock edge, while registers 1012 and 1013 receive the serial bits of data on falling clock edge. This assures proper storage of data without knowledge of TDATA's relationship to TCLOCK. Clock triggers registers 1010 and 1011 store the data either from left-to-right, or from right-to-left. By loading data from opposite directions it is assured that whether data is received MSB first or LSB first that the data is stored in a manner consistent with the architecture. For example, a hexadecimal value 11h stored in register 1010 will be stored as a hexadecimal value of 88h in register 1011 .
- Register field FramerBitPolarity is to select either the MSB first registers 1011 and 1013 , or LSB first registers 1010 and 1012 , while the register field FramerClockPolarity will select the register having the appropriate clock qualification.
- the data provided to the bit shift registers 1030 and 1031 is shifted bit-by-bit, to provide all possible byte combinations to the sync byte comparator 1040 , which determines when the synchronization value has been encountered, and asserts the control bit in response to a successful compare. When a successful compare occurs, it is assumed that the byte and Packet boundaries have been located.
- the synchronization hardware illustrated below multiplexer 1022 of FIG. 15 is isolated from the external clock. This is advantageous over the prior art, in that a loss of the TCLOCK signal does not shut down the control logic associated with synchronization of the transport stream.
- a flexible framer capable receiving a variety of physical transport stream formats and determining synchronization when only clock and data are present, and to provide appropriate synchronization control signal.
- the framer may have a first in first out (FIFO), or other type buffer associated with it.
- FIFO first in first out
- other configuration specification means could be used, such as making them pin selectable, or any other of various types methods capable of describing selectable features.
- FIG. 16 illustrates a more detailed view of the TPP 620 .
- TPP 720 further includes storage locations 721 , a counter controller 722 , register controller 723 , video PID location 724 , and adaptation field start detect circuit 725 .
- each of the various header fields of a transport stream packet have a storage location within the storage locations 721 . Because the transport stream data is received on a byte-by-byte basis, and because the header field locations are fixed, the data for the individual fields is readily obtained. In the embodiment of FIG. 16 , each storage location for a specific data field is connected to the appropriate bits of the data bus, and the counter controller 722 provides enable signals to each field location to load values at the correct time.
- register fields dependent upon the specific field can be updated.
- the register set 780 is accessed and updated by the register controller 723 of FIG. 16 , which is connected to storage locations 721 .
- the register controller 723 can retrieve register data as needed. For example, the value stored in the video PID storage location 724 is retrieved from register set 780 by the register controller 723 .
- the TPP 720 generates the VIDEO signal, which indicates the current packet is a video packet, by comparing the value stored in the video PID location 724 to the PID value stored in storage locations 721 . When a match is detected, a video packet has been received. When the VIDEO signal is asserted and the Payload start indicator is also asserted, the packet is the first packet of a new video PES, and the VSTART signal is asserted.
- the TPP 720 generates the AFSTART signal using the start detect module 725 , which monitors the value of the adaptation control field, which in turn specifies the start of a new adaptation packet.
- the TPP 720 generates the PCR signal, which indicates the current packet is responsible for providing program count reference (PCR) values to the video decoder associated with the video memory of the system of FIG. 7 or FIG. 4 .
- PCR program count reference
- the PCR related fields of the packet need to be parsed to determine if PCR data has been provided.
- both the VIDEO and PCR signals are asserted the PCR data is retrieved from the video packet.
- FIG. 17 illustrates another portion of the TPP 720 that determines if a specific packet is to be saved.
- FIG. 17 includes an allocation table 727 , an output data controller 726 , and a portion of the storage locations 721 .
- the Output data controller 726 provides data packets to the Buffer controller 760 of FIG. 7 , when the PID value associated with the data packet is included in the allocation table 727 . Therefore, each valid entry of the allocation table 727 is compared to the current PID value stored in storage location 721 . If any of the valid entries match, the Output data controller 726 will provide the entire packet to controller 760 for storage. Because the current PID value is not available until after the fourth byte of the header is received, the output data controller 726 saves the first three byte in case they need to be stored.
- the allocation table 727 illustrated lists 32 PID indexes (PID — 0-PID — 31) which have PID values associated with them.
- the allocation table 727 can actually be an abstraction of register locations from the register set 780 .
- FIG. 18 illustrates video control registers, which are a portion of the register set 780 .
- the PID value associated with the PID — 0 entry of the allocation table 727 is defined to be the active video PID value, which is received from the VideoPID field of the Video Control Registers of FIG. 18 .
- FIG. 19 illustrates Demultiplexer Control Registers, which are a portion of the register set 780 used to identify packets, other than current video packets, which are to be saved.
- the PID values associated with the PID — 1 through PID — 31 entries of the allocation table 727 are received from their respective register locations within the Demultiplexer Control Registers of FIG. 19 .
- the EnableParsing field of the PID register needs to be enabled.
- the packet is not processed further, i.e. discarded, and the next received TSP is analyzed. However, if the PID of the current packet is listed in the PID allocation table, and it is not the video PID, the packet is saved to memory.
- FIG. 20 illustrates a method associated with the TPP parser.
- the TSP is received by the framer as discussed with reference to FIGS. 10 and 11 herein.
- the packet is received at the TPP.
- the packet is made available to the TPP one byte at a time.
- the framer provides an indicator where the first byte of the packet is located.
- the TPP In response to receiving the first byte of the packet, the TPP will parse the packet header at step 213 . From the parsing of the header, the TPP will retrieve the PID value of the packet.
- one way to be identified as a valid packet is be specified in an allocation table, which can be derived from specific register information. When a PID value is listed in the allocation table, the packet is to be further processed.
- step 215 a determination is made whether the packet is a packet that is to be additionally parsed. For example, step 215 specifically indicates that a determination is being made whether the PID value indicates the packet is a video packet. If so, flow proceeds to step 226 for video parsing as indicated in FIG. 22 . If the PID does not indicate a packet for special processing, i.e. not a video packet, the flow proceeds to step 227 where the data is send the buffer controller for storage, as indicated with reference to FIG. 22 .
- the Packetized Elementary Stream Parser (PESP) is enabled to allow further processing.
- the video PID is stored as PID — 0.
- PESP Packetized Elementary Stream Parser
- the operation of the PESP is controlled by the PESP Control Registers, as illustrated in FIG. 18 .
- FIG. 21 illustrates the PESP 730 in greater detail.
- PESP includes a counter controller 752 , storage location 751 , register controller 753 , data output controller 756 , video data control module 755 , and portions of register set 780 .
- a storage location within the storage locations 751 is reserved for the STREAM ID header field of a transport stream packet.
- inputs of the storage location for STREAM ID are connected to the appropriate bits of the data bus and the counter controller 752 , to receive stream ID data from the FRAMER_DATA representation of the transport stream at the correct time.
- the counter controller 752 receives the VSTART signal indicating the start of a new video PES and generates enable signals to capture the stream ID, and other information, from the video PES header.
- the counter controller is controlled by the signals VIDEO, FRAMER_DEN, and VSTART.
- the VIDEO signal indicates the current packet is a video packet.
- the FRAMER_DEN signal indicates when the current FRAME DATA byte is valid, and VSTART indicates when the current packet is the first packet for the video PES, in other words, VSTART indicates when the video packet contains video PES header data to be parsed. Based upon the VSTART signal, and the FRAMER_DEN signal, the counter controller 752 can determine which byte of the header is currently being received.
- control module 755 is controlled by the EnableParsing field (not shown in FIG. 21 ) of the video control registers of FIG. 18 .
- the EnableParsing field is a one bit field, which when deasserted, prevents further parsing of the video packet by the video PESP. Therefore, when the EnableParsing field is negated, the header of the video packet would not be parsed, and therefore, the packet would be discarded.
- the counter controller can be controlled directly from the EnableParsing bit of the video control registers, or indirectly where the VIDEO signal is disabled by the TPP 720 in response to the EnableParsing bit being deasserted.
- register fields dependent upon the specific fields of the video PES header can be updated.
- the register set 780 is accessed and updated by the register controller 753 of FIG. 21 , which is connected to storage locations 751 of the PESP.
- the register controller 753 can retrieve or access register data as needed.
- the values EnableParser, ProcessStreamID, and StreamID are register values from register set 780 .
- the video data control module 755 contains logic that enables the video data payload of the present packet to be stored. Operation of the control module 755 is determined in the content of various video control registers, as illustrated in FIG. 18 .
- the EnableParsing field is a one bit field, which when negated prevents any data from the current video packet from being saved.
- the ProcessStreamID field is 1 bit-field. When asserted, it enables further parsing based upon a specific stream ID value of the video PES header, such that if the video control register field StreamID of FIG. 18 , does not match the parsed steam ID from the current packet, the data of the packet will not be saved. This is an advantage over the prior art, where filtering on the stream ID field of the video PES was done in software, generally by the system.
- StartFromPUSICommand is used to indicate whether video PES parsing is to start immediately with the next packet or wait until a new PES stream is received as indicated by the VSTART signal, where the acronym PUSI stands for Payload Unit Start Indicator and is a part of MPEG-2 syntax.
- the video PESP parser is bufferless in that no local buffers are used to store the payload data for access by other parts of the system.
- the prior art parsers stored the parsed data in large buffers locally, which were then capable of being accessed by system components by requesting access to the local bus.
- the bufferless parsers of the present disclosure do not store data locally for access by the system. Instead, parsed data to be buffered is transmitted to the buffer controller 460 , which buffers data in system or video memory.
- FIG. 22 illustrates a method associated with a video PESP parser.
- the PESP has received an indication that a video packet is ready to be parsed.
- the notification can be directly from the TPP, by a polling mechanism, or other type interrupt.
- Step 216 determines whether parsing of the video stream is enabled. This can be determined based upon the field labeled EnableParsing of the video control registers of FIG. 18 .
- a specific action will occur. One action would be to perform no further processing of the packet, as illustrated. In another implementation, the packet would be automatically stored without further parsing, perhaps with the packet header field.
- the flow proceeds to step 217 .
- step 217 a determination is made whether the packet is to be parsed immediately, or whether parsing of video packets is to wait until a new video PES is detected. If the packet is to be parsed immediately, the flow proceeds to step 223 . If the packet is not to be parsed immediately, flow proceeds to step 218 to determine when the proper criteria for parsing is met. Field StartFromPUSICommand indicates whether parsing is to be immediate.
- step 219 a determination is made whether the current video packet is to be parsed based upon the packet stream ID. If so, flow proceeds to step 220 , if not, flow proceeds directly to step 223 .
- the PESP parses the stream ID from the PES header as discussed with reference to FIG. 21 .
- FIG. 23 illustrates addition hardware parsing which can be performed by the PESP.
- the packet data is sent to the buffer controller for storage, as discussed with reference to FIG. 24 .
- parsing steps illustrated in FIG. 22 are all by-passed if the current transport stream packet is to be immediately routed to a system memory and parsed by the host processor.
- FIG. 23 illustrates additional parsing features of the PESP 730 .
- FIG. 23 includes a counter controller 752 , storage location 751 , register controller 753 , and data output controller 756 .
- a storage locations within the storage locations 751 are reserved for the specific PES header field of the Packetized Elementary Stream.
- inputs to the storage locations 751 for specific PES header fields are connected to the appropriate bits of the data bus, while the counter controller 752 , which receives the VSTART signal indicating the start of a new video PES, receives PES header data from the FRAMER_DATA representation of the transport stream at the correct time.
- the counter controller 752 will generate enable signals to capture the various PES header fields based upon the values stored in locations 736 , and a counter value generated by counter 737 .
- the counter controller is controlled by the signals VIDEO, FRAMER_DEN, and VSTART.
- the VIDEO signal indicates the current packet is a video packet.
- the FRAMER_DEN signal indicates when the current FRAME DATA byte is valid, and VSTART indicates when the current packet is the first packet for the video PES, in other words, VSTART indicates when the video packet contains video PES header data to be parsed. Based upon the VSTART signal, and the FRAMER_DEN signal, the counter controller 752 can determine which byte of the header is currently being received.
- the counter controller can either allow for immediate PES parsing upon receiving a video packet, or it can wait to parse the PES data until a packet containing PES header information is received. Where PES parsing is immediate, the video data is provided to the output buffer.
- a compare operation determines if the present counter 737 values is equal to any of the values stored in location 736 . If so, it indicates that the current clock cycle is providing data to be stored in one of the fields of storage locations 751 . As a result, the controller 752 will generate an enable to the appropriate one or more fields represented in the current clock cycle, and the field data will be latched.
- the compare function 738 can be implemented in many different ways. For example, a state machine or logic can be used to indicated which of the storage locations 751 are to be stored at a specific time. In addition, feedback is provided to the controller 752 from various storage locations 751 to assure proper operation. For example, all PES header will have the field portions 766 of storage location 751 . However, depending upon various values of these, and other fields, the field portions 767 - 769 may or may not be present in a particular PES header.
- whether the fields portions 767 exist in a current header is determined by whether the binary framing indicator “10” immediately follows the PES packet length field as in FIG. 3 , and as stored in the OptionalHeader indicator field.
- This OptionalHeader indicator field is compared to the expected value and the results are provided to the controller 752 to indicate additional parsing is to be done. As a result, the parser 752 continues to generate control signals to store the fields associated in the field portions 767 .
- the controller 752 determines which header fields are present and need to be stored in storage locations 751 .
- register fields dependent upon the specific fields of the video PES header can be updated.
- the register set 780 is accessed and updated by the register controller 753 , which is connected to storage locations 751 of the PESP.
- the register controller 753 can retrieve or access register data as needed.
- FIG. 24 illustrates a subset of the Status Register Fields associated with on implementation the PESP, while FIG. 25 illustrates interrupt mask registers having corresponding bits.
- the data associated with the payload portion of the current PES packet can be provided to the data output controller 756 as discussed with reference to FIG. 21 .
- the 16 bytes of optional PESPrivate data associated with the PES header and stored in storage locations 769 are provided external the PESP to a private data packetizer as will be discussed in greater detail herein.
- FIG. 26 includes a detailed view of buffer controller 460 of FIG. 5 , video bus/memory controller 488 , system bus/memory controller 468 , video memory 471 , and system memory 472 .
- the buffer controller 460 includes a data path for handling video PES data to be stored in the video buffer 500 of video memory 471 , and a data path for handling other PES data that is to be stored in system memory buffers 501 - 503 of the system memory 472 .
- the data path for handling other PES data includes the System FIFO (First In First Out) controller 466 , FIFO 462 , and System HBI (Host Bus Interface) Controller 463 .
- the data path for handling video PES data includes a Video FIFO controller 486 , FIFO 461 , Video HBI Controller 483 .
- Each of the System and Video data paths accesses transport demultiplexer register 465 .
- the System FIFO controller 466 provides an interface between the Parsers of FIGS. 5 and 7 and the FIFO 462 .
- the controller 460 allows filtered packet data to be received and stored in the FIFO 462 .
- the System HBI controller 463 requests access to the system memory 472 through the controller 468 .
- the controller 468 may include a system bus controller, a memory controller, or a combination of a memory/system bus controller. Generally, the controller 468 will control access to other system resources as well.
- the System Memory 472 has been partitioned by the system host to include one or more system circular buffers 501 - 503 .
- the system buffers 501 - 503 are implemented as circular buffers and are filled by operation of the controller 483 .
- the controller 483 handles the buffer “write” pointer.
- the “read” pointer for the buffers is managed by the software on the system host side (not shown) which retrieves data from the buffers 501 - 503 .
- the number of system buffers is limited to 15 buffers.
- the transport core may use fewer than 15 buffers. More than one PID per buffer is allowed. However they have to be different, i.e. the same PIDs can not be allocated to more than one buffer (i.e. one TSP packets can be routed into only one destination ring buffer).
- the Transport Demultiplexer registers of FIG. 19 are used to specify where data associated with a specific PID is to be stored. For each PID to be saved, a buffer index is used to specify one of the 15 buffer locations in system memory.
- PID types can be stored at a common buffer by specifying the same buffer in the BufferIndex field
- data associated with all system PIDs can be stored to a single buffer, which may be specified or defined by default.
- the buffer index, or location can be determined by one of the parsers, and provided to the Buffer controller 760 .
- the video data path of FIG. 26 is handled in a manner analogous to the system path described above. However, in the specific embodiment, only one buffer, in video memory, is associated with the video path.
- the physical memory location and the size of the ring memory buffers 500 - 503 is specified by the system host using buffer configuration and management registers (not shown).
- the host processor has to initially specify buffer start address and length of the buffer.
- Other buffer data can also be used, for example, a threshold register can be implemented.
- the size of the video buffer depends on horizontal and vertical pixel resolution, frame rate, profile and level, maximum bit rate and video buffering verifier (VBV).
- the buffer controller 460 will manage a write pointer for the video stream.
- the read pointer is managed by the control 488 associated with the video adapter. Hardware or software can generate an interrupt if the write pointer is equal to the read pointer ⁇ 1 (overflow condition).
- the worst case is for a when the nominal audio bit rate 640 kbps with sampling frequency of 32 kHz.
- the actual size of the compressed bit stream audio buffer depends on a priority and the rate of occurrence of the audio decoder thread, when audio is decoded in software.
- FIG. 27 illustrates a method in accordance with the present disclosure describing the operation of the system HBI controller 483 of FIG. 26 .
- the flow is also applicable to the video HBI controller 463 .
- a determination is made whether there is data stored in the FIFO 462 . If not, flow remains at step 801 until data is present, otherwise, the flow proceeds to step 810 .
- the buffer to which the data is to be stored is identified.
- the destination buffer is identified when matching and crossing the PID number, or identifier, to the buffer number in the transport demultiplexer register 465 .
- the buffer can be identified by accessing the allocation table, or by receiving a buffer index from the transport parser or other portion of the transport core.
- step 802 a determination is made whether the identified buffer is full, or otherwise not capable of receiving additional data. If the buffer is not capable of receiving additional data, the flow loops back to step 802 through step 811 , which implements a delay. Note the delay of step 811 may be a fixed delay, as result of polling to determine if the buffer is full, or the delay of step 811 may be variable, such as where the delay is based an interrupt which indicates when the buffer is available. Once the desired buffer is no longer full, flow proceeds to step 803 .
- a bus request is made to allow access to one of the buffers 501 - 503 .
- the next block of data is written to the appropriate buffer at step 804 .
- a block of data can be a word, double word, or any other size of data specified by the system.
- the parsers of FIG. 5 assure data is provided to the FIFO only in whole blocks by always writing entire blocks of data to the FIFOs.
- step 805 a determination is made whether the identified buffer 501 - 503 is now full. If so, the flow proceeds to step 807 where the bus is released, if not full, the flow proceeds to step 806 , where it is determined if more data is to be written.
- step 806 a determination is made whether more data resides in the FIFO 462 . If so, flow proceeds to step 804 , otherwise, the flow proceeds to step 807 where the bus accessing the Buffer is released and flow returns to step 801 . In another embodiment, the bus would be released after each block is transferred, instead of determining if more data is to be written. By implementing the flow of FIG. 26 , the data stored in the FIFO 462 is transferred to the buffers.
- the buffer implementation described provides an advantage over the prior art in that moving the buffers in to system and video memory associated with an external system, such as a general purpose computer, allows for bufferless parsers. As a result, the system and video resources do not have to wait to access buffers local to the parsers.
- the performance improvements using bufferless parsers has been observed by the present inventors to be up to 40% over the prior art.
- by allowing for parsing of the PES data it is possible to limit the amount of bandwidth used to store unused data.
- One skilled in the art will recognize the present disclosure has been described with reference to a specific embodiment, and that other implementations and variations of the present disclosure would be anticipated.
- the AFP parser 750 parses data associated with the adaptation field of a transport packet.
- the Transport Packet Parser 720 enables operation of the Adaptation Field Parser 750 when the adaptation field of the header indicates the presence of an adaptation field.
- FIG. 28 illustrates, in block diagram form, a detailed view of the Adaptation Field Parser 750 .
- the AFP 750 illustrated in FIG. 28 includes adaptation control counter 782 , latch 785 , register logic 786 , and storage and register locations 781 , 783 , and 784 .
- the adaptation control counter 782 receives signals on connections labeled AF START, FRAMER_DEN, and FRAME DATA.
- the connection labeled AF START receives signals from the Transport Packet Parser 720 , and indicates the beginning of the transport packet's adaptation field.
- the connection labeled FRAMER_DEN receives signals from the Framer 710 , and indicates when each new byte of data is available on the FRAMER_DATA bus.
- the adaptation control counter 782 Based upon the received signals, the adaptation control counter 782 provides the control signals necessary to parse specific field information from data received on the FRAME DATA bus.
- the Transport Packet Parser 720 will assert a signal on to the connection AF START in response to the adaptation field control portion of the transport packet header indicating the presence of an adaptation field.
- the signal on the AF START connection will be asserted in relation to the assertion of the first byte of adaptation field data onto the FRAMER_DATA bus.
- the first byte of the adaptation field indicates the length adaptation field. Therefore, the adaptation control counter 782 will latch the first byte of the frame data into a storage location labeled AF LENGTH to determine the length of the adaptation field. Accordingly, the adaptation field has a variable length between 1 and 183 bytes long. By decrementing the adaptation field length by one as each new byte of data is received on the FRAME DATA bus, the adaptation control counter 782 can monitor which fields, or field portions, of the adaptation field are present on the FRAME DATA bus at a specific time. Accordingly, the adaptation control counter 782 provides operational control signals to each of the storage locations of storage portion 781 to correspond to the presence gets data on the FRAME DATA bus.
- the storage locations 781 correspond to specific registers of the register set 780 of FIG. 7 .
- the discontinuity indicator field is known to be the first bit, of the second byte, of the adaptation field. Therefore, the storage location labeled Discontinuity Indicator of storage area 781 will be connected to only the first bit of the FRAME DATA bus.
- logic associated with the Adaptation Control Counter 782 will provide a latch control signal to the Discontinuity Indicator of storage location 781 only when the counter associated with the Adaptation Control Counter 782 indicates the second byte of data is present on the FRAME DATA bus.
- the other specific adaptation bit-fields associated with locations 781 will be parsed.
- storage locations 781 may be the actual register locations of register set 780 , or may be storage locations local to the adaptation field parser 750 . Where the storage locations are local to the parser 750 , a register control portion (not shown) can be used to update values within the register set 780 .
- the Optional Flags field of storage locations 781 is connected back to the adaptation control counter 782 in order to provide feedback.
- the need for this feedback is best understood with reference to prior art FIG. 1 .
- Prior art FIG. 1 illustrates that the adaptation field can include five optional fields. The presence of each of these five optional fields is indicated by flag bit.
- the field labeled Optional Flags represents the five flags of the adaptation field to indicate the presence of the optional fields. Therefore, by providing feedback from the optional field location, the adaptation control counter 782 can correctly determine which optional field data is present, and when to receive optional field data.
- Storage locations 784 generally represent register locations whose values are determined based upon the parsed information of storage locations 781 . Specifically, the register logic 786 monitors the operation of the adaptation control counter 782 and/or the contents of the locations 781 to determine when the PCR value has been received. In addition, the displaced countdown value received at the adaptation field parser is monitored determine when the actual video splicing point occurs.
- the adaptation control counter 782 When the optional flags indicate that the optional fields includes transport private data, the adaptation control counter 782 will provide the private data from the FRAME DATA bus to a PESP PRIVATE DATA bus through either directly, or through a latch 785 . In addition, the adaptation control counter 782 will provide a signal to a node labeled PRIVATE DATA ENABLE to indicate when the PESP PRIVATE DATA bus has valid data. In one embodiment, the PRIVATE DATA ENABLE node is clocked for each valid byte of data written to the PESP PRIVATE DATA bus.
- the PRIVATE DATA ENABLE node would include multiple nodes, whereby one node pulsed to indicate each valid byte of data written to the PESP PRIVATE DATA bus, while the other node indicated the valid PESP private data cycle.
- the valid PESP private data node would be asserted for the entire assertion of PESP private data from a common transport packet.
- FIGS. 29 through 31 illustrates portions of the register set 780 associated with the adaptation field parser 750 .
- FIG. 29 illustrates status registers
- FIG. 30 illustrates interrupt mask registers
- FIG. 31 illustrates control registers.
- FIG. 29 illustrates a number of status register fields associated with the register set 780 of FIG. 7 , which are associated with the operation of the adaptation field parser 750 .
- Video AFPcrReceived is a single read bit, which is set to 1 after arrival and extraction of the PCR sample in the adaptation field. The assertion of this bit will cause an interrupt be generated if the VideoAFPPcrReceived bit of the event interrupt mask is enabled. Subsequent read access of this field will cause it to be cleared.
- Register field VideoAFPcrDiscontinuity is a single bit of R/W field data that is set to 1 when a discontinuity indicator in the adaptation field is asserted. The assertion of this bit will cause an interrupt to be generated if the VideoAFPCRDiscontinuity bit of the event interrupt mask of FIG. 30 is enabled. Subsequent access of this field by software will cause the field to be cleared.
- VideoAFDiscontinuityFlag is a single bit R/W field that is set to 1 after a discontinuity indicator flag has been asserted in the adaptation field of the video transport packet. Assertion of the discontinuity indicator flag indicates discontinuity on the continuity counter. The assertion of this bit will cause an interrupt to be generated if the VideoAFDiscontinuityFlag of the event interrupt mask register of FIG. 30 is asserted. The subsequent access of this field by software will cause this field to be cleared.
- VideoAFRandomAccess is a single bit R/W field that is set to 1 when the video packet has a random access flag asserted in the adaptation field. This indicates the start of the new elementary stream. The assertion of this bit will cause an interrupt be generated if the VideoAFRandomAccess bit of the event interrupt mask register of FIG. 30 is asserted. The subsequent access of this field by software will cause the field be cleared.
- VideoAFSplicingFlag is a single bit R/W field that is set to 1 when the video packet has the splicing point flag asserted in the adaptation field. This flag indicates that a splicing point is approaching. The assertion of this bit will cause an interrupt to be generated if the VideoAFSplicingFlag bit of the event interrupt mask register of FIG. 30 is asserted. The subsequent access of this field by software will cause the field to be cleared.
- Register field VideoAFSplicingPoint is a single bit R/W field that is set to 1 when the video packet has the VideoAFSplicingFlag asserted and the AF Splice Countdown register has a value of 0.
- the setting of this bit is controlled by the register logic 786 of FIG. 28 .
- the assertion of this bit will cause an interrupt to be generated if the VideoAFSplicingPoint bit of the event interrupt mask register of FIG. 30 is asserted.
- the subsequent access of this field by software will cause the field to be cleared.
- VideoAFPrivateData is a single bit R/W field, which when set to 1 indicates the video packet has adaptation field private data. The assertion of this bit will cause an interrupt be generated if the Video AF Private Data bit of the event interrupt mask register of FIG. 30 is asserted. The subsequent access of this field by software will cause the field to be cleared.
- Register field AFSpliceCountdown is a byte wide R/W field that contains the current splice countdown value from the current adaptation field.
- FIG. 31 illustrates control registers associated with register set 780 that control operations associated with the Adaptation Field Parser 750 .
- Register field EnabledAFPrivateData is a single bit R/W field that when asserted enables parser of the adaptation field private data.
- Register field AFPrivateDataBufferIndex is a four bits field which specifies 1 of up to 15 destination buffers in the system memory where the private data is to be stored.
- Register field PCRIndex is a five bits field which specifies one of 32 PID values from which the PCR data is to be extracted.
- Register field Enabled Auto Splicing is a single bit R/W field that enables automatic splicing of the video elementary stream.
- FIG. 32 illustrates an alternate embodiment of a portion of the transport demultiplexer illustrated in FIG. 7 .
- FIG. 32 illustrates a Private Data Packetizer 740 connected to the Adaptation Field Parser 750 and the Video PESP 730 .
- the Adaptation Field Parser 750 is connected to the Private Data Packetizer 740 through the AFP PRIVATE DATA bus and node PRIVATE DATA ENABLE.
- the Video PESP 730 is connected to the Private Data Packetizer 740 through the bus labeled VIDEO PRIVATE DATA and node labeled VIDEO PRIVATE DATA ENABLE.
- the Private Data Packetizer 740 receives private data from the AFP 750 , and video PESP 730 and associated control signals.
- private data packetizer 740 provides the private data packet on a bus labeled PRIVATE DATA to buffer controller 760 , and a control signal on the node labeled PRIVATE DATA ENABLE to the buffer controller 760 .
- private data associated with the video PESP 730 has a fixed length of 16 bytes.
- the private data associated with the transport packet which is parsed by the AFP 750 , has a variable length from 1 to 181 bytes. Because the FIFOs 761 and 762 of the buffer controller 760 store double words, it is possible, and in fact likely, that the private data associated with the adaptation field of transport packet will not provide to the FIFOs private data that ends on a double words boundary. The significance of this is best understood with a discussion of the operation of one embodiment of the buffer controller 760 .
- each parser has a corresponding double word buffer in the buffer controller 760 , which receives and stores the individual bytes of data until an entire double word has been received.
- the first byte of data provided by the Transport Packet Parser 720 is stored in the first byte location of a double word buffer 763
- the second, third, and fourth data bytes will be stored in second, third, and fourth byte locations of the double word buffer 763 respectively.
- the double word buffer 763 has received the fourth byte, the double word is written from the double word buffer 763 to the FIFOs 761 , thereby freeing up the double word buffer 763 for subsequent bytes.
- the double word buffer 763 When a specific data packet of a packetized elementary stream does not end on a double word boundary, the double word buffer 763 will be partially filled and therefore not send the end of the reception of the specific data packet. However, this is not a problem if specific data packet is repeatable over many packetized elementary streams, because the subsequent data packet associated with the same packetized elementary stream can be expected to be received within a relatively short amount of time to complete filling the double word buffer. Once the double word buffer is filled using data bytes from the subsequent data packet, the field double word buffer 763 will be sent to the FIFOs 761 .
- the private data packetizer 740 illustrated in FIG. 32 , addresses this problem.
- the private data packetizer 740 can receive private data from each of the Adaptation Field Parser 750 , and the Video PESP Parser 730 , and forms a private data packet to be sent to the buffer controller 760 , which is guaranteed to have a length that ends on a double word boundary.
- both the packetized elementary stream data from the Transport Packet Parser 720 , and the private data generated by the private data packetizer 740 are sent to the system FIFOs 761 .
- An index indicator which specifies which circular buffer in system memory the private data is to be stored, is provided to the FIFOs 761 .
- the index indicator is specified in the register field labeled AFPrivateDataBufferIndex, which was discussed with reference FIG. 31 herein. Therefore, all private data, whether from the Adaptation Field Parser 750 or from the Video PESP 730 , is been provided to the same buffer in system memory.
- FIG. 33 illustrates the private data packetizer 740 in greater detail.
- the private data packetizer 740 of FIG. 33 includes counter controller 741 , the AF Data Type Code storage location 742 , PES Data Type Code storage location 743 , Stuffing Code storage location 744 , AFP Data Latch 745 PESP Data Latch 746 , and fixed length Indicator Code 747 .
- the AF Data Type Code storage location 742 stores the specific eight-bit type indicator associated with the adaptation field private data.
- the PES Data Type Code storage location 743 stores the specific the eight-bit type indicator associated with the PESP private data.
- the Stuffing Code storage location 744 stores the specific eight-bit stuffing code which is used to pad private data packet to insure the private data packet always ends on a double word boundary.
- the AFP Data Latch 745 is used to store the actual private data from the adaptation field parser to be provided to the buffer controller 760 .
- the PESP Data Latch is used to store the actual private data from the PESP parser is to be provided to the buffer controller 760 .
- the fixed length indicator code 747 stores the fixed length value associated with the PESP parser private data. In the specific example, the PESP parser private data will always be 16 bytes of data, or 0x10 hexadecimal.
- the counter controller 741 can be enabled either by be AFP Data Enable signal, or by the PESP Data Enable signal.
- the number of bytes of private data is fixed at 16 bytes, therefore, the value of 16 will be used by be AFP counter controller 741 to generate the appropriate signal for the PRIVATE DATA bus.
- AFP private data has a variable length. The actual number of bytes of AFP private data, not including the length byte, is transmitted in the first byte of the AFP private data field of the data packet. Therefore, the counter controller receives the number of bytes of transport packet private data by latching the first byte of the private data field of the data packet. The first byte of the private data field is received on the AFP DATA bus on or after the PES Data Enable signal has been received. Based upon the source of the private data and the length of private data, the private data packetizer 740 will construct the private data packet.
- FIG. 34 illustrates a specific embodiment of a private data packet generated by the private data packetizer 740 .
- Data block 771 illustrates the format of the private data packet having specific fields: type, length, data, and stuffing.
- the type field of the private data packet indicates the source of the private data, either transport packet private data, or video PES data.
- the hexadecimal value of 0x55 is used to indicate private data associated with the transport packet received from the AFP 750
- a hexadecimal value of 0xAA is used to indicate private data from the video PES received from the video PESP. Note that in other embodiments of the present disclosure, additional data types can be received from other sources.
- the length field of the private data packet specifies the length of private data that is to follow the private data packet. Note that in the specific embodiment illustrated, be value of the length field does not include a count for the length field byte.
- the stuffing field of the private data packet is used to assure the private data packet ends on a double word boundary. As indicated, the stuffing field can include zero to three bytes of data.
- Data block 772 of FIG. 34 illustrates a private data packet associated with the video PES stream.
- private data packet 772 has a type value of hexadecimal value 0xAA indicating the private data packet is associated with a video PES.
- the length field of packet 772 has a hexadecimal value of 0x10, which indicates that 16 bytes are contained within the subsequent data field. Accordingly, the subsequent data field of the private data packet includes 16 bytes, 0 through F. Because the length of the fields type, length, and data is no one, the number of stuffing bytes needed to insure the private data packet ends on a double word boundary is readily determined. Therefore, two stuffing bytes of 0xFF are represented in the stuffing field of private data packet 772 .
- the length of the private data packet ends on a double word boundary. Therefore, when the data bytes of the private data packet 772 of FIG. 34 are provided to the buffer controller 760 , and more specifically to the double word buffer 764 of the buffer controller 760 , it is assured that the entire private data packet will be provided to the FIFOs 761 without delay. Once the data is provided to the FIFO 761 , the double word of data will be provided to the appropriate buffer in system memory. System software will, therefore, be able to access the private data stored in system memory without delay, and determine the type of data based upon type field, and length of the data based upon length field. Private data packet 773 of FIG.
- packet 773 has a type value of hexadecimal value 0x55, which represents an adaptation field data packet.
- the length field of the packet 773 has a hexadecimal value of 0x0F, which indicates 15 bytes of data are associated with the adaptation field private data.
- 15 bytes of data 0 through E are represented in the data field, and a total of three stuffing bytes are needed in order to assure that private data packet ends on a double word boundary.
- Data blocks 774 and 775 indicate other specific private data packets associated with the transport packet provided by the adaptation field parser 750 . Specifically, the length of the private data has been varied in packet 774 and 775 to illustrate packets having a single stuffing byte, and no stuffing bytes respectively.
- the counter controller 741 provides the appropriate data type code to the buffer controller 760 by selecting storage location 742 or 743 respectively depending upon whether adaptation field private data or video PES private data is being received.
- the appropriate data type will be provided onto the bus labeled PRIVATE DATA.
- the bus labeled PRIVATE DATA is illustrated to be a wired-OR bus, however any type of multiplexing would be the appropriate.
- the length field of the private data packet is provided to the PRIVATE DATA box differently depending upon whether adaptation field private data or video PES private data is being provided.
- the length of video PES private data which is always 16 bytes, is provided to the PRIVATE DATA bus by selecting the storage location 747 , which contains the hexadecimal value 0x10. Enabling the storage location 747 allows the hexadecimal value 0x10 be provided to be PRIVATE DATA bus.
- the length of adaptation field private data is provided to the PRIVATE DATA bus by latching the first byte of the adaptation field private data into be AFP data latch 745 . Because the first byte of the adaptation field private data specifies the number of private data bytes that follow, the appropriate length value for the length field is provided to the PRIVATE DATA bus.
- the actual data is provided to the PRIVATE DATA bus. This is accomplished in a similar manner for both the adaptation field private data and a video PES private data. Specifically, the counter controller 741 latches the data into one of the appropriate data latches AFP data latch 745 , or PESP data latch 746 . In response, be associated private data is provided to the PRIVATE DATA bus. Note the private data could be provided to the PRIVATE DATA bus directly to transmission gates, or any other appropriate logical interface.
- the generation of stuffing codes, from the stuffing code register 744 , is controlled by the control counter 741 . Because the control counter 741 knows the length of the private data provided, it can readily determined the number of bytes needed, if any, to assure the private data packet ends on a double word boundary is readily calculated. Therefore, after the last byte of the private data, from either the AFP or PESP, the appropriate number of stuffing codes are been provided to the PRIVATE DATA bus by selecting the storage location the 744 determined number of times this assures the buffer controller 760 will receive a number of bytes that and on a double word boundary. As a result, the private data can be provided to the system buffer controller 760 without delay.
- FIGS. 35 through 38 illustrate a method of performing automatic splicing using the data parsed herein provided to their respective registers.
- the term splicing refers to the process of switching between two video streams. For example, splicing can be used to switch between the video of the main program and a video of a commercial, between video to a commercial, and from a commercial video back to the main program video.
- the method of FIGS. 35 through 38 is contingent upon being enabled by the compound to field of the control register. Splice points can be sorted as Out Points or In Points.
- An Out Point is a location in the stream where the underlying elementary stream is well constrained for a clean exit (usually after I or P frame).
- An Out Point Packet is the packet of the PID stream preceding an Out Point.
- MPEG-2 syntax defines Out Points at transport layer as:
- An In Point is a location where the stream is well constrained for a clean entry (usually just before a sequence_header and I frame at the closed GOP.
- MPEG-2 syntax defines In Points at transport and PES layers as:
- the interrupt mask register is written to, in order to enable reception of interrupts based upon the video splicing flag and the video splicing point.
- the video splicing flag and the video splicing point values are determined by parsing performed by the Adaptation Field Parser 750 .
- the video splicing flag indicator is one of the optional flags of storage location 781 of FIG. 28 , and is represented by register field VideoAFPSplicingFlag in the global status register of FIG. 29 .
- the video splicing point is determined by register logic 786 of FIG. 28 , and results in the register field labeled VideoAFSplicingPoint being set when the video splicing flag is set and the splicing countdown register, labeled AFSpliceCountdown, is equal to 0.
- step 302 the method of FIG. 35 waits for an interrupt to occur.
- step 303 an interrupt has been received, and a determination is made as to the interrupt type. If the interrupt type is a splice point, the flow proceeds to connector A, which is continued at FIG. 38 . If the interrupt type is a splice flag, the flow proceeds to step 304 . If the interrupt type is a different type of interrupt, the flow returns back to step 302 .
- the splice countdown value is equal to zero, it is an indication the splice flag has identified a splice point.
- the splice point is as identified as that point in time were video is to be switched from a current video stream to a next video stream.
- a splice point flag is set and the adaptation field parser 750 of FIG. 28 , when the splice flag is asserted, and the splice countdown register is equal to 0. (Note that under normal operation, the splice point path from step 304 will not be taken because the splice point should have been detected at step 303 , thereby bypassing step 304 ).
- step 304 it is determined that the splice countdown value is negative, it is an indication that an in-splice point has been identified. And in-splice point indicates that the current video elementary stream being played is just began, and the flow proceeds to connector C that continues in FIG. 37 .
- the flow proceeds to FIG. 36 .
- the splice flag interrupt is disabled.
- the splice flag interrupt is disabled because specific method illustrated in FIGS. 35 through 38 only needs to execute and out point routine one time. Since the splice countdown value for an out point includes the values from 7 to 1 the out point routine disables the splice flag interrupt at step 310 in order to avoid having to unnecessarily process interrupts caused by the subsequent out point values.
- step 311 splice point interrupts are enabled. Note that splice point interrupts should already be enabled from step 301 of FIG. 35 . Therefore, the step 311 , under ideal operating conditions, will be redundant and not strictly necessary.
- step 312 acquisition of the PAT table is requested.
- the PAT table is discussed with reference to prior art FIG. 2 .
- step 313 a determination is made whether or not the PAT table version number has changed. If the PAT table version number was not changed, the flow proceeds to step 314 . However, if the PAT table version number was changed, the flow proceeds to step 317 .
- step 317 if the PAT table version number has changed, a new PMT table, see FIG. 2 , is fetched and the flow proceeds to step 314 .
- a request is made to receive the break duration time as an optional bit-field available in the splice_info_section that indicates an approximate time when the break will be over and when the network In Point will occur.
- the new PID number received from the new PMT table, is written to a register that shadows the VideoPid register of FIG. 18 .
- the VIDEO PID storage location 424 provides the PID value which identifies the current video stream, while the shadow register associated with location 424 (not illustrated) stores the PID value of the next video stream to be accessed at the splice point. Subsequent to step 316 , flow proceeds back to step 302 .
- step 303 or step 304 When it is has been determined at either step 303 or step 304 that the splice point has occurred, the flow proceeds to FIG. 38 .
- step 331 of FIG. 38 the PID value stored in the shadow register is transferred into the active PID register.
- the value stored in the VIDEO PID location 424 of FIG. 16 is updated to the new PID value, resulting in the new video PID packets been identified, and selected, as the current video stream. In effect, the newly selected video image will be displayed.
- a request is made to update the STC counter.
- the STC counter is updated in order to synchronize the system counter with the new program counter, i.e. a new time base.
- the splice flag interrupt is enabled.
- the Splice Flag Interrupt Enable Bit is asserted in order to allow for the recognition of the splice in point.
- the flow proceeds to step 302 of FIG. 35 .
- a determination step could be made at the beginning of the flow of FIG. 38 as to whether the new PID is associated with a desirable program. If not, an alternate flow ignoring the PID, or using a dummy or alternate PID, could be used. For example, this feature could be used eliminate viewing commercials or other program types.
- step 304 If at step 304 , FIG. 35 , it is determined that an in-splice point is occurring, the flow proceeds to FIG. 37 .
- step 336 of FIG. 37 , a determination is made whether or not this is the first in-splice point interrupt service request.
- the first in-splice point interrupt service request is generally associated with the value minus 1 of the splice countdown register. However, in order to accommodate for possible lost packets, the determination of step 320 may be used along with an indicator as to whether or not to the previous in-splice point interrupt service request has occurred. If this is not the first in-splice point, the flow proceeds to step 302 of FIG. 35 . If this is the first in-splice point, the flow proceeds step 337 .
- the in-splice point indicator is validated by determining whether or not random access flag register is set along with discontinuity flag register.
- the random access flag register, and discontinuity flag register should both be set because the first packet of a new data stream will indicate the current packet is capable of being randomly accessed by the system, and since no previous packets are associated with the PES stream the discontinuity flag should be set.
- a request for PMT table acquisition is made. This is done to verify that current PID assignment for a present program is as before the brake (or before added commercial).
- a determination is made whether the PCR and video PID values are valid. PIDs are verified by analyzing a content of received PMT table for known MPEG-2 program_number. Change daunting if the PCR and PIDs are okay, flow proceeds to step 302 of FIG. 35 . Otherwise, flow proceeds to step 340 .
- the new PID values are updated.
- the method described 32 through 35 provides advantages over the prior art by allowing for the automated handling of in-splice point. Utilizing register values updated by the hardware parsers described herein, automatic splicing is enabled. The amount of saved system software bandwidth provides an advantage over the prior art.
- a transport stream demultiplexer core register set is initialized to indicate a possible set of transport stream characteristics.
- An acquisition routine is executed. If acquisition of the transport stream signal does not occur during a predetermined amount of time, the acquisition is not successful. When not successful, the register set is initialized to indicate a different possible set of transport stream characteristics, and the acquisition routine is once executed. This process continues, until the transport stream core acquires the transport stream signal.
- FIGS. 39-42 illustrate a specific implementation of a method for blind synchronization to a transport stream.
- Blind synchronization allows the framer to acquire the transport stream, i.e. lock onto the transport stream, without any prior knowledge of the transport stream characteristics.
- the transport stream can include a variety of signals.
- the transport stream will include a data signal (TDATA) and a clock signal (TCLOCK). Additional signals that may exist include TSTART, TVALID, and TERROR. Based upon these signals, the transport stream has a number of characteristics, such as individual signal polarities, and data ordering.
- One transport stream characteristic is the polarity of the control signals, which can vary based upon the service provider implementation.
- each of the control signals TVALID, TSTART, and TERROR can be either active high or active low signal.
- each of the control registers has respective register field (T_ValidPolarity, T_StartPolarity, and T_ErrorPolarity) to specify the active edge of each control signal.
- An additional characteristic is the data ordering, or the bit polarity. Because the data is received bit at a time, or by bytes, whether the LSB is first or the MSB is first can vary. A field labeled FramerBitPolarity is used to select between a LSB and MSB bit polarity of TDATA.
- Another transport stream characteristic is whether the TCLOCK signal latches data on a rising edge or on a falling edge.
- a field labeled FramerClockPolarity is used to select between these two characteristics.
- these variables are initialized to represent a specific set of transport stream characteristics.
- the registers T_ErrorPolarity, T_StartPolarity, and T_ValidPolarity are set equal to zero. For purposes of discussion, a value of zero will represent an active low polarity, while a value of one will represent an active high polarity.
- a variable BIT_ORDER which corresponds to field FramerBitPolarity, is set to LSB to indicate the LSB of TDATA is to be received first, or right justified bytes of data are received.
- the variable BIT_ORDER can also be set equal to LSB to indicate the MSB of TDATA is to be received first, or will be right justified where bytes of data are received.
- a variable labeled CLOCK_POLARITY which corresponds to the field labeled FramerClockPolarity in FIG. 14 , is set to zero, where zero indicates that TDATA is latched on a falling edge.
- FIG. 14 illustrates a field labeled FramerMode that specifies the signals associated with the transport stream.
- Step 912 can include initialization of this field as well.
- a verification routine is executed.
- the verification routine is illustrated in greater detail with respect to FIG. 41 .
- reception of the transport stream is enabled. In effect, it implements settings of the current transport stream characteristic.
- the framer portion of transport stream demultiplexer core begins operation as described previously in an attempt to achieve synchronization.
- a predetermined amount of delay time occurs to allow the framer to detect a synchronization byte.
- the synchronization byte is a hexadecimal 47 (47h).
- the predetermined delay is used to detect one 188 byte long MPEG-2 packet, and depends on a stream bit-rate and is typically under 100 microseconds.
- step 933 a determination is made whether the synchronization byte was detected. If not, the flow proceeds to step 935 , if so, the flow proceeds to step 934 .
- the variable labeled FramerSyncLockLengthh indicates how many consecutive transport packet synchronization frames need to be detected before synchronization is declared. Based upon this value, the flow will return to step 932 until the specified number of synchronization values has been detected. When the specified number of synchronization frames has been detected, the flow returns to FIG. 39 and indicates a successful verification.
- step 935 it has been determined that the transport stream reception has not been successful. As a result, no further attempt is made to acquire the transport stream with the present settings of the transport stream physical characteristic. Therefore, step 935 performs any overhead functions needed, for example, reception of the transport stream can be disabled. Note in other embodiments, reception of the transport stream with improper characteristic settings continues.
- step 935 the verification flow of FIG. 41 returns to FIG. 39 and indicates that the verification was not successful.
- step 912 of FIG. 39 a determination is made whether the verification routine was successful. If so, the flow proceeds to step 914 , if not, the flow proceeds to step 915 .
- step 914 the proper set of transport stream characteristics has been found and any necessary cleanup occurs. Examples of necessary cleanup items would include notifying the use of successful synchronization, storing of the synchronization characteristics.
- FIG. 42 illustrates one method of incrementing the characteristics specified with respect to step 911 .
- FIG. 42 illustrates a flow diagram that increments the transport stream characteristic in such a manner that all possible combinations are covered. By executing this routine, a successful increment will be indicated for all values, except for when BIT_ORDER variable is equal to MSB, and all other characteristics are equal to one. This state indicates that all possibilities have been tested, and an unsuccessful return occurs.
- step 916 of FIG. 39 a determination is made whether the increment of the transport stream characteristic variables was successful. If so, the flow returns to step 912 where the verification routine is executed again. If the increment of the transport stream characteristic was not successful, indicating that no lock was obtained, the flow proceeds to step 914 for appropriate cleanup.
- the present method provides a fast method for acquiring a transport stream having unknown characteristics. Variations of the method described herein would include varying the number of consecutive synchronization byte required for acquisition to be successful, varying the order in which the variables are varied. Varying the framer mode to indicate the possible combinations of transport stream signals, i.e. clock and data only.
- a specific step may be performed using software and/or firmware executed on one or more a processing modules.
- a system for handling transport stream data may include a more generic processing module and memory performing the functionality described herein.
- a processing module can be a single processing device or a plurality of processing devices.
- Such a processing device may be a microprocessor, microcontroller, digital processor, micro computer, a portion of the central processing unit, a state machine, logic circuitry, and/or any device that manipulates the transport stream. The manipulation of the transport stream is generally based upon operational instructions.
- the memory may be a single memory device or a plurality of memory devices. Such a memory device may be a read only memory a random access memory a floppy disk memory, magnetic tape memory, erasable memory, a portion of a system memory, and/or any device that stores operational instructions in a digital format. Note that when the processing module implements one or more of its functions to be a state machine or logic circuitry, the memory storing in the corresponding operational instructions is embedded within the circuitry comprising the state machine and/or other logic circuitry.
- FIG. 43 illustrates, in block diagram form, a processing device in the form of a personal computer system 1000 .
- the computer system 1000 is illustrated to include a central processing unit 1010 , which may be a conventional proprietary data processor, memory including random access memory 1012 , read only memory 1014 , input output adapter 1022 , a user interface adapter 1020 , a communications interface adapter 1024 , and a multimedia controller 1026 .
- the central processing unit 1010 , the communications interface adapter 1024 , and video/graphics controller can individually be considered processing devices.
- the input output (I/O) adapter 1022 is further connected to, and controls, disk drives 1047 , printer 1045 , removable storage devices 1046 , as well as other standard and proprietary I/O devices.
- the user interface adapter 1020 can be considered to be a specialized I/O adapter.
- the adapter 1020 is illustrated as connected to a mouse 1040 , and a keyboard 1041 .
- the user interface adapter 1020 may be connected to other devices capable of providing various types of user control, such as touch screen devices.
- the communications interface adapter 1024 is connected to a bridge 1050 such as is associated with a local or a wide area network, and a modem 1051 . By connecting the system bus 1002 to various communication devices, external access to information can be obtained.
- the multimedia controller 1026 will generally include a video graphics controller capable of displaying images upon the monitor 1060 , as well as providing audio to external components (not illustrated).
- the transport core can be implemented at various portions of the system 1000 .
- the transport core can be part of the Communication Interface Adapter 1024 , as part of the Multi-Media Controller 1026 , or as a separate component of the system connected directly to the bus 1002 .
- the video memory of FIG. 5 resides within the Multi-Media Controller 1026 , while the system buffers 501 to 503 would generally reside in RAM 1012 . In other implementations, a unified memory can be used.
- Verification of a system implementing various hardware and methods described herein can be accomplished by implementing an MPEG-2 transport demultiplexer in C language in order to verify the parsing transport files to the level of elementary streams.
- the produced elementary streams have been compared against streams generated by reference transport stream generation equipment, which in this case, has been used as a reference transport/PES stream decoder.
- a Behavioral C model operates on the MPEG-2 transport stream on MPEG-2 transport stream files and has capabilities to perform functions described herein, including:
- the video elementary stream output file can be compared bit by bit with the output of the reference test and measurement device (transport stream analyzer—TSA).
- TSA transport stream analyzer
- TSA has ability to work in real time on a byte parallel transport stream or on a file. If operated on a file, it will generate video elementary stream stored in a file. This file will be used to compare against the elementary stream (ES) video output file of our C model. This way, about 90% of the C model can be verified (a framer, transport and PES parser and video FIFO). Up to 31 non-video PID filters and the transport packet router can be verified with the transport packet header syntax analyzer software. This completes the verification of a C model.
- a transport stream generator, or composer is described below for generating test streams, and for testing hardware and software models of transport stream demultiplexers. These streams are generated through a C program and text file containing script command language. It consists of one through several hundred MPEG-2 transport stream packets that would contain different PID's, PES data, etc. Each test stream can scope a specific function of the parser. These test streams are files that can be fed to a behavioral model that reads this file and feed it as a serial bit-stream to the VHDL. These tests can be run to result in bit-maps residing in either the frame buffer memory, or in the system memory.
- a data record in accordance with a specific embodiment of the present disclosure, is described below capable of implementing the tests used for verifying a C model, or a hardware device or a system.
- the data record illustrated below allows simple ASCI, or other text based, description of TP or PES syntax.
- PES_CRC_FLAG BOOL
- PES_CRC_flag N9 (WORD) encodes 16 bit CRC sum. This allows verification of the ASIC's CRC hardware engine. Specified value is injected to second PES packet only, CRC on all others is calculated. First PES packet has no CRC field.
- Line TP_PID N23 specifies the PID of the current transport stream encoded as WORD with 13 LS bits as actual PID value.
- BOOL AF_RAI N36 is used for random_access_indicator.
- DWORD N36 is the repetition rate of the random_access_indicator. If N36 is set to 0, random_access_indicator preferably exists only once, in the first transport packet, otherwise it repeats on every N36 transport packets (if N36 is 1, random_access_indicator is repeated in every TP).
- BOOL AF_SP_FLAG N40 N41 stands for the splicing point flag.
- BYTE N40 indicates initial splice_countdown value and DWORD N41 is its repetition rate. If N41 is set to zero, splicing_point_flag preferably exists only once, in the transport packet with splice_countdown set to 0 (splicing point), otherwise it repeats on every N41 st transport packets.
- Last line BOOL AF_EXT_FLAG N44 stands for adaptation_field_extension_flag with adaptation_field_extension length defined by BYTE N44. Although our ASIC doesn't process extension field (just skips over), ltw_flag, piecewise rate_flag and seamless_splice_flag should be set to 0 creating extension field with reserved content only. Extension of adaptation field are inserted only once, in the first transport packet. All other TP packets have no extension of AF field.
- FILE specifies a filename of a file containing MPEG-2 video elementary stream that is packetized into PES (first step) and then into TP (second step) formats. Proposed extensions of the created streams are .PES and .TP; If FILE is not specified, PES payload shall obey directive:
- the payload is filled with random content (if RANDOM is given), known ASCII string (if given as “some text . . . ”) or as padding with 0xFF;
- the composer determines the values of PES_DAI, PES_PTS_FLAG, PES_ESCR_FLAG, PES_ESRATE_FLAG, and PES_PAYLOAD_LENGTH, which depends on the content of video ES stream, and are provided by the transport stream generating software, (i.e. composer 4520 of FIG. 45 ). For example, presentation time stamping must exist at every 0.7 sec or more frequently.
- the packetizer needs to know the bit rate of the video ES stream in order to generate PTS, ESCR, and ESRATE fields. In one mode of operation, the bit rate is obtained from the elementary stream file.
- PES_PPSC is generated in every PES packet if PES_PPSC request is found in the script file.
- PES_PSTD is generated only once, in the first PES packet.
- the length of the adaptation field is determined by existence of optional flags.
- PCR samples have to exist at least 10 times per second and be inserted in correlation with targeted bit-rate of transport packets (higher than video bit-rate); random_access_indicator shall be inserted at the start of every GOP, sequence or I frame.
- Continuity_counter is regular with random errors if TP_CC_RANDOM is selected. Payloads of generated transport packets are determined by existence of adaptation field.
- the composer operates to set the following fields as indicated:
- the first sequence of test streams verifies basic operations of the transport stream in ideal, error free stream environment. At the transport level this means:
- header of the PES packet should contain only first 9 bytes (no flags set to 1) with PES payload starting from 0x00 towards 0xFF and rolling over.
- transport packets should not contain any indicators or flags of second byte of adaptation field set to 1. Only exception is when testing combined private data at the transport and PES layer. Length of adaptation fields should be adjusted by stuffing. Verification methods are:
- FCV file comparison verification
- IRV interrupt response verification
- GKV good, known value based verification
- FCV method test immediate parsing with a short PES packet with 9 byte header encapsulated in one transport packet BasicMain Router and FIFO test; Simple test with one transport packet, transferred to system memory.
- FCV method test routing of single transport packet with payload set to FF (PES irrelevant) to the system memory.
- SyncLock Framer and synchro A stream 33 transport packets long all containing single PID.
- FCV The locking logic; FCV; purpose of this test is to insure that framer synchronization is achieved IRV (SyncLock). immediately or after 1 to 31 packets or immediately, on a first packet based on a SyncLock register set-up.
- VideoPayload Transport packet pay- A transport stream of 100 single video PID transport packets with no load extraction; FCV; adaptation fields. To test processing of payloads only (adaptation_field_control ‘01’).
- VideoAF_and AF and payload A transport stream of 100 single video PID transport packets with Payload extraction; FCV; adaptation fields PCR based GKV; and payloads.
- AF should contain PCR_flag, OPCR_flag and PCR + OPCR_flag, alternating sequentially.
- Payload should contain some known value.
- VideoSplice splicing_point_flag A transport stream of 1,000 single video PID transport packets with splice_countdown; splicing_flag, splicing_point and video PID change after splicing point.
- FCV IRV
- AF should contain splicing_point_flag only. To test countdown based GKV ‘auto splicing’ feature on video PID.
- VideoAF transport_private A transport stream of 1,000 single video PID transport packets with PrivateData data_flag; private data in the AF.
- Legal CC IRV on discontinuity A single video PID stream of at least 100 transport packets is required. Discontinuity indicator; mismatch AF only has PCR_flag. In adaptation field a discontinuity_indicator has on continuity_counter to be set to 1 with CC errors but no PCR sample in the same packet. ASIC should not generate CC error interrupt.
- VideoAFPES TP data_byte; A transport stream of 100 single video PID transport packets with one PayloadData PES_packet_data_byte; PES packet. No flags of a PES header should be set to 1. No stuffiing in AF or PES header, payload only in all transport packets and in one full PES packet.
- VideoPES IRV and GKV on A transport stream of 100 single video PID transport packets with PrivateData known PES header private data in the PES header in only one PES packet.
- PES header private data string contains only PES_extension_flag and PES_private_data_flag. To test extraction and transfer of private data to a system memory. No private data in the adaptation field.
- PES layer While originating errors on transport layer, PES layer should be error-free and vice-versa.
- header of the PES packet should contain only first 9 bytes (no flags set to 1) with PES payload starting from 0x00 towards 0xFF and rolling over.
- transport packets should not contain any indicators or flags of second byte of adaptation field set to 1. Length of adaptation fields should be adjusted by stuffing.
- VideoTEI IRV on transport A transport stream of 100 single video PID transport packets with error_indicator; random TEI insertion.
- To test acceptance or rejection of TEI packets Routing or rejection and insertion of video sequence_error_code in the video FIFO. All of transport packet. syntax elements are correct. No AF and PES packet flags.
- OthersTEI Relevant for SW parser A transport stream of 3200 transport packets (32 PIDs) with random TEI insertion.
- Duplicate continuity_counter A transport stream of 1000 single video PID transport packets with Packets dropping of duplicate random duplicate vid. transport packets packets signaled at the continuity counter. No discontinuities on CC counter. To test dropping of second, third, etc. duplicate packets. Regular PES packet underneath.
- To test dropping of vid. transport packets duplicate packets and CC error detection and insertion of video IRV on CC errors sequence_error code in video FIFO buffer.
- Scrambled transport_scrambling A transport stream of 100 single video PID transport packets with Transport control; rejection of random number of ‘scrambled’ packets (transport_scrambling_control
- WrongAFPDL transport_private A transport stream of 100 single video PID transport packets with data_flag; transport_private — private_data_byte; data_length shorter or longer for 10 bytes than actual (real) length.
- Exact adaptation parser; IRV and GKV field_length is required. If transport_private_data_length is shorter than on known AF private actual private data content; data byte field, transport layer parser should process AF with no syntax parsing problems, only partial private data loss will occur.
- transport layer parser should cut AF private data processing at the exact end of the adaptation field. If increase in transport_private_data_length goes into stuffing, some private data corruption will occure but with no failure of the transport layer parser.
- PacketStart Error on packet Single PID transport stream of 100 transport packets carrying two full CodeError2 start_code_prefix; PES packets. Second packet should have wrong Test of the false lock.
- packet_start_code_prefix No legal (0x000001) start code should exist in the header or payload of first PES packets. No flags in PES packets. Payload of the second packet should have continuous sequence of start codes. False lock on correct start code should occure even if payload_unit_start_indicator is 0.
- PESHeaderData PES_header_data_len Single PID transport stream of 100 transport packets carrying two full LengthErrorX IRV and GKV on PES packets with error on PES_header_data length on the second X ⁇ ⁇ 0, 1, 2 ⁇ ; known PES payload. packet and known PES payload. Length should be set to 0 (legal value) or value larger or smaller for 10 than exact value. Only additional_copy_info_flag should exist in PES header.
- each script file contains one data record, and multiple script files can be combined using a basic piping function.
- a script file can have a multiple records delineated by a record identifier.
- FIG. 44 illustrates a system 4100 , which includes a system 4110 , which may be of the type illustrated in FIG. 43 , and a system, or device under test 4120 .
- the system under test may actually be a software module being simulated in the system 4110 .
- the system 4110 generates, and outputs the transport packet stream to the device under test 4120 , which in turn performs the demultiplexing function described herein.
- the data from various transport packets are provided to the memory 4124 . More specifically, in accordance with the disclosure, the video packets are routed to the video buffer 4241 , and other data packets are routed to one of a plurality of auxiliary buffers 4242 - 4243 based upon their respective PID.
- FIG. 45 illustrates a memory portion of the system 4110 of FIG. 44 .
- a memory portion 4510 stores the various data records associated with a test suite of transport data. This test suite is read by the composer software, which is stored in the memory portion 4520 .
- the composer can store the generated transport streams in files (not illustrated) and can output the desired transport streams directly to an external device under test, or an internal simulator, which simulates a system under test.
- the simulator is stored in memory portion 4530 , and outputs results to one of the buffers 4541 - 4543 .
- the device under test 4120 of FIG. 44 can provide the buffered data back to the system 4110 to be stored in the memory portions 4551 - 4553 and be compared to the data stored in the buffers 4241 - 4243 for verification of the external device under test to the simulated device under test.
- simulator Another tool for use with verification of the systems described herein is a simulator.
- the following describes such implementation of a simulator.
- This section is to provide some guidelines for a specific implementation as how to implement MPEG-2 transport demultiplexer in C language in order to verify the parsing of transport files to the level of elementary stream.
- Produced elementary stream has been compared against stream generated by reference transport stream generation equipment, which, in this case, has been used as a reference transport/PES stream decoder.
- Developed C model operates on MPEG-2 transport stream files and has capabilities to parse the video PID and route up to 31 other (auxiliary) full transport packets to the maximum 15 other files. This way, the capabilities of the output interface are modeled.
- the transport parser routes video elementary stream of PID — 0 to buffer 0 allocated in the frame memory.
- Buffers 1 to 14 are used to route single PIDs. If more than 12 PIDs exist, PIDs above 12 are routed into buffer 15.
- PIDx has a 4 hex digits which represents actual PID value.
- Video PID is identified by processing PAT/PMT PSI tables (if exist in the transport files).
- Transport packet based parsed data are saved in the memory buffer.
- the content of the buffer is routed to one of the output files at the end of the current transport packet (end of TPP) or at the time of the private data extraction (end of AFP or inside PESP).
- end of TPP end of the current transport packet
- end of AFP or inside PESP end of the private data extraction
- the output FIFO of developed ASIC works the same way. If its length is less than one packet, it will request a read-out after a threshold is reached.
- iSignalTPP_VideoCC iSignalTPP_PcrCC, iSignalTPP_Header
- unsigned char iRegXXXX_RegName Internal register (internal to XXXX unit and usually not visible to programmer).
- unsigned char iCntXXXX_CntName Internal counter (internal to XXXX unit and usually not visible to programmer).
- MPEG relevant data extracted from transport or PES headers were named according to their original ISO138181-1 names to allow easier understanding of the parsing logic and operations. For example: discontinuity_indicator, random_access_indicator, etc. All parsing engines were designed as byte oriented state machines. The objective is to minimize the number of interface signals and buses between them and provide independent, self-contained behavior and achieve:
- Signal oBitTPF_PacketStartSignal is active for a full byte time of the first byte (0x47) of the transport packet and is used to synchronize a transport packet parser (whose internal byte counter is set to 0).
- oBitTPF_InSyncSignal is activated at the start of the transport packet when transport frame synchronization is achieved. It is deactivated after the loss of synchronization. These events also generate interrupt request (IRQ) on a separate line oBitTPF_Irq. This signal enables further processing of the transport packet parser. When oBitTPF_InSyncSignal is at its inactive level all further processing is disabled.
- the Transport Packet Parser Portion of the Simulator Includes Following Variables:
- Bus signal oBusTPP_PidIndex (5 bits) is used to indicate which of 32 PIDs are currently active (PID — 0 is reserved for video). This signal is used to access appropriate PID control register and determine 1 of 16 output paths for routing of parsed data or full transport packets.
- oRegTPP_Header1, oRegTPP_Header2, oRegTPP_Header3 are used as a scratch pad registers to hold bytes 2, 3, 4 of the transport packet header until the determination of a PID. If any of PIDs 1 . . . 31 is selected, or if there are any private data in the adaptation field or a PES packet header within a current transport packet, content of those 3 internal registers is used to reassemble a packet.
- Digital output oBitTPP_AFStartSignal synchronizes byte counter of AFP parser.
- Digital output oBitTPP_PusiSignal synchronizes byte counter of PES parser.
- Internal counter iCntTPP_ByteCnt is transport packet byte counter which determines a parsing logic on transport packet header and fifth byte (length of the adaptation field, if one exists).
- Transport Packet Parser can be in one of 7 states. State assignment is done at the end of reception and processing of the 4 th byte of the transport packet header or at the end of adaptation field. State assignment should not be changed due to simple verification of states 4, 5, 6 (all of them has to process adaptation field due to video parsing, or PCR extraction on PCR PID on transport packet selected for PCR process only or for PCR process and routing to the system memory.
- FIG. 46 shows a state diagram of the TPP parser. Next states exist:
- TP_PARSER_STATE_OFF when it is completely disabled and the current packet is ignored. This occurs in the case of wrong packet start code, PID mismatch, scrambling at the transport packet level or illegal adaptation field indicator value (‘00’). All further parsing logic is disabled until the start of next transport packet.
- TP_PARSER_STATE_READY (1) is a state after a start code verification (0x47). From this state, parsing logic can step back to TP_PARSER_STATE_OFF (in the case of PID mismatch, scrambling at the transport packet level or illegal adaptation field indicator value (‘00’) or it can advance into one of five next processing state:
- TP_PARSER_STATE_VIDEO_PES (2) is a state of parsing useful payload of the transport packet carrying a video stream.
- TP_PARSER_STATE_OTHERS_FULLPACKET (3) is a state where a full transport packet is routed to a system memory after a PID match.
- a continuity counter check exists for a video PID.
- CC check has to detect CC samples on duplicate transport packets, 15 to 0 rollover, signaled discontinuities on CC counter and real discontinuities when a few transport packets are missing due to uncorrectable errors in the communication channel.
- Suggested algorithm calculates a first difference between a stream CC value and a current value of the CC counter BEFORE it is being incremented. This yields to a less complex algorithm and less expensive HW implementation than a method based on the first increment of the local CC counter and comparison later. If delta is 0 it means that there is a duplicate transport packet, which should be ignored by setting a parsing engine from READY to OFF state.
- a local CC counter may be incremented. If delta is 15 it means a rollover and a counter value is assigned to a stream value (0). Any other value means CC error and local counter is initiated from a stream CC value, so this event preferably is only once signaled. This behavior is illustrated on a next set of continuity counter values:
- the PES parser includes the following variables:
- PES Parser is organized as a state machine with only 4 states, defined by the state register iRegPESP_ParserState:
- PES_PARSER_STATE_READY (0) that is intermediate state after reset or errors in header detected by parsing engine. This essentially allows self-synchronization after errors and search (hunting) for PES packet start code (0x000001). Depending on the current byte value, local byte counter is set to 0 or 1 (if pattern 0x00 is being detected). Stream conditions that turn PESP engine to PES_PARSER_STATE_READY are:
- PES_packet_length field (4 th and 5 th bytes of PES header) is not acquired and the actual length of the PES packet is not verified because in a transport stream environment this field usually has a legal value of zero (unbounded). Processing of this field would require 16 bit counter and check logic if stream value is different from 0.
- PES_PARSER_STATE_HEADER (1) is the parsing state where the PES packet start code detection is taking place. First 9 bytes of the PES header are always parsed. All flags within 8 th byte are saved and a PES_header_data_length from 9 th byte is saved in the local byte counter iCntPESP_HeaderLength and is used to identify end of optional stuffing field and start of the PES payload that contains elementary video stream. For byte counting, which identifies bytes within PES header, local counter iCntPESP_ByteCnt is used. PTS values from the PTS or PTS_DTS field are extracted and saved.
- PTS byte count, managed with the iCntPESP_LocalPTSByteCnt is saved and transferred to the video decoder's compressed video bit-stream buffer. This counter is incremented only when processing a PES payload.
- parser is processing optional fields (PTS, ESCR, ES_rate, DSM, additional_copy_info and CRC) by using iCntPESP_LocalByteCnt as local byte counter which keeps tracking the byte position inside optional field of the byte aligned PESP. Reserved data from the extension field are ignored.
- P-STD_buffer_size is the very last parsed field within extension area of PES header.
- PES_PARSER_STATE_STUFFING (2) is the parsing state where optional, variable length, stuffing field at the end of PES header is processed (skipped entirely). If 9 th byte of PES header (PES_header data_length) is zero or if, after parsing a PES header, local counter iCntPESP_HeaderLength has a value of 0 indicating that there is no stuffing, parser advances to the fourth and last state:
- PES_PARSER_STATE_PAYLOAD (3) is a parsing state where a payload of a PES stream carrying ES video is being routed byte by byte to the video FIFO and then to the frame memory. In this process only a PTS byte count is refreshed and a CRC engine is turned on. At the present moment, payload is not verified against PES_packet_length field.
- FIG. 47 shows the state machine of the PES parser.
- FIGS. 48 to 53 illustrate a specific embodiment of the present disclosure for error detection and handling.
- FIG. 48 illustrates an alternative embodiment of a portion of the transport packet demultiplexer illustrated in FIG. 7 .
- the embodiment of FIG. 48 includes an additional signal labeled V_ERROR being provided to the PESP 730 from the transport packet parser 720 , along with the VSTART and VIDEO signals.
- an error recognition feature is enabled. In a specific embodiment, this includes enabling the detection of a specific type of error by asserting an interrupt field of a register location. Specific types of errors capable of being detected include errors associated with transport packet streams and errors associated with packetized elementary streams.
- Status codes indicating errors associated with a transport packet stream include:
- the errors listed in the status codes above are based upon specific information associated with the headers of the specific packets.
- the value of the transport scrambling control bits can be used indicate an error when the transport packet payload is scrambled and decoding device expects a clear, non-encrypted stream.
- a transport packet having its transport error indicator bit asserted can be identified as an error, and in a specific embodiment can have it own error code.
- Another condition that can be enabled and recognized by the system as an error is the presence of TError signal of the physical stream interface illustrated in FIG. 8 .
- different errors associated with the TError signal can be recognized depending upon whether the TError signal is asserted before or after reception of the transport packet's PID.
- FIG. 49 illustrates a system portion for detecting when a continuity discrepancy such as a continuity counter error occurs.
- a continuity discrepancy such as a continuity counter error occurs.
- the continuity counter check portion 4501 of FIG. 49 , will detect that the video transport packet having the hexadecimal value 6 was not received. This is known as a continuity counter error.
- the continuity counter check portion can detect when a duplicate packet is received.
- Yet another error type includes an error based upon an error rate of one or more of the above identified errors.
- a transport error rate and/or a continuity counter error rate can be maintained.
- One method of determining an error rate is to subtract a count indicating the total number of packets having a specific error type from the total number of transport packets received during the same period, and dividing the result by total number of packets. This provides a calculated rate, which can be compared to desired error rate to identify an error condition.
- the calculation of such an error rate can be controlled, or requested, by an external system.
- the external host processor can request error rates be calculated based upon a request from the transmitting office or head-end device.
- a packet is received.
- a received packet can include a transport packet, a PES, or a different packet type.
- the packet is parsed, or otherwise analyzed to determine if an error, such as one of the types described previously is associated with the packet.
- Detected errors can be handled by one or more methods.
- a signal labeled V_ERROR is generated by the TPP 720 , see FIG. 48 , and provided to the PESP 730 .
- FIG. 49 illustrates a specific implementation for performing the function of generating the V_ERROR signal.
- the generation of the V_ERROR signal is gated to the VIDEO signal such that it is only provided when the current transport packet is a video packet.
- the generation of the V_ERROR signal is gated to the detection of one or more errors. Specifically illustrated are errors for the transport error indicator being asserted or a continuity counter error occurring. The occurrence of one of these errors or any other transport stream error can result in V_ERROR being asserted.
- a PES header error signal can be generated by the PESP 730 .
- an error recovery operation occurs.
- An error recovery operation includes disregarding the packet data, as well as providing notification to one or more processors, which in turn may take specific actions.
- the sequence error code enabled portion 4601 of the PESP 730 upon receiving the V_ERROR signal from the transport packet parser 720 , the sequence error code enabled portion 4601 of the PESP 730 , illustrated in FIG. 50 , provides a selected signal to the multiplexor 4603 so that the sequence error start code 4602 is provided to the data output controller 756 .
- the sequence error start code 4602 storage location is set to hexadecimal value 0x000001B4.
- sequence error start code value is provided to the data out controller 756 instead of compressed video data when the error occurs.
- the sequence error start code value can precede or overwrite a portion of the compressed payload data associated with the packet.
- this error code is provided to the data output controller 756 , which in turn provides the compressed video stream, which now includes the sequence error start code, to a video decode processor.
- a sequence error start code is transmitted under the following circumstances: when a TError signal is detected after the PID is received; when a continuity counter error is detected and the transport packet discontinuity bit is not set; when a transmit error indicate bit is asserted; if any transport packet header error is detected.
- Another method for handling errors is to disregard the data packet. This can be the sole data handling remedy, or can be combined with other data handling remedies. Disregarding the payload data can include not further parsing the header, and/or disregarding the payload of the packet.
- a transport packet is dropped or ignored under the following error conditions: when it is determined that a transport packet has a duplicate continuity counter value as the previous transport packet of the same PID; when the transport error indicator is set; when TError signal is asserted before the PID is received;
- Another method for handling errors is to send an interrupt to a system, or host processor.
- a generic interrupt is provided, whereby the system can query registers associated with the present disclosure to determine the error. For example, the system can read a register having the status codes describe above.
- individual interrupts, or interrupts with vectors can be applied.
- an interrupt is generated for the following error conditions: when a continuity counter error is detected and the transport packet discontinuity bit is set; when a CRC error occurs; when a predefined error rate condition is met (i.e., specific error rate, or rates, is above a predefined value).
- FIG. 55 a block diagram illustrating sets of functional components within a Section Parser is shown, according to one embodiment of the present invention.
- a comparator 5507 is used to process and compare packets with specific section fields to determine whether to accept the packets or discard them.
- the values of the section packet can be received from FRAMER_DATA.
- the values of the received section packet are latched into a register or set of registers (not shown) in Section Parser 755 .
- comparator 5507 includes filters 5510 - 5517 .
- Filters 5510 - 5517 are used to analyze section fields in the section packet. The fields define what data presented in the section packet specifically refers to.
- Each filter 5510 - 5517 handles a different field value to compare with the fields in the section packet.
- field values are stored in registers, as described in Tables 38-40, within filters 5510 - 5517 for comparison to fields in the packet.
- a table ID register such as FilterTableID register in Table 38, can be used in the table ID filter 5511 . Packets, which pass through the enabled filters from filters 5510 - 5517 , are passed to a host system through signal SP_DATA. SP_DATA may be provided to the buffer controller 760 ( FIG. 7 ).
- comparator 5507 includes a table PID filter 5510 .
- Table PID filter 5510 selects a specific packet identifier (PID) to filter on. When enabled, table PID filter 5510 will pass only packets with a specific PID value stored in a register, such as EnableFilterOnSectionPID register described in Table 37. Packets with PIDs that do not match the specific PID value are discarded.
- table PID filter 5510 is enabled or disabled through table PID filter switch 5520 .
- Table PID filter switch 5520 is used to either allow data to pass over filter table PID filter 5510 or to be processed through table PID filter 5510 .
- Table PID filter switch 5520 can be configured through values programmed to EnableFilterOnSectionPID register 5530 . In one embodiment, writing a section PID field value into EnableFilterOnSectionPID register 5530 enables section PID filter 5510 . A null PID value, such as 4095 , can be stored in EnableFilterOnSectionPID register 5530 to disable section PID filter 5510 , through section PID filter switch 5520 .
- comparator 5507 also includes table ID filter 5511 .
- All packets include a table ID field.
- the table ID field is an 8-bit field specifying which of the PSI or SI tables with which the section data is related to. Accordingly, the table ID filter 5520 can choose to filter sections containing data from only one specific table, using a specific table ID value stored in a register, such as FilterTableID register in Table 38.
- An EnableFilterOnTableID register 5531 as described in Table 37, can be used to enable/disable table ID filter 5511 , through table ID filter switch 5521 .
- comparator 5507 includes section syntax indicator filter 5512 .
- Data carried on the packetized stream may be provided using different syntax types.
- the section syntax indicator filter 5512 is used to identify section packets with a specified syntax indicator field value.
- the syntax field of the received section packet is compared to a specified value in a syntax indicator field register, such as FilterSectionSyntaxIndicator register described in Table 39.
- a host system (not shown) can be provided with packets including only a specified syntax. The host system can use the filtered section packets to determine the appropriate syntax to use and configure a system application accordingly, allowing the system to accommodate for the syntax or semantics of the packetized stream data provided.
- a value written to an EnableFilterOnSectionSyntaxIndicator register 5532 as described in Table 37, can be used to enable/disable section syntax indicator filter 5512 , through section syntax indicator filter switch 5522 .
- comparator 5507 includes a section private indicator filter 5513 .
- Section packets may include an active private indicator field.
- the private indicator field provides information about the format of the data being represented in the section packet. For example, MPEG streams use a value of 1 for the private indicator field.
- the section private indicator filter 5513 can be used to selectively pass section packets from specific types of packetized streams.
- Section private indicator filter 5513 compares the value of the private indicator field in the section packet with a value stored in a register, such as FilterSectionPrivateIndicator register described in Table 39.
- a value written to an EnableFilterOnSectionPrivateIndicator register 5533 as described in Table 37, can be used to enable/disable section private indicator filter 5513 , through section private indicator filter switch 5523 .
- comparator 5507 includes a version number filter 5514 .
- a version number field is included in all packetized stream packets. As tables are updated, different versions of the same table may be present within the packetized stream packet. To complete all the section data associated with a single table, the table data is taken from sections bearing the same version. Accordingly, section packets include the version number field to indicate which version is being presented in the packet. To allow Section Parser 755 to selectively parse only section packets with a particular version number, the version number filter 5514 is used.
- Version number filter 5514 may compare the value of the version number field of the received section packet to a value of a version number stored in a register, such as FilterSectionVersionNumber register in Table 39, to accept only section packets with a selected version number.
- a value written to an EnableFilterOnVersion number register 5534 as described in Table 37, can be used to enable/disable section version number filter 5514 , through version number filter switch 5524 .
- the comparator 5507 includes a current next indicator filter 5515 .
- Section packets always include a current/next field.
- the current/next field indicates whether the data provided in the section packet is applicable to the status of the current set of section data or to the next set of section data. If the current/next field indicates the section information related to the current set of data, a host system, through the buffer controller 760 ( FIG. 7 ), can gather the status of the current section packet to know how to properly handle the current set of data. Alternatively, the current/next field may indicate a section packet relates to the next set of data on the packetized stream. Accordingly, the host system may need to know the table information of the next set of data to properly accommodate to a program change or a network upgrade or maintenance.
- Current next indicator filter 5515 can be used to pass data related specifically to the current packet or related to future packets, allowing the host system to configure itself appropriately.
- the current next indicator filter 5515 can compare a value of the current/next field to a value of a current/next register, such as FilterSectionCurrentNextIndicator register described in Table 39.
- a value written to an EnableFilterOnCurrentNextIndicator register 5535 , as described in Table 37, can be used to enable or disable current next indicator filter 5515 , through current next indicator filter switch 5525 .
- the comparator 5507 includes a section number filter 5516 .
- PSI and SI table data is represented using the section packets.
- the sizes of the section packets are limited. For example, the maximum size of the section packets, as defined by the MPEG-2 standard (ISO 13818-1), is 1024 bytes or 4096 bytes, depending on a section syntax indicator. If the table data exceeds the maximum, the table data must be sent over multiple section packets.
- the section packets include a section number field indicating which portion of the entire table data the section packet represents.
- the host system specifies a section number that is needed to complete the table from the data by storing the value of the section number in a section number register, such as FilterSectionNumber register described in Table 38.
- the section number filter 5516 compares the value of the section number field in the section packet to the specified section number stored in the section number register to determine whether to pass the section packet to the host system or to discard the section packet.
- a value written to an EnableFilterOnSectionPrivateIndicator register 5536 as described in Table 37, can be used to enable/disable section syntax indicator filter 5516 , through section number filter switch 5526 .
- the comparator 5507 includes a section payload filter 5517 .
- the payload of the section packet includes the actual table data being carried by the section packet.
- section payload filter 5517 compares 8 bytes of the section payload to values stored in a set of payload registers.
- a FilterSectionPayloadHi register as described in Table 40, may be used to compare the first 4 bytes of the payload to a specified value.
- a FilterSectionPayloadLow register as described in Table 40, may be used to compare the last 4 bytes of the payload to a specified value. If the values of the specified payload registers and the values of the associated payload portions in the section packet are equivalent, the section packet is passed to the host system, through the buffer controller 760 ( FIG. 7 ).
- a value written to an EnableFilterOnSectionPayload register 5537 as described in Table 37, can be used to enable/disable section payload filter 5517 , through section payload filter switch 5527 .
- Section Parser 755 also includes a cyclic redundancy check (CRC) engine 5590 .
- CRC cyclic redundancy check
- a 32-bit CRC field is included at the end of the section packet.
- CRC is generally used to detect error corruption.
- CRC engine 5590 calculates the CRC of the section packet, as data is received and compares the CRC value in the packet to the calculated CRC to determine if the section packet is damaged or incomplete. If the values match and CRC engine 5590 is enabled, the section packet is passed to the host system through SP_DATA.
- a register in CRC engine 5590 is used to store a value of a previously passed section packet with the same version number. As previously discussed, different versions of the table data being passed by the section packets.
- CRC engine 5590 is enabled/disabled/through values stored to an EnableCRC32Engine register, as described in Table 37.
- section control registers 5505 includes various registers for controlling the operations of Section Parser, as shown in Table 37.
- section control registers 5505 can be used for configuring and enabling individual filters 5510 - 5517 and CRC engine 5590 .
- EnableFilterOnSectionPrivateIndicator 15 [1] 0 R/W If 1, filter on section_private_indicator is on.
- EnableFilterOnCurrentNextIndicator 16 [1] 0 R/W If 1, filter on section_current_next indicator is on
- EnableFilterOnSectionExtension 17 [1] 0 R/W If 1, filter on section extension is on.
- EnableFilterOnVersionNumber 18 [1] 0 R/W If 1, filter on version_number is on.
- EnableFilterIfNotThisVersion 19 [1] 0 R/W If 1, filter on version_number filter picks up any version different that one defined If 0, version_number filter looks for exact match.
- EnableFilterOnAnySectionAndStop 20 [1] 0 R/W If 1, specified section filter grabs start of any section and stores 8 bytes of table header in the status register.
- EnableFilterOnSectionPayload 21 [1] 0 R/W If 1, filter on section payload is enabled.
- EnableFilterOnSectionNumber 22 [1] 0 R/W If 1, filter on section payload is enabled.
- ExtendSectionPrivateIndicator 24 [1] 0 R/W If 1, private_indicator is considered as 3 bits.
- private_indicator is a single bit value . . . DefineSectionRingIndex 25-30 [6] 0 R/W Defines ring buffer index (1 . . . 63) where table is routed. EnableFiltering 31 [1] 0 R/W If 1, parsing from the next transport packet is enabled.
- each of the filters 5510 - 5517 can be enabled and applied serially to the section packet. For example, by setting the EnableFilterOnTableID register 5530 to a logical value of ‘1’, the table ID filter 5511 is enabled, allowing the table ID field to be parsed by Section Parser 755 . Enabled filters of filters 5510 - 5517 can each be applied for comparison against field values in the section packet being parsed by Section Parser 755 . Accordingly, received section packets would have to pass all the enabled filters to be successfully parsed through Section Parser 755 and be sent to the buffer controller 760 ( FIG. 7 ), through SP_DATA. It should be appreciated that other control registers may be included, not listed in Table 37, without departing from the scope of the present invention.
- Section Parser 755 can be configured for parsing multiple table configurations. Multiple sets of the registers described in Tables 37-40 are used to handle the different table configurations. For example, in one embodiment, up to thirty-two tables, or section packet types, can be parsed using Section Parser 755 . Accordingly, 32 sets of the registers described by tables 37-40 are used to store the configurations for parsing each of the section packets for the 32 tables. In one embodiment, once a specific packet was parsed, the control registers regarding that section packet would be set to disable further parsing of that section packet type. For example, once a section packet with a particular section PID was parsed by Section Parser 755 , control registers 5505 would disable filters 5510 - 5517 to ensure that the same table was not parsed again, unless requested.
- registers are used for storing field values to be used by filters 5510 - 5517 .
- Filters 5510 - 5517 use the registers for comparison to the fields included in the section packets being parsed, as shown in Tables 38-40.
- Table 38 lists specific registers used for storing field values dealing with section packet identifiers.
- a host system needing a specific section packet dealing with a specific identification can write the identifiers of the packet into the registers. For example, a specific table ID can be written to FilterTableID register. The table ID filter 5511 can then use the value to parse a section packet with the specific table ID.
- Section Bit Filter Registers Demultiplexer Section ID Filter Registers (TD_SBFR_0 . . . TD_SBFR_31) Field Name Bits Len Default Type Description FilterSectionSyntaxIndicator 0 [1] 0 R/W 1 or 0 specifies section_syntax_indicator value to filter on. FilterSectionPrivateIndicator 1-3 [3] 0 R/W 7 or 3 specifies section_private_indicator value to filter on. FilterSectionCurrentNextIndicator 04 [1] 0 R/W 1 or 0 specifies section_current_next_ind value to filter on. FilterSectionVersionNumber 05-09 [5] 0 R/W 0 to 31 specifies section_version_number value to filter on. UnusedBitfield 10-31 [22] 0 R/W Unused bit field. Always set to 0.
- Table 39 describes registers used for storing values of specific bit fields for parsing received section packets.
- version number filter 5514 can compare a value stored in FilterSectionVersionNumber to the version number field included in the section packet received from FRAMER_DATA.
- Table 40 describes registers used for storing values to compare against the payload of received section packets.
- FilterSectionPayloadHi register is used for comparison against the first 4 bytes of the section packet payload. This could be used by a host machine, through the buffer controller 760 ( FIG. 7 ) to process a Media Access Control (MAC) address dealing with the section packet.
- a MAC address is a hardware address generally used to uniquely identify each node of a network.
- FilterSectionPayloadLow register is used to compare against the last 4 bytes of the section packet payload. This could be used to locate CA information dealing with the section packet. It should be noted that registers other than the ones listed in Tables 38-40 can be included without departing from the scope of the present invention.
- FIG. 56 a flow diagram illustrating a method for parsing section packets in hardware is shown, according to one embodiment of the present invention.
- Table data is broken into different section packets.
- the section packets are sent as part of a multimedia packetized stream.
- Hardware such as Section Parser 755 ( FIG. 55 ) is used to parse the section packets before sending them to a host system.
- a Section Parser receives the section packet.
- the section packet is received from a packetized stream by a framer and a transport packet parser before being released to the Section Parser, as described in FIG. 5 .
- a host system coupled to a Section Parser can apply values in register sets within the Section Parser, as described in Tables 2-5.
- the Section Parser uses the settings within the register sets to select various control options for parsing received section packets. For example, the host system can specify section packet fields needed to complete a specific data table.
- the Section Parser can then parse the section packets to deliver only the section packets needed by the host system to complete the data table.
- the host system can also set register values to disable or enable the operation of the Section Parser.
- the host system enables one of the field filters on the Section Parser.
- Each of the filters may be independently enabled, allowing specific fields in the section packet to be analyzed.
- the host system has enabled the table ID filter.
- the table ID filter is selected by asserting the 13 th bit within the Section Parser's control registers, as described in Table 2.
- the table ID field provides the identity of the type of table the section packet represents.
- the host system programs a table ID register, such as FilterTableID register as described in Table 3, providing the table ID of a table the host system desires.
- the Section Parser compares a value of a field within the section packet with a value of a field register. With the table ID filter, such as table ID filter 5511 of FIG. 55 , enabled, the Section Parser compares the table ID field included with the section packet to the table ID register, such as FilterTableID register described in Table 38. In step 5640 , if the field in the packet and the register are not equivalent, the Section Parser fails the section packet and discards it. In one embodiment, discarding the packet includes allowing the packet to be left on the bus without telling the host system to read it. Accordingly, to discard a packet, no further processing is required by the Section Parser. If the packet field value is equivalent to the value in the field register, the Section Parser passes the packet to the nest enabled filter or component of the Section Parser.
- section packets may include a section number field, a version number field, a current/next indicator field, or a private indicator field.
- various field filters may be employed to parse the section packets with all or some of the fields, as described for filters 5510 - 5517 in FIG. 55 .
- Multiple fields may be included to allow a host system to specify specific section packets desired.
- each of the field filters may be independently enabled or disabled through control registers within the Section Parser, as described in Table 2.
- the Section Parser may be configured to parse multiple section packets.
- separate sets of registers for each of the section packet types to be parsed may be included. For example, separate register sets may be included for each of the types of data tables supported by the host system. The individual register sets may be configured for supporting the section packets needed to complete each data table.
- the host system enables a CRC check component, such as CRC engine 5590 ( FIG. 7 ), in the Section Parser.
- the host system analyses the CRC included in the section packet. As previously discussed, a CRC is generally used to determine if the provided packet is complete and uncorrupted. A packet subjected to a transmission error may become corrupted. By internally calculating the CRC in the Section Parser, the calculated CRC can be compared to the CRC provided in the section packet. In one embodiment, if the section packet CRC is different from the calculated CRC, the section packet is failed and discarded, as described for step 5640 . If the CRC values are equivalent, the section packet is passed to the next component of the Section Parser.
- CRC check component such as CRC engine 5590 ( FIG. 7 )
- the CRC can also be compared to determine if the section packet is related to an alternate version of the data table represented by the section packet.
- the Section Parser instructs the host system to read the passed section packet.
- the Section Parser asserts a SP_DEN signal, as illustrated in FIG. 7 .
- the host system reads the passed section packet.
- the host system reads the section packet directly from the Section Parser.
- the host system reads the section packet from a system bus, after the instruction from the Section Parser form step 5670 .
- the Section Parser disables any further parsing of the section packets.
- Section Parser described herein allows processing overhead generally left to a host system to be performed through hardware. Therefore, it should now be apparent, that a system for parsing section packet data as describe herein would be advantageous over the prior art.
- FIG. 1 In the preceding detailed description of the preferred embodiments, reference has been made to the accompanying drawings which form a part thereof, and in which is shown by way of illustration specific preferred embodiments in which the invention may be practiced. These embodiments are described in sufficient detail to enable those skilled in the art to practice the invention, and it is to be understood that other embodiments may be utilized and that logical, mechanical, chemical and electrical changes may be made without departing from the spirit or scope of the invention.
- sequence error code can be inserted directly into the compressed video stream in order to notify video processor and error condition has occurred.
- system level interrupts can be provided to a host system whereby the host system connections error codes and other register values in order to determine the status of errors and act according.
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
Description
- The present disclosure is a continuation-in-part of U.S. patent application Ser. No. 09/489,669 (Attorney Docket No. 1376-9901410), filed Jan. 24, 2000 and entitled “A Method and System for Handling Errors and a System for Receiving Packet Stream Data,” the entirety of which is incorporated by reference herein. The present disclosure additionally is a continuation-in-part of U.S. patent application Ser. No. 09/791,045 (Attorney Docket No. 1376-0100170), filed Feb. 22, 2001 and entitled “Method and System for Handling Data Packets,” the entirety of which is incorporated by reference herein.
- The present disclosure relates generally to detecting and handling errors in the packetized data, and more specifically to detection and handling of MPEG-2 transport stream errors.
- The international organization for standards (ISO) moving pictures experts group (MPEG group), approved an audio video digital compression standard known as MPEG-2 in an effort to provide a versatile compression standard capable of being utilized for a wide variety of data. The MPEG-2 standard provides explanations needed to implement an MPEG-2 decoder through the use of syntax and semantics of a coded bit stream. MPEG-2 is an open standard which continues to evolve and be applied to a variety of applications ranging from video conferencing to high definition television. As a generic standard, MPEG-2 is intended to be used for variety of audio and video coding applications. Part one of the MPEG-2 standard (ISO 13818-1), was designated to improve error resilience and carry multiple programs simultaneously without a common time base between programs.
- The transport stream (TS) specified by the MPEG-2 standard, offers a high degree of robustness for noisy channels, and can be used to carry multiple programs, such as multiple TV services. The transport stream is based on a 188 byte long packet suited for hardware error correction and processing schemes. The use of a robust protocol, such as the transport stream, allows for reception over noisy environments such as terrestrial and satellite transmissions. Even in these environments it is possible to obtain fast program access, channel hopping, and synchronization between multiple elementary streams carried within the packetized elementary streams which are subdivided into transport packets.
- Prior art
FIG. 1 illustrates a Transport Packet Stream defined by the MPEG-2 standard. The transport stream, based on a 188 byte long packet, is well suited for hardware error correction and processing schemes. Such a configuration can carry multiple programs within the same multiplex, even when the transmission environment is noisy. For example, MPEG-2 data can be transferred successfully over coaxial cable networks and satellite transponders with asynchronous multiplexing of constant or variable bit-rate programs to allow fast program access, channel hoping and synchronization between services. - As illustrated further in
FIG. 1 , MPEG-2 transport stream consists of fixed length Transport Stream Packets (TSP or packets) based on 4 bytes of header followed by 184 bytes of TSP payload. TSP payload carries Packetized Elementary Stream (PES) data obtained by chopping up an Elementary Stream (ES), which consists of data of a common type and program. For example, audio for a specific program would form one elementary stream, while video for the same program would form a second elementary stream. - The TS header consists of a synchronization byte (SyncByte), flags, information indicators for error detection and timing, an adaptation field indicator, and a Packet_ID (PID) field used to identify Elementary Streams carried in the payload. The adaptation field, when present, contains flags, and timing information.
- The PID Field is used not only to distinguish separate Elementary Streams, but also separate Program Specific Information (PSI) tables. Prior art
FIG. 2 illustrates two types of PSI tables—a Program Association Table 210 (PAT), and a Program Map Table 220 (PMT). The PAT table lists unique program numbers as identifiers for each program, or elementary stream, in a multiplex, and the PID number associated with each program number. A fixed PID number of 0x0000 is assigned to the PAT table, making it possible for the system to download the PAT table on startup by retrieving PID 0x0000 packets. - Each program identified the PAT table has a related Program Map Table (PMT) having its own PID identifier. Each PMT table lists the PIDs for all Elementary Streams (components) making a given program associated with the PMT. A specific PMT table maybe constructed for each program separately, or may be common for a group of programs. In the first case, there are many PMT tables with just one section, and each PMT table has a different PID value. In the second case one PMT table may have many sections, each relevant to one program.
- In order to provide multiple services over the same multiplex, data associated with different multimedia services are transmitted, with packet multiplexing, such that data packets from several Elementary Streams of audio, video, data, and others are interleaved on a packet by packet basis into a single MPEG-2 transport stream. Synchronization between Elementary Streams forming a common program is achieved using presentation time stamps and program clock references which can be transmitted as part of the adaptation field specified in the header.
- Prior art
FIG. 3 illustrates the fields associated with a PES stream. Each PES stream contains a header portion and a data portion. In addition, an optional header portion may exist. The header portion includes a Packet Start Prefix, a stream ID, and a packet length indicator. - Transport stream information can be provided either through a direct broadcast, or through a service provider broadcast. Direct broadcast generally refers to signals which are received directly by an end user. Examples of direct broadcasts include satellite broadcasts received by satellite dishes and provided to a decoder at the end user's location, which receives and decodes the transport stream data. Another type of direct broadcast is the traditional composite television/radio broadcast. In their most elementary forms, these broadcasts are not digital broadcasts. However, the transmission of digital broadcast in MPEG-2 format is being explored and occurring as an alternative. In this manner, the user would have a tuner capable of receiving the direct terrestrial link information containing the television or radio signals. Once demodulated, the transport stream information could be provided to a desktop unit, or decoder, owned by the end user.
- Service provider broadcast would include broadcast to the home provided by cable television providers, telephone company providers, or other independent providers. In this configuration, the service provider first receives the number of signals which can be ultimately provided to the end user. Examples of such received signals include satellite feeds, terrestrial feeds, switched video sources, local video sources such as tapes, or laser disk DVD's, as well as traditional table feeds. Based upon the end users demands, the received information can be selectively provided to the end user.
- In one manner, the selected feed by the service provider can be provided directly to an end user through a twisted pair connection, which may include a high speed digital subscriber link (DSL) capable of providing data at higher rates than traditionally associated with plain old telephone system (POTS) connections.
- In another implementation, the service provider would provide information from a central office or a head-end to a fiber node. A specific fiber node is generally used to support more than one end user. Examples of the use of such fiber nodes includes a fiber coaxial bus (FCB) whereby a fiber link provides the signal containing a large amount of data to a fiber node which in turn drives coaxial cable having a taps. A decoding device attached to taps at user side can receive the appropriate broadcasting signal.
- Another example of a fiber node is bi-directional fiber coaxial bus. While similar to the FCB bus, the bi-directional FCB bus is also capable of transmitting data back to the central office or the head-end as well as receiving it. Yet another fiber node example is a hybrid fiber coax, which uses coaxial cable and branch topology toward network interface units. Yet another example associated with service providers is known as fiber to the curb, whereby digital signaling is carried from the central office to the optical network unit which serves only a few dozen homes. Locally, a hybrid twisted pair coaxial pairs will connect to the optical network unit with the consumer's decoder. Twist repair cable carries digital video in the 5 to 40 megahertz range to no more than 500 feet from the fiber connection. Therefore, the number of homes capable of being served by a single optical network unit is limited. Analog television signals are carried in a coaxial cable from the fiber node.
- One problem associated with the flexibility of the MPEG-2 standard is that once the transport stream is received, demodulated, and decrypted, the resulting data stream can still have a variety of variations which need be known before the data stream can be properly utilized. For example, the MPEG-2 specification does not indicate a specific set of control signals to be provided with the transport stream, how received data and control signals are qualified, nor the precise format of the actual data transmitted. As a result, implementations of set top boxes require specific service provider information. Specific service provider information results in an incompatibility among transport streams schemes provided by different service providers or cable operators. As a result, chip sets are designed and dedicated to support specific service provider's set top boxes.
- Prior art
FIG. 54 shows the fields associated with section packets. Section packets are used for transporting PSI tables (as shown in prior artFIG. 2 ) and system information (SI) tables. An eight-bit table ID (TID) field is used to identify the content associated with the section packet. For example, a TID of 0x00 identifies a program association section packet related to a PAT; while a TID of 0x01 relates to a conditional access section packet related to a conditional access table. A three-bit section length field provides information regarding the length of the section packet, allowing a host system to know the amount of memory needed to handle a particular section packet. Multiple sections may be used in representing a single table. Each section would carry a portion of the table data. An eight-bit section number field can be provided to indicate a specific portion of the table being represented by the section packet. For example, if 100 section packets are used to represent a PAT, a section number of 0x07 would indicate the seventh section packet of the set of 100 section packets. As shown in prior artFIG. 54 , other fields are included in the section packet to identify the data represented in the section packet. A host system attempting to reproduce a specific PSI or SI table can identify specific section packets needed. - Prior art
FIG. 4 illustrates a prior art system for parsing a packetized stream. The transport parser of the prior art would receive individual packets from the framer. Based upon the PID value, the transport parser would store the PSP data to be used by the system or the graphics engine in a local buffer. When the transport parser's local buffer was filled, the transport parser would cause a bus request to the appropriate controller (system or video) to initialize a transfer of at least some of the buffered data. - However, when the prior art host video or graphics system needed more data from the transport parser prior to the transport parser initializing the transfer, the system would initialize the transfer by generating a request to access data in the transport parser buffer. Since the bus used internally by the transport parser buffer may have other clients, the host system may have to wait to access the bus. The overall performance of the host system is reduced as a result of the system waiting on data.
- Traditional methods for extraction include parsing of digital packets on the host CPU. For example, the host CPU parses program specific information and system information section packets included in the packetized stream packets. However, as the data rate increases, those methods become unsuitable in set-top box systems armed with relatively slow microprocessors or micro-controllers. Even high performance operating systems can have difficulty maintaining long time stable data reception during high bit-rate applications. When the host CPU is burdened with handling tasks for other applications, such as opening e-mail or performing file accessing, the system performance degrades further.
- As the performance of the host system degrades, the host CPU becomes unable to process transport packets stored in memory buffers in the conventional system. The buffers become full and the conventional system is unable to accept new transport packets for storage. New transport packets must be discarded during high bit-rate transmissions and packets of data are lost. Therefore, a system and method of receiving packetized stream information that allows for more flexibility and improved performance in terms of data handling, data parsing, design implementation, and data stream acquisition would be advantageous.
-
FIG. 1 illustrates, in block diagram form, prior art fields associated with a transport stream packet. -
FIG. 2 illustrates, in tabular form, a prior art Program Specific Information tables. -
FIG. 3 illustrates, in block diagram form, prior art fields associated with Packetized Elementary Stream. -
FIG. 4 illustrates, in block diagram form, a prior art representation of a parser system. -
FIG. 5 illustrates, in block diagram form, a transport stream core in accordance with one embodiment of the present disclosure. -
FIG. 6 illustrates a tabular representation of a register set. -
FIG. 7 illustrates, in block diagram form, a transport stream core in accordance with one embodiment of the present disclosure. -
FIG. 8 illustrates, in block diagram form, a framer receiving a transport stream signal. -
FIG. 9 illustrates, in timing diagram form, the relationship among individual data signals comprising a transport stream. -
FIG. 10 illustrates, in flow diagram form, a state diagram for implementing a function associated with the framer ofFIG. 3 . -
FIG. 11 illustrates an algorithmic state machine associated with the framer ofFIG. 3 . -
FIG. 12 illustrates, in tabular form, global status registers associated with a portion ofFIG. 6 . -
FIG. 13 illustrates, in tabular form, interrupt registers associated with a portion ofFIG. 6 . -
FIG. 14 illustrates, in tabular form, global control registers associated with a portion ofFIG. 6 . -
FIG. 15 illustrates, in block and logic form, a portion of a framer in accordance with one embodiment of the present disclosure. -
FIG. 16 illustrates, in block and logic form, a transport packet parser in greater detail. -
FIG. 17 illustrates, in block and tabular form, a data output controller in greater detail. -
FIG. 18 illustrates, in tabular form, video control registers associated with a portion ofFIG. 6 . -
FIG. 19 illustrates, in tabular form, auxiliary PID control registers associated with a portion ofFIG. 6 . -
FIG. 20 illustrates, in flow diagram form, a method in accordance with one embodiment of the present disclosures. -
FIG. 21 illustrates, in block and logic form, a video packetized elementary stream parser in greater detail. -
FIG. 22 illustrates, in flow diagram form, a method in accordance with one embodiment of the present disclosures. -
FIG. 23 illustrates, in block diagram form, a video packetized elementary stream parser. -
FIG. 24 illustrates, in tabular form, global status registers associated with a portion ofFIG. 6 and associated withFIGS. 21 and 23 . -
FIG. 25 illustrates, in tabular form, interrupt registers associated with a portion ofFIG. 6 and fully associated withFIGS. 21 and 23 . -
FIG. 26 illustrates, in block diagram form, an output controller and memory in accordance with one embodiment of the present disclosure. -
FIG. 27 illustrates, in flow diagram form, a method in accordance with one embodiment of the present disclosure. -
FIG. 28 illustrates, in block diagram form, a detailed view of an adaptation field parser. -
FIG. 29 illustrates, in tabular form, global status registers associated with a portion ofFIG. 6 and fully associated withFIG. 28 . -
FIG. 30 illustrates, in tabular form, interrupt registers associated with a portion ofFIG. 6 and fully associated withFIG. 28 . -
FIG. 31 illustrates, in tabular form, global status registers associated with a portion ofFIG. 6 and fully associated withFIG. 28 . -
FIG. 32 illustrates, in block diagram form, an alternate embodiment of a transport packet demultiplexor. -
FIG. 33 illustrates, in block diagram form, a detailed view of a private packet packetizer ofFIG. 32 . -
FIG. 34 illustrates, in block form, representations of private packets from the packetizer ofFIG. 33 . -
FIGS. 35-38 illustrate, in flow diagram form, a method of splicing video in accordance with one embodiment of the present disclosure. -
FIGS. 39-42 illustrate, in flow diagram form, a method of performing blind acquisition of an MPEG-2 data stream. -
FIG. 43 illustrates, in block form, a general purpose computer system in accordance with one embodiment of the present disclosures. -
FIG. 48 illustrates, in block diagram form, an alternate embodiment of a portion of the system ofFIG. 7 . -
FIG. 49 illustrates, in block diagram form, an alternate embodiment of a portion of the transport packet parser ofFIG. 16 . -
FIG. 50 illustrates, in block diagram form, an alternative embodiment of a portion of the PESP ofFIG. 23 . -
FIG. 51 illustrates, in flow diagram form, a method in accordance with one embodiment of the present disclosure. -
FIGS. 52 and 53 illustrate, in tabular form, portions of the register set accordance with the system ofFIG. 7 . -
FIG. 54 illustrates, in block diagram form, prior art fields associated with section packets. -
FIG. 55 illustrates, in block diagram form, a set of cascaded filters for paring section data in a packetized stream packet in accordance with one embodiment of the present disclosure. -
FIG. 56 illustrates, in flow diagram form, a method of parsing packetized stream packets containing section data in accordance with one embodiment of the present disclosure. - In accordance with one embodiment of the present disclosure, detection and/or handling of error condition is enabled for an error being in the transport packet stream. A determination is made whether received data contains detectable error. If so, an error recovery operation is performed that includes the following: notification of the host CPU, MPEG video decoder, a display processor, and/or disregarding the data.
- In accordance with another embodiment of the present disclosure, a system and for parsing section packet data are provided. The system includes a data bus with a predetermined number of nodes for transmitting a plurality of data words and a clock node for transmitting an indication when a valid data word is being transmitted on the data bus. The system also includes a section parser. In one embodiment, the section parser includes a first storage location for storing a first value representing a valid data word having a first section field. The section parser also includes a second storage location for storing a second value representing a comparable section field. The section parser further includes a first section field for analyzing the first value with respect to the second value. In one embodiment, a host system stores a value describing a specific section packet or set of section packets it needs. The first filter then uses the value in the second storage location to allow only that packet or set of packets it needs.
- Referring now to
FIG. 4 , an exemplary packetized stream (PS)core 400 is illustrated in accordance with one embodiment of the present disclosure. In operation, thePS core 400 receives transport stream packets. Each packet is synchronized to thePS core 400, and demultiplexed. Each packet is demultiplexed based upon its Packet IDentifier (PID), which identifies the type of data carried in the packet. ThePS core 400 is bufferless in that no packet data is stored within thePS core 400 for access by video or system processing. Instead, the demultiplexed data is stored in one or more locations within each of theVideo memory 471, and thesystem memory 472. - The
PS Core 400 includes aFramer 410, Transport Packet Parser 420 (TPP), a PES Parser (PESP) 430, an Adaptation Field Parser (AFP) 450, abuffer controller 460, and register set 480. - The register set 480 is further illustrated in
FIG. 6 . Generally, the register set 480 includes interrupt mask registers, control registers, status registers, and system interface registers. Interrupt mask registers are used to enable or disable specific interrupts. Control registers specify how various aspects of thePS core 400 are to operate. Further examples of types of control registers include Global Control Registers; Video Control Registers, which control how video packets are handled by the PS core; and Non-Video Control Registers, which control how non-video packets are handled by the PS core. - In operation, the
framer 410 receives a raw transport stream which is analyzed to isolate and provide individual transport stream packets (TSP) to thebus 405. In one embodiment, thebus 405 receives byte wide data (the data bus width could also be 16 or 32 bits) and a control signal to indicate when the current byte of data is valid. In addition, theFramer 410 generates a signal labeled PACKET START to indicate the first byte of a packet, and a signal labeled IN_SYNC to indicate when the data on thebus 405 is synchronized, or locked onto by theFramer 410. - The
TPP 420 is connected to thebus 405, and receives the IN_SYNC and PACKET START signals. Parsing of a TSP (packet) by theTPP 420 is enabled when the IN_SYNC signal and the PACKET START signals are asserted indicating the beginning of a new packet. During parsing of the header portion of a packet the PID number is obtained. Based upon the value of the PID number, registers are updated, and a determination is made whether the TSP is to be saved, further processed, or discarded. - When it is determined to save the packet, the
TPP 420 asserts the signal labeled TPP_DEN which is received by thebuffer controller 460. Based upon this enable signal, theBuffer controller 460 retrieves the packet data and stores it in a predefined memory location. When it is determined to discard the packet, no further action by theTPP 420 is needed, resulting in the remainder of the TSP being ignored. - When it is determined to further process the packet by one of the
other parsers TPP 420 asserts one of their respective enable signals. For example, if it is determined that the packet contains video data, theTPP 420 will assert the signal labeled EN_PESP, likewise, if it is determined that the packet contains adaptation field data, theTPP 420 will assert the signal labeled AFP EN. Based upon these signal being active, the respective parser will further process the packed data. For example, the AFP_EN signal activatesFP 450, the PESP_EN signal activatesPESP 430, and the SP_EN activates section parser 455. - In response to being enabled by the
TPP 420, theVideo PES Parser 430 further processes the packet by parsing the header of the video PES. Based upon information carried in the header of the video PES, registers are updated, and the video payload may be stored or discarded. When it is determined to save the video payload, thePESP 430 asserts the signal labeled PESP_DEN which is received by thebuffer controller 460. Based upon this enable signal, theBuffer Controller 460 retrieves the packet data and stores it in a predefined location of video memory. - In one embodiment, if AFP_EN is active,
AFP 450 processes the packet according to adaptation field data present in the packet. An adaptation field comparator (not shown) is used to match adaptation field data to a predetermined value. Based upon the comparison,AFP 450 can assert the signal labeled AFP_DEN. Based upon the signal, thebuffer controller 460 can retrieve the packet data and store it in memory, such asvideo memory 471, orsystem memory 472. - If SP_EN is asserted, Section parser 455 processes the packet according to section fields in the packet. The section packets are related to particular system information (SI) or program specific information (PSI) tables, such as a Program Association Table (PAT), Conditional Access Table (CAT), Network Information Table (NIT), or Program Map Table (PMT), as shown in the following table:
-
TABLE 1 Program Specific Information Structure Name Stream Type PID number Description Program Association ITU-T Rec. H.222.0 | 0x00 Associates Program Number and Table ISO/IEC 13818-1 Program Map Table PID Program Map Table ITU-T Rec. H.222.0 | Assignment Specifies PID values for ISO/IEC 13818-1 indicated in the components of one or more PAT programs Network Information Private Assignment Physical network parameters such Table indicated in the as FDM frequencies, Transponder PAT Numbers, etc. Conditional Access Table ITU-T Rec. H.222.0 | 0x01 Associates one or more (private) ISO/IEC 13818-1 EMM streams each with a unique PID value - Table data is broken down into sections and each section is sent as a packet. A table can be represented using a single section. A table can also be represented over multiple sections. As shown in prior art
FIG. 54 , the sections include different fields identifying the nature of the section data. In one embodiment, the section fields include a table_id defining the PSI or SI table the section is associated with, a version_number indicating the version of the section data, and a section_length field providing the length of the data in the section. - The packet is processed through a series of field filters (not shown), within Section parser 455, to compare specific fields to pre-determined values, as described further in
FIG. 55 . Dependent on whether or not the values of the fields in the packet match the pre-determined values, the packet is either parsed or discarded. If the values of the fields and the ore-determined values match, the SP_DEN signal is asserted and thebuffer controller 460 retrieves the parsed data and stores it accordingly. It will be appreciated that other SI tables may be represented, other than those described herein, such as a time and data table (TDT), a running status table (RST), a bouquet association table (BAT), a service description table (SDT), or an event information table (EIT). Other fields may also be present in the packet for describing various aspects of the tables. - The
buffer controller 460 receives and stores the data payload based upon control signals received from the parsers. Because the packet data is stored directly in thesystem memory 472, associated with a main system (not shown), or thevideo memory 471, associated with a video adapter (not shown), the packet data is not stored inPS core 400. Therefore, thecore 400 and each of its parsers are described as bufferless. By storing data directly in thesystem memory 472 and thevideo memory 471, the system does not have to access memory space within thePS core 400. This eliminates delays associated with the prior art which occurred when the system had to wait on PS core bus accesses to be completed before the needed data could be retrieved. - The bus connections between the
buffer controller 460 and thesystem memory 472 can vary depending upon the implementation chosen. For example, both thevideo memory 471 andsystem memory 472 can be connected to thebuffer controller 460 through a PCI (Peripheral Components Interconnect) bus, or thesystem memory 472 can be connected to thebuffer controller 460 through a PCI bus, while thevideo memory 471 is connected to thebuffer controller 460 through an AGP (Accelerated Graphics Port). -
FIG. 7 illustrates another embodiment of a PS core in accordance with the present disclosure. The PS core ofFIG. 7 includesframer 710,TPP 720,AFP 750,PESP 730,buffer controller 760, and registers 780. Theregisters 780 are analogous to registers described with reference toFIG. 5 . - The
framer 710 provides transport stream data labeled FRAMER_DATA on an eight-bit bus, (or a 16-bit or 32-bit bus, etc.) and provides a signal labeled FRAMER_DEN. The FRAMER_DATA an eight-bit wide data byte, or word, which has been received from the transport stream. The FRAMER_DATA is qualified by the signal FRAMER_DEN, which is an enable signal. The signal FRAMER_DEN is asserted during each valid FRAMER_DATA. - The FRAMER_DATA and FRAMER_DEN signals are provided to each of the parsers of
FIG. 7 , theAFP 750, thePESP 730, and theSection Parser 755, and thebuffer controller 760. TheTPP parser 720 receives the header information of new packets when theframer 710 asserts an IN_SYNC signal and a PACKET_START signal. The combination of these signals, when asserted, indicate that the present FRAMER_DATA is part of the packet header. As a result, theTPP 720 receives the FRAMER_DATA from the data bus for parsing. - In a specific embodiment, the IN_SYNC signal provided by the
framer 710 will be active whenever theframer 710 is locked onto, or synchronized with, the transport stream. If the IN_SYNC signal is deasserted, the TPP will not receive the data. Furthermore, the PACKET START signal can be a single pulse asserted during the first byte of a new packet, or it can be a signal that is asserted during the first byte of the packet and not deasserted until the last byte of the packet. The first byte of the packet can be defined in different manners. For example, the first byte can be defined to be the sync byte of a packet, or the first byte after the sync byte. - Based upon the PACKET START signal, the
TPP 720 can maintain a byte count indicating the location of a current byte within the packet being received. Based upon this count, theTPP 720 will parse the header of the packet which is the first four bytes. - During parsing of the packet header, the TPP receives the PID of the current packet. Based upon the PID value, the TPP can enable other parsers to perform additional parsing operations. For example, when the
PESP 730 ofFIG. 7 is a dedicated video PES parser, and the PID associated with a packet received by the TPP is the video PID, the TPP will enable thePESP 730 by asserting the signal labeled VIDEO. Additionally, TPP asserts the signal labeled VSTART when the current frame is the first frame of a PES stream. This indicates to the PESP that the elementary stream header is at least partially within the current frame. The VSTART signal allows the PESP to locate and parse the header of the video PES, while the VIDEO signal allows subsequent video payload to be retrieved. Likewise, when the adaptation field control of a packet header indicates that adaptation field data is to follow, the TPP will provide a signal labeled AFSTART to indicate the beginning of the adaptation field. In response, theAFP 750 will parse the adaptation field of the current packet. - When a current packet, that is not a video packet, is to be received by the TS Core of
FIG. 7 , the TPP will receive the packet from FRAMER_DATA and provide the entire packet one byte at a time as TPP DATA to theBuffer controller 760. Similarly, when the packet is a video packet, thePESP 730 will receive video data payload from the FRAMER_DATA and provide it to theBuffer controller 760, which is subsequently framing data bytes into double words as PESP DATA. Any data associated with the adaptation field of the packet will be provided to thebuffer controller 760 from theAFP parser 750 as AFP data. - To parse packets for section fields,
TPP 720 may assert the SPSTART signal. In one embodiment,Section Parser 755 includes a variety of registers to enable different section fields to filter on. If any of those fields are activated, theTPP 720 may have all section packets parsed bySection Parser 755. The SPSTART signal activatesSection Parser 755.Section Parser 755 can then compare the fields presented in the packet in deciding whether to accept or discard the packet, sending the packet through SP_DATA and asserting SP_DEN to thebuffer controller 760 is the packet is accepted bySection Parser 755. - In response to the various data and control signals received from the
parsers buffer controller 760 may store the data. In a specific mode, where all packets are to be stored, the FRAMER_DATA and control signal FRAMER_DEN can be received directly at thebuffer controller 760 for storage. - In accordance with the present disclosure, each of the
parser modules framer 710, as well as any other module which may be included, are implemented to have modular layouts. For example, the layout of theTPP 720 is modular when its layout is performed independent of the layout of any of the other module. As a result, theTPP 720 will have a localized layout independent of the other modules. Independent development and reuse of modules is readily accomplished using modular layouts for modules having independent functions. This is an advantage over the prior art, which did not differentiate the parsing functions using modular layouts, in that it provides greater flexibility and reuse in the design and implementation of transport stream parsers. - The framer is best understood with further reference to the FIGS. 5 and 8-15.
FIG. 8 illustrates a block diagram representation of the transport stream signal received atframer 710. In the embodiment illustrated, the transport stream includes five signals. A clocking signal labeled TCLOCK, a data signal labeled TDATA, a data valid signal labeled TVALID, a packet start signal labeled TSTART, and an error signal labeled TERROR. The TDATA signal can be either a single or multiple bit wide data stream. Each of the control signals ofFIG. 8 is a single bit signal received by theframer 710. - The transport stream data and control signals can be received either from a direct broadcast or through a specific service provider. The signals actually received by the
framer 710, e.g., TCLOCK and TDATA, can vary depending on the specific network interface module (NIM) provider of direct broadcast implementation. The TCLOCK and TDATA signals contain the basic information necessary to retrieve this information. WhileFIG. 8 illustrates separate TDATA and TCLOCK signals, it is possible to provide the data and clock as an integrated signal, whereby the clock signal would be extracted from the received data. - Where only TCLOCK and TDATA are provided, the TCLOCK signal may be active, i.e., toggled, only when data is transmitted. When a valid signal, TVALID, is also provided TCLOCK can be a constantly running synchronous clock. In that case the data is qualified with the TVALID signal.
- The TSTART signal, when provided, is used to indicate when transmission of a new transport stream packet occurs. When TSTART is available, the synchronization process is trivial because the provider of the transport stream NIM is required to specify the start of each new packet.
- The TERROR signal, when present, indicates that the data being received may be corrupted due to a potential error in the data path. TERROR the decoder that the information at this point is at best suspect, if not incorrect.
- As previously indicated, various combinations of signals comprising the transport stream can occur. In addition, the format of individual signals can vary. For example, TCLOCK can qualify the TDATA signal on either a rising edge or a falling edge. In accordance with a specific embodiment of the present disclosure, the TCLOCK edge that qualifies TDATA can be defined in the
framer 710. - Another transport stream variation is how the TDATA is transmitted to the
framer 710. TDATA can be transmitted in one of either MSB first or a LSB first mode. When transmitted in MSB first mode the most significant bit of each data byte is received first, and in LSB first mode the least significant bit of each data byte is received first. In accordance with a specific embodiment of the present disclosure, whether data is transmitted LSB first or MSB first can be defined in theframer 710 to properly receive bytes of TDATA. - Another transport stream variation is the polarity of an active control signal. For example, the control signal can be active at either a
logic level 1 or alogic level 0, depending upon the system implementation. In accordance with a specific embodiment of the present disclosure, the polarity of control signals can be defined in theframer 710 to properly identify the correct asserted logic level. - TDATA can be received bit-by-bit, byte-by-byte, or by other various word size. Within the received stream, the individual units of data are referred to having a location. For example, the first byte associated with the data stream is referred to being at a first location, while the 188th byte would be referred to as the 188th location. The use of the term “location” also implies a point in time, whereby a first byte would occur at a first time, or period, and the 188th byte would occur at a 188th time period as references to the TCLOCK.
-
FIG. 9 illustrates the relationship between the various control and data signals of the transport stream. Specifically,FIG. 9 illustrates a TCLOCK signal having a rising edge for qualifying each data byte of the TDATA signal. Likewise, in the illustration ofFIG. 9 , the TVALID signal is always asserted during the first byte indicating that the data is valid. The TSTART signal is synchronized to the first byte of the TDATA signal, which is a synchronization byte. In a specific implementation, the synchronization byte of the TDATA signal will always have theHexadecimal value 47h. The TERROR signal is not illustrated, however it would be asserted to indicate when an error has occurred. - While the timing diagram of
FIG. 9 does not explicitly show bits of TDATA being received serially, it should be understood that for each byte representation of TDATA inFIG. 9 , 8 individual data bits can be received, qualified by eight TCLOCK pulses, to form the bytes illustrated. When TDATA is received in a bit-by-bit manner, without a TSTART signal, there is no knowledge as to which of the bits being received represents the first bit of a byte, where by “first bit” it is meant the first bit received when the device is turned on and started latching the data. Likewise, the same is true for the first byte, let alone which byte represents the first byte of the frame. The state diagram ofFIG. 10 is a state diagram describing synchronizing the decoder ofFIG. 7 to the transport stream being received. -
FIG. 10 illustrates a state diagram for theframer 710. The state diagram ofFIG. 10 includes four states. State A is the synchronization lost state. State B is a synchronization search state. State C is a synchronization verify state. State D is a synchronization lock state. Upon a hardware or software reset the system in accordance with the present disclosure enters State A throughtransition 504. When in State A, synchronization to the data packets has been lost. When synchronization to the transport stream has been lost, it is not known where a new packet begins or an old packet ends. As a result, it is not possible to receive data. Note that when a TSTART signal is provided as part of the transport stream synchronization is known and guaranteed, therefore State C, synchronization verify, is will not be entered if TSTART is active. For illustration purposes, this diagram assumes that the incoming stream is already byte aligned and that there is no need to look for byte boundaries. - The first byte is a sync byte for the transport stream, and has a predetermined value. In MPEG-2 implementation, the synchronization byte has the
hexadecimal value 47h.Transition path 511 loops into State A whenever a byte received is not equal to thesynchronization value 47h. During thetransition 511, a synchronization lock counter (SyncLockCnt) is set to a stored value. This value of the synchronization lock counter indicates the number of consecutive successful synchronization bytes that must be detected prior to determining the system is synchronized. In the specific implementation, each byte is received by the framer is compared to thevalue 47h. In one embodiment where a serial bit-stream is received, and the byte boundary within the bit stream is not known, the bit-stream is monitored on a shifted 8-bit basis in order to monitor every possible combination of the bits in the stream to detect the synchronization value. Thetransition path 513 is taken once the synchronization value is detected. - During
transition 513, the synchronization lock counter is decremented to indicate a successful detection of the synchronization value. By identifying a first synchronization byte, the synchronization lock count is decremented the first time. Note that if the synchronization byte value is equal to 47h and the synchronization lock count is equal to zero thetransition 512 is taken to State D to indicate successful synchronization. - From State B,
transition path 522 is taken for each received byte until the expected location of the next synchronization byte is reached. Because MPEG-2 transport stream packet is 188 bytes long, there will be additional 187 bytes before the next synchronization byte is expected. This is necessary because thevalue 47h might occur elsewhere in the stream (i.e. this value is not a reserved value). Therefore, on the 187 byte of thepacket transition path 521 is taken to return to State A so that the next byte can be evaluated. If at State A it is determined that the 188th byte is has a valid synchronization value of 47h the state machine will transition either ontransition path 512, ortransition path 513 depending on how many valid synchronization bytes have been identified. In the event that the 188th byte doesn't have synchronization value,transition 511 is taken, the synchronization lock count is set to the synchronization lock register value, and the system returns to State A. - By transitioning in the manner described between State A and State B, the
framer 710 is able to monitor a data stream and determine a valid synchronization location using only the TCLOCK and TDATA signals. Once the valid synchronization location has been identified, by receiving a predefined number of correct sync values, thetransition path 512 is taken to State D. - State D indicates that the
framer 710 has currently obtained a synchronization lock state. However, in order to assure that the data stream continues to be a valid data stream, thetransition 542 is used to determine when the next expected sync byte location is to occur.Transition 541 places the system in state C at reception of the transport stream sync byte to verify synchronization. If synchronization is verified, the system transits to state D alongtransition path 533. As a result of transitioning alongpath 533, a drop count is reset to a stored value, which indicates how many sync bytes must be missed before synchronization is lost. This way the incoming stream is continuously monitored for any errors. - By allowing for a predefined number of missed synchronization bytes, intermittent glitches can be ignored. This is useful depending upon the desired data integrity. For example, a drop count value of three would indicate that more than three lost synchronization values in a row will result in the state machine entering State A the synchronization lost state.
- When the synchronization value is not found,
transition path 533 is taken back to state D. As a result, the synchronization drop count (SyncDropCnt) is decremented to indicate the sync value was not valid, but SyncDropCnt is not yet zero. When the synchronization value is not found,transition path 531 is taken to State A when the synchronization drop count is equal to zero indicating synchronization has been lost. - In the manner indicated, the state machine of
FIG. 10 allows synchronization to be detected byframer 710 based upon a predetermined number of recognized synchronization values. The predetermined number specifies how many valid packets need to be detected sequentially before it is determined that a valid synchronization lock state has occurred. Likewise, once a valid synchronization lock state has been encountered, the number of missed transport stream packets that must occur can be user defined. -
FIG. 11 illustrates an Algorithmic State Machine (ASM) diagram in accordance with the framer. Upon reset the flow proceeds to step 602. - At step 602 a variable labeled ByteCnt is set equal to zero indicating the current byte is believed to be the transport stream sync byte, while the variable InSync is also set equal to zero indicating the system is not yet synchronized. At
step 602, theframer 710 is in a state labeled frame_byte indicating that the current byte is expected to be a transport stream sync byte, and therefore is to be evaluated. - At
step 603, a determination is made whether or not a current byte being evaluated is equal to the hexadecimal value of 47h. When not equal to this value, the flow proceeds to step 621. Atstep 621, a variable synchronization lock count (SyncLockCnt) is set equal to a register value that specifies the number of valid synchronization bytes needed before synchronization is declared. Fromstep 621 flow proceeds back tostep 602. - If at
step 603 the synchronization byte value is detected, the flow continues to step 604. At step 604 a variable byte boundary (Byte_Boundary) is set equal to a value bit count (BitCnt), which is zero atstep 604. - At
step 605 the synchronization lock count variable is decremented to indicate a successful transport stream sync frame detection. - At step 606 a next byte is received. At
step 606, theframer 710 is in a state labeled sync_search to indicate the next expected sync byte is being identified. - At
step 607, a determination is made whether or not the next byte is the byte to be evaluated for synchronization. If the byte is not to be evaluated the flow proceeds tosteps loop comprising step - At
step 608 the variable ByteCnt is set equal to zero, allowing for the next transport packet to be identified. Also, the InSync flag is set equal to zero. Atstep 608, theframer 710 is in a state labeled sync_lost. - At step 609 a determination is made whether or not the current byte has a value equal to the synchronization value. When the value is not equal to the synchronization value a further determination is made at
step 623 whether or not the TSTART signal is active. If the TSTART signal is active, indicating that the start of the transport stream is occurring, the flow will proceed to step 608 for further synchronization. However, if the TSTART signal is not active, or not currently used, the flow will proceed to step 602 for further synchronization. If at step 609 a determination is made that the synchronization value matches the current byte, the flow will proceed to step 610. - At
step 610, the variable SyncLockCnt is decremented to indicate successful detection of the transport stream sync value. - At step 611 a determination is made whether or not the synchronization lock count value has been met indicating the framer has locked onto the transport stream. In the specific example, since the synchronization lock count is decremented, when the SyncLockCnt value is equal to zero the condition has been met. If the desired number of consecutive synchronization bytes have not been received, the flow proceeds to step 608. However, if the desired number of consecutive synchronization has been made the flow proceeds to step 612.
- At
step 612, the synchronization drop count is set equal to the register value indicating how many sync frames must be missed before synchronization is declared lost, and an interrupt is issued to indicate synchronization lock (SyncLock) has been obtained. - At
step 635, a variable InSync is set equal to one to indicate the system is synchronized to the transport stream. Therefore, atstep 602, the framer is in a state labeled sync_lock. - At
step 636, a determination is made as to whether or the current byte is the expected sync byte value. If not, the flow proceeds tosteps step 632 the InSync variable is maintained equal to one, and the byte count variable is set to zero. Atstep 632, the framer is in a state labeled sync_verify. - At step 633 a comparison is made of the value of the received byte in order to determine if it is equal to the synchronization value. In the event the byte does match the synchronization value flow proceeds to step 634, where the sync drop count register is set equal to a predefined register value. By setting the sync drop counter value equal to the register value, it is indicated that a predefined number of synchronization values must be missed before synchronization is deemed to be lost.
- If at
step 633 the synchronization value is not encountered, the flow continues atstep 641. Atstep 641, the SyncDropCnt is decremented to monitor how many synchronization bytes missed. - At
step 642, a determination is made whether synchronization has been lost. Specifically, synchronization has been lost if SyncDropCnt is equal to zero. If so the flow will continue atstep 643. If not, the flow continues atstep 635 previously discussed. - At
step 643 the SyncLockCnt is set to the number of a valid synchronization values which must be recognized before synchronization lock is achieved, and an interrupt is generated indicating that synchronization has been lost (SyncLost). The flow proceeds fromstep 643 to step 624. - At
step 624, a determination is made whether or not the signal TSTART is active. In the event TSTART is not active the flow will proceed to step 602 in the manner previously discussed. In the event that the TSTART is active the flow will proceed to step 608 where the proper synchronization signal will be monitored. - One skilled in the art will recognize that the state diagram of
FIG. 10 and the ASM diagram ofFIG. 11 implement similar methodologies in order to accomplish synchronization to a transport stream using theframer 710. -
FIGS. 12-14 illustrate specific registers capable of being utilized to implement specific framer features. For example, various variables described herein are described in the registers ofFIGS. 12-14 -
FIG. 12 illustrates the status and state registers of theframer 710. A field labeled FramerSyncLock is used to indicate that frame synchronization has been acquired, this is analogous to State D ofFIG. 10 , and/or having arrived at sync_lock,step 635, ofFIG. 11 . - A field labeled FramerSyncDrop is utilized to indicate when synchronization has been lost. This is analogous to State A of
FIG. 10 , and/or having arrived at SyncLost,step 608, ofFIG. 11 . This is analogous to the FramerSyncLock variable. - The register Field labeled CurrentFramerState indicates one of five states. In a first state, the framer is in the process of capturing a new byte. In a second state the framer is out of transport packet frame synchronization. In the third state, the framer is searching for synchronization. In a fourth state of the framer is checking for synchronization. Finally, in the third state, the framer is in transport packet frame synchronization. Depending upon the location within the state machine of
FIG. 10 , or the diagram ofFIG. 12 , the values ofFIG. 12 will be updated. -
FIG. 13 illustrates a list of the interrupt registers. A field labeled enable global demultiplexer interrupt (EnableGlobalDemuxInterrupt) is utilized to enable all core interrupts. When negated all the core interrupts would be disabled. - An event interrupt mask field (EventInterruptMask) is utilized to mask specific interrupt sources including the FrameSyncLock interrupt, and the FrameSyncDrop interrupt. The framer synchronization drop bit is used to disable an interrupt that would occur when drop synchronization drop has occurred.
-
FIG. 14 illustrates a portion of a configuration register illustrating various field options associated with the framer. A framer sync lock length field (FramerSyncLockLength) comprises 5 bit field used to select the number of consecutive transport packets, with valid sync bytes, that need to occur sequentially to determine synchronization lock has occurred. The field FramerSyncLockLenth is analogous to the variable SyncLockReg ofFIG. 5 , and the register value indicated atsteps FIG. 11 . - A framer sync drop length field (FramerSyncDropLength) comprises a 3 bit field to select a number of consecutive transport packets that must be consecutively missed before the synchronization is declared lost. The field FramerSyncDropLenth is analogous to the variable SyncDropReg of
FIG. 10 , and the register value indicated atsteps FIG. 11 . - A framer bit polarity field (FramerBitPolarity) is a single bit used to indicate whether the transport stream data is being received MSB first or LSB first.
- A framer clock polarity field (FramerClockPolarity) is a single bit that when asserted indicates transport stream data that is latched on a rising clock edge. Conversely, when negated, data is latched on a falling clock edge.
- A framer mode field (FramerMode) comprises two bits for defining a combination of external transport stream control signals to be used to determine synchronization. In a first mode, only the TSTART value is used to determine when the latched data is valid. In a second mode, the TVALID signal is used determine when synchronization is valid. In the third mode, the framer will use both TSTART and TVALID to determine when synchronization is valid. In the fourth mode, the framer will use TCLOCK and TDATA to latch the bit stream in.
- Each of the control signals TVALID, TSTART, and TERROR have an respective register fields TVALID Polarity, TSTART Polarity, and TERROR Polarity to indicate whether the signals are active high signals, or active low signals.
- By providing the control information described in the configuration registers of
FIG. 14 , it is possible to program a decoder core 700 in order to interface to a large number of transport stream protocols. -
FIG. 15 illustrates a specific implementation of a portion of theframer 710 using the control register information. The implementation utilizes various configuration registers to select modes of operation. In the specific embodiment illustrated, the transport stream data (t data) is received serially and loaded into fourregisters 1010 through 1013. The serially loaded data is provided at a parallel output associated with each of the registers. The parallel outputs ofregisters multiplexer 1020. Parallel outputs ofregisters multiplexer 1021. The parallel outputs from themultiplexers multiplexer 1022. The output ofmultiplexer 1022 is provided to twobit shifters bit shifters comparator 1040. - In operation, registers 1010 and 1011 receive the serial bits of data on rising clock edge, while
registers registers register 1010 will be stored as a hexadecimal value of 88h inregister 1011. - Register field FramerBitPolarity is to select either the MSB
first registers first registers - The data provided to the
bit shift registers sync byte comparator 1040, which determines when the synchronization value has been encountered, and asserts the control bit in response to a successful compare. When a successful compare occurs, it is assumed that the byte and Packet boundaries have been located. - The synchronization hardware illustrated below
multiplexer 1022 ofFIG. 15 is isolated from the external clock. This is advantageous over the prior art, in that a loss of the TCLOCK signal does not shut down the control logic associated with synchronization of the transport stream. - In accordance with the present disclosure, it is possible to provide a flexible framer capable receiving a variety of physical transport stream formats and determining synchronization when only clock and data are present, and to provide appropriate synchronization control signal.
- One skilled in the art will recognize that many specific implementations of the framer can be incorporated. For example, the framer may have a first in first out (FIFO), or other type buffer associated with it. In addition, instead of selecting specific configuration parameters using registers, other configuration specification means could be used, such as making them pin selectable, or any other of various types methods capable of describing selectable features.
-
FIG. 16 illustrates a more detailed view of the TPP 620.TPP 720.TPP 720 further includesstorage locations 721, acounter controller 722,register controller 723, video PID location 724, and adaptation field start detectcircuit 725. - In the implementation shown, each of the various header fields of a transport stream packet have a storage location within the
storage locations 721. Because the transport stream data is received on a byte-by-byte basis, and because the header field locations are fixed, the data for the individual fields is readily obtained. In the embodiment ofFIG. 16 , each storage location for a specific data field is connected to the appropriate bits of the data bus, and thecounter controller 722 provides enable signals to each field location to load values at the correct time. - Once a specific field has been parsed, register fields dependent upon the specific field can be updated. The register set 780 is accessed and updated by the
register controller 723 ofFIG. 16 , which is connected tostorage locations 721. In addition, theregister controller 723 can retrieve register data as needed. For example, the value stored in the video PID storage location 724 is retrieved from register set 780 by theregister controller 723. - The
TPP 720 generates the VIDEO signal, which indicates the current packet is a video packet, by comparing the value stored in the video PID location 724 to the PID value stored instorage locations 721. When a match is detected, a video packet has been received. When the VIDEO signal is asserted and the Payload start indicator is also asserted, the packet is the first packet of a new video PES, and the VSTART signal is asserted. - The
TPP 720 generates the AFSTART signal using the start detectmodule 725, which monitors the value of the adaptation control field, which in turn specifies the start of a new adaptation packet. - The
TPP 720 generates the PCR signal, which indicates the current packet is responsible for providing program count reference (PCR) values to the video decoder associated with the video memory of the system ofFIG. 7 orFIG. 4 . When a match is detected, the PCR related fields of the packet need to be parsed to determine if PCR data has been provided. When both the VIDEO and PCR signals are asserted the PCR data is retrieved from the video packet. -
FIG. 17 illustrates another portion of theTPP 720 that determines if a specific packet is to be saved.FIG. 17 includes an allocation table 727, anoutput data controller 726, and a portion of thestorage locations 721. - In operation, the
Output data controller 726 provides data packets to theBuffer controller 760 ofFIG. 7 , when the PID value associated with the data packet is included in the allocation table 727. Therefore, each valid entry of the allocation table 727 is compared to the current PID value stored instorage location 721. If any of the valid entries match, theOutput data controller 726 will provide the entire packet tocontroller 760 for storage. Because the current PID value is not available until after the fourth byte of the header is received, theoutput data controller 726 saves the first three byte in case they need to be stored. - The allocation table 727 illustrated
lists 32 PID indexes (PID—0-PID—31) which have PID values associated with them. The allocation table 727 can actually be an abstraction of register locations from the register set 780.FIG. 18 illustrates video control registers, which are a portion of the register set 780. The PID value associated with thePID —0 entry of the allocation table 727 is defined to be the active video PID value, which is received from the VideoPID field of the Video Control Registers ofFIG. 18 . Likewise,FIG. 19 illustrates Demultiplexer Control Registers, which are a portion of the register set 780 used to identify packets, other than current video packets, which are to be saved. The PID values associated with thePID —1 throughPID —31 entries of the allocation table 727 are received from their respective register locations within the Demultiplexer Control Registers ofFIG. 19 . For an entry to be valid, the EnableParsing field of the PID register needs to be enabled. - If a received packet's PID number is not listed in the PID Allocation Table, the packet is not processed further, i.e. discarded, and the next received TSP is analyzed. However, if the PID of the current packet is listed in the PID allocation table, and it is not the video PID, the packet is saved to memory.
-
FIG. 20 illustrates a method associated with the TPP parser. Atstep 211, the TSP is received by the framer as discussed with reference toFIGS. 10 and 11 herein. - At
step 212, the packet is received at the TPP. In the manner discussed herein, the packet is made available to the TPP one byte at a time. The framer provides an indicator where the first byte of the packet is located. - In response to receiving the first byte of the packet, the TPP will parse the packet header at
step 213. From the parsing of the header, the TPP will retrieve the PID value of the packet. - At
step 214, a determination is made whether the packet is identified as a valid packet. As previously described, one way to be identified as a valid packet is be specified in an allocation table, which can be derived from specific register information. When a PID value is listed in the allocation table, the packet is to be further processed. - At
step 215, a determination is made whether the packet is a packet that is to be additionally parsed. For example, step 215 specifically indicates that a determination is being made whether the PID value indicates the packet is a video packet. If so, flow proceeds to step 226 for video parsing as indicated inFIG. 22 . If the PID does not indicate a packet for special processing, i.e. not a video packet, the flow proceeds to step 227 where the data is send the buffer controller for storage, as indicated with reference toFIG. 22 . - When the PID allocation table, or other means, indicates the packet is a video packet the Packetized Elementary Stream Parser (PESP) is enabled to allow further processing. In the specific embodiment of the PID allocation table listed above, the video PID is stored as
PID —0. However, other methods of identifying the video PID, such as the use of a flag or other indicator are also possible. The operation of the PESP is controlled by the PESP Control Registers, as illustrated inFIG. 18 . -
FIG. 21 illustrates thePESP 730 in greater detail. PESP, ofFIG. 21 , includes acounter controller 752,storage location 751,register controller 753,data output controller 756, videodata control module 755, and portions of register set 780. - In the implementation of
FIG. 21 , a storage location within thestorage locations 751 is reserved for the STREAM ID header field of a transport stream packet. In the embodiment shown atFIG. 21 , inputs of the storage location for STREAM ID are connected to the appropriate bits of the data bus and thecounter controller 752, to receive stream ID data from the FRAMER_DATA representation of the transport stream at the correct time. Thecounter controller 752 receives the VSTART signal indicating the start of a new video PES and generates enable signals to capture the stream ID, and other information, from the video PES header. The counter controller is controlled by the signals VIDEO, FRAMER_DEN, and VSTART. The VIDEO signal indicates the current packet is a video packet. The FRAMER_DEN signal indicates when the current FRAME DATA byte is valid, and VSTART indicates when the current packet is the first packet for the video PES, in other words, VSTART indicates when the video packet contains video PES header data to be parsed. Based upon the VSTART signal, and the FRAMER_DEN signal, thecounter controller 752 can determine which byte of the header is currently being received. - In another implementation,
control module 755 is controlled by the EnableParsing field (not shown inFIG. 21 ) of the video control registers ofFIG. 18 . The EnableParsing field is a one bit field, which when deasserted, prevents further parsing of the video packet by the video PESP. Therefore, when the EnableParsing field is negated, the header of the video packet would not be parsed, and therefore, the packet would be discarded. The counter controller can be controlled directly from the EnableParsing bit of the video control registers, or indirectly where the VIDEO signal is disabled by theTPP 720 in response to the EnableParsing bit being deasserted. - Once the video PES header field has been parsed, register fields dependent upon the specific fields of the video PES header can be updated. The register set 780 is accessed and updated by the
register controller 753 ofFIG. 21 , which is connected tostorage locations 751 of the PESP. In addition, theregister controller 753 can retrieve or access register data as needed. For example, the values EnableParser, ProcessStreamID, and StreamID are register values fromregister set 780. - The video
data control module 755 contains logic that enables the video data payload of the present packet to be stored. Operation of thecontrol module 755 is determined in the content of various video control registers, as illustrated inFIG. 18 . The EnableParsing field is a one bit field, which when negated prevents any data from the current video packet from being saved. The ProcessStreamID field is 1 bit-field. When asserted, it enables further parsing based upon a specific stream ID value of the video PES header, such that if the video control register field StreamID ofFIG. 18 , does not match the parsed steam ID from the current packet, the data of the packet will not be saved. This is an advantage over the prior art, where filtering on the stream ID field of the video PES was done in software, generally by the system. - In the specific implementation illustrated, only the data payload of the video PES is stored. Since the parsing is done in hardware, there is no need for the header information to be stored.
- In another embodiment, the field labeled StartFromPUSICommand is used to indicate whether video PES parsing is to start immediately with the next packet or wait until a new PES stream is received as indicated by the VSTART signal, where the acronym PUSI stands for Payload Unit Start Indicator and is a part of MPEG-2 syntax. Once the new video PES stream is identified, the StartFromPUSICommand field is negated, and all subsequent video packets are further processed by the PESP.
- The video PESP parser is bufferless in that no local buffers are used to store the payload data for access by other parts of the system. The prior art parsers stored the parsed data in large buffers locally, which were then capable of being accessed by system components by requesting access to the local bus. The bufferless parsers of the present disclosure do not store data locally for access by the system. Instead, parsed data to be buffered is transmitted to the
buffer controller 460, which buffers data in system or video memory. -
FIG. 22 illustrates a method associated with a video PESP parser. Atstep 216, the PESP has received an indication that a video packet is ready to be parsed. The notification can be directly from the TPP, by a polling mechanism, or other type interrupt. Step 216 determines whether parsing of the video stream is enabled. This can be determined based upon the field labeled EnableParsing of the video control registers ofFIG. 18 . When parsing of the video packet is not enabled, a specific action will occur. One action would be to perform no further processing of the packet, as illustrated. In another implementation, the packet would be automatically stored without further parsing, perhaps with the packet header field. When parsing of the video packet is enabled, the flow proceeds to step 217. - At
step 217, a determination is made whether the packet is to be parsed immediately, or whether parsing of video packets is to wait until a new video PES is detected. If the packet is to be parsed immediately, the flow proceeds to step 223. If the packet is not to be parsed immediately, flow proceeds to step 218 to determine when the proper criteria for parsing is met. Field StartFromPUSICommand indicates whether parsing is to be immediate. - At
step 218, a determination is made whether the present packet is the first packet of the video PES. If the packet is a new video PES packet, the field StartFromPUSICommand is disabled, and flow proceeds to step 219. If the new packet is not the first packet of a video PES, the flow will terminate as indicated with no further processing. - At
step 219, a determination is made whether the current video packet is to be parsed based upon the packet stream ID. If so, flow proceeds to step 220, if not, flow proceeds directly to step 223. - At
step 220, the PESP parses the stream ID from the PES header as discussed with reference toFIG. 21 . In addition,FIG. 23 illustrates addition hardware parsing which can be performed by the PESP. - At
step 222, a determination is made whether the parsed steam ID from the PES header is equal to the value stored at register field StreamID of the video control registers ofFIG. 18 . If so, the field StartFromPUSICommand is disabled to allow subsequent packets associated with the video PES to be stored, and flow proceeds to step 223. If no match occurs, the flow terminates as indicated, and no further processing occurs. - At
step 223, the packet data is sent to the buffer controller for storage, as discussed with reference toFIG. 24 . - Note that additional parsing steps can occur between
steps step 217 additional parsing would occur. The parsing steps illustrated inFIG. 22 are all by-passed if the current transport stream packet is to be immediately routed to a system memory and parsed by the host processor. -
FIG. 23 illustrates additional parsing features of thePESP 730.FIG. 23 , includes acounter controller 752,storage location 751,register controller 753, anddata output controller 756. - In the implementation of
FIG. 23 , a storage locations within thestorage locations 751 are reserved for the specific PES header field of the Packetized Elementary Stream. In the embodiment ofFIG. 21 , inputs to thestorage locations 751 for specific PES header fields are connected to the appropriate bits of the data bus, while thecounter controller 752, which receives the VSTART signal indicating the start of a new video PES, receives PES header data from the FRAMER_DATA representation of the transport stream at the correct time. - The
counter controller 752 will generate enable signals to capture the various PES header fields based upon the values stored inlocations 736, and a counter value generated bycounter 737. The counter controller is controlled by the signals VIDEO, FRAMER_DEN, and VSTART. The VIDEO signal indicates the current packet is a video packet. The FRAMER_DEN signal indicates when the current FRAME DATA byte is valid, and VSTART indicates when the current packet is the first packet for the video PES, in other words, VSTART indicates when the video packet contains video PES header data to be parsed. Based upon the VSTART signal, and the FRAMER_DEN signal, thecounter controller 752 can determine which byte of the header is currently being received. As indicated with reference to the StartFromPUSICommand register ofFIG. 18 , the counter controller can either allow for immediate PES parsing upon receiving a video packet, or it can wait to parse the PES data until a packet containing PES header information is received. Where PES parsing is immediate, the video data is provided to the output buffer. - In operation, a compare operation determines if the
present counter 737 values is equal to any of the values stored inlocation 736. If so, it indicates that the current clock cycle is providing data to be stored in one of the fields ofstorage locations 751. As a result, thecontroller 752 will generate an enable to the appropriate one or more fields represented in the current clock cycle, and the field data will be latched. - The compare
function 738 can be implemented in many different ways. For example, a state machine or logic can be used to indicated which of thestorage locations 751 are to be stored at a specific time. In addition, feedback is provided to thecontroller 752 fromvarious storage locations 751 to assure proper operation. For example, all PES header will have thefield portions 766 ofstorage location 751. However, depending upon various values of these, and other fields, the field portions 767-769 may or may not be present in a particular PES header. - For example, whether the
fields portions 767 exist in a current header is determined by whether the binary framing indicator “10” immediately follows the PES packet length field as inFIG. 3 , and as stored in the OptionalHeader indicator field. This OptionalHeader indicator field is compared to the expected value and the results are provided to thecontroller 752 to indicate additional parsing is to be done. As a result, theparser 752 continues to generate control signals to store the fields associated in thefield portions 767. - In a similar manner, the Flags field of
storage portion 767 indicates which of the storage portions 768 are present, and the ExtentionFlags of storage portion 768 indicate which of thestorage portions 769 are present. In this manner, thecontroller 752 determines which header fields are present and need to be stored instorage locations 751. - Once the video PES header field has been parsed, register fields dependent upon the specific fields of the video PES header can be updated. The register set 780 is accessed and updated by the
register controller 753, which is connected tostorage locations 751 of the PESP. In addition, theregister controller 753 can retrieve or access register data as needed.FIG. 24 illustrates a subset of the Status Register Fields associated with on implementation the PESP, whileFIG. 25 illustrates interrupt mask registers having corresponding bits. - Once the header has been completely parsed, the data associated with the payload portion of the current PES packet can be provided to the
data output controller 756 as discussed with reference toFIG. 21 . In an alternate embodiment, the 16 bytes of optional PESPrivate data associated with the PES header and stored instorage locations 769 are provided external the PESP to a private data packetizer as will be discussed in greater detail herein. -
FIG. 26 includes a detailed view ofbuffer controller 460 ofFIG. 5 , video bus/memory controller 488, system bus/memory controller 468,video memory 471, andsystem memory 472. In the specific embodiment illustrated inFIG. 26 , thebuffer controller 460 includes a data path for handling video PES data to be stored in thevideo buffer 500 ofvideo memory 471, and a data path for handling other PES data that is to be stored in system memory buffers 501-503 of thesystem memory 472. The data path for handling other PES data includes the System FIFO (First In First Out)controller 466,FIFO 462, and System HBI (Host Bus Interface)Controller 463. The data path for handling video PES data includes aVideo FIFO controller 486,FIFO 461,Video HBI Controller 483. Each of the System and Video data paths accessestransport demultiplexer register 465. - In operation, the
System FIFO controller 466 provides an interface between the Parsers ofFIGS. 5 and 7 and theFIFO 462. Thecontroller 460 allows filtered packet data to be received and stored in theFIFO 462. Once stored in theFIFO 462, theSystem HBI controller 463 requests access to thesystem memory 472 through thecontroller 468. Thecontroller 468 may include a system bus controller, a memory controller, or a combination of a memory/system bus controller. Generally, thecontroller 468 will control access to other system resources as well. - In accordance with the disclosure, the
System Memory 472 has been partitioned by the system host to include one or more system circular buffers 501-503. The system buffers 501-503 are implemented as circular buffers and are filled by operation of thecontroller 483. Thecontroller 483 handles the buffer “write” pointer. The “read” pointer for the buffers is managed by the software on the system host side (not shown) which retrieves data from the buffers 501-503. There can also be a “high water” mark register associated with each buffer (not shown). The purpose of a “high water” mark register is to provide an interrupt when the write pointer crosses the value in this register. However, because there is generally only one interrupt for each of the plurality of buffers, software polling can be used to determine the cause of the interrupt. - In a specific implementation, the number of system buffers is limited to 15 buffers. The transport core may use fewer than 15 buffers. More than one PID per buffer is allowed. However they have to be different, i.e. the same PIDs can not be allocated to more than one buffer (i.e. one TSP packets can be routed into only one destination ring buffer). The Transport Demultiplexer registers of
FIG. 19 are used to specify where data associated with a specific PID is to be stored. For each PID to be saved, a buffer index is used to specify one of the 15 buffer locations in system memory. Multiple PID types can be stored at a common buffer by specifying the same buffer in the BufferIndex field In an alternate embodiment, data associated with all system PIDs can be stored to a single buffer, which may be specified or defined by default. Note with reference toFIG. 7 , the buffer index, or location, can be determined by one of the parsers, and provided to theBuffer controller 760. - The video data path of
FIG. 26 is handled in a manner analogous to the system path described above. However, in the specific embodiment, only one buffer, in video memory, is associated with the video path. - The physical memory location and the size of the ring memory buffers 500-503 is specified by the system host using buffer configuration and management registers (not shown). The host processor has to initially specify buffer start address and length of the buffer. Other buffer data can also be used, for example, a threshold register can be implemented.
- The size of the video buffer depends on horizontal and vertical pixel resolution, frame rate, profile and level, maximum bit rate and video buffering verifier (VBV). ATSC requires a buffer of minimally 0.95 MB (VBV=488); while for MPEG-2 Main Level at High Profile, the size is 1.17 MB (VBV=597). The
buffer controller 460 will manage a write pointer for the video stream. The read pointer is managed by thecontrol 488 associated with the video adapter. Hardware or software can generate an interrupt if the write pointer is equal to the read pointer−1 (overflow condition). - Regarding the audio buffer requirements, the worst case is for a when the nominal audio bit rate 640 kbps with sampling frequency of 32 kHz. The actual size of the compressed bit stream audio buffer depends on a priority and the rate of occurrence of the audio decoder thread, when audio is decoded in software.
- On a channel change, software will flush the buffers by setting the read pointers to be equal to the write pointers after the transport stream parser has been turned off.
-
FIG. 27 illustrates a method in accordance with the present disclosure describing the operation of thesystem HBI controller 483 ofFIG. 26 . The flow is also applicable to thevideo HBI controller 463. Atstep 801, a determination is made whether there is data stored in theFIFO 462. If not, flow remains atstep 801 until data is present, otherwise, the flow proceeds to step 810. Atstep 810, the buffer to which the data is to be stored is identified. The destination buffer is identified when matching and crossing the PID number, or identifier, to the buffer number in thetransport demultiplexer register 465. The buffer can be identified by accessing the allocation table, or by receiving a buffer index from the transport parser or other portion of the transport core. - At
step 802, a determination is made whether the identified buffer is full, or otherwise not capable of receiving additional data. If the buffer is not capable of receiving additional data, the flow loops back to step 802 throughstep 811, which implements a delay. Note the delay ofstep 811 may be a fixed delay, as result of polling to determine if the buffer is full, or the delay ofstep 811 may be variable, such as where the delay is based an interrupt which indicates when the buffer is available. Once the desired buffer is no longer full, flow proceeds to step 803. - At
step 803, a bus request is made to allow access to one of the buffers 501-503. Once the bus connected to the buffer has been acquired, the next block of data is written to the appropriate buffer atstep 804. A block of data can be a word, double word, or any other size of data specified by the system. In a specific embodiment, the parsers ofFIG. 5 assure data is provided to the FIFO only in whole blocks by always writing entire blocks of data to the FIFOs. - At
step 805, a determination is made whether the identified buffer 501-503 is now full. If so, the flow proceeds to step 807 where the bus is released, if not full, the flow proceeds to step 806, where it is determined if more data is to be written. - At
step 806, a determination is made whether more data resides in theFIFO 462. If so, flow proceeds to step 804, otherwise, the flow proceeds to step 807 where the bus accessing the Buffer is released and flow returns to step 801. In another embodiment, the bus would be released after each block is transferred, instead of determining if more data is to be written. By implementing the flow ofFIG. 26 , the data stored in theFIFO 462 is transferred to the buffers. - The buffer implementation described provides an advantage over the prior art in that moving the buffers in to system and video memory associated with an external system, such as a general purpose computer, allows for bufferless parsers. As a result, the system and video resources do not have to wait to access buffers local to the parsers. The performance improvements using bufferless parsers has been observed by the present inventors to be up to 40% over the prior art. In addition, by allowing for parsing of the PES data, it is possible to limit the amount of bandwidth used to store unused data. One skilled in the art will recognize the present disclosure has been described with reference to a specific embodiment, and that other implementations and variations of the present disclosure would be anticipated. For example, when a TSP is “sent” from the TP to the PESP or the buffer controller, it is to be understood that not necessarily all of the header information need be sent. In fact, in would generally be necessary for only the PID associated with the packet be forwarded. In addition, the location and implementation of the register sets and functionality described herein can be partitioned in ways other than the specific implementations described.
- The
AFP parser 750, illustrated inFIGS. 5 and 7 , parses data associated with the adaptation field of a transport packet. TheTransport Packet Parser 720 enables operation of theAdaptation Field Parser 750 when the adaptation field of the header indicates the presence of an adaptation field.FIG. 28 illustrates, in block diagram form, a detailed view of theAdaptation Field Parser 750. - The
AFP 750 illustrated inFIG. 28 includesadaptation control counter 782,latch 785, registerlogic 786, and storage and registerlocations adaptation control counter 782 receives signals on connections labeled AF START, FRAMER_DEN, and FRAME DATA. The connection labeled AF START receives signals from theTransport Packet Parser 720, and indicates the beginning of the transport packet's adaptation field. The connection labeled FRAMER_DEN receives signals from theFramer 710, and indicates when each new byte of data is available on the FRAMER_DATA bus. Based upon the received signals, theadaptation control counter 782 provides the control signals necessary to parse specific field information from data received on the FRAME DATA bus. - In operation, the
Transport Packet Parser 720 will assert a signal on to the connection AF START in response to the adaptation field control portion of the transport packet header indicating the presence of an adaptation field. The signal on the AF START connection will be asserted in relation to the assertion of the first byte of adaptation field data onto the FRAMER_DATA bus. - The first byte of the adaptation field indicates the length adaptation field. Therefore, the
adaptation control counter 782 will latch the first byte of the frame data into a storage location labeled AF LENGTH to determine the length of the adaptation field. Accordingly, the adaptation field has a variable length between 1 and 183 bytes long. By decrementing the adaptation field length by one as each new byte of data is received on the FRAME DATA bus, theadaptation control counter 782 can monitor which fields, or field portions, of the adaptation field are present on the FRAME DATA bus at a specific time. Accordingly, theadaptation control counter 782 provides operational control signals to each of the storage locations ofstorage portion 781 to correspond to the presence gets data on the FRAME DATA bus. - Generally, the
storage locations 781 correspond to specific registers of the register set 780 ofFIG. 7 . For example, the discontinuity indicator field is known to be the first bit, of the second byte, of the adaptation field. Therefore, the storage location labeled Discontinuity Indicator ofstorage area 781 will be connected to only the first bit of the FRAME DATA bus. Furthermore, logic associated with theAdaptation Control Counter 782 will provide a latch control signal to the Discontinuity Indicator ofstorage location 781 only when the counter associated with theAdaptation Control Counter 782 indicates the second byte of data is present on the FRAME DATA bus. In a similar fashion, the other specific adaptation bit-fields associated withlocations 781 will be parsed. Note that the individual locations ofstorage locations 781, may be the actual register locations of register set 780, or may be storage locations local to theadaptation field parser 750. Where the storage locations are local to theparser 750, a register control portion (not shown) can be used to update values within the register set 780. - The Optional Flags field of
storage locations 781 is connected back to theadaptation control counter 782 in order to provide feedback. The need for this feedback is best understood with reference to prior artFIG. 1 . Prior artFIG. 1 illustrates that the adaptation field can include five optional fields. The presence of each of these five optional fields is indicated by flag bit. The field labeled Optional Flags represents the five flags of the adaptation field to indicate the presence of the optional fields. Therefore, by providing feedback from the optional field location, theadaptation control counter 782 can correctly determine which optional field data is present, and when to receive optional field data. -
Storage locations 784 generally represent register locations whose values are determined based upon the parsed information ofstorage locations 781. Specifically, theregister logic 786 monitors the operation of theadaptation control counter 782 and/or the contents of thelocations 781 to determine when the PCR value has been received. In addition, the displaced countdown value received at the adaptation field parser is monitored determine when the actual video splicing point occurs. - When the optional flags indicate that the optional fields includes transport private data, the
adaptation control counter 782 will provide the private data from the FRAME DATA bus to a PESP PRIVATE DATA bus through either directly, or through alatch 785. In addition, theadaptation control counter 782 will provide a signal to a node labeled PRIVATE DATA ENABLE to indicate when the PESP PRIVATE DATA bus has valid data. In one embodiment, the PRIVATE DATA ENABLE node is clocked for each valid byte of data written to the PESP PRIVATE DATA bus. In another embodiment, the PRIVATE DATA ENABLE node would include multiple nodes, whereby one node pulsed to indicate each valid byte of data written to the PESP PRIVATE DATA bus, while the other node indicated the valid PESP private data cycle. The valid PESP private data node would be asserted for the entire assertion of PESP private data from a common transport packet. - Operation of the
adaptation field parser 750 is better understood with reference toFIGS. 29 through 31 which illustrates portions of the register set 780 associated with theadaptation field parser 750. Specifically,FIG. 29 illustrates status registers,FIG. 30 illustrates interrupt mask registers, andFIG. 31 illustrates control registers. -
FIG. 29 illustrates a number of status register fields associated with the register set 780 ofFIG. 7 , which are associated with the operation of theadaptation field parser 750. Video AFPcrReceived is a single read bit, which is set to 1 after arrival and extraction of the PCR sample in the adaptation field. The assertion of this bit will cause an interrupt be generated if the VideoAFPPcrReceived bit of the event interrupt mask is enabled. Subsequent read access of this field will cause it to be cleared. - Register field VideoAFPcrDiscontinuity is a single bit of R/W field data that is set to 1 when a discontinuity indicator in the adaptation field is asserted. The assertion of this bit will cause an interrupt to be generated if the VideoAFPCRDiscontinuity bit of the event interrupt mask of
FIG. 30 is enabled. Subsequent access of this field by software will cause the field to be cleared. - Register field VideoAFDiscontinuityFlag is a single bit R/W field that is set to 1 after a discontinuity indicator flag has been asserted in the adaptation field of the video transport packet. Assertion of the discontinuity indicator flag indicates discontinuity on the continuity counter. The assertion of this bit will cause an interrupt to be generated if the VideoAFDiscontinuityFlag of the event interrupt mask register of
FIG. 30 is asserted. The subsequent access of this field by software will cause this field to be cleared. - Register field VideoAFRandomAccess is a single bit R/W field that is set to 1 when the video packet has a random access flag asserted in the adaptation field. This indicates the start of the new elementary stream. The assertion of this bit will cause an interrupt be generated if the VideoAFRandomAccess bit of the event interrupt mask register of
FIG. 30 is asserted. The subsequent access of this field by software will cause the field be cleared. - Register field VideoAFSplicingFlag is a single bit R/W field that is set to 1 when the video packet has the splicing point flag asserted in the adaptation field. This flag indicates that a splicing point is approaching. The assertion of this bit will cause an interrupt to be generated if the VideoAFSplicingFlag bit of the event interrupt mask register of
FIG. 30 is asserted. The subsequent access of this field by software will cause the field to be cleared. - Register field VideoAFSplicingPoint is a single bit R/W field that is set to 1 when the video packet has the VideoAFSplicingFlag asserted and the AF Splice Countdown register has a value of 0. The setting of this bit is controlled by the
register logic 786 ofFIG. 28 . The assertion of this bit will cause an interrupt to be generated if the VideoAFSplicingPoint bit of the event interrupt mask register ofFIG. 30 is asserted. The subsequent access of this field by software will cause the field to be cleared. - Register field VideoAFPrivateData is a single bit R/W field, which when set to 1 indicates the video packet has adaptation field private data. The assertion of this bit will cause an interrupt be generated if the Video AF Private Data bit of the event interrupt mask register of
FIG. 30 is asserted. The subsequent access of this field by software will cause the field to be cleared. - Register field AFSpliceCountdown is a byte wide R/W field that contains the current splice countdown value from the current adaptation field.
-
FIG. 31 illustrates control registers associated with register set 780 that control operations associated with theAdaptation Field Parser 750. - Register field EnabledAFPrivateData is a single bit R/W field that when asserted enables parser of the adaptation field private data.
- Register field AFPrivateDataBufferIndex is a four bits field which specifies 1 of up to 15 destination buffers in the system memory where the private data is to be stored.
- Register field PCRIndex is a five bits field which specifies one of 32 PID values from which the PCR data is to be extracted.
- Register field Enabled Auto Splicing is a single bit R/W field that enables automatic splicing of the video elementary stream.
-
FIG. 32 illustrates an alternate embodiment of a portion of the transport demultiplexer illustrated inFIG. 7 . Specifically,FIG. 32 illustrates aPrivate Data Packetizer 740 connected to theAdaptation Field Parser 750 and theVideo PESP 730. TheAdaptation Field Parser 750 is connected to thePrivate Data Packetizer 740 through the AFP PRIVATE DATA bus and node PRIVATE DATA ENABLE. TheVideo PESP 730 is connected to thePrivate Data Packetizer 740 through the bus labeled VIDEO PRIVATE DATA and node labeled VIDEO PRIVATE DATA ENABLE. ThePrivate Data Packetizer 740 receives private data from theAFP 750, andvideo PESP 730 and associated control signals. In turn, private data packetizer 740 provides the private data packet on a bus labeled PRIVATE DATA to buffercontroller 760, and a control signal on the node labeled PRIVATE DATA ENABLE to thebuffer controller 760. - In operation, private data associated with the
video PESP 730 has a fixed length of 16 bytes. However, the private data associated with the transport packet, which is parsed by theAFP 750, has a variable length from 1 to 181 bytes. Because the FIFOs 761 and 762 of thebuffer controller 760 store double words, it is possible, and in fact likely, that the private data associated with the adaptation field of transport packet will not provide to the FIFOs private data that ends on a double words boundary. The significance of this is best understood with a discussion of the operation of one embodiment of thebuffer controller 760. - During normal operation of the
buffer controller 760, bytes of data associated with transport packets from theTransport Packet Parser 720 and video data from theVideo PESP 730 are provided to thebuffer controller 760. Each parser has a corresponding double word buffer in thebuffer controller 760, which receives and stores the individual bytes of data until an entire double word has been received. For example, the first byte of data provided by theTransport Packet Parser 720, is stored in the first byte location of adouble word buffer 763, while the second, third, and fourth data bytes will be stored in second, third, and fourth byte locations of thedouble word buffer 763 respectively. When thedouble word buffer 763 has received the fourth byte, the double word is written from thedouble word buffer 763 to theFIFOs 761, thereby freeing up thedouble word buffer 763 for subsequent bytes. - When a specific data packet of a packetized elementary stream does not end on a double word boundary, the
double word buffer 763 will be partially filled and therefore not send the end of the reception of the specific data packet. However, this is not a problem if specific data packet is repeatable over many packetized elementary streams, because the subsequent data packet associated with the same packetized elementary stream can be expected to be received within a relatively short amount of time to complete filling the double word buffer. Once the double word buffer is filled using data bytes from the subsequent data packet, the fielddouble word buffer 763 will be sent to theFIFOs 761. - While it is not problematic for a specific packet of a packetized elementary stream to not completely fill the double word buffers associated with the
buffer controller 760, the same is not true of private data associated with specific transport stream or packetized elementary stream. This is because the private data associated with packetized elementary stream has a fixed length and is not streaming data of the type associated with thetransport packet parser 720 or the video of thevideo PESP 730. Because the private data from be transport packet has a variable length, there is no guarantee that the private data will end on a double word boundary. If the private data does not end on a double word boundary, the partial double word portion of private data at the end will not be sent to the FIFO until additional private data from unrelated source is received. Therefore, the system software that interprets private data, would have incomplete data. Theprivate data packetizer 740, illustrated inFIG. 32 , addresses this problem. - In operation, the
private data packetizer 740, can receive private data from each of theAdaptation Field Parser 750, and theVideo PESP Parser 730, and forms a private data packet to be sent to thebuffer controller 760, which is guaranteed to have a length that ends on a double word boundary. Note that both the packetized elementary stream data from theTransport Packet Parser 720, and the private data generated by theprivate data packetizer 740 are sent to thesystem FIFOs 761. An index indicator, which specifies which circular buffer in system memory the private data is to be stored, is provided to theFIFOs 761. The index indicator is specified in the register field labeled AFPrivateDataBufferIndex, which was discussed with referenceFIG. 31 herein. Therefore, all private data, whether from theAdaptation Field Parser 750 or from theVideo PESP 730, is been provided to the same buffer in system memory.FIG. 33 illustrates the private data packetizer 740 in greater detail. - The private data packetizer 740 of
FIG. 33 includescounter controller 741, the AF Data TypeCode storage location 742, PES Data TypeCode storage location 743, StuffingCode storage location 744,AFP Data Latch 745PESP Data Latch 746, and fixedlength Indicator Code 747. - The AF Data Type
Code storage location 742 stores the specific eight-bit type indicator associated with the adaptation field private data. The PES Data TypeCode storage location 743 stores the specific the eight-bit type indicator associated with the PESP private data. The StuffingCode storage location 744 stores the specific eight-bit stuffing code which is used to pad private data packet to insure the private data packet always ends on a double word boundary. TheAFP Data Latch 745 is used to store the actual private data from the adaptation field parser to be provided to thebuffer controller 760. Similarly, the PESP Data Latch is used to store the actual private data from the PESP parser is to be provided to thebuffer controller 760. The fixedlength indicator code 747 stores the fixed length value associated with the PESP parser private data. In the specific example, the PESP parser private data will always be 16 bytes of data, or 0x10 hexadecimal. - In operation, the
counter controller 741 can be enabled either by be AFP Data Enable signal, or by the PESP Data Enable signal. When thecounter controller 741 is enabled by the PESP Data Enable signal, the number of bytes of private data is fixed at 16 bytes, therefore, the value of 16 will be used by beAFP counter controller 741 to generate the appropriate signal for the PRIVATE DATA bus. Unlike PESP private data, AFP private data has a variable length. The actual number of bytes of AFP private data, not including the length byte, is transmitted in the first byte of the AFP private data field of the data packet. Therefore, the counter controller receives the number of bytes of transport packet private data by latching the first byte of the private data field of the data packet. The first byte of the private data field is received on the AFP DATA bus on or after the PES Data Enable signal has been received. Based upon the source of the private data and the length of private data, theprivate data packetizer 740 will construct the private data packet. -
FIG. 34 illustrates a specific embodiment of a private data packet generated by theprivate data packetizer 740. Data block 771 illustrates the format of the private data packet having specific fields: type, length, data, and stuffing. - The type field of the private data packet indicates the source of the private data, either transport packet private data, or video PES data. In a specific embodiment, the hexadecimal value of 0x55 is used to indicate private data associated with the transport packet received from the
AFP 750, and a hexadecimal value of 0xAA is used to indicate private data from the video PES received from the video PESP. Note that in other embodiments of the present disclosure, additional data types can be received from other sources. - The length field of the private data packet specifies the length of private data that is to follow the private data packet. Note that in the specific embodiment illustrated, be value of the length field does not include a count for the length field byte.
- The stuffing field of the private data packet is used to assure the private data packet ends on a double word boundary. As indicated, the stuffing field can include zero to three bytes of data.
- Data block 772 of
FIG. 34 illustrates a private data packet associated with the video PES stream. Specifically,private data packet 772 has a type value of hexadecimal value 0xAA indicating the private data packet is associated with a video PES. The length field ofpacket 772 has a hexadecimal value of 0x10, which indicates that 16 bytes are contained within the subsequent data field. Accordingly, the subsequent data field of the private data packet includes 16 bytes, 0 through F. Because the length of the fields type, length, and data is no one, the number of stuffing bytes needed to insure the private data packet ends on a double word boundary is readily determined. Therefore, two stuffing bytes of 0xFF are represented in the stuffing field ofprivate data packet 772. - By adding to stuffing bytes in the stuffing field of the private data packet, the length of the private data packet ends on a double word boundary. Therefore, when the data bytes of the
private data packet 772 ofFIG. 34 are provided to thebuffer controller 760, and more specifically to thedouble word buffer 764 of thebuffer controller 760, it is assured that the entire private data packet will be provided to theFIFOs 761 without delay. Once the data is provided to theFIFO 761, the double word of data will be provided to the appropriate buffer in system memory. System software will, therefore, be able to access the private data stored in system memory without delay, and determine the type of data based upon type field, and length of the data based upon length field.Private data packet 773 ofFIG. 34 illustrates another specific private data packet. Specifically,packet 773 has a type value of hexadecimal value 0x55, which represents an adaptation field data packet. The length field of thepacket 773 has a hexadecimal value of 0x0F, which indicates 15 bytes of data are associated with the adaptation field private data. As a result, 15 bytes ofdata 0 through E are represented in the data field, and a total of three stuffing bytes are needed in order to assure that private data packet ends on a double word boundary. - Data blocks 774 and 775 indicate other specific private data packets associated with the transport packet provided by the
adaptation field parser 750. Specifically, the length of the private data has been varied inpacket - Referring to
FIG. 33 , thecounter controller 741 provides the appropriate data type code to thebuffer controller 760 by selectingstorage location - The length field of the private data packet is provided to the PRIVATE DATA box differently depending upon whether adaptation field private data or video PES private data is being provided. The length of video PES private data, which is always 16 bytes, is provided to the PRIVATE DATA bus by selecting the
storage location 747, which contains the hexadecimal value 0x10. Enabling thestorage location 747 allows the hexadecimal value 0x10 be provided to be PRIVATE DATA bus. The length of adaptation field private data is provided to the PRIVATE DATA bus by latching the first byte of the adaptation field private data into be AFP data latch 745. Because the first byte of the adaptation field private data specifies the number of private data bytes that follow, the appropriate length value for the length field is provided to the PRIVATE DATA bus. - Once the type and length field data have been provided to the PRIVATE DATA bus, the actual data is provided to the PRIVATE DATA bus. This is accomplished in a similar manner for both the adaptation field private data and a video PES private data. Specifically, the
counter controller 741 latches the data into one of the appropriate data latches AFP data latch 745, or PESP data latch 746. In response, be associated private data is provided to the PRIVATE DATA bus. Note the private data could be provided to the PRIVATE DATA bus directly to transmission gates, or any other appropriate logical interface. - The generation of stuffing codes, from the
stuffing code register 744, is controlled by thecontrol counter 741. Because thecontrol counter 741 knows the length of the private data provided, it can readily determined the number of bytes needed, if any, to assure the private data packet ends on a double word boundary is readily calculated. Therefore, after the last byte of the private data, from either the AFP or PESP, the appropriate number of stuffing codes are been provided to the PRIVATE DATA bus by selecting the storage location the 744 determined number of times this assures thebuffer controller 760 will receive a number of bytes that and on a double word boundary. As a result, the private data can be provided to thesystem buffer controller 760 without delay. -
FIGS. 35 through 38 illustrate a method of performing automatic splicing using the data parsed herein provided to their respective registers. The term splicing refers to the process of switching between two video streams. For example, splicing can be used to switch between the video of the main program and a video of a commercial, between video to a commercial, and from a commercial video back to the main program video. The method ofFIGS. 35 through 38 is contingent upon being enabled by the compound to field of the control register. Splice points can be sorted as Out Points or In Points. - An Out Point is a location in the stream where the underlying elementary stream is well constrained for a clean exit (usually after I or P frame). An Out Point Packet is the packet of the PID stream preceding an Out Point. MPEG-2 syntax defines Out Points at transport layer as:
- splicing_point_flag=1, splice_countdown=0, seamless_splice_flag=1;
- An In Point is a location where the stream is well constrained for a clean entry (usually just before a sequence_header and I frame at the closed GOP. MPEG-2 syntax defines In Points at transport and PES layers as:
- splicing_point_flag=1, splice_countdown=−1, seamless_splice_flag=1;
payload_unit_start_indicator=1 random_access_indicator=1, data_alignment_indicator=1; - At
step 301, ofFIG. 35 , the interrupt mask register is written to, in order to enable reception of interrupts based upon the video splicing flag and the video splicing point. The video splicing flag and the video splicing point values are determined by parsing performed by theAdaptation Field Parser 750. The video splicing flag indicator is one of the optional flags ofstorage location 781 ofFIG. 28 , and is represented by register field VideoAFPSplicingFlag in the global status register ofFIG. 29 . The video splicing point is determined byregister logic 786 ofFIG. 28 , and results in the register field labeled VideoAFSplicingPoint being set when the video splicing flag is set and the splicing countdown register, labeled AFSpliceCountdown, is equal to 0. - At
step 302, the method ofFIG. 35 waits for an interrupt to occur. - At
step 303, an interrupt has been received, and a determination is made as to the interrupt type. If the interrupt type is a splice point, the flow proceeds to connector A, which is continued atFIG. 38 . If the interrupt type is a splice flag, the flow proceeds to step 304. If the interrupt type is a different type of interrupt, the flow returns back to step 302. - At
step 304, a determination is made as to the type of splice represented by the splice flag interrupt. This can be determined by analyzing the splice countdown value received by theadaptation field parser 750 ofFIG. 28 . Specifically, if the splice countdown value is a positive value it is an indication that the splice flag has identified an out-splice point. An out-splice point indicates that the current video elementary stream being received is about to end, and the flow proceeds to connector B, which continues atFIG. 36 . - If at
step 304 the splice countdown value is equal to zero, it is an indication the splice flag has identified a splice point. The splice point is as identified as that point in time were video is to be switched from a current video stream to a next video stream. A splice point flag is set and theadaptation field parser 750 ofFIG. 28 , when the splice flag is asserted, and the splice countdown register is equal to 0. (Note that under normal operation, the splice point path fromstep 304 will not be taken because the splice point should have been detected atstep 303, thereby bypassing step 304). - If at
step 304, it is determined that the splice countdown value is negative, it is an indication that an in-splice point has been identified. And in-splice point indicates that the current video elementary stream being played is just began, and the flow proceeds to connector C that continues inFIG. 37 . - One skilled in the art will recognize that specific register values identifying splice-in points and splice-out points could be provided in the same manner the separate register location was provided for the splicing point. Likewise, many other variations of the specific flow herein can be made without departing from the inventive intent.
- When out point has been detected at
step 304, the flow proceeds toFIG. 36 . Atstep 310, ofFIG. 36 , the splice flag interrupt is disabled. The splice flag interrupt is disabled because specific method illustrated inFIGS. 35 through 38 only needs to execute and out point routine one time. Since the splice countdown value for an out point includes the values from 7 to 1 the out point routine disables the splice flag interrupt atstep 310 in order to avoid having to unnecessarily process interrupts caused by the subsequent out point values. - At
step 311, splice point interrupts are enabled. Note that splice point interrupts should already be enabled fromstep 301 ofFIG. 35 . Therefore, thestep 311, under ideal operating conditions, will be redundant and not strictly necessary. - At
step 312, acquisition of the PAT table is requested. The PAT table is discussed with reference to prior artFIG. 2 . - At
step 313, a determination is made whether or not the PAT table version number has changed. If the PAT table version number was not changed, the flow proceeds to step 314. However, if the PAT table version number was changed, the flow proceeds to step 317. - At
step 317, if the PAT table version number has changed, a new PMT table, seeFIG. 2 , is fetched and the flow proceeds to step 314. - At
step 314, a determination is made whether or not the current splice is valid. A valid splice point is recognized by asserted (set to 1) splicing_point_flag and seamless_splice_flag. Flags are stored in the global status register. If it is determined that the current splice point is not valid, the flow proceeds to step 302 ofFIG. 35 . However, if it is determined that the current splice point is valid, the flow proceeds to step 315. - At
step 315, a request is made to receive the break duration time as an optional bit-field available in the splice_info_section that indicates an approximate time when the break will be over and when the network In Point will occur. Atstep 316, the new PID number, received from the new PMT table, is written to a register that shadows the VideoPid register ofFIG. 18 . Referring toFIG. 16 , the VIDEOPID storage location 424 provides the PID value which identifies the current video stream, while the shadow register associated with location 424 (not illustrated) stores the PID value of the next video stream to be accessed at the splice point. Subsequent to step 316, flow proceeds back tostep 302. - When it is has been determined at either step 303 or step 304 that the splice point has occurred, the flow proceeds to
FIG. 38 . Atstep 331 ofFIG. 38 , the PID value stored in the shadow register is transferred into the active PID register. As result, the value stored in theVIDEO PID location 424 ofFIG. 16 is updated to the new PID value, resulting in the new video PID packets been identified, and selected, as the current video stream. In effect, the newly selected video image will be displayed. - At
step 332, a request is made to update the STC counter. The STC counter is updated in order to synchronize the system counter with the new program counter, i.e. a new time base. - At
step 333, the splice flag interrupt is enabled. The Splice Flag Interrupt Enable Bit is asserted in order to allow for the recognition of the splice in point. Fromstep 333, the flow proceeds to step 302 ofFIG. 35 . Note that in another embodiment of the present disclosure, a determination step could be made at the beginning of the flow ofFIG. 38 as to whether the new PID is associated with a desirable program. If not, an alternate flow ignoring the PID, or using a dummy or alternate PID, could be used. For example, this feature could be used eliminate viewing commercials or other program types. - If at
step 304,FIG. 35 , it is determined that an in-splice point is occurring, the flow proceeds toFIG. 37 . Atstep 336, ofFIG. 37 , a determination is made whether or not this is the first in-splice point interrupt service request. The first in-splice point interrupt service request, is generally associated with the value minus 1 of the splice countdown register. However, in order to accommodate for possible lost packets, the determination of step 320 may be used along with an indicator as to whether or not to the previous in-splice point interrupt service request has occurred. If this is not the first in-splice point, the flow proceeds to step 302 ofFIG. 35 . If this is the first in-splice point, theflow proceeds step 337. - At
step 337, a determination is made whether or not the in-splice point indicator is valid. The in-splice point indicator is validated by determining whether or not random access flag register is set along with discontinuity flag register. The random access flag register, and discontinuity flag register, should both be set because the first packet of a new data stream will indicate the current packet is capable of being randomly accessed by the system, and since no previous packets are associated with the PES stream the discontinuity flag should be set. - At
step 338, a request for PMT table acquisition is made. This is done to verify that current PID assignment for a present program is as before the brake (or before added commercial). Atstep 339, a determination is made whether the PCR and video PID values are valid. PIDs are verified by analyzing a content of received PMT table for known MPEG-2 program_number. Change formidable if the PCR and PIDs are okay, flow proceeds to step 302 ofFIG. 35 . Otherwise, flow proceeds to step 340. - At
step 340, the new PID values are updated. - The method described 32 through 35 provides advantages over the prior art by allowing for the automated handling of in-splice point. Utilizing register values updated by the hardware parsers described herein, automatic splicing is enabled. The amount of saved system software bandwidth provides an advantage over the prior art.
- Therefore, one skilled in the art will recognize that providing for hardware parsing of adaptation fields, and the generation of the private data packet regardless of the source of private data, provides advantages over the prior art. In addition, the splicing method described herein, provides for automatic hardware splicing control, which provides advantages over prior art methods of software control splicing.
- In another embodiment of the disclosure, a transport stream demultiplexer core register set is initialized to indicate a possible set of transport stream characteristics. An acquisition routine is executed. If acquisition of the transport stream signal does not occur during a predetermined amount of time, the acquisition is not successful. When not successful, the register set is initialized to indicate a different possible set of transport stream characteristics, and the acquisition routine is once executed. This process continues, until the transport stream core acquires the transport stream signal.
-
FIGS. 39-42 illustrate a specific implementation of a method for blind synchronization to a transport stream. Blind synchronization allows the framer to acquire the transport stream, i.e. lock onto the transport stream, without any prior knowledge of the transport stream characteristics. - As discussed with reference to
FIGS. 8 and 9 , the transport stream can include a variety of signals. At a minimum, the transport stream will include a data signal (TDATA) and a clock signal (TCLOCK). Additional signals that may exist include TSTART, TVALID, and TERROR. Based upon these signals, the transport stream has a number of characteristics, such as individual signal polarities, and data ordering. - One transport stream characteristic is the polarity of the control signals, which can vary based upon the service provider implementation. In other words, each of the control signals TVALID, TSTART, and TERROR can be either active high or active low signal. As illustrated in
FIG. 14 , each of the control registers has respective register field (T_ValidPolarity, T_StartPolarity, and T_ErrorPolarity) to specify the active edge of each control signal. - An additional characteristic is the data ordering, or the bit polarity. Because the data is received bit at a time, or by bytes, whether the LSB is first or the MSB is first can vary. A field labeled FramerBitPolarity is used to select between a LSB and MSB bit polarity of TDATA.
- Another transport stream characteristic is whether the TCLOCK signal latches data on a rising edge or on a falling edge. A field labeled FramerClockPolarity is used to select between these two characteristics.
- At
step 911 ofFIG. 39 , these variables are initialized to represent a specific set of transport stream characteristics. As further illustrated instep 921 ofFIG. 40 , the registers T_ErrorPolarity, T_StartPolarity, and T_ValidPolarity are set equal to zero. For purposes of discussion, a value of zero will represent an active low polarity, while a value of one will represent an active high polarity. - A variable BIT_ORDER, which corresponds to field FramerBitPolarity, is set to LSB to indicate the LSB of TDATA is to be received first, or right justified bytes of data are received. The variable BIT_ORDER can also be set equal to LSB to indicate the MSB of TDATA is to be received first, or will be right justified where bytes of data are received.
- A variable labeled CLOCK_POLARITY, which corresponds to the field labeled FramerClockPolarity in
FIG. 14 , is set to zero, where zero indicates that TDATA is latched on a falling edge. - At
step 922 ofFIG. 40 , other initialization overhead functions are performed. For example,FIG. 14 illustrates a field labeled FramerMode that specifies the signals associated with the transport stream. Step 912 can include initialization of this field as well. - As
step 912 ofFIG. 39 , a verification routine is executed. The verification routine is illustrated in greater detail with respect toFIG. 41 . Atstep 931 ofFIG. 41 , reception of the transport stream is enabled. In effect, it implements settings of the current transport stream characteristic. Upon enabling reception of the transport stream, the framer portion of transport stream demultiplexer core begins operation as described previously in an attempt to achieve synchronization. - At step 932 a predetermined amount of delay time occurs to allow the framer to detect a synchronization byte. When the data stream being received is an MPEG-2 data stream the synchronization byte is a hexadecimal 47 (47h). The predetermined delay is used to detect one 188 byte long MPEG-2 packet, and depends on a stream bit-rate and is typically under 100 microseconds.
- At
step 933, a determination is made whether the synchronization byte was detected. If not, the flow proceeds to step 935, if so, the flow proceeds to step 934. - At
step 934, a determination is made whether or not additional synchronization bytes need to be detected before synchronization is declared. InFIG. 14 , the variable labeled FramerSyncLockLengthh indicates how many consecutive transport packet synchronization frames need to be detected before synchronization is declared. Based upon this value, the flow will return to step 932 until the specified number of synchronization values has been detected. When the specified number of synchronization frames has been detected, the flow returns toFIG. 39 and indicates a successful verification. - At
step 935, it has been determined that the transport stream reception has not been successful. As a result, no further attempt is made to acquire the transport stream with the present settings of the transport stream physical characteristic. Therefore,step 935 performs any overhead functions needed, for example, reception of the transport stream can be disabled. Note in other embodiments, reception of the transport stream with improper characteristic settings continues. - From
step 935, the verification flow ofFIG. 41 returns toFIG. 39 and indicates that the verification was not successful. - At
step 912 ofFIG. 39 , a determination is made whether the verification routine was successful. If so, the flow proceeds to step 914, if not, the flow proceeds to step 915. - At
step 914, the proper set of transport stream characteristics has been found and any necessary cleanup occurs. Examples of necessary cleanup items would include notifying the use of successful synchronization, storing of the synchronization characteristics. - At
step 915 the transport stream characteristics are incremented.FIG. 42 illustrates one method of incrementing the characteristics specified with respect to step 911. -
FIG. 42 illustrates a flow diagram that increments the transport stream characteristic in such a manner that all possible combinations are covered. By executing this routine, a successful increment will be indicated for all values, except for when BIT_ORDER variable is equal to MSB, and all other characteristics are equal to one. This state indicates that all possibilities have been tested, and an unsuccessful return occurs. - At
step 916 ofFIG. 39 , a determination is made whether the increment of the transport stream characteristic variables was successful. If so, the flow returns to step 912 where the verification routine is executed again. If the increment of the transport stream characteristic was not successful, indicating that no lock was obtained, the flow proceeds to step 914 for appropriate cleanup. - The present method provides a fast method for acquiring a transport stream having unknown characteristics. Variations of the method described herein would include varying the number of consecutive synchronization byte required for acquisition to be successful, varying the order in which the variables are varied. Varying the framer mode to indicate the possible combinations of transport stream signals, i.e. clock and data only.
- It should be understood that the specific steps indicated in the methods herein may be implemented in hardware and/or software associated with the specific parsers or controller described. For example, a specific step may be performed using software and/or firmware executed on one or more a processing modules. In general, a system for handling transport stream data may include a more generic processing module and memory performing the functionality described herein. Such a processing module can be a single processing device or a plurality of processing devices. Such a processing device may be a microprocessor, microcontroller, digital processor, micro computer, a portion of the central processing unit, a state machine, logic circuitry, and/or any device that manipulates the transport stream. The manipulation of the transport stream is generally based upon operational instructions. The memory may be a single memory device or a plurality of memory devices. Such a memory device may be a read only memory a random access memory a floppy disk memory, magnetic tape memory, erasable memory, a portion of a system memory, and/or any device that stores operational instructions in a digital format. Note that when the processing module implements one or more of its functions to be a state machine or logic circuitry, the memory storing in the corresponding operational instructions is embedded within the circuitry comprising the state machine and/or other logic circuitry.
-
FIG. 43 illustrates, in block diagram form, a processing device in the form of apersonal computer system 1000. Thecomputer system 1000 is illustrated to include acentral processing unit 1010, which may be a conventional proprietary data processor, memory includingrandom access memory 1012, read onlymemory 1014,input output adapter 1022, auser interface adapter 1020, acommunications interface adapter 1024, and amultimedia controller 1026. Note thecentral processing unit 1010, thecommunications interface adapter 1024, and video/graphics controller can individually be considered processing devices. - The input output (I/O)
adapter 1022 is further connected to, and controls,disk drives 1047,printer 1045,removable storage devices 1046, as well as other standard and proprietary I/O devices. - The
user interface adapter 1020 can be considered to be a specialized I/O adapter. Theadapter 1020 is illustrated as connected to amouse 1040, and akeyboard 1041. In addition, theuser interface adapter 1020 may be connected to other devices capable of providing various types of user control, such as touch screen devices. - The
communications interface adapter 1024 is connected to abridge 1050 such as is associated with a local or a wide area network, and amodem 1051. By connecting thesystem bus 1002 to various communication devices, external access to information can be obtained. - The
multimedia controller 1026 will generally include a video graphics controller capable of displaying images upon themonitor 1060, as well as providing audio to external components (not illustrated). - In accordance with the present disclosure, the transport core can be implemented at various portions of the
system 1000. For example, the transport core can be part of theCommunication Interface Adapter 1024, as part of theMulti-Media Controller 1026, or as a separate component of the system connected directly to thebus 1002. In a specific embodiment, the video memory ofFIG. 5 resides within theMulti-Media Controller 1026, while the system buffers 501 to 503 would generally reside inRAM 1012. In other implementations, a unified memory can be used. - Verification of a system implementing various hardware and methods described herein can be accomplished by implementing an MPEG-2 transport demultiplexer in C language in order to verify the parsing transport files to the level of elementary streams. The produced elementary streams have been compared against streams generated by reference transport stream generation equipment, which in this case, has been used as a reference transport/PES stream decoder.
- A Behavioral C model operates on the MPEG-2 transport stream on MPEG-2 transport stream files and has capabilities to perform functions described herein, including:
-
- Analyzing a stream and provide a list of PID numbers of the component streams.
- Demultiplexing (to files) specified component streams in a sense that video stream is parsed to the level of the elementary stream, while all other streams are just demultiplexed on a simple PID filter. Up to 16 output files can be created. Output files contain entire transport packets. Depending on a setup of the auxiliary PID control registers, output files contain packets identified by a single or a multiple PID values. For example, all 31 non-video transport packets can be routed in a single file. This closely models interface between output FIFO of the demultiplexer hardware and the host bus interface unit (HBIU).
- Modeling the operation of all registers and output stream pointers, according to the naming convention in the functional specifications of the demultiplexer hardware. This can then be used to develop actual VHDL or Verilog Hardware Description Language code for MPEG-2 demultiplexer system-on-a-chip.
- Modeling the operation of the framer, transport layer parser, PES layer parser, and a full-duplex interface between demultiplexer and MPEG2 video decoder (one path transfers PTS, PTS byte count, latched STC and current STC to the video decoder, other path receives various private data from the video decoder at the sequence GOP or picture level).
- The video elementary stream output file can be compared bit by bit with the output of the reference test and measurement device (transport stream analyzer—TSA). TSA has ability to work in real time on a byte parallel transport stream or on a file. If operated on a file, it will generate video elementary stream stored in a file. This file will be used to compare against the elementary stream (ES) video output file of our C model. This way, about 90% of the C model can be verified (a framer, transport and PES parser and video FIFO). Up to 31 non-video PID filters and the transport packet router can be verified with the transport packet header syntax analyzer software. This completes the verification of a C model.
- A transport stream generator, or composer is described below for generating test streams, and for testing hardware and software models of transport stream demultiplexers. These streams are generated through a C program and text file containing script command language. It consists of one through several hundred MPEG-2 transport stream packets that would contain different PID's, PES data, etc. Each test stream can scope a specific function of the parser. These test streams are files that can be fed to a behavioral model that reads this file and feed it as a serial bit-stream to the VHDL. These tests can be run to result in bit-maps residing in either the frame buffer memory, or in the system memory.
- A data record, in accordance with a specific embodiment of the present disclosure, is described below capable of implementing the tests used for verifying a C model, or a hardware device or a system. The data record illustrated below allows simple ASCI, or other text based, description of TP or PES syntax.
-
- ; This is a comment line
- FILE “YourFilename.ES”; Name of the file containing MPEG-2 elementary stream to be packetized into PES and TP formats.
- ; The following portion is the PES, also referred to as a data stream, description, and is relevant to PES layer syntax.
-
[REPEAT_PES M1] [PES_SCP N0] [PES_SID N1] [PES_SC N2] [PES_DAI] [PES_C] [PES_OOC] [PES_PTS_FLAG N3 N4] [PES_ESCR_FLAG N5] [PES_ESRATE_FLAG N6] [PES_DSM_FLAG N7] [PES_ACI_FLAG N8] [PES_CRC_FLAG N9] [PES_HEADER_DATA_LENGTH N10] [PES_PD_FLAG [N11] [RANDOM] [“TextString1”]] [PES_PH_FLAG N12] [PES_PPSC_FLAG] [PES_PSTD_FLAG N13] [PES_EXT2_FLAG N14] [PES_STUFFING N15] [PES_PAYLOAD_LENGTH N16 [N17] [RANDOM] [“TextString2”]] [END] -
- ; The following portion is the transport packet description
-
[REPEAT_TP M2] [[TP_SYNC N18 N19 [[RANDOM] [BITSHIFT]]] [TP_TEI N20] [TP_TEI_CONSECUTIVE N21 N22] [TP_RANDOM_TEI] TP_PID N23 [TP_TSC N24 N25] [TP_TSC_CONSECUTIVE N26 N27 N28] [TP_RANDOM_TSC N29] [TP_CC N30 N31 [DISCONTINUITY]] [TP_CC_RANDOM] [TP_PAYLOAD [N32] [RANDOM] [BITSHIFT] [“TextString3”]] [[[TP_DUPLICATE N33] [TP_DUPLICATE_RANDOM]] [DOUBLE]] [END] -
- ; The following portion is an adaptation field description
-
[AF_LENGTH N34] [AF_DI N35] [AF_RAI N36] [AF_PCR_FLAG N37 N38] [AF_OPCR_FLAG N39] [AF_SP_FLAG N40 N41] [AF_TPD_FLAG N42 [N43] [RANDOM] [“TextString4”]] [AF_EXT_FLAG N44 - All optional fields are given in [ ] braces; a syntax is relevant to a single PID transport stream. In the specific implementation, multiple PID transport stream files are created by muxing single PID files with simple utility program. All numbers (N1 . . . N43) are given as decimal numbers. Additional syntax relevant to the PES data record listed above is as follows:
-
- M1 (DWORD) specifies a number of PES packets under REPEAT-END structure.
- PES_SCP is the packet_start_code_prefix of PES packet set to numeric value N0 (DWORD). If [PES_SCP N0] is not given, packet start code should be set to default 0x000001. Purpose of [PES_SCP N0] is to define error on PES packet start code. N0 is 24 bit. If more than one PES packet exist, this error is injected on the first PES packet only, all other PES packet start codes are 0x000001.
- PES_SID is PES stream_id field set to numeric value N1 (BYTE). If command [PES_SID N1] is not given, stream_id is encoded as 0xE0. Purpose of [PES_SID N1] is to define error on stream_id field, which occurs on every PES packet.
- PES_SC is the PES_scrambling_control bit-field set to a numeric value N2 (BYTE). If [PES_SC N2] command is not specified, PES_scrambling_control should be encoded as 0, indicating non-scrambled (clear) PES payload. Purpose of [PES_SC N2] is to define error or legal case of scrambled PES payload, which ASIC should skip. N2ε{0, 1, 2, 3} and is applied to first PES packet only, all others are generated as clear packets with PES_scrambling_control==0.
-
- PES_DAI (BOOL) is data_alignment_indicator. If this line is specified in the script file, the data_alignment_indicator of the PES header has to be set to 1 to first PES packet only. If PES packets are creating from ES video, this flag is set when video sequence header is found.
- PES_C (BOOL) is copyright bit. If this command is specified, copyright bit of the PES header has to be set to 1, otherwise it is 0. This applies to every PES packet.
- PES_OOC (BOOL) is original_or_copy bit. If this line is specified in the script file, original_or_copy bit of the PES header has to be set to 1, otherwise is 0. This applies to every PES packet.
- PES_PTS_FLAG is the PTS_DTS_flags bit-field specifying existence of the PTS or PTS & DTS values in the PES header. N3 (BYTE) gives encoding type (N3ε{0, 1, 2, 3}), and N4 (ULONGLONG) gives exact value of the PTS (only 33 LS bits are meaningful, others has to be set to 0). This line of the script file allows verification of the PTS extraction circuit of transport demux ASIC. If N3 is set to 3, the DTS can be encoded as 0 or 0x1FFFFFFFF or the same as PTS. If PES packets are creating from ES video, this flag is set when video sequence header is found, otherwise PTS is applied to the first PES packet only.
- PES_ESCR_FLAG (BOOL) is ESCR_flag. N5 (ULONGLONG) encodes ESCR_value. Applies to the first PES packet only.
- PES_ESRATE_FLAG (BOOL) is ES_rate_flag. N6 (DWORD) encodes ES_rate value. Applies to the first PES packet only.
- PES_DSM_FLAG (BOOL) is DSM_trick_mode_flag. N7 (BYTE) encodes a full DSM byte field of the first PES packet only.
- PES_ACI_FLAG (BOOL) is additional_copy_info_flag. N8 (BYTE) encodes additional_copy_info of every PES packet.
- PES_CRC_FLAG (BOOL) is PES_CRC_flag. N9 (WORD) encodes 16 bit CRC sum. This allows verification of the ASIC's CRC hardware engine. Specified value is injected to second PES packet only, CRC on all others is calculated. First PES packet has no CRC field.
-
- PES_HEADER_DATA_LENGTH is the PES_header data_length syntax element. N10 (BYTE) gives actual length, which is adjusted with stuffing.
- PES_PD_FLAG (BOOL) indicates that 16 private data bytes exist in the header. If N11 (BYTE) is given, private data bytes are set as numeric string which starts from N11 and increases for 1. If RANDOM is defined, private data bytes are set as random bytes. If text string is given, private data bytes are set to ASCII string with 0xFF padding if the string length is less than 16, for example “PES private data”. This applies to every PES packet.
- PES_PH_FLAG (BOOL) is pack_header_field_flag. N12 (BYTE) gives the length of the pack header. If N12 is set to 13, than a regular 12 byte MPEG-1 pack_header is inserted, otherwise it is encoded with stuffing bytes (0xFF). N12 should be some small number (N12<20). This applies to the first PES packet only.
- PES_PPSC_FLAG (BOOL) is the program_packet_sequence_counter_flag, indicating that every PES packet has PES sequence counter.
- PES_PSTD_FLAG (BOOL) is the P-STD_buffer_flag. N13 (WORD) encodes P-STD_buffer_size (13 LS bits). For parsed video stream, P-STD_buffer_scale is always 1, indicating units of 1 KB. This applies to every PES packet.
- PES_EXT2_FLAG (BOOL) is the
PES_extension_flag —2 indicating second extension field whose length is specified with N14 (BYTE). ASIC skips over 2nd extension field and stuffing area. The second extension is added to the first PES packet only. N14 should be some small number (N14<20). - PES_STUFFING N15 (BYTE) indicates the number of stuffing bytes added to every PES packet header. N15<32.
- PES_PAYLOAD N16 (WORD) indicates length of the PES payload, whose content can be specified as numerical string starting from value N17 (BYTE) with roll over to 0 after 255, random numerical string or ASCII text string. Only one of the 3 options is valid at the time, for example text string “This is a PES payload” where PES_PAYLOAD_LENGTH is set to 21. This applies to every PES packet.
Additional syntax relevant to the transport packet record listed in the table above is as follows: - M2 (DWORD) specifies a total number of transport packets defined in the REPEAT-END structure. It is relevant only if there is no underneath PES stream (no previous PES syntax).
- Line TP_SYNC N18 N19 [RANDOM] [BITSHIFT] is used to specify errors on the sync_byte. Sync_byte, generated as random unsigned 8 bit integer [RANDOM] or bit-shifted variant of initial sync value 0x47 [BITSHIFT] is set from transport packet N18 (DWORD) in all next N19 (DWORD) transport packets, and after that is set to 0x47. If this line is omitted, sync byte shall be set to error free value (0x47) in the transport packets.
- TP_TEI (BOOL) is transport_error_indicator. It can exist with the specified rate (TP_TEI with rate specified as DWORD N20), it can be generated from packet N21 (DWORD) in all N22 (DWORD) consecutive packets; or it can be randomly generated [TP_RANDOM_TEI]. In the first case, repetition rate is N19, i.e. if N20 is set to 0, TEI occurs only once, at the first packet, if N20 is 1, every packet has TEI error flag, if N20 is 2 every second packet has TEI error and so on. If neither of three specifiers is given, some or all packets have no TEI flag set.
- Line TP_PID N23 specifies the PID of the current transport stream encoded as WORD with 13 LS bits as actual PID value.
-
- transport_scrambling_control can be set as:
- repetitive with command TP_TSC and TSC value in BYTE N24 and repetition ratio in DWORD N25. If N25 is zero, transport_scrambling_control is set to value N24 on first packet only, if N25 is 1 every packet has transport_scrambling_control field set to N24, if N25 is 2 every second packet has transport_scrambling_control field set to N24, and so on. N24ε{0, 1, 2, 3};
- constant with command TP_TEI_CONSECUTIVE and set to value BYTE N26ε{0, 1, 2, 3} from transport packet N27 (DWORD) in all N28 (DWORD) next transport packets, and after that set to 0, indicating no scrambling.
- constant with command TP_RANDOM_TSC and set to value N29 (BYTE), but on randomly selected packets.
- If this line is not specified, transport_scrambling_control is set to 0 (not scrambled) in the transport packets.
- continuity_counter can be set as to BYTE value N30ε{0, 1, 2, . . . 15} starting from packet N31 (DWORD). Optional DISCONTINUITY specifier, if exists defines a ‘legal’ discontinuity on the continuity counter field, set in the adaptation field. This line may exist as TP_CC_RANDOM where random transport packets are chosen to add random 4-bit value for continuity counter. If this line is not specified, continuity_counter field should start from 0 with first transport packet, and doesn't have any discontinuity in all transport packets.
- Payload of the transport packet can be set to a numeric string starting from BYTE value N32 with roll over to 0 after 255, or it can be filled with random bytes (RANDOM), bit shifted start codes (BITSHIFT, i.e. 0x47 bit shifted) or set to ASCII text string for example “Transport packet payload” as a good, known payload. If FILE directive is specified, a payload is built from underneath PES packets of ES stream and command TP_PAYLOAD is illegal in that case.
- Optional line TP_DUPLICATE N33 or TP_DUPLICATE_RANDOM defines duplicate transport packet as the image of the latest transport packet with duplicate rate in DWORD N33 or randomly generated rate of duplication. Optional DOUBLE specifier means that a duplicate packet is duplicated creating three consecutive packets with the same content. If N33 is set to 0, only first transport packet is duplicated, otherwise every N33th transport packets is duplicated.
Additional syntax relevant to the adaptation fields portion listed in the table above is as follows: - Line AF_LENGTH N34 specifies designed length of the adaptation field, including stuffing bytes. BYTE N34 encodes length. The actual length depends on specified flags and fields, and possible stuffing and is determined on packet by packet base. N34 allow us to define length in such a way that influence of errors on the adaptation_field_length can be tested. If specified length N34 is in conflict with the actual, computed adaptation_field_length, then adaptation field should contain all specified fields and flags with no stuffing and adaptation_field_length set to N34. If specified N34 complies with the possible computed length(s), then N34 should be used with actual length adjusted with stuffing.
- BOOL AF_DI N35 is used for discontinuity_indicator. DWORD N35 is the repetition rate of the discontinuity_indicator. If N35 is set to 0, the discontinuity_indicator preferably exists only once, in the first transport packet, otherwise it repeats on every N35 transport packets (if N35 is 1, discontinuity_indicator is repeated in every TP).
- BOOL AF_RAI N36 is used for random_access_indicator. DWORD N36 is the repetition rate of the random_access_indicator. If N36 is set to 0, random_access_indicator preferably exists only once, in the first transport packet, otherwise it repeats on every N36 transport packets (if N36 is 1, random_access_indicator is repeated in every TP).
-
- BOOL AF_PCR_FLAG N37 N38 stands for PCR_flag with initial value encoded in the LONGLONG N38 and the repetition rate defined by DWORD N37. If N37 is set to 0, PCR exists only once, in the first transport packet, otherwise it repeats every N37 transport packets. N38 should increase step by 100000/N35;
- BOOL AF_OPCR_FLAG N39 stands for OPCR_flag with the repetition rate defined by DWORD N39. If N39 is 0, OPCR exists only once, in the first transport packet, otherwise it repeats every N39 transport packets. Because our ASIC doesn't extract OPCR value, OPCR can be set to the latest PCR value.
- BOOL AF_SP_FLAG N40 N41 stands for the splicing point flag. BYTE N40 indicates initial splice_countdown value and DWORD N41 is its repetition rate. If N41 is set to zero, splicing_point_flag preferably exists only once, in the transport packet with splice_countdown set to 0 (splicing point), otherwise it repeats on every N41st transport packets. Term: N41>N40;
-
- BOOL AF_TPD_FLAG N42 [N43] [RANDOM] [“TextString4”] stands for the transport_private_data_flag; transport_private_data_length is defined by BYTE N42. Data content can be set to increasing numeric value defined by BYTE N43 (step is +1), or to the random byte numeric string, or to the ASCII text string with 0xFF padding to the length N42. Private data of the adaptation field are inserted only once, in the first transport packet. All other TP packets have no AF private data.
- Last line BOOL AF_EXT_FLAG N44 stands for adaptation_field_extension_flag with adaptation_field_extension length defined by BYTE N44. Although our ASIC doesn't process extension field (just skips over), ltw_flag, piecewise rate_flag and seamless_splice_flag should be set to 0 creating extension field with reserved content only. Extension of adaptation field are inserted only once, in the first transport packet. All other TP packets have no extension of AF field.
- In operation, if FILE specifies a filename of a file containing MPEG-2 video elementary stream that is packetized into PES (first step) and then into TP (second step) formats. Proposed extensions of the created streams are .PES and .TP; If FILE is not specified, PES payload shall obey directive:
- where the payload is filled with random content (if RANDOM is given), known ASCII string (if given as “some text . . . ”) or as padding with 0xFF;
- When building PES packets from specified ES stream fields, the composer determines the values of PES_DAI, PES_PTS_FLAG, PES_ESCR_FLAG, PES_ESRATE_FLAG, and PES_PAYLOAD_LENGTH, which depends on the content of video ES stream, and are provided by the transport stream generating software, (i.e.
composer 4520 ofFIG. 45 ). For example, presentation time stamping must exist at every 0.7 sec or more frequently. The packetizer needs to know the bit rate of the video ES stream in order to generate PTS, ESCR, and ESRATE fields. In one mode of operation, the bit rate is obtained from the elementary stream file. PES_PPSC is generated in every PES packet if PES_PPSC request is found in the script file. PES_PSTD is generated only once, in the first PES packet. - At the transport layer, the length of the adaptation field is determined by existence of optional flags. PCR samples have to exist at least 10 times per second and be inserted in correlation with targeted bit-rate of transport packets (higher than video bit-rate); random_access_indicator shall be inserted at the start of every GOP, sequence or I frame. Continuity_counter is regular with random errors if TP_CC_RANDOM is selected. Payloads of generated transport packets are determined by existence of adaptation field.
- In the case of video stream, the composer operates to set the following fields as indicated:
-
- PES_DAI is set on PES packet containing start of video sequence, group of pictures or I frame.
- PES_PTS is set on every I frame and PTS value is calculated from initial given value and bit-rate of the stream.
- PES_ESCR is set on every 25th packet based on 90 KHz timer.
- PES_ESRATE is set on PES packet containing start of video sequence.
- The first sequence of test streams verifies basic operations of the transport stream in ideal, error free stream environment. At the transport level this means:
-
- correct value of sync byte (0x47) on every packet
- no TEI error signaling
- payload_unit_start_indicator signaled in one and the first transport packet
- transport scrambling_control set to ‘00’ indicating no scrambling at the transport layer level
- no discontinuities on continuity counter
- accurate adaptation_field_length (adaptation field)
- exact splice_countdown value (adaptation field)
- incremental, linearly increasing PCR value in sub-sequent packets with PCR rate of 10 per second, at least (adaptation field)
- script file based, user defined ASCII private data string with exact transport_private_data_length
- content of extension area in the adaptation field is not relevant, stuffing area is also not relevant, because AFP parser is not processing more than private data record of adaptation field (ignores adaptation_field_extension_flag and stuffing_bytes)
At the underneath PES level no-error requirements are: - correct packet_start_code_prefix (0x000001)
- stream_id as 0xE0 . . . 0xEF
- exact PES_packet_length
- PES_scrambling_control set to ‘00’ indicating no scrambling
- exact PES_header_data_length
- incremental, linearly increasing PTS value in sub-sequent PES packets in PTS or PTS_DTS field
- exact previous_PES_packet_CRC value
- script file based, user defined ASCII private data string
- no pack header
- optional extension field with exact PES_extension_field_length
- exact stuffing record
- exact length of the payload record with incremental byte values from 0x00 towards 0xFF
- For transport layer test, header of the PES packet should contain only first 9 bytes (no flags set to 1) with PES payload starting from 0x00 towards 0xFF and rolling over. For PES layer tests, transport packets should not contain any indicators or flags of second byte of adaptation field set to 1. Only exception is when testing combined private data at the transport and PES layer. Length of adaptation fields should be adjusted by stuffing. Verification methods are:
- FCV—file comparison verification; IRV—interrupt response verification; GKV—good, known value based verification;
The following tables list specific error free test streams: -
TABLE 3 Comments: Transport Layer Test (AF = 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 175) BasicFrame Parser & Video FIFO Simple test with one transport packet, transferred to frame memory. To test; FCV method test immediate parsing with a short PES packet with 9 byte header encapsulated in one transport packet BasicMain Router and FIFO test; Simple test with one transport packet, transferred to system memory. To FCV method; test routing of single transport packet with payload set to FF (PES irrelevant) to the system memory. -
TABLE 4 Comments: Transport Layer Test (AF = 0, M 1 = 1,Test Name Goal & Verification PES_PAYLOAD_LENGTH = 5775) SyncLock Framer and synchro A stream 33 transport packets long all containing single PID. Thelocking logic; FCV; purpose of this test is to insure that framer synchronization is achieved IRV (SyncLock). immediately or after 1 to 31 packets or immediately, on a first packet based on a SyncLock register set-up. -
TABLE 5 Comments: Transport Layer Test (AF = 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 5775) PIDFilter PID comparator and MPEG-2 transport stream of 1,056 transport packets long to test all 32 PID syntax element; PIDs and acquisition of up to 32 packets per PID, after programmable FCV; framer lock (up to 32 packets) is established. Must contain 32 different PIDs. -
TABLE 6 Comments: Transport Layer Test (AF = 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 17500) VideoPayload Transport packet pay- A transport stream of 100 single video PID transport packets with no load extraction; FCV; adaptation fields. To test processing of payloads only (adaptation_field_control = ‘01’). -
TABLE 7 Comments: Transport Layer Test (AF ≠ 0, M1 = 0, Test Name Goal & Verification no PES stream) VideoAF Adaptation field A transport stream of 100 single video PID transport packets with extraction; FCV; adaptation fields only. To test processing of adaptation fields only PCR based GKV; (adaptation_field_control = ‘10’). AF should contain PCR_flag, OPCR_flag and PCR + OPCR_flag, alternating sequentially. PCR field should be encoded to some known value to compare against. -
TABLE 8 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 15500) VideoAF_and AF and payload A transport stream of 100 single video PID transport packets with Payload extraction; FCV; adaptation fields PCR based GKV; and payloads. AF should contain PCR_flag, OPCR_flag and PCR + OPCR_flag, alternating sequentially. Payload should contain some known value. -
TABLE 9 Comments: Transport Layer Test (AF ≠ 0, M1 = 0, Test Name Goal & Verification no PES stream) VideoSplice splicing_point_flag, A transport stream of 1,000 single video PID transport packets with splice_countdown; splicing_flag, splicing_point and video PID change after splicing point. FCV; IRV; splice No packet errors. AF should contain splicing_point_flag only. To test countdown based GKV ‘auto splicing’ feature on video PID. -
TABLE 10 Comments: Transport Layer Test (AF ≠ 0, M1 = 0, Test Name Goal & Verification no PES stream) VideoAF transport_private— A transport stream of 1,000 single video PID transport packets with PrivateData data_flag; private data in the AF. To test extraction and transfer of private data transport_private— to a system memory. AF only has transport_private_data_flag. data_length; FCV, IRV; -
TABLE 11 Comments: Transport Layer Test (AF ≠ 0, M1 = 0, Test Name Goal & Verification no PES stream) STCProcess IRV on PCR_flag; To test extraction of the PCR fields and STC allignment with 27 MHz program_clock— generation over the M/N divider. A single video PID stream of at least reference_base; 10,000 transport packets is required. AF only has PCR_flag. program_clock— reference_extension; -
TABLE 12 Comments: Transport Layer Test (AF ≠ 0, M1 = 0, Test Name Goal & Verification no PES stream) PCR IRV on discontinuity— A single video PID stream of at least 10,000 transport packets is Discontinuity indicator; PCR based required. AF only has PCR_flag. A regular PCR discontinuity GKV; (discontinuity_indicator set to 1) should occur with no CC errors and a new PCR value should start from 0 (much different than the value of the latest sample). To test extraction of a new timebase. -
TABLE 13 Comments: Transport Layer Test (AF ≠ 0, M1 = 0, Test Name Goal & Verification no PES stream) Legal CC IRV on discontinuity— A single video PID stream of at least 100 transport packets is required. Discontinuity indicator; mismatch AF only has PCR_flag. In adaptation field a discontinuity_indicator has on continuity_counter to be set to 1 with CC errors but no PCR sample in the same packet. ASIC should not generate CC error interrupt. -
TABLE 14 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 0) VideoAFPES TP: adaptation_field— A transport stream of 100 single video PID transport packets with one StuffingData control == ‘10’; PES packet. No flags of a PES header should be set to 1. Stuffiing only AF: stuffing_byte; in AF & PES, no payload. PES: stuffing_byte; No extension field in the AF (adaptation_field_extension_flag = 0); stream_id should be set to 0xE0. No interrupt should occur; All transport packets and full PES skipped. -
TABLE 15 Comments: Transport & PES Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 17500) VideoAFPES TP: data_byte; A transport stream of 100 single video PID transport packets with one PayloadData PES_packet_data_byte; PES packet. No flags of a PES header should be set to 1. No stuffiing in AF or PES header, payload only in all transport packets and in one full PES packet. -
TABLE 16 Comments: PES Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 17400) VideoAFPES Single IRV on ‘new A transport stream of 100 single video PID transport packets with one StuffPayload PES header available’ PES packet. No flags in AF or PES header should be set; 100 PES stuffing bytes and payload after. -
TABLE 17 Comments: PES Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 1000) PES Header IRV on extraction of Single PID transport streams with individual PES header data PES header fields; (data_alignment flag, copyright, original_or_copy, additional_copy_info, ESCR, ES_rate, DSM_trick_mode, previous_PES_packet_CRC, P-STD_buffer_size). To test parsing of various PES header elements in the same PES header. -
TABLE 18 Comments: PES Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 15500) VideoPTS1 PTS_DTS_flags = ‘10’ To test extraction of the PTS/DTS field and interrupt signaling on VideoPTS2 PTS_DTS_flags = ‘11’ video PID with a single PID transport stream with 100 transport packets and one PES packet; -
TABLE 19 Comments: PES Layer Test (AF ≠ 0, M1 = 2, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 7750) Video PES_CRC_flag; A transport stream of up to 200 transport packets carrying two PES PESCRC previous_PES_packetCRC packets with no CRC16 code on first and exact CRC on second (to test PES CRC calculation); -
TABLE 20 Comments: PES Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 15800) VideoPES IRV and GKV on A transport stream of 100 single video PID transport packets with PrivateData known PES header private data in the PES header in only one PES packet. PES header private data string. contains only PES_extension_flag and PES_private_data_flag. To test extraction and transfer of private data to a system memory. No private data in the adaptation field. -
TABLE 21 Comments: PES Layer Test (AF ≠ 0, M1 = 2, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 14800) VideoAFPES IRV and GKV on A transport stream of 100 single video PID transport packets with PrivateData known AF and PES private data in the adaptation field and PES header. Only one PES header private data packet. PES header contains only PES_extension_flag and strings. PES_private_data_flag. Adaptation field contains transport— private_data_flag. PES header must span to at least two transport packets. To test extraction and transfer of private data to a system memory. - While originating errors on transport layer, PES layer should be error-free and vice-versa. For transport layer test, header of the PES packet should contain only first 9 bytes (no flags set to 1) with PES payload starting from 0x00 towards 0xFF and rolling over. For PES layer tests, transport packets should not contain any indicators or flags of second byte of adaptation field set to 1. Length of adaptation fields should be adjusted by stuffing.
- The following tables indicate specific test streams and methods with introduced errors:
-
TABLE 22 Test Name Goal & Verification Comments: Transport Layer Test (AF = 0, M1 = 0, no PES stream) SyncErrors1 IRV on SyncLock- A stream 100 transport packets long with one PID only. These SyncDrop sequence; packets are full of random number of “sync” bytes, and bit-shifted versions of the sync byte after 4 byte transport packet header. The purpose of this test is to insure framer does not sync on wrong transport packet start code sequence. First 32 packets should have correct start code (0x47), all others should be wrong, generated as random bytes. No PES packet should exist (payload_unit_start_indicator = 0); -
TABLE 23 Test Name Goal & Verification Comments: Transport Layer Test (AF = 0, M1 = 0, no PES stream SyncErrors2 IRV on SyncLock- MPEG-2 transport stream 100 transport packets with one PID only. SyncDrop-SyncLock These packets are full of random number of “sync” bytes, and bit- sequence; shifted versions of the sync byte in the payload of the transport packet. The purpose of this test is to insure framer locks, drops and locks again on the start of MPEG-2 transport packet. First 32 packets have correct start codes, then next 32 packets has errors on start codes, all other packets are error-free and have correct start code (0x47). No PES packet should exist (payload_unit_start_indicator = 0); -
TABLE 24 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 16000) VideoTEI IRV on transport— A transport stream of 100 single video PID transport packets with error_indicator; random TEI insertion. To test acceptance or rejection of TEI packets Routing or rejection and insertion of video sequence_error_code in the video FIFO. All of transport packet. syntax elements are correct. No AF and PES packet flags. One PES packet within 100 transport packets with known payload. OthersTEI Relevant for SW parser A transport stream of 3200 transport packets (32 PIDs) with random TEI insertion. -
TABLE 25 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 175000) Duplicate continuity_counter; A transport stream of 1000 single video PID transport packets with Packets dropping of duplicate random duplicate vid. transport packets packets signaled at the continuity counter. No discontinuities on CC counter. To test dropping of second, third, etc. duplicate packets. Regular PES packet underneath. -
TABLE 26 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 175000) CCErrors random discontinuities: A transport stream of 1000 single video PID transport packets with continuity_counter of random CC errors. To test CC error detection and insertion of video vid. transport packets sequence_error code. No duplicate transport packets. CC error with payload_unit_start_indicator == 1; One PES packet. -
TABLE 27 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 175000) CCDuplicate continuity_counter; A transport stream of 1000 single video PID transport packets with dropping of duplicate random CC errors and random duplicate packets. To test dropping of vid. transport packets duplicate packets and CC error detection and insertion of video IRV on CC errors sequence_error code in video FIFO buffer. CC error with payload_unit_start_indicator == 1; One PES packet with no flags in PES header. -
TABLE 28 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 17500) Scrambled transport_scrambling— A transport stream of 100 single video PID transport packets with Transport control; rejection of random number of ‘scrambled’ packets (transport_scrambling_control |= Packet scrambled transport ‘00’ but not with payload_unit_start_indicator ==1). To test dropping packets; IRV and GKV of scrambled transport packets. One PES packet with no flags in PES on known PESpayload header and predefined (known) PES payload. -
TABLE 29 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 17500) WrongAFLenX error on adaptation— A transport stream of 100 single video PID transport packets with X ε {0, 1, 2}; field_length; adaptation_field— to test search for PES length: larger than 183 or equal to zero or larger than actual (real) packet_start_code_prefix length for 10 bytes. One full PES packet with no flags and known payload underneath. Three indipendent test streams. ASIC should skip 0 length adaptation field. -
TABLE 30 Comments: Transport Layer Test (AF ≠ 0, M1 = 1, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 15500) WrongAFPDL transport_private— A transport stream of 100 single video PID transport packets with data_flag; transport_private— private_data_byte; data_length shorter or longer for 10 bytes than actual (real) length. To test transport layer Exact adaptation— parser; IRV and GKV field_length is required. If transport_private_data_length is shorter than on known AF private actual private data content; data byte field, transport layer parser should process AF with no syntax parsing problems, only partial private data loss will occur. If the transport_private_data_length extends AF over the length specified by adaptationfield_length, transport layer parser should cut AF private data processing at the exact end of the adaptation field. If increase in transport_private_data_length goes into stuffing, some private data corruption will occure but with no failure of the transport layer parser. -
TABLE 31 Comments: PES Layer Test (AF ≠ 0, M1 = 2, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 8750) PacketStart Error on packet— Single PID transport stream of 100 transport packets carrying two full CodeError1 start_code_prefix; PES packets. Second packet should have wrong packet rejection. packet_start_code_prefix. No legal (0x000001) start code should exist in the header or payload of both PES packets. No flags in PES packets. PES parser should reject full second packet. -
TABLE 32 Comments: PES Layer Test (AF ≠ 0, M1 = 2, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 8750) PacketStart Error on packet— Single PID transport stream of 100 transport packets carrying two full CodeError2 start_code_prefix; PES packets. Second packet should have wrong Test of the false lock. packet_start_code_prefix. No legal (0x000001) start code should exist in the header or payload of first PES packets. No flags in PES packets. Payload of the second packet should have continuous sequence of start codes. False lock on correct start code should occure even if payload_unit_start_indicator is 0. -
TABLE 33 Comments: PES Layer Test (AF ≠ 0, M1 = 2, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 8750) StreamID wrong stream_id; Single PID transport stream of 100 transport packets carrying two full Error packet rejection on PES packets with stream_id on first set to 0xE0 and known payload, Stream_id mismatch. and stream_id of the second packet set to 0xF0 and known (different payload). Second packet should be rejected. -
TABLE 34 Comments: PES Layer Test (AF ≠ 0, M1 = 2, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 8750) Scrambled PES_scrambling— Single PID transport stream of 100 transport packets carrying two full PESPacket control.; FCV & GKV PES packets with PES_scrambling_control on first set to ‘00’ and on known PES payload known payload, and PES_scrambling_controlof the second packet set to ‘01’ and known (different payload). Second packet should be rejected. -
TABLE 35 Comments: PES Layer Test (AF ≠ 0, M1 = 2, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 8750) PESHeaderData PES_header_data_len Single PID transport stream of 100 transport packets carrying two full LengthErrorX IRV and GKV on PES packets with error on PES_header_data length on the second X ε {0, 1, 2}; known PES payload. packet and known PES payload. Length should be set to 0 (legal value) or value larger or smaller for 10 than exact value. Only additional_copy_info_flag should exist in PES header. -
TABLE 36 Comments: PES Layer Test (AF ≠ 0, M1 = 2, Test Name Goal & Verification PES_PAYLOAD_LENGTH = 8750) CRC16Error PES_CRC_flag; Single PID transport stream of 100 transport packets carrying two full IRV and GKV on PES packets with errors in the previous_PES_packet_CRC and known known PES payload. PES payload. To test PES CRC calculation engine. Some default and known wrong CRC value should be given. - Examples of specific script files are indicated below. In one embodiment, each script file contains one data record, and multiple script files can be combined using a basic piping function. In another embodiment, a script file can have a multiple records delineated by a record identifier.
-
-
; Test name: BasicMain PES_C PES_OOC PES_PAYLOAD_LENGTH 175 “BasicMain test - ASCII text string in the PES payload” TP_PID 1023 ; Test name: SyncLock PES_PAYLOAD_LENGTH 5775 0 TP_PID 1023 ; Test name: VideoAFPrivateData REPEAT 1000 TP_PID 1023 TP_PAYLOAD “VideoAFPrivateData test” END AF_TPD_FLAG 26 “Video AF private data” ; Test name: CRC16Error REPEAT 2 PES_CRC_FLAG A55AH PES_PAYLOAD_LENGTH 8750 0 END TP_PID 1023 TP_PAYLOAD 15 “TP payload data” AF_PCR_FLAG 1000 10 AF_OPCR_FLAG 11 AF_TPD_FLAG 15 “AF private data” ; Test name: SyncErrors2 REPEAT 100 TP_SYNC 32 32 BITSHIFTTP_PID 1023 TP_PAYLOAD BITSHIFT END -
FIG. 44 illustrates asystem 4100, which includes asystem 4110, which may be of the type illustrated inFIG. 43 , and a system, or device undertest 4120. Note that the system under test may actually be a software module being simulated in thesystem 4110. In operation, thesystem 4110 generates, and outputs the transport packet stream to the device undertest 4120, which in turn performs the demultiplexing function described herein. As a result, the data from various transport packets are provided to thememory 4124. More specifically, in accordance with the disclosure, the video packets are routed to thevideo buffer 4241, and other data packets are routed to one of a plurality of auxiliary buffers 4242-4243 based upon their respective PID. -
FIG. 45 illustrates a memory portion of thesystem 4110 ofFIG. 44 . Amemory portion 4510 stores the various data records associated with a test suite of transport data. This test suite is read by the composer software, which is stored in thememory portion 4520. The composer can store the generated transport streams in files (not illustrated) and can output the desired transport streams directly to an external device under test, or an internal simulator, which simulates a system under test. The simulator is stored inmemory portion 4530, and outputs results to one of the buffers 4541-4543. - In an alternate embodiment, the device under
test 4120 ofFIG. 44 , can provide the buffered data back to thesystem 4110 to be stored in the memory portions 4551-4553 and be compared to the data stored in the buffers 4241-4243 for verification of the external device under test to the simulated device under test. - Another tool for use with verification of the systems described herein is a simulator. The following describes such implementation of a simulator.
- The purpose of this section is to provide some guidelines for a specific implementation as how to implement MPEG-2 transport demultiplexer in C language in order to verify the parsing of transport files to the level of elementary stream. Produced elementary stream has been compared against stream generated by reference transport stream generation equipment, which, in this case, has been used as a reference transport/PES stream decoder.
- Developed C model operates on MPEG-2 transport stream files and has capabilities to parse the video PID and route up to 31 other (auxiliary) full transport packets to the maximum 15 other files. This way, the capabilities of the output interface are modeled.
- The transport parser routes video elementary stream of
PID —0 to buffer 0 allocated in the frame memory.Buffers 1 to 14 are used to route single PIDs. If more than 12 PIDs exist, PIDs above 12 are routed intobuffer 15. - The same behavior is followed on output files. If <filename>.TSP is input file name (filename of MPEG-2 multiplexed transport stream) then:
-
- filename_PID0.ES contains elementary stream of video, PID0 has been set to 4 hex digits of the video PID;
- filename_PID1.TS . . . filename_PID14 contains full packets of
PIDs 1 to 14; - filename_PID15.TS contains all other transport packets acquired on a PID match from
PID numbers 13 to 31.
- Again, PIDx has a 4 hex digits which represents actual PID value. Video PID is identified by processing PAT/PMT PSI tables (if exist in the transport files).
- To speed up and simplify a C model development, all file I/O and user interface was implemented as the multithreaded C console application. Beside a main loop function, a monitor thread has been created to gather statistics about processor utilization. Also, a serial bit-stream framing process and a
serial CRC 16 process were simulated. This is under conditional compilation because it slows down a processing speed of the model. Model simulates operation of the framer synchronization logic, transport packet processor (TPP) and PES header processor (PESP). Under Visual C/C++ environment, a console application is defined with debug multithread option and libcmt.lib library. With option to ignore all default libraries. - Transport packet based parsed data are saved in the memory buffer. The content of the buffer is routed to one of the output files at the end of the current transport packet (end of TPP) or at the time of the private data extraction (end of AFP or inside PESP). The output FIFO of developed ASIC works the same way. If its length is less than one packet, it will request a read-out after a threshold is reached.
- The following naming convention applies to all interface signals, interface buses, internal variables, registers and counters of TPF, TPP or PESP units.
-
BOOL oBitXXXX_SignalName; This is used for any digital output signals, XXXX = (TPF, TPP, AFP, PESP}; For example: oBitTPF_InSyncSignal, oBitTPP_Pusi, etc. unsigned char oBusXXXX_BusName; This is used for any digital output bus signals, XXXX = {TPF, TPP, AFP, PESP}; For example: oBusTPF_Data, oBusTPP_PidIndex, etc. BOOL iSignalXXXX_Name; Internal synchronization signal (internal to XXXX unit). For example: iSignalTPP_VideoCC, iSignalTPP_PcrCC, iSignalTPP_Header; unsigned char iRegXXXX_RegName; Internal register (internal to XXXX unit and usually not visible to programmer). unsigned char iCntXXXX_CntName; Internal counter (internal to XXXX unit and usually not visible to programmer). - MPEG relevant data extracted from transport or PES headers (usually flags) were named according to their original ISO138181-1 names to allow easier understanding of the parsing logic and operations. For example: discontinuity_indicator, random_access_indicator, etc. All parsing engines were designed as byte oriented state machines. The objective is to minimize the number of interface signals and buses between them and provide independent, self-contained behavior and achieve:
-
- Autonomous VHDL design and simple verification.
- Independent, concurrent work on TPF, TPP & PESP parsing units by simultaneous allocation of four design engineers.
The transport packet framer portion of the simulator includes following variables:
-
/* Interface signals of the transport packet framer (TPF) ------------------------------------ */ BOOL oBitTPF_PacketStartSignal, oBitTPF_InSyncSignal, oBitTPF_Irq; /* Four possible states of a Transport Packet Framer (TPF) -------------------------------- */ #define FRAMER_STATE_SYNC_LOST 0 #define FRAMER_STATE_SYNC_SEARCH 1 #define FRAMER_STATE_SYNC_VERIFY 2 #define FRAMER_STATE_SYNC_LOCK 3 /* Transport Packet Framer ************************************************ * * Next group of variables should be used for TPF only, not visible to other blocks ----- */ unsigned char iRegTPF_Framer State; unsigned char iCntTPF_ByteCnt, iCntTPF_SyncLock, iCntTPF_SyncDrop; iRegTPF_FarmerState records one of the four states of the framer. iCntTPF_ByteCnt is modulo 188 local packet byte counter. iCntTPF_SyncLock is lock counter. iCntTPF_SyncDrop is drop counter. - Signal oBitTPF_PacketStartSignal is active for a full byte time of the first byte (0x47) of the transport packet and is used to synchronize a transport packet parser (whose internal byte counter is set to 0).
- Signal oBitTPF_InSyncSignal is activated at the start of the transport packet when transport frame synchronization is achieved. It is deactivated after the loss of synchronization. These events also generate interrupt request (IRQ) on a separate line oBitTPF_Irq. This signal enables further processing of the transport packet parser. When oBitTPF_InSyncSignal is at its inactive level all further processing is disabled.
-
-
/* Interface signals of the Transport Packet Parser (TPP) ---------------------------------- */ unsigned char oBusTPP_PidIndex; unsigned char oRegTPP_Header1, oRegTPP_Header2, oRegTPP_Header3; BOOL oBitTPP_Irq, oBitTPP_VideoCC, oBitTPP_PcrCC; BOOL oBitTPP_AFStartSignal, oBitTPP_PusiSignal; /* Seven possible states of a transport packet parser (TPP) with fix assignments */ #define TP_PARSER_STATE_OFF 0 #define TP_PARSER_STATE_READY 1 #define TP_PARSER_STATE_VIDEO_AF 4 #define TP_PARSER_STATE_VIDEO_PES 2 #define TP_PARSER_STATE_OTHERS_FULLPACKET 3 #define TP_PARSER_STATE_OTHERS_AF_PCR_ONLY 5 #define TP_PARSER_STATE_OTHERS_AF_PCR_ROUTE 6 /* Transport Packet Parser *********************************************** * * Next group of variables should be used for TPP only, not visible to other blocks --- */ unsigned char iRegTPP_ParserState, iCntTPP_AFLength, iCntTPP_ByteCnt; unsigned char iCntTPP_VideoCC, iCntTPP_PcrCC, iCntTPP_DeltaCC; BOOL iSignalTPP_VideoCC, iSignalTPP_PcrCC, iSignalTPP_Header; unsigned short int PID; unsigned char adaptation_field_control, continuity_counter; BOOL transport_error_indicator, payload_unit_start_indicator; - Bus signal oBusTPP_PidIndex (5 bits) is used to indicate which of 32 PIDs are currently active (
PID —0 is reserved for video). This signal is used to access appropriate PID control register and determine 1 of 16 output paths for routing of parsed data or full transport packets. - Eight bit internal registers oRegTPP_Header1, oRegTPP_Header2, oRegTPP_Header3 are used as a scratch pad registers to hold
bytes PIDs 1 . . . 31 is selected, or if there are any private data in the adaptation field or a PES packet header within a current transport packet, content of those 3 internal registers is used to reassemble a packet. - Digital output oBitTPP_AFStartSignal synchronizes byte counter of AFP parser.
- Digital output oBitTPP_PusiSignal synchronizes byte counter of PES parser.
- Internal register iRegTPP_ParserState works as a state register.
- Internal counter iCntTPP_ByteCnt is transport packet byte counter which determines a parsing logic on transport packet header and fifth byte (length of the adaptation field, if one exists).
- Transport Packet Parser (TPP) can be in one of 7 states. State assignment is done at the end of reception and processing of the 4th byte of the transport packet header or at the end of adaptation field. State assignment should not be changed due to simple verification of
states FIG. 46 shows a state diagram of the TPP parser. Next states exist: - TP_PARSER_STATE_OFF (0) when it is completely disabled and the current packet is ignored. This occurs in the case of wrong packet start code, PID mismatch, scrambling at the transport packet level or illegal adaptation field indicator value (‘00’). All further parsing logic is disabled until the start of next transport packet.
- TP_PARSER_STATE_READY (1) is a state after a start code verification (0x47). From this state, parsing logic can step back to TP_PARSER_STATE_OFF (in the case of PID mismatch, scrambling at the transport packet level or illegal adaptation field indicator value (‘00’) or it can advance into one of five next processing state:
- TP_PARSER_STATE_VIDEO_PES (2) is a state of parsing useful payload of the transport packet carrying a video stream.
- TP_PARSER_STATE_OTHERS_FULLPACKET (3) is a state where a full transport packet is routed to a system memory after a PID match.
- A continuity counter check exists for a video PID. CC check has to detect CC samples on duplicate transport packets, 15 to 0 rollover, signaled discontinuities on CC counter and real discontinuities when a few transport packets are missing due to uncorrectable errors in the communication channel. Suggested algorithm calculates a first difference between a stream CC value and a current value of the CC counter BEFORE it is being incremented. This yields to a less complex algorithm and less expensive HW implementation than a method based on the first increment of the local CC counter and comparison later. If delta is 0 it means that there is a duplicate transport packet, which should be ignored by setting a parsing engine from READY to OFF state. If delta has a value of 1, thereby indicating a regular condition, a local CC counter may be incremented. If delta is 15 it means a rollover and a counter value is assigned to a stream value (0). Any other value means CC error and local counter is initiated from a stream CC value, so this event preferably is only once signaled. This behavior is illustrated on a next set of continuity counter values:
- The PES parser includes the following variables:
-
/* Interface signals of the PES Parser (PESP) ------------------------------------------------- */ BOOL oBitPESP_PrivateDataFlag, oBitPESP_Irq; /* Four possible states of a PES packet parser ------------------------------------------------- */ #define PES_PARSER_STATE_READY 0 #define PES_PARSER_STATE_HEADER 1 #define PES_PARSER_STATE_STUFFING 2 #define PES_PARSER_STATE_PAYLOAD 3 / PES Packet Parser ***************************************************** * * Next group of variables should be used for PESP only, not visible to other blocks -- */ unsigned char iRegPESP_ParserState, iCntPESP_HeaderLength; unsigned short int iCntPESP_ByteCnt, iCntPESP_LocalByteCnt, iCntPESP_LocalPTSByteCnt; BOOL PTS_DTS_flag, PTS_flag; BOOL ESCR_flag, ES_rate_flag, DSM_trick_mode_flag; BOOL additional_copy_info_flag, PES_CRC_flag, PES_extension_flag; /* In the extension field of the PES header -------------------------------------------------- */ BOOL PES_private data flag, pack header field flag; BOOL program_packet sequence counter flag; BOOL P_STD_buffer_flag, PES_extension_flag_2; - PES Parser (PESP) is organized as a state machine with only 4 states, defined by the state register iRegPESP_ParserState:
- PES_PARSER_STATE_READY (0) that is intermediate state after reset or errors in header detected by parsing engine. This essentially allows self-synchronization after errors and search (hunting) for PES packet start code (0x000001). Depending on the current byte value, local byte counter is set to 0 or 1 (if pattern 0x00 is being detected). Stream conditions that turn PESP engine to PES_PARSER_STATE_READY are:
-
- wrong packet start code.
- wrong stream_id (different than 0xBD as
private_stream —1, 0xEX where Xε{0, 1, . . . 15} as MPEG video stream number, 0xF2 or DSM CC stream, 0xF2-0xF9 but not 0xF8); - stream_id mismatch (if instructed to process stream_id in the video PID control register).
- syntax error on 2 ms bit positions of
byte 6 of PES header. - scrambled payload of the PES packet (as indicated by PES_scrambling_control of byte 6).
- PES_packet_length field (4th and 5th bytes of PES header) is not acquired and the actual length of the PES packet is not verified because in a transport stream environment this field usually has a legal value of zero (unbounded). Processing of this field would require 16 bit counter and check logic if stream value is different from 0.
- PES_PARSER_STATE_HEADER (1) is the parsing state where the PES packet start code detection is taking place. First 9 bytes of the PES header are always parsed. All flags within 8th byte are saved and a PES_header_data_length from 9th byte is saved in the local byte counter iCntPESP_HeaderLength and is used to identify end of optional stuffing field and start of the PES payload that contains elementary video stream. For byte counting, which identifies bytes within PES header, local counter iCntPESP_ByteCnt is used. PTS values from the PTS or PTS_DTS field are extracted and saved. PTS byte count, managed with the iCntPESP_LocalPTSByteCnt is saved and transferred to the video decoder's compressed video bit-stream buffer. This counter is incremented only when processing a PES payload. After saving all 8 flags from 8th byte and PES_header_data_length field, parser is processing optional fields (PTS, ESCR, ES_rate, DSM, additional_copy_info and CRC) by using iCntPESP_LocalByteCnt as local byte counter which keeps tracking the byte position inside optional field of the byte aligned PESP. Reserved data from the extension field are ignored. P-STD_buffer_size is the very last parsed field within extension area of PES header.
- PES_PARSER_STATE_STUFFING (2) is the parsing state where optional, variable length, stuffing field at the end of PES header is processed (skipped entirely). If 9th byte of PES header (PES_header data_length) is zero or if, after parsing a PES header, local counter iCntPESP_HeaderLength has a value of 0 indicating that there is no stuffing, parser advances to the fourth and last state:
- PES_PARSER_STATE_PAYLOAD (3) is a parsing state where a payload of a PES stream carrying ES video is being routed byte by byte to the video FIFO and then to the frame memory. In this process only a PTS byte count is refreshed and a CRC engine is turned on. At the present moment, payload is not verified against PES_packet_length field.
FIG. 47 shows the state machine of the PES parser. -
FIGS. 48 to 53 illustrate a specific embodiment of the present disclosure for error detection and handling.FIG. 48 illustrates an alternative embodiment of a portion of the transport packet demultiplexer illustrated inFIG. 7 . Specifically, the embodiment ofFIG. 48 includes an additional signal labeled V_ERROR being provided to thePESP 730 from thetransport packet parser 720, along with the VSTART and VIDEO signals. - Operation of the system portion illustrated in
FIG. 48 is better understood with reference to the method ofFIG. 51 , and specific system implementations ofFIGS. 49 and 50 . Atstep 4701 ofFIG. 51 , an error recognition feature is enabled. In a specific embodiment, this includes enabling the detection of a specific type of error by asserting an interrupt field of a register location. Specific types of errors capable of being detected include errors associated with transport packet streams and errors associated with packetized elementary streams. - In accordance with the present disclosure, specific errors are indicated in various registers illustrated in
FIGS. 52 and 53 . Furthermore, specific embodiments can use status codes indicating specific error types. Status codes indicating errors associated with a transport packet stream include: -
- 000—to indicate no error has occurred;
- 001—to indicate a video PID is received, and the transport packet is scrambled;
- 002—to indicate and illegal adaptation field control bit field occurs, such as ‘00’
- 003—to indicate a duplicate video transport packet has been received;
- 004—to indicate an illegal length of the adaptation field;
- 005—to indicate an illegal length of adaptation field private data.
Status codes indicating errors associated with a video PES include: - 000—to indicate no error has occurred;
- 001—to indicate a received video stream ID does not match a video stream ID specified in a system register;
- 002—to indicate the PES header includes a non-video stream ID (i.e. not in the range from 0xE0 to 0xEF);
- 003—to indicate a syntax error, such as a value other than
binary value 10 on the first two bits of the sixth byte of the PES header; - 004—to indicate the PES payload is scrambled, as indicated in the PES scrambling control field.
- The errors listed in the status codes above are based upon specific information associated with the headers of the specific packets. For example, in the transport packet header, the value of the transport scrambling control bits can be used indicate an error when the transport packet payload is scrambled and decoding device expects a clear, non-encrypted stream.
- In addition to the specific errors indicated by the status codes, a transport packet having its transport error indicator bit asserted can be identified as an error, and in a specific embodiment can have it own error code.
- Another condition that can be enabled and recognized by the system as an error is the presence of TError signal of the physical stream interface illustrated in
FIG. 8 . In a specific embodiment different errors associated with the TError signal can be recognized depending upon whether the TError signal is asserted before or after reception of the transport packet's PID. - Other error types include CRC errors for transport or PES packets, and continuity counter errors.
FIG. 49 illustrates a system portion for detecting when a continuity discrepancy such as a continuity counter error occurs. For example, when the current transport packet continuity counter value is hexadecimal value 0x7, and the previous transport packet continuity counter value was hexadecimal value 0x5, the continuity counter check portion 4501, ofFIG. 49 , will detect that the video transport packet having thehexadecimal value 6 was not received. This is known as a continuity counter error. Likewise, the continuity counter check portion can detect when a duplicate packet is received. - Yet another error type includes an error based upon an error rate of one or more of the above identified errors. For example, a transport error rate and/or a continuity counter error rate can be maintained. One method of determining an error rate is to subtract a count indicating the total number of packets having a specific error type from the total number of transport packets received during the same period, and dividing the result by total number of packets. This provides a calculated rate, which can be compared to desired error rate to identify an error condition. The calculation of such an error rate can be controlled, or requested, by an external system. For example, the external host processor can request error rates be calculated based upon a request from the transmitting office or head-end device.
- At
step 4702 ofFIG. 51 , a packet is received. A received packet can include a transport packet, a PES, or a different packet type. Atstep 4703, the packet is parsed, or otherwise analyzed to determine if an error, such as one of the types described previously is associated with the packet. - Detected errors can be handled by one or more methods. When an error occurs in a transport packet, a signal labeled V_ERROR is generated by the
TPP 720, seeFIG. 48 , and provided to thePESP 730.FIG. 49 illustrates a specific implementation for performing the function of generating the V_ERROR signal. In the example, illustrated, the generation of the V_ERROR signal is gated to the VIDEO signal such that it is only provided when the current transport packet is a video packet. In addition, the generation of the V_ERROR signal is gated to the detection of one or more errors. Specifically illustrated are errors for the transport error indicator being asserted or a continuity counter error occurring. The occurrence of one of these errors or any other transport stream error can result in V_ERROR being asserted. In a similar manner, a PES header error signal can be generated by thePESP 730. - At
step 4704, an error recovery operation occurs. An error recovery operation includes disregarding the packet data, as well as providing notification to one or more processors, which in turn may take specific actions. In one example, upon receiving the V_ERROR signal from thetransport packet parser 720, the sequence error code enabledportion 4601 of thePESP 730, illustrated inFIG. 50 , provides a selected signal to themultiplexor 4603 so that the sequenceerror start code 4602 is provided to thedata output controller 756. In the specific embodiment illustrated, the sequenceerror start code 4602 storage location is set to hexadecimal value 0x000001B4. - In one embodiment the sequence error start code value is provided to the data out
controller 756 instead of compressed video data when the error occurs. In other embodiments, the sequence error start code value can precede or overwrite a portion of the compressed payload data associated with the packet. As illustrated inFIG. 50 , this error code is provided to thedata output controller 756, which in turn provides the compressed video stream, which now includes the sequence error start code, to a video decode processor. In a specific implementation, a sequence error start code is transmitted under the following circumstances: when a TError signal is detected after the PID is received; when a continuity counter error is detected and the transport packet discontinuity bit is not set; when a transmit error indicate bit is asserted; if any transport packet header error is detected. - Another method for handling errors is to disregard the data packet. This can be the sole data handling remedy, or can be combined with other data handling remedies. Disregarding the payload data can include not further parsing the header, and/or disregarding the payload of the packet. In specific implementation, a transport packet is dropped or ignored under the following error conditions: when it is determined that a transport packet has a duplicate continuity counter value as the previous transport packet of the same PID; when the transport error indicator is set; when TError signal is asserted before the PID is received;
- Another method for handling errors is to send an interrupt to a system, or host processor. In a specific implementation, a generic interrupt is provided, whereby the system can query registers associated with the present disclosure to determine the error. For example, the system can read a register having the status codes describe above. In another embodiment, individual interrupts, or interrupts with vectors can be applied. In a specific implementation, an interrupt is generated for the following error conditions: when a continuity counter error is detected and the transport packet discontinuity bit is set; when a CRC error occurs; when a predefined error rate condition is met (i.e., specific error rate, or rates, is above a predefined value).
- Referring now to
FIG. 55 , a block diagram illustrating sets of functional components within a Section Parser is shown, according to one embodiment of the present invention. Acomparator 5507 is used to process and compare packets with specific section fields to determine whether to accept the packets or discard them. - The values of the section packet can be received from FRAMER_DATA. The values of the received section packet are latched into a register or set of registers (not shown) in
Section Parser 755. In one embodiment,comparator 5507 includes filters 5510-5517. Filters 5510-5517 are used to analyze section fields in the section packet. The fields define what data presented in the section packet specifically refers to. Each filter 5510-5517 handles a different field value to compare with the fields in the section packet. In one embodiment, field values are stored in registers, as described in Tables 38-40, within filters 5510-5517 for comparison to fields in the packet. For example, a table ID register, such as FilterTableID register in Table 38, can be used in thetable ID filter 5511. Packets, which pass through the enabled filters from filters 5510-5517, are passed to a host system through signal SP_DATA. SP_DATA may be provided to the buffer controller 760 (FIG. 7 ). - In one embodiment,
comparator 5507 includes atable PID filter 5510.Table PID filter 5510 selects a specific packet identifier (PID) to filter on. When enabled,table PID filter 5510 will pass only packets with a specific PID value stored in a register, such as EnableFilterOnSectionPID register described in Table 37. Packets with PIDs that do not match the specific PID value are discarded. In one embodiment,table PID filter 5510 is enabled or disabled through tablePID filter switch 5520. TablePID filter switch 5520 is used to either allow data to pass over filtertable PID filter 5510 or to be processed throughtable PID filter 5510. TablePID filter switch 5520 can be configured through values programmed toEnableFilterOnSectionPID register 5530. In one embodiment, writing a section PID field value intoEnableFilterOnSectionPID register 5530 enablessection PID filter 5510. A null PID value, such as 4095, can be stored inEnableFilterOnSectionPID register 5530 to disablesection PID filter 5510, through sectionPID filter switch 5520. - In one embodiment,
comparator 5507 also includestable ID filter 5511. All packets include a table ID field. The table ID field is an 8-bit field specifying which of the PSI or SI tables with which the section data is related to. Accordingly, thetable ID filter 5520 can choose to filter sections containing data from only one specific table, using a specific table ID value stored in a register, such as FilterTableID register in Table 38. AnEnableFilterOnTableID register 5531, as described in Table 37, can be used to enable/disabletable ID filter 5511, through tableID filter switch 5521. - In one embodiment,
comparator 5507 includes sectionsyntax indicator filter 5512. Data carried on the packetized stream may be provided using different syntax types. The sectionsyntax indicator filter 5512 is used to identify section packets with a specified syntax indicator field value. The syntax field of the received section packet is compared to a specified value in a syntax indicator field register, such as FilterSectionSyntaxIndicator register described in Table 39. A host system (not shown) can be provided with packets including only a specified syntax. The host system can use the filtered section packets to determine the appropriate syntax to use and configure a system application accordingly, allowing the system to accommodate for the syntax or semantics of the packetized stream data provided. A value written to an EnableFilterOnSectionSyntaxIndicator register 5532, as described in Table 37, can be used to enable/disable sectionsyntax indicator filter 5512, through section syntaxindicator filter switch 5522. - In one embodiment,
comparator 5507 includes a sectionprivate indicator filter 5513. Section packets may include an active private indicator field. The private indicator field provides information about the format of the data being represented in the section packet. For example, MPEG streams use a value of 1 for the private indicator field. The sectionprivate indicator filter 5513 can be used to selectively pass section packets from specific types of packetized streams. Sectionprivate indicator filter 5513 compares the value of the private indicator field in the section packet with a value stored in a register, such as FilterSectionPrivateIndicator register described in Table 39. A value written to anEnableFilterOnSectionPrivateIndicator register 5533, as described in Table 37, can be used to enable/disable sectionprivate indicator filter 5513, through section private indicator filter switch 5523. - In one embodiment,
comparator 5507 includes aversion number filter 5514. A version number field is included in all packetized stream packets. As tables are updated, different versions of the same table may be present within the packetized stream packet. To complete all the section data associated with a single table, the table data is taken from sections bearing the same version. Accordingly, section packets include the version number field to indicate which version is being presented in the packet. To allowSection Parser 755 to selectively parse only section packets with a particular version number, theversion number filter 5514 is used.Version number filter 5514 may compare the value of the version number field of the received section packet to a value of a version number stored in a register, such as FilterSectionVersionNumber register in Table 39, to accept only section packets with a selected version number. A value written to anEnableFilterOnVersion number register 5534, as described in Table 37, can be used to enable/disable sectionversion number filter 5514, through versionnumber filter switch 5524. - In one embodiment, the
comparator 5507 includes a currentnext indicator filter 5515. Section packets always include a current/next field. The current/next field indicates whether the data provided in the section packet is applicable to the status of the current set of section data or to the next set of section data. If the current/next field indicates the section information related to the current set of data, a host system, through the buffer controller 760 (FIG. 7 ), can gather the status of the current section packet to know how to properly handle the current set of data. Alternatively, the current/next field may indicate a section packet relates to the next set of data on the packetized stream. Accordingly, the host system may need to know the table information of the next set of data to properly accommodate to a program change or a network upgrade or maintenance. Currentnext indicator filter 5515 can be used to pass data related specifically to the current packet or related to future packets, allowing the host system to configure itself appropriately. The currentnext indicator filter 5515 can compare a value of the current/next field to a value of a current/next register, such as FilterSectionCurrentNextIndicator register described in Table 39. A value written to anEnableFilterOnCurrentNextIndicator register 5535, as described in Table 37, can be used to enable or disable currentnext indicator filter 5515, through current nextindicator filter switch 5525. - In one embodiment, the
comparator 5507 includes asection number filter 5516. As previously discussed, PSI and SI table data is represented using the section packets. In one embodiment, the sizes of the section packets are limited. For example, the maximum size of the section packets, as defined by the MPEG-2 standard (ISO 13818-1), is 1024 bytes or 4096 bytes, depending on a section syntax indicator. If the table data exceeds the maximum, the table data must be sent over multiple section packets. The section packets include a section number field indicating which portion of the entire table data the section packet represents. In one embodiment, the host system specifies a section number that is needed to complete the table from the data by storing the value of the section number in a section number register, such as FilterSectionNumber register described in Table 38. Thesection number filter 5516 compares the value of the section number field in the section packet to the specified section number stored in the section number register to determine whether to pass the section packet to the host system or to discard the section packet. A value written to an EnableFilterOnSectionPrivateIndicator register 5536, as described in Table 37, can be used to enable/disable sectionsyntax indicator filter 5516, through sectionnumber filter switch 5526. - In one embodiment, the
comparator 5507 includes a section payload filter 5517. The payload of the section packet includes the actual table data being carried by the section packet. In one embodiment, section payload filter 5517 compares 8 bytes of the section payload to values stored in a set of payload registers. A FilterSectionPayloadHi register, as described in Table 40, may be used to compare the first 4 bytes of the payload to a specified value. A FilterSectionPayloadLow register, as described in Table 40, may be used to compare the last 4 bytes of the payload to a specified value. If the values of the specified payload registers and the values of the associated payload portions in the section packet are equivalent, the section packet is passed to the host system, through the buffer controller 760 (FIG. 7 ). A value written to anEnableFilterOnSectionPayload register 5537, as described in Table 37, can be used to enable/disable section payload filter 5517, through sectionpayload filter switch 5527. - In one embodiment,
Section Parser 755 also includes a cyclic redundancy check (CRC)engine 5590. In one embodiment, a 32-bit CRC field is included at the end of the section packet. CRC is generally used to detect error corruption.CRC engine 5590 calculates the CRC of the section packet, as data is received and compares the CRC value in the packet to the calculated CRC to determine if the section packet is damaged or incomplete. If the values match andCRC engine 5590 is enabled, the section packet is passed to the host system through SP_DATA. In another embodiment, a register inCRC engine 5590 is used to store a value of a previously passed section packet with the same version number. As previously discussed, different versions of the table data being passed by the section packets. In some cases, a new version of the table is generated but the version number has not changed. To confirm that the version has not changed, the stored CRC in the register is compared to the CRC of a new section packet with the same section and version numbers as the passed section packet. If the CRCs do not match, the host system is notified of the version change through a signal such as SP_DATA. In one embodiment,CRC engine 5590 is enabled/disabled/through values stored to an EnableCRC32Engine register, as described in Table 37. - As previously discussed, section control registers 5505 includes various registers for controlling the operations of Section Parser, as shown in Table 37. For example,
section control registers 5505 can be used for configuring and enabling individual filters 5510-5517 andCRC engine 5590. -
TABLE 37 Section Parser Control Registers Demultiplexer Section PID Control Registers (TD_SPIDCR_0 . . . TD_SPIDCR_31) Field Name Bits Len Default Type Description EnableFilterOnSectionPID 0-12 [13] 4095 R/W Selects a specific PID of the component stream to filter on. Value of 4095 is reserved one (it means NULL transport packets). EnableFilterOnTableID 13 [1] 0 R/W If 1, filter on table_id is on, otherwise this filter is off EnableFilterOnSectionSyntaxIndicator 14 [1] 0 R/W If 1, filter on section_syntax_indicator is on. EnableFilterOnSectionPrivateIndicator 15 [1] 0 R/W If 1, filter on section_private_indicator is on. EnableFilterOnCurrentNextIndicator 16 [1] 0 R/W If 1, filter on section_current_next indicator is on EnableFilterOnSectionExtension 17 [1] 0 R/W If 1, filter on section extension is on. EnableFilterOnVersionNumber 18 [1] 0 R/W If 1, filter on version_number is on. EnableFilterIfNotThisVersion 19 [1] 0 R/W If 1, filter on version_number filter picks up any version different that one defined If 0, version_number filter looks for exact match. EnableFilterOnAnySectionAndStop 20 [1] 0 R/W If 1, specified section filter grabs start of any section and stores 8 bytes of table header in thestatus register. EnableFilterOnSectionPayload 21 [1] 0 R/W If 1, filter on section payload is enabled. EnableFilterOnSectionNumber 22 [1] 0 R/W If 1, filter on section payload is enabled. EnableCRC32Engine 23 [1] 0 R/W If 1, hardware CRC32 engine check is on, all sections with CRC32 error are discarded. If 0, no CRC32 check is done. ExtendSectionPrivateIndicator 24 [1] 0 R/W If 1, private_indicator is considered as 3 bits. If 0, private_indicator is a single bit value . . . DefineSectionRingIndex 25-30 [6] 0 R/W Defines ring buffer index (1 . . . 63) where table is routed. EnableFiltering 31 [1] 0 R/W If 1, parsing from the next transport packet is enabled. - As previously discussed, each of the filters 5510-5517 can be enabled and applied serially to the section packet. For example, by setting the
EnableFilterOnTableID register 5530 to a logical value of ‘1’, thetable ID filter 5511 is enabled, allowing the table ID field to be parsed bySection Parser 755. Enabled filters of filters 5510-5517 can each be applied for comparison against field values in the section packet being parsed bySection Parser 755. Accordingly, received section packets would have to pass all the enabled filters to be successfully parsed throughSection Parser 755 and be sent to the buffer controller 760 (FIG. 7 ), through SP_DATA. It should be appreciated that other control registers may be included, not listed in Table 37, without departing from the scope of the present invention. - In one embodiment,
Section Parser 755 can be configured for parsing multiple table configurations. Multiple sets of the registers described in Tables 37-40 are used to handle the different table configurations. For example, in one embodiment, up to thirty-two tables, or section packet types, can be parsed usingSection Parser 755. Accordingly, 32 sets of the registers described by tables 37-40 are used to store the configurations for parsing each of the section packets for the 32 tables. In one embodiment, once a specific packet was parsed, the control registers regarding that section packet would be set to disable further parsing of that section packet type. For example, once a section packet with a particular section PID was parsed bySection Parser 755,control registers 5505 would disable filters 5510-5517 to ensure that the same table was not parsed again, unless requested. - As previously discussed, registers are used for storing field values to be used by filters 5510-5517. Filters 5510-5517 use the registers for comparison to the fields included in the section packets being parsed, as shown in Tables 38-40.
-
TABLE 38 Section ID Filter Registers Demultiplexer Section ID Filter Registers (TD_SIDFR_0 . . . TD_SIDFR_31) index = (x*8) + 3 Field Name Bits Len Default Type Description FilterTableID 00-07 [8] 0xFF R/W Defines a table_id field value to filter on. Value 0xFF disables PSISIF filtering engine. FilterTableIDExtension 08-23 [16] 0x0000 R/W Defines a table extension field value to filter on. FilterSectionNumber 24-31 [8] 0x00 R/W Defines a section_number to filter on. - Table 38 lists specific registers used for storing field values dealing with section packet identifiers. A host system needing a specific section packet dealing with a specific identification can write the identifiers of the packet into the registers. For example, a specific table ID can be written to FilterTableID register. The
table ID filter 5511 can then use the value to parse a section packet with the specific table ID. -
TABLE 39 Section Bit Filter Registers Demultiplexer Section ID Filter Registers (TD_SBFR_0 . . . TD_SBFR_31) Field Name Bits Len Default Type Description FilterSectionSyntaxIndicator 0 [1] 0 R/ W 1 or 0 specifies section_syntax_indicator value to filter on. FilterSectionPrivateIndicator 1-3 [3] 0 R/ W 7 or 3 specifies section_private_indicator value to filter on. FilterSectionCurrentNextIndicator 04 [1] 0 R/ W 1 or 0 specifies section_current_next_ind value to filter on. FilterSectionVersionNumber 05-09 [5] 0 R/ W 0 to 31 specifies section_version_number value to filter on. UnusedBitfield 10-31 [22] 0 R/W Unused bit field. Always set to 0. - Table 39 describes registers used for storing values of specific bit fields for parsing received section packets. For example,
version number filter 5514 can compare a value stored in FilterSectionVersionNumber to the version number field included in the section packet received from FRAMER_DATA. -
TABLE 40 Section Payload Filter Registers Demultiplexer Section Payload Filter Registers Field Name Bits Len Default Type Description FilterSectionPayloadHi 00-31 [32] 0 R/W Specifies first 4 bytes of the section payload (MAC address) FilterSectionPayloadLow 32-33 [32] 0 R/W Specifies second 4 bytes of the section payload (CA info) - Table 40 describes registers used for storing values to compare against the payload of received section packets. In one embodiment, FilterSectionPayloadHi register is used for comparison against the first 4 bytes of the section packet payload. This could be used by a host machine, through the buffer controller 760 (
FIG. 7 ) to process a Media Access Control (MAC) address dealing with the section packet. A MAC address is a hardware address generally used to uniquely identify each node of a network. FilterSectionPayloadLow register is used to compare against the last 4 bytes of the section packet payload. This could be used to locate CA information dealing with the section packet. It should be noted that registers other than the ones listed in Tables 38-40 can be included without departing from the scope of the present invention. - Referring now to
FIG. 56 , a flow diagram illustrating a method for parsing section packets in hardware is shown, according to one embodiment of the present invention. Table data is broken into different section packets. The section packets are sent as part of a multimedia packetized stream. Hardware, such as Section Parser 755 (FIG. 55 ) is used to parse the section packets before sending them to a host system. - In
step 5610, a Section Parser receives the section packet. In one embodiment, the section packet is received from a packetized stream by a framer and a transport packet parser before being released to the Section Parser, as described inFIG. 5 . A host system coupled to a Section Parser can apply values in register sets within the Section Parser, as described in Tables 2-5. The Section Parser uses the settings within the register sets to select various control options for parsing received section packets. For example, the host system can specify section packet fields needed to complete a specific data table. The Section Parser can then parse the section packets to deliver only the section packets needed by the host system to complete the data table. In one embodiment, the host system can also set register values to disable or enable the operation of the Section Parser. - In
step 5620, the host system enables one of the field filters on the Section Parser. In one embodiment, there are several fields which may be chosen to filter on. Each of the filters may be independently enabled, allowing specific fields in the section packet to be analyzed. For the purpose of this discussion, the host system has enabled the table ID filter. In one embodiment, the table ID filter is selected by asserting the 13th bit within the Section Parser's control registers, as described in Table 2. The table ID field provides the identity of the type of table the section packet represents. In one embodiment, the host system programs a table ID register, such as FilterTableID register as described in Table 3, providing the table ID of a table the host system desires. - In
step 5630, the Section Parser compares a value of a field within the section packet with a value of a field register. With the table ID filter, such astable ID filter 5511 ofFIG. 55 , enabled, the Section Parser compares the table ID field included with the section packet to the table ID register, such as FilterTableID register described in Table 38. Instep 5640, if the field in the packet and the register are not equivalent, the Section Parser fails the section packet and discards it. In one embodiment, discarding the packet includes allowing the packet to be left on the bus without telling the host system to read it. Accordingly, to discard a packet, no further processing is required by the Section Parser. If the packet field value is equivalent to the value in the field register, the Section Parser passes the packet to the nest enabled filter or component of the Section Parser. - It should be noted that other field types are present in the section packet. For example, section packets may include a section number field, a version number field, a current/next indicator field, or a private indicator field. Accordingly, various field filters may be employed to parse the section packets with all or some of the fields, as described for filters 5510-5517 in
FIG. 55 . Multiple fields may be included to allow a host system to specify specific section packets desired. As previously discussed, each of the field filters may be independently enabled or disabled through control registers within the Section Parser, as described in Table 2. In one embodiment, the Section Parser may be configured to parse multiple section packets. Accordingly, separate sets of registers for each of the section packet types to be parsed may be included. For example, separate register sets may be included for each of the types of data tables supported by the host system. The individual register sets may be configured for supporting the section packets needed to complete each data table. - In
step 5650, the host system enables a CRC check component, such as CRC engine 5590 (FIG. 7 ), in the Section Parser. Instep 5660, the host system analyses the CRC included in the section packet. As previously discussed, a CRC is generally used to determine if the provided packet is complete and uncorrupted. A packet subjected to a transmission error may become corrupted. By internally calculating the CRC in the Section Parser, the calculated CRC can be compared to the CRC provided in the section packet. In one embodiment, if the section packet CRC is different from the calculated CRC, the section packet is failed and discarded, as described forstep 5640. If the CRC values are equivalent, the section packet is passed to the next component of the Section Parser. As previously discussed, the CRC can also be compared to determine if the section packet is related to an alternate version of the data table represented by the section packet. Instep 5670, the Section Parser instructs the host system to read the passed section packet. In one embodiment, the Section Parser asserts a SP_DEN signal, as illustrated inFIG. 7 . Instep 5680, the host system reads the passed section packet. In one embodiment, the host system reads the section packet directly from the Section Parser. In another embodiment, the host system reads the section packet from a system bus, after the instruction from the SectionParser form step 5670. In one embodiment, once the Section Parser has parsed the desired section packet, the Section Parser disables any further parsing of the section packets. - It should now be appreciated that the Section Parser described herein allows processing overhead generally left to a host system to be performed through hardware. Therefore, it should now be apparent, that a system for parsing section packet data as describe herein would be advantageous over the prior art. In the preceding detailed description of the preferred embodiments, reference has been made to the accompanying drawings which form a part thereof, and in which is shown by way of illustration specific preferred embodiments in which the invention may be practiced. These embodiments are described in sufficient detail to enable those skilled in the art to practice the invention, and it is to be understood that other embodiments may be utilized and that logical, mechanical, chemical and electrical changes may be made without departing from the spirit or scope of the invention. To avoid detail not necessary to enable those skilled in the art to practice the invention, the description may omit certain information known to those skilled in the art. Furthermore, many other varied embodiments that incorporate the teachings of the invention may be easily constructed by those skilled in the art. Accordingly, the present invention is not intended to be limited to the specific form set forth herein, but on the contrary, it is intended to cover such alternatives, modifications, and equivalents, as can be reasonably included within the spirit and scope of the invention. The preceding detailed description is, therefore, not to be taken in a limiting sense, and the scope of the present invention is defined only by the appended claims.
- It should now be apparent, that the present disclosure allows for flexible detection, recovery, and handling of errors can be obtained. For example, the sequence error code can be inserted directly into the compressed video stream in order to notify video processor and error condition has occurred. Likewise, system level interrupts can be provided to a host system whereby the host system connections error codes and other register values in order to determine the status of errors and act according.
Claims (20)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/031,584 US20080288663A1 (en) | 2000-01-24 | 2008-02-14 | Method and system for handling errors |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/489,669 US6988238B1 (en) | 2000-01-24 | 2000-01-24 | Method and system for handling errors and a system for receiving packet stream data |
US09/791,045 US6807585B2 (en) | 2001-02-22 | 2001-02-22 | Method and system for parsing section data |
US10/919,943 US7366961B1 (en) | 2000-01-24 | 2004-08-17 | Method and system for handling errors |
US12/031,584 US20080288663A1 (en) | 2000-01-24 | 2008-02-14 | Method and system for handling errors |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US10/919,943 Division US7366961B1 (en) | 2000-01-24 | 2004-08-17 | Method and system for handling errors |
Publications (1)
Publication Number | Publication Date |
---|---|
US20080288663A1 true US20080288663A1 (en) | 2008-11-20 |
Family
ID=39321773
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US10/919,943 Expired - Lifetime US7366961B1 (en) | 2000-01-24 | 2004-08-17 | Method and system for handling errors |
US12/031,584 Abandoned US20080288663A1 (en) | 2000-01-24 | 2008-02-14 | Method and system for handling errors |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US10/919,943 Expired - Lifetime US7366961B1 (en) | 2000-01-24 | 2004-08-17 | Method and system for handling errors |
Country Status (1)
Country | Link |
---|---|
US (2) | US7366961B1 (en) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080267307A1 (en) * | 2004-05-20 | 2008-10-30 | Yong-Deok Chang | Digital Broadcasting Transmission/Reception Devices Capable Of Improving A Receiving Performance And Signal Processing Method Thereof |
US20080282310A1 (en) * | 2005-01-18 | 2008-11-13 | Nxp B.V. | Ip Datagram De-Encapsulation |
US20120005562A1 (en) * | 2009-04-27 | 2012-01-05 | Panasonic Corporation | Encoded stream decoding device |
US20140181423A1 (en) * | 2012-12-20 | 2014-06-26 | Oracle International Corporation | System and Method for Implementing NUMA-Aware Statistics Counters |
WO2015199882A1 (en) * | 2014-06-27 | 2015-12-30 | Intel Corporation | Systems, methods, and devices to support intra-application flow prioritization |
US20180139033A1 (en) * | 2015-06-11 | 2018-05-17 | Sony Corporation | Signal processing device, signal processing method, and program |
CN108900899A (en) * | 2018-08-24 | 2018-11-27 | 珠海迈越信息技术有限公司 | A kind of fast search system and method for the top box of digital machine based on operator's platform |
US10541933B2 (en) * | 2016-11-10 | 2020-01-21 | Disney Enterprises, Inc. | Systems and methods for aligning frames of a digital video content in IP domain |
US11412263B2 (en) * | 2019-09-23 | 2022-08-09 | Qualcomm Incorporated | Arithmetic coder byte stuffing signaling for video coding |
CN117040593A (en) * | 2023-08-09 | 2023-11-10 | 北京和德宇航技术有限公司 | Method, device, equipment and storage medium for uploading and framing satellite data |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7489362B2 (en) | 2003-03-04 | 2009-02-10 | Broadcom Corporation | Television functionality on a chip |
US7450617B2 (en) * | 2003-08-14 | 2008-11-11 | Broadcom Corporation | System and method for demultiplexing video signals |
US7873992B1 (en) * | 2003-12-04 | 2011-01-18 | Avaya Inc. | Dynamic system of autonomous parsers for interpreting arbitrary telecommunication equipment streams |
US8027946B1 (en) | 2006-12-22 | 2011-09-27 | Avaya Inc. | Higher order logic applied to expert systems for alarm analysis, filtering, correlation and root cause |
US9553911B1 (en) * | 2007-09-04 | 2017-01-24 | Arris Enterprises, Inc. | System, method and computer readable medium for managing program switch requests |
US8091007B2 (en) * | 2007-09-13 | 2012-01-03 | Dell Products L.P. | Detection of duplicate packets |
JP4327873B2 (en) * | 2007-10-30 | 2009-09-09 | 株式会社東芝 | Broadcast receiving apparatus, TS packet reproducing apparatus, broadcast receiving method and program |
US20100254489A1 (en) * | 2007-11-14 | 2010-10-07 | Thomson Licensing | Code enhanced staggercasting |
WO2009145776A1 (en) * | 2008-05-29 | 2009-12-03 | Hewlett-Packard Development Company, L.P. | Replaceable printer component including memory storing data defined by tags and sub-tags |
US8014414B2 (en) * | 2008-08-21 | 2011-09-06 | Himax Media Solutions, Inc. | Method and system for generating a packet identifier table from a received transport stream |
US9544324B2 (en) * | 2012-03-02 | 2017-01-10 | Trustwave Holdings, Inc. | System and method for managed security assessment and mitigation |
US8782504B2 (en) * | 2012-04-11 | 2014-07-15 | Lsi Corporation | Trend-analysis scheme for reliably reading data values from memory |
US9075736B2 (en) | 2013-01-07 | 2015-07-07 | Qualcomm Incorporated | Additional error protection for wireless transmission |
US9143423B2 (en) * | 2013-07-09 | 2015-09-22 | Analog Devices, Inc. | JESD test sequencer generator |
CN103747253B (en) * | 2013-12-27 | 2017-04-05 | 高新兴科技集团股份有限公司 | A kind of video data encoder transmission method based on FIFO |
US20160044339A1 (en) * | 2014-08-07 | 2016-02-11 | Qualcomm Incorporated | System and method for reordering of prefixes and suffixes in variable length coding to increase throughput |
US10567556B2 (en) * | 2016-03-14 | 2020-02-18 | Mentor Graphics Corporation | Communication circuitry in an electronic control unit |
CN105721864B (en) * | 2016-04-20 | 2018-09-21 | 杭州当虹科技有限公司 | A kind of efficient regression testing method based on audio and video encapsulated layer parameter detecting |
US12107943B2 (en) * | 2022-06-30 | 2024-10-01 | Mellanox Technologies, Ltd. | Parsing using null header node |
CN116225796B (en) * | 2022-12-20 | 2023-12-08 | 广州芯德通信科技股份有限公司 | Cross-chip-platform ONU (optical network Unit) production and measurement method and device and electronic equipment |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5058109A (en) * | 1989-06-28 | 1991-10-15 | Digital Equipment Corporation | Exclusionary network adapter apparatus and related method |
US5809334A (en) * | 1996-09-24 | 1998-09-15 | Allen-Bradley Company, Llc | Receive packet pre-parsing by a DMA controller |
US5917821A (en) * | 1993-12-24 | 1999-06-29 | Newbridge Networks Corporation | Look-up engine for packet-based network |
US5916305A (en) * | 1996-11-05 | 1999-06-29 | Shomiti Systems, Inc. | Pattern recognition in data communications using predictive parsers |
US6072771A (en) * | 1997-09-26 | 2000-06-06 | International Business Machines Corporation | Detection of errors in table data |
US6266727B1 (en) * | 1996-03-07 | 2001-07-24 | Sony Corporation | Isochronous data pipe for managing and manipulating a high-speed stream of isochronous data flowing between an application and a bus structure |
US20020010793A1 (en) * | 1997-08-22 | 2002-01-24 | Michael Noll | Method and apparatus for performing frame processing for a network |
US20070115981A1 (en) * | 2005-10-14 | 2007-05-24 | Dell Products L.P. | System and method for filtering communications at a network interface controller |
Family Cites Families (95)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5649029A (en) | 1991-03-15 | 1997-07-15 | Galbi; David E. | MPEG audio/video decoder |
US5392212A (en) | 1993-07-07 | 1995-02-21 | The United States Of America As Represented By The Secretary Of Commerce | Apparatus for identifying unknown words by comparison to known words |
US5506904A (en) | 1993-08-04 | 1996-04-09 | Scientific-Atlanta, Inc. | System and method for transmitting and receiving variable length authorization control for digital services |
US5457701A (en) | 1994-01-06 | 1995-10-10 | Scientific-Atlanta, Inc. | Method for indicating packet errors in a packet-based multi-hop communications system |
EP0674414B1 (en) | 1994-03-21 | 2002-02-27 | Avid Technology, Inc. | Apparatus and computer-implemented process for providing real-time multimedia data transport in a distributed computing system |
US5534944A (en) | 1994-07-15 | 1996-07-09 | Matsushita Electric Corporation Of America | Method of splicing MPEG encoded video |
US5559999A (en) | 1994-09-09 | 1996-09-24 | Lsi Logic Corporation | MPEG decoding system including tag list for associating presentation time stamps with encoded data units |
KR0166935B1 (en) | 1994-11-23 | 1999-03-20 | 구자홍 | Mpeg2 transport decoder apparatus |
KR0137701B1 (en) | 1994-12-13 | 1998-05-15 | 양승택 | Pes packetizing apparatus of mpeg-2 system |
US5703887A (en) | 1994-12-23 | 1997-12-30 | General Instrument Corporation Of Delaware | Synchronization and error detection in a packetized data stream |
US5517250A (en) | 1995-02-28 | 1996-05-14 | General Instrument Corporation Of Delaware | Acquisition of desired data from a packetized data stream and synchronization thereto |
CA2224238A1 (en) | 1995-06-15 | 1997-01-03 | Hall, David | Communication system for superimposing data onto a video signal |
US6449352B1 (en) | 1995-06-20 | 2002-09-10 | Matsushita Electric Industrial Co., Ltd. | Packet generating method, data multiplexing method using the same, and apparatus for coding and decoding of the transmission data |
US5920572A (en) | 1995-06-30 | 1999-07-06 | Divicom Inc. | Transport stream decoder/demultiplexer for hierarchically organized audio-video streams |
US5598415A (en) | 1995-08-04 | 1997-01-28 | General Instrument Corporation Of Delaware | Transmission of high rate isochronous data in MPEG-2 data streams |
US5742623A (en) | 1995-08-04 | 1998-04-21 | General Instrument Corporation Of Delaware | Error detection and recovery for high rate isochronous data in MPEG-2 data streams |
US5805602A (en) | 1995-09-25 | 1998-09-08 | Bell Atlantic Network Services, Inc. | Network monitoring system for cell delay variation |
US5778191A (en) | 1995-10-26 | 1998-07-07 | Motorola, Inc. | Method and device for error control of a macroblock-based video compression technique |
US6058459A (en) | 1996-08-26 | 2000-05-02 | Stmicroelectronics, Inc. | Video/audio decompression/compression device including an arbiter and method for accessing a shared memory |
US5726989A (en) | 1995-11-06 | 1998-03-10 | Stellar One Corporation | Method for ensuring synchronization of MPEG-1 data carried in an MPEG-2 transport stream |
US5959659A (en) | 1995-11-06 | 1999-09-28 | Stellar One Corporation | MPEG-2 transport stream decoder having decoupled hardware architecture |
JPH09139937A (en) | 1995-11-14 | 1997-05-27 | Fujitsu Ltd | Moving image stream converter |
US5703877A (en) | 1995-11-22 | 1997-12-30 | General Instrument Corporation Of Delaware | Acquisition and error recovery of audio data carried in a packetized data stream |
US6310922B1 (en) | 1995-12-12 | 2001-10-30 | Thomson Consumer Electronics, Inc. | Method and apparatus for generating variable rate synchronization signals |
US5835493A (en) | 1996-01-02 | 1998-11-10 | Divicom, Inc. | MPEG transport stream remultiplexer |
KR100192504B1 (en) | 1996-01-05 | 1999-06-15 | 구자홍 | The data input-output apparatus of mpeg2 transport decoder |
US5691664A (en) | 1996-01-16 | 1997-11-25 | Motorola, Inc. | Programmable analog array and method for establishing a feedback loop therein |
US5754783A (en) | 1996-02-01 | 1998-05-19 | Digital Equipment Corporation | Apparatus and method for interleaving timed program data with secondary data |
US5809538A (en) | 1996-02-07 | 1998-09-15 | General Instrument Corporation | DRAM arbiter for video decoder |
US5901178A (en) | 1996-02-26 | 1999-05-04 | Solana Technology Development Corporation | Post-compression hidden data transport for video |
US5859660A (en) | 1996-02-29 | 1999-01-12 | Perkins; Michael G. | Non-seamless splicing of audio-video transport streams |
US6233256B1 (en) | 1996-03-13 | 2001-05-15 | Sarnoff Corporation | Method and apparatus for analyzing and monitoring packet streams |
US6157674A (en) | 1996-03-21 | 2000-12-05 | Sony Corporation | Audio and video data transmitting apparatus, system, and method thereof |
US5812976A (en) | 1996-03-29 | 1998-09-22 | Matsushita Electric Corporation Of America | System and method for interfacing a transport decoder to a bitrate-constrained audio recorder |
US5828416A (en) | 1996-03-29 | 1998-10-27 | Matsushita Electric Corporation Of America | System and method for interfacing a transport decoder to a elementary stream video decorder |
US6043828A (en) | 1996-03-29 | 2000-03-28 | Cirrus Logic, Inc. | Method and apparatus for handling proprietary and non-proprietary formatted compact discs in the same video playback system |
EP0804033A3 (en) | 1996-04-26 | 2003-12-10 | Texas Instruments Incorporated | Improvements in or relating to electronic devices |
US5668490A (en) | 1996-05-01 | 1997-09-16 | Sun Microsystems, Inc. | Flip-flop with full scan capability |
US6137834A (en) | 1996-05-29 | 2000-10-24 | Sarnoff Corporation | Method and apparatus for splicing compressed information streams |
US5812760A (en) | 1996-06-25 | 1998-09-22 | Lsi Logic Corporation | Programmable byte wise MPEG systems layer parser |
US5838678A (en) | 1996-07-24 | 1998-11-17 | Davis; Joseph W. | Method and device for preprocessing streams of encoded data to facilitate decoding streams back-to back |
US5856973A (en) | 1996-09-10 | 1999-01-05 | Thompson; Kenneth M. | Data multiplexing in MPEG server to decoder systems |
US5917830A (en) | 1996-10-18 | 1999-06-29 | General Instrument Corporation | Splicing compressed packetized digital video streams |
US6226291B1 (en) | 1996-11-01 | 2001-05-01 | Texas Instruments Incorporated | Transport stream packet parser system |
US5831690A (en) | 1996-12-06 | 1998-11-03 | Rca Thomson Licensing Corporation | Apparatus for formatting a packetized digital datastream suitable for conveying television information |
US6038000A (en) | 1997-05-28 | 2000-03-14 | Sarnoff Corporation | Information stream syntax for indicating the presence of a splice point |
KR100232164B1 (en) | 1997-02-05 | 1999-12-01 | 구자홍 | Trnsport stream demultiplexer |
US6067303A (en) | 1997-02-25 | 2000-05-23 | International Business Machines Corporation | Method and apparatus for detecting and controlling data stream splicing in ATM networks |
CN1219265A (en) | 1997-03-12 | 1999-06-09 | 皇家菲利浦电子有限公司 | Recording of a digital information signal on a record carrier |
KR19980073528A (en) | 1997-03-15 | 1998-11-05 | 구자홍 | MPEG System Decoder |
JP3003618B2 (en) | 1997-03-19 | 2000-01-31 | 日本電気株式会社 | Video transmission / reception device |
US5946318A (en) | 1997-03-21 | 1999-08-31 | International Business Machines Corporation | Method and apparatus for processing and packetizing data from a data stream |
US5982436A (en) | 1997-03-28 | 1999-11-09 | Philips Electronics North America Corp. | Method for seamless splicing in a video encoder |
US20010056353A1 (en) | 1997-05-02 | 2001-12-27 | Gerald Laws | Fine-grained synchronization of a decompressed audio stream by skipping or repeating a variable number of samples from a frame |
US5990958A (en) | 1997-06-17 | 1999-11-23 | National Semiconductor Corporation | Apparatus and method for MPEG video decompression |
US5923860A (en) | 1997-06-25 | 1999-07-13 | Compaq Computer Corp. | Apparatus, method and system for remote peripheral component interconnect bus using accelerated graphics port logic circuits |
US6118462A (en) | 1997-07-01 | 2000-09-12 | Memtrax Llc | Computer system controller having internal memory and external memory control |
KR100233244B1 (en) | 1997-07-10 | 1999-12-01 | 정선종 | The transport stream multiplexing apparatus having multiple stream |
WO1999004343A1 (en) | 1997-07-18 | 1999-01-28 | Interprophet Corporation | Tcp/ip network accelerator system and method |
US6141358A (en) | 1997-07-25 | 2000-10-31 | Sarnoff Corporation | Method and apparatus for aligning sub-stream splice points in an information stream |
US6188703B1 (en) | 1997-08-01 | 2001-02-13 | International Business Machines Corp. | Multiplexer for multiple media streams |
US6181706B1 (en) | 1997-09-26 | 2001-01-30 | International Business Machines Corporation | Common buffer for multiple streams and control registers in an MPEG-2 compliant transport register |
US6356567B2 (en) | 1997-09-26 | 2002-03-12 | International Business Machines Corporation | Embedded clock recovery and difference filtering for an MPEG-2 compliant transport stream |
US6275507B1 (en) | 1997-09-26 | 2001-08-14 | International Business Machines Corporation | Transport demultiplexor for an MPEG-2 compliant data stream |
US5949436A (en) | 1997-09-30 | 1999-09-07 | Compaq Computer Corporation | Accelerated graphics port multiple entry gart cache allocation system and method |
US5936640A (en) | 1997-09-30 | 1999-08-10 | Compaq Computer Corporation | Accelerated graphics port memory mapped status and control registers |
JPH11122232A (en) | 1997-10-17 | 1999-04-30 | Fujitsu Ltd | Phase detection circuit and timing extract circuit using the phase detection circuit |
US6181713B1 (en) | 1997-10-27 | 2001-01-30 | Sun Microsystems, Inc. | Selectable depacketizer architecture |
US5870412A (en) | 1997-12-12 | 1999-02-09 | 3Com Corporation | Forward error correction system for packet based real time media |
US6351471B1 (en) | 1998-01-14 | 2002-02-26 | Skystream Networks Inc. | Brandwidth optimization of video program bearing transport streams |
US6292490B1 (en) | 1998-01-14 | 2001-09-18 | Skystream Corporation | Receipts and dispatch timing of transport packets in a video program bearing stream remultiplexer |
US6310898B1 (en) | 1998-01-27 | 2001-10-30 | Tektronix, Inc. | Compressed video and audio transport stream multiplexer |
US6330285B1 (en) | 1998-02-11 | 2001-12-11 | Tektronix, Inc. | Video clock and framing signal extraction by transport stream “snooping” |
US6323910B1 (en) | 1998-03-26 | 2001-11-27 | Clark, Iii William T. | Method and apparatus for producing high-fidelity images by synchronous phase coherent digital image acquisition |
KR100511250B1 (en) | 1998-04-09 | 2005-11-03 | 엘지전자 주식회사 | Digital Audio / Video (A / V) Systems |
JP3183399B2 (en) | 1998-04-23 | 2001-07-09 | 日本電気株式会社 | Image processing apparatus and image processing method |
US6128026A (en) | 1998-05-04 | 2000-10-03 | S3 Incorporated | Double buffered graphics and video accelerator having a write blocking memory interface and method of doing the same |
US6336200B1 (en) | 1998-05-22 | 2002-01-01 | Kencast, Inc. | Method for validating communicated packets of data and for locating erroneous packets |
US6108046A (en) | 1998-06-01 | 2000-08-22 | General Instrument Corporation | Automatic detection of HDTV video format |
US6425021B1 (en) | 1998-11-16 | 2002-07-23 | Lsi Logic Corporation | System for transferring data packets of different context utilizing single interface and concurrently processing data packets of different contexts |
US6380991B1 (en) | 1998-11-19 | 2002-04-30 | Tektronix, Inc. | Method for splicing MPEG-2 transport streams |
US6434170B1 (en) | 1998-12-04 | 2002-08-13 | Koninklijke Philips Electronics N.V. | Memory-based circular queue with local descriptive information to implement a storage area for filtering mpeg-2 packets that are distributed and/or processed under the control of a host microprocessor by a direct memory access mechanism |
US6359911B1 (en) | 1998-12-04 | 2002-03-19 | Koninklijke Philips Electronics N.V. (Kpenv) | MPEG-2 transport demultiplexor architecture with non-time-critical post-processing of packet information |
US6463059B1 (en) | 1998-12-04 | 2002-10-08 | Koninklijke Philips Electronics N.V. | Direct memory access execution engine with indirect addressing of circular queues in addition to direct memory addressing |
US6438145B1 (en) | 1998-12-04 | 2002-08-20 | Koninklijke Philips Electronics N.V. | Transport packet distribution system and method using local header |
US6434146B1 (en) | 1998-12-04 | 2002-08-13 | Koninklijke Philips Electronics N.V. | Use of sequencing information in a local header that allows proper synchronization of packets to subsidiary interfaces within the post-processing environment of an mpeg-2 packet demultiplexing architecture |
US6298089B1 (en) | 1998-12-10 | 2001-10-02 | Viewgraphics, Inc. | Method for seamless and near seamless audio and non-video splicing of a digital transport stream |
US6424658B1 (en) | 1999-01-29 | 2002-07-23 | Neomagic Corp. | Store-and-forward network switch using an embedded DRAM |
US6463486B1 (en) | 1999-04-06 | 2002-10-08 | Microsoft Corporation | System for handling streaming information using a plurality of reader modules by enumerating output pins and associated streams of information |
US6378035B1 (en) | 1999-04-06 | 2002-04-23 | Microsoft Corporation | Streaming information appliance with buffer read and write synchronization |
US6493847B1 (en) | 1999-06-15 | 2002-12-10 | Applied Micro Circuits Corporation | Sonet B2 parity byte calculation method and apparatus |
US6427169B1 (en) | 1999-07-30 | 2002-07-30 | Intel Corporation | Parsing a packet header |
US6449656B1 (en) | 1999-07-30 | 2002-09-10 | Intel Corporation | Storing a frame header |
US6807585B2 (en) * | 2001-02-22 | 2004-10-19 | Ati Technologies, Inc. | Method and system for parsing section data |
US6988238B1 (en) * | 2000-01-24 | 2006-01-17 | Ati Technologies, Inc. | Method and system for handling errors and a system for receiving packet stream data |
-
2004
- 2004-08-17 US US10/919,943 patent/US7366961B1/en not_active Expired - Lifetime
-
2008
- 2008-02-14 US US12/031,584 patent/US20080288663A1/en not_active Abandoned
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5058109A (en) * | 1989-06-28 | 1991-10-15 | Digital Equipment Corporation | Exclusionary network adapter apparatus and related method |
US5917821A (en) * | 1993-12-24 | 1999-06-29 | Newbridge Networks Corporation | Look-up engine for packet-based network |
US6266727B1 (en) * | 1996-03-07 | 2001-07-24 | Sony Corporation | Isochronous data pipe for managing and manipulating a high-speed stream of isochronous data flowing between an application and a bus structure |
US5809334A (en) * | 1996-09-24 | 1998-09-15 | Allen-Bradley Company, Llc | Receive packet pre-parsing by a DMA controller |
US5916305A (en) * | 1996-11-05 | 1999-06-29 | Shomiti Systems, Inc. | Pattern recognition in data communications using predictive parsers |
US20020010793A1 (en) * | 1997-08-22 | 2002-01-24 | Michael Noll | Method and apparatus for performing frame processing for a network |
US6377998B2 (en) * | 1997-08-22 | 2002-04-23 | Nortel Networks Limited | Method and apparatus for performing frame processing for a network |
US6072771A (en) * | 1997-09-26 | 2000-06-06 | International Business Machines Corporation | Detection of errors in table data |
US20070115981A1 (en) * | 2005-10-14 | 2007-05-24 | Dell Products L.P. | System and method for filtering communications at a network interface controller |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080267307A1 (en) * | 2004-05-20 | 2008-10-30 | Yong-Deok Chang | Digital Broadcasting Transmission/Reception Devices Capable Of Improving A Receiving Performance And Signal Processing Method Thereof |
US20100172447A1 (en) * | 2004-05-20 | 2010-07-08 | Samsung Electronics Co., Ltd | Digital broadcasting transmission/reception devices capable of improving a receiving performance and signal processing method thereof |
US7852961B2 (en) * | 2004-05-20 | 2010-12-14 | Samsung Electronics Co., Ltd. | Digital broadcasting transmission/reception devices capable of improving a receiving performance and signal processing method thereof |
US8054903B2 (en) | 2004-05-20 | 2011-11-08 | Samsung Electronics Co., Ltd. | Digital broadcasting transmission/reception devices capable of improving a receiving performance and signal processing method thereof |
US20080282310A1 (en) * | 2005-01-18 | 2008-11-13 | Nxp B.V. | Ip Datagram De-Encapsulation |
US7804835B2 (en) * | 2005-01-18 | 2010-09-28 | Taiwan Semiconductor Manufacturing Company, Ltd. | IP datagram de-encapsulation |
US20120005562A1 (en) * | 2009-04-27 | 2012-01-05 | Panasonic Corporation | Encoded stream decoding device |
US20140181423A1 (en) * | 2012-12-20 | 2014-06-26 | Oracle International Corporation | System and Method for Implementing NUMA-Aware Statistics Counters |
US8918596B2 (en) * | 2012-12-20 | 2014-12-23 | Oracle International Corporation | System and method for implementing NUMA-aware statistics counters |
US20150381502A1 (en) * | 2014-06-27 | 2015-12-31 | Jing Zhu | Systems, methods, and devices to support intra-application flow prioritization |
WO2015199882A1 (en) * | 2014-06-27 | 2015-12-30 | Intel Corporation | Systems, methods, and devices to support intra-application flow prioritization |
KR20160147000A (en) * | 2014-06-27 | 2016-12-21 | 인텔 코포레이션 | Systems, methods, and devices to support intra-application flow prioritization |
CN106464604A (en) * | 2014-06-27 | 2017-02-22 | 英特尔公司 | Systems, methods, and devices to support intra-application flow prioritization |
US9917786B2 (en) * | 2014-06-27 | 2018-03-13 | Intel Corporation | Systems, methods, and devices to support intra-application flow prioritization |
KR101887796B1 (en) * | 2014-06-27 | 2018-08-10 | 인텔 코포레이션 | Systems, methods, and devices to support intra-application flow prioritization |
US10333856B2 (en) * | 2014-06-27 | 2019-06-25 | Intel Corporation | Systems, methods, and devices to support intra-application flow prioritization |
US20180139033A1 (en) * | 2015-06-11 | 2018-05-17 | Sony Corporation | Signal processing device, signal processing method, and program |
US10644864B2 (en) * | 2015-06-11 | 2020-05-05 | Sony Corporation | Signal processing device and method to enable transmission of type length value (TLV) packets |
US10541933B2 (en) * | 2016-11-10 | 2020-01-21 | Disney Enterprises, Inc. | Systems and methods for aligning frames of a digital video content in IP domain |
CN108900899A (en) * | 2018-08-24 | 2018-11-27 | 珠海迈越信息技术有限公司 | A kind of fast search system and method for the top box of digital machine based on operator's platform |
US11412263B2 (en) * | 2019-09-23 | 2022-08-09 | Qualcomm Incorporated | Arithmetic coder byte stuffing signaling for video coding |
CN117040593A (en) * | 2023-08-09 | 2023-11-10 | 北京和德宇航技术有限公司 | Method, device, equipment and storage medium for uploading and framing satellite data |
Also Published As
Publication number | Publication date |
---|---|
US7366961B1 (en) | 2008-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6988238B1 (en) | Method and system for handling errors and a system for receiving packet stream data | |
US7366961B1 (en) | Method and system for handling errors | |
US7724682B2 (en) | Method and system for generating transport stream packets | |
US6763390B1 (en) | Method and system for receiving and framing packetized data | |
US6438145B1 (en) | Transport packet distribution system and method using local header | |
US6463059B1 (en) | Direct memory access execution engine with indirect addressing of circular queues in addition to direct memory addressing | |
US5818539A (en) | System and method for updating a system time constant (STC) counter following a discontinuity in an MPEG-2 transport data stream | |
US8284845B1 (en) | Method and system for handling data | |
US6434170B1 (en) | Memory-based circular queue with local descriptive information to implement a storage area for filtering mpeg-2 packets that are distributed and/or processed under the control of a host microprocessor by a direct memory access mechanism | |
US6434146B1 (en) | Use of sequencing information in a local header that allows proper synchronization of packets to subsidiary interfaces within the post-processing environment of an mpeg-2 packet demultiplexing architecture | |
US6674805B1 (en) | System for controlling a clock signal for synchronizing a counter to a received value and method thereof | |
US6275507B1 (en) | Transport demultiplexor for an MPEG-2 compliant data stream | |
CN1976448B (en) | Method and system for audio and video transport | |
US6026506A (en) | Concealing errors in transport stream data | |
US8265139B2 (en) | Packet comparator | |
US5828416A (en) | System and method for interfacing a transport decoder to a elementary stream video decorder | |
US7024685B1 (en) | Transport demultiplexor with bit maskable filter | |
US7113546B1 (en) | System for handling compressed video data and method thereof | |
US20050036512A1 (en) | Timestamping network controller for streaming media applications | |
US5812976A (en) | System and method for interfacing a transport decoder to a bitrate-constrained audio recorder | |
US6807585B2 (en) | Method and system for parsing section data | |
US6778533B1 (en) | Method and system for accessing packetized elementary stream data | |
US7526427B2 (en) | System and method for reception, processing and transmission of digital audio stream | |
US6088357A (en) | Auxiliary transport assist processor especially for an MPEG-2 compliant decoder | |
US7817721B2 (en) | Posting status data in digital transport stream processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: ATI TECHNOLOGIES ULC, CANADA Free format text: CHANGE OF NAME;ASSIGNOR:ATI TECHNOLOGIES INC.;REEL/FRAME:021679/0556 Effective date: 20061025 |
|
AS | Assignment |
Owner name: BROADCOM CORPORATION, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:ADVANCED MICRO DEVICES, INC.;ATI TECHNOLOGIES ULC;ATI INTERNATIONAL SRL;REEL/FRAME:022083/0433 Effective date: 20081027 Owner name: BROADCOM CORPORATION,CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:ADVANCED MICRO DEVICES, INC.;ATI TECHNOLOGIES ULC;ATI INTERNATIONAL SRL;REEL/FRAME:022083/0433 Effective date: 20081027 |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |
|
AS | Assignment |
Owner name: BANK OF AMERICA, N.A., AS COLLATERAL AGENT, NORTH CAROLINA Free format text: PATENT SECURITY AGREEMENT;ASSIGNOR:BROADCOM CORPORATION;REEL/FRAME:037806/0001 Effective date: 20160201 Owner name: BANK OF AMERICA, N.A., AS COLLATERAL AGENT, NORTH Free format text: PATENT SECURITY AGREEMENT;ASSIGNOR:BROADCOM CORPORATION;REEL/FRAME:037806/0001 Effective date: 20160201 |
|
AS | Assignment |
Owner name: AVAGO TECHNOLOGIES GENERAL IP (SINGAPORE) PTE. LTD., SINGAPORE Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:BROADCOM CORPORATION;REEL/FRAME:041706/0001 Effective date: 20170120 Owner name: AVAGO TECHNOLOGIES GENERAL IP (SINGAPORE) PTE. LTD Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:BROADCOM CORPORATION;REEL/FRAME:041706/0001 Effective date: 20170120 |
|
AS | Assignment |
Owner name: BROADCOM CORPORATION, CALIFORNIA Free format text: TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS;ASSIGNOR:BANK OF AMERICA, N.A., AS COLLATERAL AGENT;REEL/FRAME:041712/0001 Effective date: 20170119 |