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