Uncompressed Video on the

visual workstations


All 320 and 540 systems can capture and play back uncompressed video at full rate and full NTSC and PAL resolution. The video subsystem can handle real time transfer of video data to memory for all of its supported formats. The trick is to have sufficient disk bandwidth to send this data to disk.

Unfortunately, neither the 320's standard builtin IDE system drive nor the 540's standard built in SCSI system drive have sufficient bandwidth to capture uncompressed video.

To capture uncompressed video, we use the same Qlogic 1080 Ultra-II SCSI PCI board listed in the SGI price book or a comprable 64 bit Adaptec Ultra-II SCSI PCI board. We connect to this bus a pair of striped Seagate Cheetah (10k RPM) drives, which would then be formatted as a stripe set with the standard NT Disk Administrator (It is very easy to create a stripe set using the Windows/NT Disk Administrator Tool. However, make sure that you create a "stripe set" and not a "volume set". A "volume set" is just a concatenation of disks, where as a "stripe set" uses all disks for transfer simultaneously). Two of these drives striped can sustain 30MB/sec, which is sufficient to capture a single stream of active digital video in the 8-bit per component 4:2:2 YCrCb format, plus CD-quality stereo audio as well. To capture 32-bit RGBA, you will need four of these drives. Equivalent bandwidth can be achieved by using larger number of slower drives (e.g. 4x7200 RPM drives can also sustain at least 25-30MB/s).

Uncompressed Video Tips

To stripe a set of drives under Windows NT, bring up the windisk (Start->Administrative Tools->Disk Administrator). Ctrl-click on the disks that you want to stripe together. Right click on one of the selected disks and choose "Create Stripe Set" from the menu. Right click again and choose "Commit Changes". At this point, if this is the first set of stripe disks that you have on your system, you would be asked to reboot to load a new driver. When your machine comes up again, bring up windisk and format the drives. The stripe set will appear as a single disk to the file system and you are now set to use it.

Also bear in mind that inner cylinders of the disks are slower. Even though you might measure a certain bandwidth on a set of drives for a small test file, you cannot sustain that as you use up more disk space. One trick to get guaranteed high bandwidth distribution for real time performance is to not use all of the space in the drives. For example, use only 5 or 6 GB of the 9GB drives for the stripe set. Use the rest of the space to store useful meta data that does not require time critical transfer performance.

Do not use the same stripe disk set for miscellaneous files that also needs to be used when video capture/playback takes place. For example, do not put system program executables on it. Any buffered I/O fetches to the stripe disk (like that of reading an executable) incurs bandwidth on the SCSI bus and interferes with the performance of unbuffered I/O for your video stream.

Our preferred format for capturing uncompressed video is the 8-bit per component 4:2:2 YCrCb format. It takes only half the bandwidth as 32-bit RGBA, and the color fidelity remains high because the pixels do not have to be upsampled and color converted from YCrCb to RGBA.

 

Calculating Video Bandwidth

Without going into too much detail, active video bandwidths can be calculated roughly like this:

frame_width * frame_height * bytes_per_pixel * image_rate = required disk bandwidth

Some of the standard capture parameters for active video are as follows (heights are for frames):

NTSC square pixel width: 640

NTSC square pixel height: 486 (sometimes 480)

NTSC non-square pixel width: 720

NTSC non-square pixel height: 486 (sometimes 480)

NTSC image rate: 29.97 frames per second

PAL square pixel width: 768

PAL square pixel height: 576

PAL non-square pixel width: 720

PAL non-square pixel height: 576

PAL image rate: 25 frames per second

8-bit 4:2:2 YCrCb format (aka '2vuy' in QuickTime or 'UYVY' in Video for Windows): 2 bytes per pixel

32-bit RGBA formats: 4 bytes per pixel

16-bit RGBA format (aka '1555' or 16 bit BGR): 2 bytes per pixel

480 is sometimes used instead of 486 especially for video that will later be compressed using a DCT based algorithm, which requires multiple of 8 in height.

So for example, square pixel NTSC capture of '2vuy' format is

640 * 486 * 2 * 29.97 = 18.6 MB/sec

and non-square pixel PAL capture of 32-bit RGBA format is

720 * 576 * 4 * 25 = 41.5 MB/sec

 

Want to test disk bandwith?

This little program can be used to test the bandwidth of a filesystem by writing video-sized blocks of data using Unbuffered I/O.

 

For more information on video bandwidths, video standards and line numbering, square and nonsquare pixels see the Lurker's guide.

 

Back To Index

Last Updated