This section reviews relevant previous work.
When using the vncviewer
program for Windows, it
is possible to specify a scaling factor (as numerator and
denominator). When scaling is in effect, the viewer
software uses StretchBlt (instead of BitBlt) to display
the pixels for the user. When this call is made, the
viewer already has received all of the pixel information
(at full unscaled resolution).
The scaling in VNC is primitive. It does not conserve bandwidth, it does not treat textual information differently (i.e., by using a suitably scaled font), and it does not provide any anti-aliasing other than that provided by the underlying (Windows-only) system library.
The X Video Extension is a widely-available extension to the X11 protocol that provides support for streaming video. Integral to this support is the ability to arbitrarily scale the output. In version 2.2 of the X Video specification, support for scaled still images was provided, using both shared memory and traditional transport. The API for this support uses calls that are quite similar to XCreateWindow, XPutImage, and XShmPutImage. Currently, most of the drivers implemented in XFree86 only support data in various YUV formats. However, several modern video adaptors support RGB as well.
Note, though, that the target output for this scaling is an overlay plane -- so X Video provides functionality that is fundamentally different from that provided by the Windows StrechBlt call.