FileDocCategorySizeDatePackage
VFWAutoRGB.javaAPI DocJMF 2.1.1e3027Mon May 12 12:20:34 BST 2003None

VFWAutoRGB.java

/*
 * @(#)VFWAutoRGB.java	1.4 02/08/21
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc.  All rights reserved.
 */

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;

import javax.media.*;
import javax.media.Format;
import javax.media.format.*;

import com.sun.media.vfw.*;

public class VFWAutoRGB {

    final Dimension size160 = new Dimension(160, 120);
    final Dimension size176 = new Dimension(176, 144);
    final Dimension size320 = new Dimension(320, 240);
    final Dimension size352 = new Dimension(352, 288);
    final Dimension size640 = new Dimension(640, 480);
    final Dimension size768 = new Dimension(768, 576);

    Dimension [] sizes = new Dimension [] {
	size160, size176, size320, size352, size640, size768
    };
    
    VideoFormat [] videoFormats;

    public VFWAutoRGB() {
	MediaLocator locator;
	String name;
	
	prepareFormats();
	
        Vector devices = (Vector) CaptureDeviceManager.getDeviceList(null).clone();
        Enumeration enum = devices.elements();

        while (enum.hasMoreElements()) {
            CaptureDeviceInfo cdi = (CaptureDeviceInfo) enum.nextElement();
            name = cdi.getName();
            if (name.startsWith("vfw:"))
                CaptureDeviceManager.removeDevice(cdi);
        }

	System.out.println("\nWarning:\nThis program assumes that your " +
			   "capture devices support RGB capture\n");

        int nDevices = 0;
        for (int i = 0; i < 10; i++) {
            name = VFWCapture.capGetDriverDescriptionName(i);
            if (name != null && name.length() > 1) {
                System.out.println("Found device " + name);
                System.out.println("Registering for RGB capture");

		name = "vfw:" + name + ":" + i;
		locator = new MediaLocator("vfw://" + i);
		CaptureDeviceInfo cdi = new CaptureDeviceInfo(name,
							      locator,
							      videoFormats);
		CaptureDeviceManager.addDevice(cdi);
		
                nDevices++;
            }
        }
	try {
	    CaptureDeviceManager.commit();
	} catch (IOException ioe) {
	    System.err.println("Error committing---");
	    ioe.printStackTrace();
	}
    }

    protected void prepareFormats() {
	videoFormats = new VideoFormat[sizes.length * 2]; // For RGB16/24

	for (int i = 0; i < sizes.length; i++) {
	    Dimension size = sizes[i];
	    videoFormats[i] =
		new RGBFormat(size,
			      size.width * size.height * 3,
			      Format.byteArray,
			      Format.NOT_SPECIFIED,
			      24,
			      3, 2, 1,
			      3, size.width * 3,
			      RGBFormat.TRUE,
			      Format.NOT_SPECIFIED);
	    videoFormats[i+sizes.length] =
		new RGBFormat(size,
			      size.width * size.height * 2,
			      Format.byteArray,
			      Format.NOT_SPECIFIED,
			      16,
			      0x7C00, 0x03E0, 0x001F,
			      2, size.width * 2,
			      RGBFormat.TRUE,
			      RGBFormat.LITTLE_ENDIAN);
	}			    
    }
    
    public static void main(String [] args) {
        VFWAutoRGB a = new VFWAutoRGB();
        System.exit(0);
    }
}