2.2.4.5 RFX_AVC444_BITMAP_STREAM

The RFX_AVC444_BITMAP_STREAM structure encapsulates regions of a graphics frame compressed using MPEG-4 AVC/H.264 compression techniques [ITU-H.264-201201] in YUV444 mode. The data compressed using these techniques is transported in the bitmapData field of the RDPGFX_WIRE_TO_SURFACE_PDU_1 (section 2.2.2.1) message.

To send all the chroma data for a YUV444 frame, two RFX_AVC420_BITMAP_STREAM structures (section 2.2.4.4) are utilized. The format of the RFX_AVC444_BITMAP_STREAM structure is a four-byte integer that specifies which subframes are encoded and the size of the first YUV420p subframe encoded bitstream, followed by the first subframe, and then optionally the second subframe. These bitstreams MUST be encoded using the same MPEG-4 AVC/H.264 encoder and decoded by a single MPEG-4 AVC/H.264 decoder as one stream. The method to combine the two streams is detailed in section 3.3.8.3.2. Note that the YUV420 and Chroma420 views (as shown in the figure captioned "A representation of a YUV444 macroblock as two YUV420p macroblocks" in section 3.3.8.3.2) both have identical MPEG-4 AVC/H.264 bitstream formats.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

avc420EncodedBitstreamInfo

avc420EncodedBitstream1 (variable)

...

...

avc420EncodedBitstream2 (variable)

...

...

avc420EncodedBitstreamInfo (4 bytes): A 32-bit unsigned integer that specifies the size of the data present in the avc420EncodedBitstream1 field and which subframes are encoded.

The format of the avc420EncodedBitstreamInfo field is described by the following bitmask diagram.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

cbAvc420EncodedBitstream1

LC

cbAvc420EncodedBitstream1 (30 bits): A 30-bit unsigned integer that specifies the size, in bytes, of the YUV420 frame present in the avc420EncodedBitstream1 field. If no YUV420 frame is present, then this field MUST be set to zero.

LC (2 bits): A 2-bit unsigned integer that specifies how data is encoded in the avc420EncodedBitstream1 and avc420EncodedBitstream2 fields.

Value

Meaning

0x0

A YUV420 frame is contained in the avc420EncodedBitstream1 field, and a Chroma420 frame is contained in the avc420EncodedBitstream2 field.

0x1

A YUV420 frame is contained in the avc420EncodedBitstream1 field, and no data is present in the avc420EncodedBitstream2 field. No Chroma420 frame is present. The Chroma420 frame corresponding to the updates in the YUV420 frame is sent in a RFX_AVC444_BITMAP_STREAM message in subsequent frames if required.

0x2

A Chroma420 frame is contained in the avc420EncodedBitstream1 field, and no data is present in the avc420EncodedBitstream2 field. No YUV420 frame is present. The Chroma420 frame MUST be combined with the decoded AVC stream from previous frames.

0x3

An invalid state that MUST NOT occur.

avc420EncodedBitstream1 (variable): An RFX_AVC420_BITMAP_STREAM structure that contains the first YUV420p subframe of a single frame that was encoded using the MPEG-4 AVC/H.264 codec in YUV444 mode.

avc420EncodedBitstream2 (variable): An RFX_AVC420_BITMAP_STREAM structure that contains the second YUV420p subframe (if it exists) of a single frame that was encoded using the MPEG-4 AVC/H.264 codec in YUV444 mode.