Here is another post to document all my firmware changes to date.
Address map of changes to Type-C Reels firmware (should help in supporting other types)
0x13a2f0 - I'm hooking a function call to 0x13b4b0 that set up the input buffer address (either the read or write location)
Hook code is between 0x1fc1a0 and 0x1fc240
0x1fbdb4 to 0x1fc240 All the new code is replacing legacy audio functions.
0x239934 - zeroed out a jump to print and unneeded console message
0x239980 - zeroed out a jump to print and unneeded console message
0x23fdf8 - replace the dynamic QP value (compression quantization) with a fixed value.
was
lw $a, 0x38($s1)
now
ori $a2, $zero, 0x19 (using QP 25)
0x2a173c to 0x2a1758 - this mute the error message "CFA need to be R", saying the Bayer phase was wrong, and the color was bizarre. Instead this prevents a jump to calculate the offset, and directly sets $v0 to 0x200. I do not know why this works.
0x2b7e44-60 - replaced auto white balance with hard coded RGB Gains.
0x2b7e44 Red = 0x1c0
0x2b7e48 Grn = 0x100
0x2b7e4C Blu = 0x100
0x2be8cc - Muted the error message "CA VIG Setting not ready" - my guess this is a lens shading error, as the FOV was changed and the resolution increased, it doesn't have the shading correction for this lens at that FOV (or the new lens). Lens vignetting is not a big issue (I see no issues.)
0x2bf928 - removed a function call to 0x27aee4 and set the return $v0 to 0x0. Which would check and print "convert 2 sen id fail". Not sure why I needed this, might now be unnecessary. This change is harmless.
0x2bf908-a84 this function was altered to create space, for a jump to 0x1fbdd0. The changes are not significant, only I hadn't learned yet how to redirect function yet. The jump to 0x1fbdd0 computes to the frame size for the large FOV, and prints out the size changes.
corner:902 472 (initial size data)
size:840 632
corner:522 188 (output size data)
size:1600 1200
The new size calculations:
new_width = (old_width-440)*4;
new_height = ((new_width/2 + new_width/4)>>2)<<2; // 3/4 width and divisible by 4.
new_x_offset = abs(old_x_offset + old_width/2 - new_width/2);
new_y_offset = abs(old_y_offset + old_height/2 - new_height/2);
0x2eab6c - I'm hooking a function call to 0x2ea95c that set up the input buffer address (either the read or write location)
Hook code is between 0x1fc0f0 and 0x1fc190
0x2eae00 - I'm hooking another function call to 0x2ea95c that set up the input buffer address (either the read or write location)
Hook code is between 0x1fc040 and 0x1fc1b0
0x2bfe74-e9c - This for capture size calculations. Does the same math as the preview, but with no print out. Calculation code is between 0x1fbf10 and 0x1fc000.
0x333f28-0x3376c0 Replaced boot JPG image
0x3376c8-0x33ae70 Replaced shutdown JPG image
0x3301c0 and 0xdb12b0 I changed the folder name from "Filescanner" to "Filescan5.1". I needed a way to easy compare and track firmware versions.
0xdbd910-984 All the strings used for formatting messages.
V5.1 is attached, just has code clean up (same functionality as v5.0.)
Future hack ideas:
1) Getting more grain texture unfortunately is fighting with the nature of long-GOP compression, and increasing the bit-rate seems to reduce the reliability. Why there are buffer over runs when it is only encoding 2fps doesn't make sense.
2) Frame control for 18 or 24, would be nice (20 is weird.)
3) Find the auto exposure, tweak that.
4) White balance controllable, rather than fixed.
5) please add more...