4.1 Sample Use Case

Consider the case of a remote endpoint system with one monitor configured to use a display resolution of 1280 x 1024 pixels. In this scenario, there is one instance of the RemoteFX encoder running on the remote system. The encoder is configured to use one channel with frame buffer dimensions of 1280 x 1024. As the contents of the screen are updated over time, the changes are captured, and the affected regions in the frame buffer corresponding to the bounding rectangles of the updated areas are fed as input to the encoder to compress.

The encoder examines the update regions and determines the set of tiles that correspond to those regions. The tile grid is anchored to the frame at (0, 0) and aligned to the tile size. This means that as an update region (for example, a window being dragged) moves around on the screen, the number of tiles corresponding to that update region can vary. In the figure that follows, the regions A and B are the same size (3 x 3) but they correspond to 9 and 16 tiles respectively due to their location on the screen. In the case of border tiles where the update region is not aligned to the tile grid, the area of the tile outside of the actual update region can contain arbitrary data and hence cannot be relied upon to contain valid image data. In the figure that follows, region B is not aligned to the tile grid and hence the perimeter tiles only contain a partial image.

Update region to tile grid mapping

Figure 19: Update region to tile grid mapping

The single monitor configuration results in a TS_RFX_CHANNELS (section 2.2.2.2.3) header message that specifies one channel set to 1280 x 1024. For every frame that is encoded due to region updates, the message sequence that results is described in the encode messages diagram in section 3.1.8.3.1. The TS_RFX_REGION (section 2.2.2.3.3) message contains the list of updated rectangles, and the accompanying TS_RFX_TILESET (section 2.2.2.3.4) message contains the corresponding set of tiles. The TS_RFX_TILE (section 2.2.2.3.4.1) structure contains the location of the tile in the frame. Conceptually, the decoder can decode each tile, blit it to the proper location in a temporary frame buffer, and then blit all of the updated rectangles to an output frame buffer.