I'm not familiar wth LabtechWebcam but all chips that I had to deal with required some configuration setup before you'll get proper video. That can be PAL/NTSC, picture size, brightness, some chip-specific magic registers... I didn't see anything like that in your code. Are you sure that such configuration is not necessary for you device?
Boris ----- Original Message ----- From: "Aurélien GODIN" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Sent: Sunday, February 16, 2003 1:38 PM Subject: Re: Re: [javax-usb-devel] Using isochronous tranfers ? Thank you for your quick answers. Looking at your explanations, it seems that I had correctly written my code... but it does not work yet. Here are some more details. Actually, it seems that I receive some data through the isochronous pipe but when I send it to the component that aims to display the image, that does not look like an image at all (rather like some noise !). I checked by asking for the number of bytes that were transferred using the result of "syncsubmit(byte[] data)". "0" is always returned, so no data is actually sent from the WebCam to the host... Why is 0 byte always returned ? Why do I receive something anyway (even if it is not correct) ? And a second pipe (interrupt transfer mode) is open. I do not understand its use. In case it could be useful, I run the 0.9.3 version of javax.usb on my computer. Below, the code I use : --------------------------------------------------------- public class CameraDriver implements Runnable { private UsbInterface uInterface; private UsbPipe[] pipes; private CameraInterface ci; public CameraDriver(UsbDevice camera,CameraInterface camInterface) //CameraInterface is a personal interface not belonging to the JDK... { ci = camInterface; UsbConfig config = camera.getActiveUsbConfig(); uInterface = getUsbInterface(config); addListener(camera); try { uInterface.claim(); } catch(UsbException ue) { System.out.println(ue); } pipes = getUsbPipes(uInterface); System.out.println("Debug : number of pipes in interface : "+pipes.length); for(int i=0;i<pipes.length;i++) { try { pipes[i].open(); //the following two lines indicate which transfer mode is used by the pipes //it enables me to see that 2 pipes are open, the first one using isochronous mode //the second one using interrupt mode System.out.println("Debug : isochronous mode ? : "+(pipes[i].getType()==UsbInfoConst.ENDPOINT_TYPE_ISOC)); System.out.println("Debug : interrupt mode ? : "+(pipes[i].getType()==UsbInfoConst.ENDPOINT_TYPE_INT)); } catch(UsbException ue) { System.out.println(ue); } } Thread runningDriver = new Thread(this); runningDriver.start(); } public void run() { try { byte[] isoData = new byte[1023]; //from what I read, 1023 is the maximum number of bytes that can be passed to the "syncSubmit()" method used below //So, I need a second array, "image", that will actually contain the whole image data. byte[] image = new byte[3*352*288]; //352*288*3 bytes //corresponding to 352*288 images with 3 colors //maybe it is not the right way to define the size of the byte array //but I guess the size is not the important parameter for the moment, is it ? while(true) { int isoResult = -1; for(int i=0;i<300;i++) //100 arrays are needed to transfer 352*288 bytes //or 3*100 to transfer 3*352*288 bytes corresponding to the 3 color channels { isoResult = pipes[0].syncSubmit(isoData); //the following loop only copies the data in the "image" array for(int j=0;j<1023;j++) { if(1023*i+j<3*352*288) //stops the "for" loop if the size of the image is reached { image[1023*i+j] = isoData[j]; } else { break; } } } System.out.println("Debug : number of bytes transferred through isochronous pipe: "+String.valueOf(isoResult)); //this always returns "0"... ci.setImage(image);//method defined in CameraInterface that sends the image to a JFrame for displaying purposes } } catch(UsbException ue) { System.out.println(ue+"\nMaybe a device was detached that interrupted the submission"); } } private UsbInterface getUsbInterface(UsbConfig config) { //enumerates the interfaces that are within this UsbConfig } private UsbPipe[] getUsbPipes(UsbInterface uInterface) { //returns the pipes connected to uInterface } private void addListener(UsbDevice device) { //releases properly the inferface uInterface in case the UsbDevice is detached } } ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ javax-usb-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/javax-usb-devel ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ javax-usb-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/javax-usb-devel