EPIX, Inc. Home Page
SVOBJ Library

Programming Library for SILICON VIDEO MUX

  • Quick & Easy Access to SILICON VIDEO Series.
  • C/C++ Library for 16 & 32 bit DOS Programs.
  • DLL for 16 & 32 bit Windows Applications.
  • High Level Functions Avoid I/O Port Pokes.
  • RS-170 or CCIR Formats.
  • Custom Area-Scan Formats.
  • Analog or Digital Video Interfaces.
  • Control Multiple SILICON VIDEO's & Cameras.
  • Image Sequence Capture.
  • Triggered Image Capture.


The SVOBJ Library empowers C/C++ and Windows programmers to control the SILICON VIDEO series of imaging boards.

SVOBJ supports all versions and options of the SILICON VIDEO series:(1)

  • The SILICON VIDEO with up to 1 Megabyte image memory, and
  • The SILICON VIDEO MUX with up to 4 Megabytes image memory and an on-board video multiplexer.

Up to eight SILICON VIDEO's, of the same version and with the same options, can be operated selectively or simultaneously; allowing sequential control for extended image sequences, parallel control for multi-camera vision, or ping-pong control for increased processing throughput.

Through the unique flexibility of SVOBJ and the SILICON VIDEO, a nearly endless variety of area-scan cameras and sensors are supported: RS-170, CCIR, nonstandard formats, digital, analog, high frame rate, or high pixel clock rate.

SVOBJ provides high level services, allowing programmers to concentrate on the imaging application, rather than board level programming and I/O ports. For virtually all applications, the programming details described in the SILICON VIDEO User's Manual can be ignored!

SVOBJ automatically recognizes different versions and options of the SILICON VIDEO, providing consistent access to features, and hiding hardware details and differences. Fundamental services, such as capturing, displaying, setting resolution, and accessing image data and lookup tables, are compatible with "C" libraries for other EPIX imaging board families; allowing easy porting and reuse of application programs.

The SVOBJ C/C++ libraries of object code allow embedding SILICON VIDEO control into user-written applications. Under Windows, the SVOBJ DLL also enables access from existing Windows applications which support "hooks" into DLLs.

SVOBJ allows user-written programs to apply the SILICON VIDEO to applications such as image enhancement, archival, analysis, and measurement; event and motion study; document capture; cine-loop, CT, MR, and ultrasound image capture; particle analysis; visual inspection; machine vision and quality control. Join the scientists and engineers in medical, industrial, and research environments who rely on EPIX for imaging solutions.


Flexible Video Formats - Capture and display standard monochrome RS-170 and CCIR formats, as well as many nonstandard area-scan formats. (Consult the Camera Compatibility Guide for a list of supported cameras and formats).

Images captured from nonstandard sensors are optionally displayed on a video monitor in RS-170 or CCIR.(2) Images captured from all video formats can be displayed on the S/VGA (Windows versions).

Quick Video Configuration - The QUICK SET VIDEO programs, provided with any of the SVIP Interactive Programs, provide quick, custom configuration for non-standard cameras and video formats. Nonstandard video formats, once configured and verified under SVIP, are readily imported into the SVOBJ environment.

Flexible Video Modes - Set the number of pixels per line, subsampling of pixels within line, and lines per field.(3) Set genlock vs. master mode. Capture/display interlaced video as a single interlaced image; as two images, one per field; or as a single image of the odd or even field. Video rate selection of capture/display image buffer. Set split screen capture/display.

Tradeoff capture resolution against number of buffers. With 4 Mbyte image memory, for example, resolution of 512x240 yields 34 image buffers, 752x480 yields 11 image buffers, and 2048x1020 yields 2 image buffers.

Display Control - Set RGB output lookup tables, set position and color of hardware cursor, AOI box, and 64x64 icon.(3) For boards without hardware feature(s), draw and erase software cursor and AOI box.

Camera & Device Control - Sense external input signal, control external output signal. Obtain elapsed field time. Request interrupts to application program at each vertical blanking.(4)

Image Access - Read and write image buffers with efficient block read and write, or with convenient single pixel read and write. Read and write pixels sequentially within area of interest, without concern for AOI boundaries or line interlacing. Efficient read, write, or modification of lists of pixels in nonconsecutive locations. Direct access to image memory with "C" pointer.

Multiple SILICON VIDEO Units - Control one to eight SILICON VIDEO imaging boards, selecting any subset to be affected by subsequent operations. Under software control, multiple units support serial usage (capture or display image buffers of unit one, then unit two, etc.), parallel usage (capture or display all units simultaneously(5)), or any serial, parallel combination. For parallel usage, multiple units must be set to common video format and locked to common video timing.

Easy Programming - All basic features available via Simple C Functions (SCF); easy to use subroutines don't require familiarity with "C" structures, pointers, etc. An example source program demonstrates use of SCF subroutines. Additionally, an extended "structured" and "object oriented" interface provides complete control of video formats, resolutions, features and options.

High Level Services - Services such as image buffer access are "logically correct", providing interlaced data in "world view order", and independent of camera scanning or internal memory configurations.

Many SVOBJ services support "no-wait" and "check for completion" modes. During frame capture the PC is not locked into waiting for the next vertical blanking interval, but can proceed with concurrent processing.

SVOBJ provides high level services and automatic recognition of hardware versions and options, but doesn't support every compiler or environment.

An alternative, SVCODE provides a "C" source example and exposition of SILICON VIDEO programming. Unlike SVOBJ, SVCODE serves programmers familiar with SILICON VIDEO board level control and I/O ports. Programmers can study and mutate the provided example to fit the application's needs, rather than "starting from scratch". As source code, the SVCODE can be used with virtually all C compilers, or translated for use in other languages.

