I am using JMF to connect to a USB connected webcam (Logitech Quickcam Pro 9000). This camera is capable of delivering video at maximum 2MP, however I'm having trouble setting the video format to anything higher than 320x240. Printing the available formats gives me this result:
MJPG, 320x240, Length=230400 0 extra bytes
YUV Video Format: Size = java.awt.Dimension[width=160,height=120] MaxDataLength = 38400 DataType = class [B yuvType = 32 StrideY = 320 StrideUV = 320 OffsetY = 0 OffsetU = 1 OffsetV = 3
YUV Video Format: Size = java.awt.Dimension[width=176,height=144] MaxDataLength = 50688 DataType = class [B yuvType = 32 StrideY = 352 StrideUV = 352 OffsetY = 0 OffsetU = 1 OffsetV = 3
YUV Video Format: Size = java.awt.Dimension[width=320,height=240] MaxDataLength = 153600 DataType = class [B yuvType = 32 StrideY = 640 StrideUV = 640 OffsetY = 0 OffsetU = 1 OffsetV = 3
YUV Video Format: Size = java.awt.Dimension[width=352,height=288] MaxDataLength = 202752 DataType = class [B yuvType = 32 StrideY = 704 StrideUV = 704 OffsetY = 0 OffsetU = 1 OffsetV = 3
YUV Video Format: Size = java.awt.Dimension[width=640,height=480] MaxDataLength = 614400 DataType = class [B yuvType = 32 StrideY = 1280 StrideUV = 1280 OffsetY = 0 OffsetU = 1 OffsetV = 3
MJPG, 160x120, Length=57600 0 extra bytes
MJPG, 176x144, Length=76032 0 extra bytes
MJPG, 352x288, Length=304128 0 extra bytes
MJPG, 640x480, Length=921600 0 extra bytes
This tells me that I should at least be able to get a capture of 640x480, but I can't even get that to work. How should I tell JMF what resolution I want to use?
This is an excerpt from my code as it is now:
captureDeviceInfo = CaptureDeviceManager.getDevice(DEVICE_NAME);
Format[] formats = captureDeviceInfo.getFormats();
Format selectedFormat = null;
for(Format f : formats) {
if(f.toString().contains("width=640,height=480")) {
selectedFormat = f;
break;
}
}
try {
mediaLocator = captureDeviceInfo.getLocator();
DataSource videoDataSource = Manager.createDataSource(mediaLocator);
player = Manager.createRealizedPlayer(videoDataSource);
FormatControl fc = (FormatControl)player.getControl("javax.media.control.FormatControl");
fc.setFormat(selectedFormat);
player.start();