SunVideoAutopublic class SunVideoAuto extends Object
Fields Summary |
---|
private static String | DEVICE_PREFIX | private static String | PROTOCOL | private static String | LOCATOR_PREFIX | CaptureDeviceInfo[] | devices | int | currentID | XILCapture | xilCap | Vector | formats | int[] | ports | int[] | scales |
Constructors Summary |
---|
public SunVideoAuto() // supported scales / sizes
Vector devices = (Vector) CaptureDeviceManager.getDeviceList(null).clone();
Enumeration enum = devices.elements();
while (enum.hasMoreElements()) {
CaptureDeviceInfo cdi = (CaptureDeviceInfo) enum.nextElement();
String devName = cdi.getLocator().getProtocol();
if (devName.equals(PROTOCOL))
CaptureDeviceManager.removeDevice(cdi);
}
int nDevices = 0;
for (int i = 0; i < 7; i++) {
File fl = new File(DEVICE_PREFIX + i);
if (fl.exists()) {
doDevice(i);
nDevices++;
}
}
try {
CaptureDeviceManager.commit();
System.err.println("SunVideoAuto: Committed ok");
} catch (java.io.IOException ioe) {
System.err.println("SunVideoAuto: error committing cdm");
}
|
Methods Summary |
---|
private void | addDevice(int index)
String name = "SunVideo device " + index;
String locator = LOCATOR_PREFIX + index;
Format [] farray = new Format[formats.size()];
Enumeration enum = formats.elements();
int i = 0;
while (enum.hasMoreElements()) {
Format f = (Format) enum.nextElement();
farray[i++] = f;
}
CaptureDeviceInfo cdi = new CaptureDeviceInfo(name,
new MediaLocator(locator), farray);
CaptureDeviceManager.addDevice(cdi);
| private void | addFormat(javax.media.Format fin)
Enumeration enum = formats.elements();
while (enum.hasMoreElements()) {
Format f = (Format) enum.nextElement();
if (f.equals(fin))
return;
}
//System.err.println("New format = " + fin);
formats.addElement(fin);
| private void | doDevice(int index)
xilCap = new XILCapture(null);
VideoFormat vf;
formats = new Vector();
boolean gotPort = false;
if (!xilCap.connect(index)) {
dummyDevice(index);
return;
}
for (int i = 0; i < ports.length; i++) {
if (xilCap.setPort(ports[i])) {
getJpegFormats(i);
getRGBFormats(i);
}
}
xilCap.disconnect();
if (formats.size() > 0)
addDevice(index);
else
dummyDevice(index);
| private void | dummyDevice(int index)
// Can't get to the device, use the barest formats
addFormat(new VideoFormat(VideoFormat.JPEG));
addFormat(new RGBFormat());
addDevice(index);
| private void | getJpegFormats(int index)
if (!xilCap.setCompress("Jpeg"))
return;
for (int i = 0; i < scales.length; i++) {
xilCap.setScale(scales[i]);
// To get the real values, start the device
if (xilCap.start()) {
Dimension size = new Dimension(xilCap.getWidth(),
xilCap.getHeight());
// approximate the max for high quality
int maxbuf = 3 * size.width * size.height;
addFormat(new VideoFormat(VideoFormat.JPEG, size, maxbuf,
byte[].class, 15f));
}
xilCap.stop();
}
| private void | getRGBFormats(int index)
if (!xilCap.setCompress("RGB"))
return;
for (int i = 0; i < scales.length; i++) {
xilCap.setScale(scales[i]);
// To get the real values, start the device
if (xilCap.start()) {
Dimension size = new Dimension(xilCap.getWidth(),
xilCap.getHeight());
int stride = xilCap.getLineStride();
int maxbuf = stride * size.width;
addFormat(new RGBFormat(size, maxbuf, byte[].class,
15f,
24,
3, 2, 1, 3, stride,
Format.FALSE,
Format.NOT_SPECIFIED));
}
xilCap.stop();
}
| public static void | main(java.lang.String[] args)
SunVideoAuto a = new SunVideoAuto();
System.exit(0);
|
|