Thank you very much @jika!
Looks like bad new for all that hoped for a really good and cheap (and fast 30Hz) QVGA imager.
Unfortunately the raw data seems to just give dead pixel, correction and image data for a 240x180 sub-image of the QVGA sensor.
Attached images are two of the raw frames converted to 16bit image data.
The first image raw000.png shows the very first frame containing the dead pixel data. As you can see there is as 240x180 region of 'valid' data embedded in a 394x296 raw image.
In contrast the raw030_384.png image shows one of the first image frames. Here you can clearly see (at least with the 240 pixel wide raw030_240.png version) that the image frames only give 240x180x2 consecutive bytes of image data followed by a large portion of invalid (65535 value) data.
Maybe there is still hope - I am not yet sure if the correction gain/offset factors are only available for the 240x180 range or for the full 384x296 frame. AND there is some method in the decompiled java source:
//INIT of device Q/M
public void InitDeviceMode() {
int recvNum = 0;
byte[] tempData = new byte[512];
tempData[0] = (byte) -5;
tempData[1] = (byte) -6;
tempData[2] = (byte) 0;
tempData[3] = (byte) -93;
tempData[60] = (byte) 1;
tempData[61] = (byte) 0;
tempData[508] = (byte) 0;
tempData[509] = (byte) -93;
tempData[510] = (byte) -53;
tempData[511] = (byte) -54;
//write single package and read one 512byte answer
while (recvNum != tempData.length) {
recvNum = this.m_EZUSB.Write(tempData, tempData.length);
delay(30);
}
delay(100);
byte[] m_buf = new byte[512];
int iLen = this.m_EZUSB.Read(m_buf, m_buf.length);
int[] m_IntBuf = new int[256];
for (int pos = 0; pos < 256; pos++) { //convert to cons. bytes to int16/32
m_IntBuf[pos] = (m_buf[pos * 2] & 255) + ((m_buf[(pos * 2) + 1] & 255) << 8);
}
//this is where windowMode and col/row start are set initially!!
this.mWindowMode = m_IntBuf[135]; //avcodec.AV_CODEC_ID_BINKVIDEO=135?!
this.m240ColStart = m_IntBuf[136]; //avcodec.AV_CODEC_ID_IFF_ILBM=136/137?!
this.m180RowStart = m_IntBuf[146]; //avcodec.AV_CODEC_ID_LAGARITH=146?!
}
This actually send some init commands to the Q1/M1 and set the windowing mode and image offsets in the app.
I think someone with basic .NET skills (or any other programming language), the source code from my last post, a M1 at hand and some time might be able to get some intersting findings here ... I am lacking mostly time and the M1 camera at the moment.