For simplicity, SVCODE does not provide hardware version recognition or dynamic video reconfiguration. Instead, the supported hardware and one or more video formats and resolutions are selected as the program is written and compiled.


Image memory access examples
pxd_svopen("RS-170", 0);		    // Use standard RS-170, or
//pxd_svopen("CCIR", 0);		    // .. CCIR, or
//pxd_svopen("VIDEO.FMT", 0);		    // .. nonstandard video?
pxd_snap('s', 1L, 0, 0, 0);		    // snap image into buffer 1

// Using easy, buffered, sequential, access
unsigned char	buf[512];		    // any convenient size
unsigned long	count = 0;
int	 i, j;
pxd_iopen(0, 0L, 0, 0, 256, 256, 'r');	    // open access to read 256x256 AOI
while (i = pxd_ioc(0, buf, sizeof(buf)))    // read one or more lines
    for (j = 0; j < i; j++)		    // scan and ..
	if (buf[j] < 64)		    // .. test and count pixels
	    count++;			    // .. with value less than 64

// Using direct memory access
unsigned long adrs, size, l;
unsigned char _far p;			    // not _far in Win 95 & others
adrs = pxvid_xyadrs(pxd_defimage(1L,0,0,-1,-1),0,0); // adrs of pixel 0, 0
size = (long)pxd_xdim()*pxd_ydim()*(pxd_ylace()+1);  // size of buffer 1
while (size) {
    p = pxdrv_imap(adrs, &l);		    // get pointer & max access length
    l = min(size, l); size -= l;	    // housekeeping
    while (l--) 			    // scan and ..
	if (*p++ < 64)			    // .. test and count pixels
	    count++;			    // .. with value less than 64

Image capture and VGA display example (Windows)
pxd_svopen("RS-170", 0);		    // Use standard RS-170, or
//pxd_svopen("CCIR", 0);		    // .. CCIR, or
//pxd_svopen("VIDEO.FMT", 0);		    // .. nonstandard video?

hDC = GetDC(hWnd);			    // get handle to window
GetClientRect(hWnd, &rect);		    // get size of window
rect.right++; rect.bottom++;		    // inclusive-> exclusive
SetStretchBltMode(hDC,STRETCH_DELETESCANS); // set window modes

pxd_snap('s', 1L, 0, 0, 0);		    // snap image into buffer 1
pxd_StretchDIBits(1L, 0, 0, -1, -1,	    // specify image buffer & AOI
	    0, 0, hDC,			    // specify window
	    rect.right/4, rect.bottom/4,    // window upper left corner
	    rect.right/2, rect.bottom/2,    // window size
	    0); 			    // display!

ReleaseDC(hWnd, hDC);			    // release handle

Image capture and save example
pxd_svopen("RS-170", 0);		  // Use standard RS-170, or
//pxd_svopen("CCIR", 0);		  // ..CCIR, or
//pxd_svopen("VIDEO.FMT", 0);		  // ..nonstandard video format
					  // ..created by QUICK SET VIDEO

pxd_snap('s', 2L, 0, 0, 0);		  // snap image into buffer 2
pxd_bmpsave("IMAGE.BMP",2L,0,0,256,128);  // save 256x128 AOI to file
					  // ..in .bmp format (available
					  // In DOS versions too!)

pxd_snap('s', 1L, 0, 0, 0);		  // snap image into buffer 1
pxd_pxcsave("IMAGE.PCX",1L,0,0,-1,-1);	  // save full AOI to file
					  // In .pcx format

Interactive sequence capture and video display example
long	b;
pxd_svopen("RS-170", 0);		  // Use standard RS-170, or
//pxd_svopen("CCIR", 0);		  // .. CCIR, or
//pxd_svopen("VIDEO.FMT", 0);		  // .. nonstandard video?

for (b = 1; b <= pxd_imbufs(); b++) {	  // Run thru all buffers.
    pxd_video('z', b);			  // Capture into buffer 'b'.
    printf("Key ENTER to capture buffer #%ld\\n", b);
    while (getchar() != '\\n') ;	   // Wait for user trigger.
pxd_video('p', 1);			  // Display buffer 1.

printf("Buffer #1 displayed. Key ENTER to display sequence\\n");
while (getchar() != '\\n') ;		   // Wait for user trigger.
for (b = 2; b <= pxd_imbufs(); b++) {	  // Run thru all buffers
    unsigned long t;			  // .. without trigger,
    t = pxd_vidtime();			  // .. displaying each buffer
    while (t+30 < pxd_vdtime()) ;	  // .. for 30 field times.
    pxd_video('p', b);			  // Display buffer 'b'




Up to eight SILICON VIDEO series imaging boards of identical version and configuration, but with unique I/O port addresses, can be controlled simultaneously.

Standard versions support:

Other versions available on request.

DOS memory requirements: Approx. 48 to 64 Kbytes, dependent upon selection of library routines.

Licensing permits royalty free inclusion of library routines into programs using EPIX SILICON VIDEO series imaging boards.


  1. Software may require upgrade to operate future versions or options of the SILICON VIDEO.
  2. For noninterlaced digitize and display formats with the same number of pixel per line. Other combinations may require resizing or reorganization of image data after capture and before display.
  3. For imaging boards equipped with corresponding hardware feature.
  4. Interrupt callbacks not available under Windows or protected mode DOS extenders.
  5. The degree of simultaneity is fundamentally dependent on video timing synchronization.
  6. For Windows 3.x used in Enhanced mode, the SILICON VIDEO MUX must be Revision F or later, or have ECO S27 installed. All SILICON VIDEO series boards are compatible with Windows 3.x in Standard mode.

Back to EPIX Software

Back to the EPIX home page

Image Processing Products For Research and Industry