Sub-Pictures
The typical arrangement of data in the 53220 byte buffer for sub-pictures isSPUH | PXDtf | PXDbf | SP_DCSQT |
---|
SPUH
Sub-Picture Unit Header2 words (least significant byte last)
offset | name | contents |
---|---|---|
0 | SPDSZ | the size of the total sub-picture data (which may span packets) |
2 | SP_DCSQTA | offset within the Sub-Picture Unit to the SP_DCSQT |
PXDtf and PXDbf
PiXel DataThese are the rle compressed pixel data for the top field (lines 1, 3, 5, etc) and the bottom field (lines 2, 4, 6, etc) respectively
Individual pixels may have one of four values, commonly referred to as background (0), pattern (1), emphasis 1 (2), and emphasis 2 (3) Each coded value indicates the number of pixels having the same code value, and can be in one of four forms, depending on the number of identical pixels
range | bits | format |
---|---|---|
1-3 | 4 | n n c c |
4-15 | 8 | 0 0 n n n n c c |
16-63 | 12 | 0 0 0 0 n n n n n n c c |
64-255 | 16 | 0 0 0 0 0 0 n n n n n n n n c c |
If, at the end of a line, the bit count is not a multiple of 8, four fill bits of 0 are added.
SP_DCSQT
Sub-Picture Display Control SeQuence TableThis area contains blocks (SP_DCSQ) of commands to the decoder. Each SP_DCSQ begins with a 2 word header
offset | name | contents |
---|---|---|
0 | SP_DCSQ_STM | delay to wait before executing these commands. The units are 90KHz clock (same as PTM) divided by 1024 - see |
2 | SP_NXT_DCSQ_SA | offset within the Sub-Picture Unit to the next SP_DCSQ. If this is the last SP_DCSQ, it points to itself. |
---|
Commands
There are eight commands available for Sub-Pictures. The first SP_DCSQ should contain, as a minimum, SET_COLOR, SET_CONTR, SET_DAREA, and SET_DSPXA.FF - CMD_END - ends one SP_DCSQ
00 - FSTA_DSP - Forced Start Display, no arguments
01 - STA_DSP - Start Display, no arguments
02 - STP_DSP - Stop Display, no arguments
03 - SET_COLOR - provides four indices into the CLUT for the current PGC to associate with the four pixel values. One nibble per pixel value for a total of 2 bytes.
e2 e1 p b
04 - SET_CONTR - directly provides the four contrast (alpha blend) values to associate with the four pixel values. One nibble per pixel value for a total of 2 bytes. 0x0 = transparent, 0xF = opaque
e2 e1 p b
05 - SET_DAREA - defines the display area, each pair (X and Y) of values is 3 bytes wide, for a total of 6 bytes, and has the form
sx sx sx ex ex ex sy sy sy ey ey ey
sx = starting X coordinate
ex = ending X coordinate
sy = starting Y coordinate
ey = ending Y coordinate
06 - SET_DSPXA - defines the pixel data addresses. First a 2-byte offset to the top field data, followed by a 2-byte offset to the bottom field data, for a total of 4 bytes.
07 - CHG_COLCON - allows for changing the COLor and CONtrast within one or more areas of the display. This command contains a series of parameters, arranged in a hierarchy.
Following the command byte is a 2-byte value for the total size of the parameter area, including the size word.
The parameter sequence begins with a LN_CTLI, which defines a vertically bounded area of the display. The LN_CTLI may include from one to eight PX_CTLI parameters, which define a starting horizontal position and new color and contrast value to apply from that column on towards the right to the next PX_CTLI or the right side of the display.
LN_CTLI, 4 bytes, special value of 0f ff ff ff signifies the end of the parameter area (this termination code MUST be present as the last parameter)
0 s s s n t t t
sss = csln, the starting (top-most) line number for this area (must be > previous LN_CTLI ttt)
n = number_of_changes - number of PX_CTLI to follow (1 to 8)
ttt = ctln, the terminating (bottom-most) line number for this area (must be >= sss)
PX_CTLI, 6 bytes, defines a starting column and new color and contrast values
bytes 0 and 1 - starting column number (must be 8 or more greater than the previous PX_CTLI)
bytes 2 and 3 - new color values, as per SET_COLOR
bytes 4 and 5 - new contrast values, as per SET_CONTR
Converting frames and time to SP_DCSQ_STM values
The direct method of converting time to delay values is to multiply time in seconds by 90000/1024 and truncate the value. Rounding up will cause the display to occur one frame late.
|
|