The only thing I was not able to get yet is the void **fb=(void **)0x2180; of this function:
...
any clue from someone?
Indeed, this must be completely opaque to an uninitiated scholar...
First, a quick suggestion: for a start, return 0 in *vid_get_viewport_live_fb(), and return the correct viewport base address in *vid_get_viewport_fb(), which is easy to find from the code that references the "VRAM Address: %p" string.
Now in more detail. Actually, Canon uses (or used to anyway) three buffers, one (first) of them located at the base address, and switches between them about 30 times a second, if I remember correctly. We only need to know which one of them is most recently updated, if we want to speed up motion detection by about 30ms. There is a table somewhere in RAM with the addresses of the buffers, and a variable with the index 0,1,2 into this table. It's these two locations that you may want to find, but I'm afraid there's no generic recipe... They are usually referenced in the code just before, or around "LiveView.c". Here're sample code snippets from the Ixus950 and A720 (sorry, don't have disasms of later cameras):
FF9C9E84 LDR R3, =0x8C74
FF9C9E88 LDR R2, =0x8C58
FF9C9E8C LDRB R0, [R3]
FF9C9E90 LDR R1, [R2,R0,LSL#2]
FFC2936C LDR R4, =0x2084
...
FFC293B8 LDRB R2, [R4]
FFC293BC LDR R0, =0x21D0
FFC293C0 LDR R2, [R0,R2,LSL#2]
You can verify them in memory browser: the index variable should circle through 0,1,2, and the table should contain three addresses, starting with the VRAM base address.
P.S. When you're finished, you may want to comment the code accordingly. Which few people do, unfortunately.
EDIT: Oops, corrected ixus code...