MJPEG Encoder Research, no questions here

The GH1 firmware appears to contain 1024 hard-coded quantization matrices in ROM, selectable by the T1-T4 patch settings.
Actually, no, it does not contain anything like this.

From a technical perspective, 1024 different Q-tables would make absolutely no sense. The camera needs perhaps 8 different Q-tables for the different levels of still-frame quality and motion-frame quality. Could it have more tables for testing or future use? Sure, but nothing like 1016 more. From an engineering perspective that would be a ridiculous waste of firmware bytes.

Also Vitaliy, who knows more than any of us about the firmware internals, posited in this thread that the quantization tables are all scaled from a (single) source table in the hardware.

I think you are confused because the hack tool labels this value "Table", and it affects the final Q-table in some as-yet-unknown way. But it is NOT a Q-Table reference. According to Vitaliy, it is simply an index into a 1KB data table in the firmware.

It is possible that this data table contains several variable-length lists of scaling factors, with a terminator or length byte to delimit each sequence. That's my best guess, unless/until Vitaliy can provide the actual values for inspection.

But it is simply impossible that each byte in that table would represent a unique Q-table stored somewhere in hardware.

You aren't conversant with machine code, so I'll explain: Each byte has a range of 256 values. So even if these bytes were pointers elsewhere in the firmware or hardware, they could only point to 256 different places. There is no way that they could point to 1024 different tables.

The highest numbered table used by the GH1's MJPEG factory settings is Table 155, and I haven't tested any tables higher than that.
OK. So you're saying that you did a binary search on the values between 0-155, and they consistently converged on your desired bitrate?

Or did some fail, or give unexpected bitrates?

The number of values that you tested is very small, that it would be best if you could just list them all along with results.

J
 
...But it is simply impossible that each byte in that table would represent a unique Q-table stored somewhere in hardware.

You aren't conversant with machine code, so I'll explain: Each byte has a range of 256 values. So even if these bytes were pointers elsewhere in the firmware or hardware, they could only point to 256 different places. There is no way that they could point to 1024 different tables.
LOL, as it happens, I've specialized in assembly language DSP optimization of audio and video codecs for the last 15 years. As far as wasting firmware space is concerned, a JPEG quantization table has 64 entries, and 1024 of these tables would occupy just 64 kilobytes out of the 8.7 megabyte GH1 firmware file. But since I'm evidently too confused to understand how ridiculously impossible it would be to engineer such a thing, you may have to resort to figuring out the rest of it on your own.
 
Last edited:
Back
Top