source: trunk/platform/ixus900_sd900/sub/100c/movie_rec.c @ 959

Revision 959, 10.9 KB checked in by reyalp, 3 years ago (diff)

ixus900_sd900 port by pixeldoc http://chdk.kernreaktor.org/mantis/view.php?id=347

  • Property svn:eol-style set to native
Line 
1#include "conf.h"
2
3int *video_quality = &conf.video_quality;
4int *video_mode    = &conf.video_mode;
5
6long def_table1[9]={0x2000,0x38D,0x788,0x5800,0x9C5,0x14B8,0x10000,0x1C6A,0x3C45};   // ???
7long def_table2[9]={0x1CCD,-0x2E1,-0x579,0x4F33,-0x7EB,-0xF0C,0xE666,-0x170A,-0x2BC6};   // ???
8
9long table1[9], table2[9];
10
11void change_video_tables(int a, int b) {
12    int i;
13    for (i=0;i<9;i++) { table1[i]=(def_table1[i]*a)/b; table2[i]=(def_table2[i]*a)/b; }
14}
15
16//long CompressionRateTable[]={0x60, 0x5D, 0x5A, 0x57, 0x54, 0x51, 0x4D, 0x48, 0x42, 0x3B, 0x32, 0x29, 0x22, 0x1D, 0x17, 0x14, 0x10, 0xE, 0xB, 9, 7, 6, 5, 4, 3, 2, 1};   // from SD800
17long CompressionRateTable[]={0x54, 0x51, 0x4D, 0x48, 0x42, 0x3B, 0x32, 0x29, 0x22, 0x1D, 0x17, 0x14, 0x10, 0xE, 0xB, 9, 7, 6, 5, 4, 3, 2, 1};   // ??? ROM:FF986318
18
19// ROM:FF984E84 task_MovieRecord()
20void __attribute__((naked,noinline)) movie_record_task() {
21    asm volatile(
22        "STMFD   SP!, {R4,R5,LR}\n"
23        "SUB     SP, SP, #4\n"
24        "MOV     R5, SP\n"
25        "MOV     R4, #0\n"
26
27        "loc_FF984E94:\n"
28        "LDR     R3, =0x76324\n"
29        "MOV     R2, #0\n"
30        "LDR     R0, [R3]\n"
31        "MOV     R1, R5\n"
32        "BL      sub_FF8213F8\n"   // ReceiveMessageQueue()
33        "LDR     R3, =0x763F8\n"
34        "LDR     R2, [R3]\n"
35        "CMP     R2, #0\n"
36        "BNE     loc_FF984F40\n"
37        "LDR     R1, [SP]\n"
38        "LDR     R3, [R1]\n"
39        "SUB     R3, R3, #2\n"
40        "MOV     R0, R1\n"
41        "CMP     R3, #9\n"   // switch 10 cases
42        "LDRLS   PC, [PC,R3,LSL#2]\n"   // switch jump
43        "B       loc_FF984F44\n"   // switch default
44
45        ".long loc_FF984F04\n"   // jump table for switch statement
46        ".long loc_FF984F1C\n"
47        ".long loc_FF984F24\n"
48        ".long loc_FF984F2C\n"
49        ".long loc_FF984F0C\n"
50        ".long loc_FF984F34\n"
51        ".long loc_FF984F14\n"
52        ".long loc_FF984F44\n"
53        ".long loc_FF984F3C\n"
54        ".long loc_FF984EFC\n"
55
56        "loc_FF984EFC:\n"
57        "BL      sub_FF984FB0\n"
58        "B       loc_FF984F40\n"
59
60        "loc_FF984F04:\n"
61        "BL      unlock_optical_zoom\n"   // + like SD800
62        "BL      sub_FF985194\n"
63        "B       loc_FF984F40\n"
64
65        "loc_FF984F0C:\n"
66        //"BL      sub_FF98565C\n"   // original
67        "BL      sub_FF98565C_my\n"   // + like SD800
68        "B       loc_FF984F40\n"
69
70        "loc_FF984F14:\n"
71        "BL      sub_FF985D48\n"
72        "B       loc_FF984F40\n"
73
74        "loc_FF984F1C:\n"
75        "BL      sub_FF98592C\n"
76        "B       loc_FF984F40\n"
77
78        "loc_FF984F24:\n"
79        "BL      sub_FF985EE4\n"
80        "B       loc_FF984F40\n"
81
82        "loc_FF984F2C:\n"
83        "BL      sub_FF986114\n"
84        "B       loc_FF984F40\n"
85
86        "loc_FF984F34:\n"
87        "BL      sub_FF985DD0\n"
88        "B       loc_FF984F40\n"
89
90        "loc_FF984F3C:\n"
91        "BL      sub_FF98597C\n"
92
93        "loc_FF984F40:\n"
94        "LDR     R1, [SP]\n"
95
96        "loc_FF984F44:\n"
97        "LDR     R3, =0x76328\n"
98        "STR     R4, [R1]\n"
99        "LDR     R0, [R3]\n"
100        "MOV     R2, R4\n"
101        "BL      sub_FF821810\n"   // PostMessageQueue()
102        "B       loc_FF984E94\n"
103    );
104}
105
106// ROM:FF98565C
107void __attribute__((naked,noinline)) sub_FF98565C_my() {
108     asm volatile(
109        "STMFD   SP!, {R4-R11,LR}\n"
110        "LDR     R5, =0x76410\n"
111        "SUB     SP, SP, #0x34\n"
112        "LDR     R3, [R5]\n"
113        "MOV     R2, #0\n"
114        "CMP     R3, #3\n"
115        "STR     R2, [SP,#0x24]\n"
116        "MOV     R4, R0\n"
117        "STR     R2, [SP,#0x2C]\n"
118        "MOVEQ   R3, #4\n"
119        "STREQ   R3, [R5]\n"
120        "LDR     R3, =0x764AC\n"
121        "MOV     LR, PC\n"
122        "LDR     PC, [R3]\n"
123        "LDR     R2, [R5]\n"
124        "CMP     R2, #4\n"
125        "BNE     loc_FF985854\n"
126        "ADD     R0, SP, #0x30\n"
127        "ADD     R1, SP, #0x2C\n"
128        "ADD     R2, SP, #0x28\n"
129        "ADD     R3, SP, #0x24\n"
130        "BL      sub_FF987180\n"
131        "CMP     R0, #0\n"
132        "BNE     loc_FF9856E4\n"
133        "LDR     R3, =0x76400\n"
134        "LDR     R2, [R3]\n"
135        "CMP     R2, #1\n"
136        "BNE     loc_FF9856F8\n"
137        "LDR     R2, =0x7643C\n"
138        "LDR     R1, =0x76414\n"
139        "LDR     R12, [R2]\n"
140        "LDR     R3, [R1]\n"
141        "CMP     R12, R3\n"
142        "BCC     loc_FF9856F8\n"
143
144        "loc_FF9856E4:\n"
145        "BL      sub_FF9858A4\n"
146        "BL      sub_FF985D08\n"
147        "MOV     R3, #5\n"
148        "STR     R3, [R5]\n"
149        "B       loc_FF985854\n"
150
151        "loc_FF9856F8:\n"
152        "LDR     R8, [SP,#0x2C]\n"
153        "CMP     R8, #0\n"
154        "BEQ     loc_FF9857D4\n"
155        "LDR     R12, =0x76444\n"
156        "LDR     R9, =0x76450\n"
157        "LDR     R11, =0x76404\n"
158        "LDR     R7, [R12]\n"
159        "ADD     R5, SP, #0x24\n"
160        "LDMIA   R5, {R5,LR}\n"
161        "LDR     R6, [R9]\n"
162        "MOV     R10, #1\n"
163        "LDMIB   R4, {R0-R2}\n"
164        "LDR     R3, [SP,#0x30]\n"
165        "ADD     R12, SP, #0x20\n"
166        "STR     R10, [R11]\n"
167        "ADD     R4, SP, #0x1C\n"
168        "STMEA   SP, {R8,LR}\n"
169        "STR     R5, [SP,#0x8]\n"
170        "STR     R12, [SP,#0xC]\n"
171        "STR     R7, [SP,#0x10]\n"
172        "STR     R6, [SP,#0x14]\n"
173        "STR     R4, [SP,#0x18]\n"
174        "BL      sub_FF8A7688\n"
175        "LDR     R3, =0x7631C\n"
176        "MOV     R1, #0x3E8\n"
177        "LDR     R0, [R3]\n"
178        "BL      sub_FF821FA4\n"   // TakeSemaphore()
179        "CMP     R0, #9\n"
180        "BNE     loc_FF98577C\n"
181        "BL      sub_FF987A10\n"
182        "LDR     R3, =0x76410\n"
183        "LDR     R0, =0xFF985644\n"   // aJpegtimeout_4
184        "B       loc_FF985794\n"
185
186        "loc_FF98577C:\n"
187        "LDR     R4, [SP,#0x1C]\n"
188        "CMP     R4, #0\n"
189        "BEQ     loc_FF9857A0\n"
190        "BL      sub_FF987A10\n"
191        "LDR     R3, =0x76410\n"
192        "LDR     R0, =0xFF985650\n"   // aJpegicerror_5
193
194        "loc_FF985794:\n"
195        "STR     R10, [R3]\n"
196        "BL      sub_FF99FA2C\n"   // eventproc_export_HardwareDefect()
197        "B       loc_FF985854\n"
198
199        "loc_FF9857A0:\n"
200        "BL      sub_FF8A77E4\n"
201        "LDR     R0, [SP,#0x30]\n"
202        "LDR     R1, [SP,#0x20]\n"
203        "BL      sub_FF987668\n"   // LOCATION: AviWriter.c:944
204        "LDR     R12, =0x76438\n"
205        "LDR     R3, [R12]\n"
206        "ADD     R3, R3, #1\n"
207        "LDR     R0, [SP,#0x20]\n"
208        "MOV     R1, R9\n"
209        "MOV     R2, R4\n"
210        "STR     R3, [R12]\n"
211        //"BL      sub_FF98650C\n"   // original
212        "BL      sub_FF98650C_my\n"   // + like SD800
213        "B       loc_FF9857D8\n"
214
215        "loc_FF9857D4:\n"
216        "LDR     R11, =0x76404\n"
217
218        "loc_FF9857D8:\n"
219        "LDR     R4, =0x7643C\n"
220        "LDR     R2, =0x7645C\n"
221        "LDR     R3, [R4]\n"
222        "LDR     R1, [R2]\n"
223        "LDR     R12, =0x76458\n"
224        "ADD     R3, R3, #1\n"
225        "MUL     R0, R1, R3\n"
226        "LDR     R1, [R12]\n"
227        "STR     R3, [R4]\n"
228        "BL      sub_FFB4E7F0\n"   // __udivsi3()
229        "LDR     R6, =0x76454\n"
230        "MOV     R4, R0\n"
231        "BL      sub_FF987A4C\n"
232        "LDR     R3, [R6]\n"
233        "CMP     R3, R4\n"
234        "BNE     loc_FF98582C\n"
235        "LDR     R5, =0x76408\n"
236        "LDR     R3, [R5]\n"
237        "CMP     R3, #1\n"
238        "BNE     loc_FF98584C\n"
239        "B       loc_FF985830\n"
240
241        "loc_FF98582C:\n"
242        "LDR     R5, =0x76408\n"
243
244        "loc_FF985830:\n"
245        "LDR     R2, =0x76490\n"
246        "MOV     R0, R4\n"
247        "MOV     LR, PC\n"
248        "LDR     PC, [R2]\n"
249        "MOV     R3, #0\n"
250        "STR     R3, [R5]\n"
251        "STR     R4, [R6]\n"
252
253        "loc_FF98584C:\n"
254        "MOV     R3, #0\n"
255        "STR     R3, [R11]\n"
256
257        "loc_FF985854:\n"
258        "ADD     SP, SP, #0x34\n"
259        "LDMFD   SP!, {R4-R11,PC}\n"
260    );
261}
262
263void __attribute__((naked,noinline)) sub_FF98650C_my(){
264    asm volatile(
265        "CMP     R2, #1\n"
266        "STMFD   SP!, {R4-R7,LR}\n"
267        "MOV     R7, R0\n"
268        "MOV     R6, R1\n"
269        "MOVEQ   R3, #0x79\n"
270        "STREQ   R3, [R6]\n"
271        "LDMEQFD SP!, {R4-R7,PC}\n"
272        "LDR     R12, =0x764F0\n"
273        "LDR     R0, [R12]\n"
274        "LDR     R3, =0x764F8\n"
275        "CMP     R0, #0\n"
276        "LDR     R1, [R3]\n"
277        "BEQ     loc_FF986554\n"
278        "LDR     R2, =0x764FC\n"
279        "LDR     R3, [R2]\n"
280        "CMP     R3, #1\n"
281        "BNE     loc_FF986568\n"
282        "B       loc_FF986558\n"
283
284        "loc_FF986554:\n"
285        "LDR     R2, =0x764FC\n"
286
287        "loc_FF986558:\n"
288        "MOV     R3, #0\n"
289        "STR     R3, [R2]\n"
290        "STR     R7, [R12]\n"
291        "B       loc_FF986620\n"
292
293        "loc_FF986568:\n"
294        "LDR     R2, =0x764F4\n"
295        "LDR     R3, [R2]\n"
296        "LDR     R5, =table1\n"
297        "ADD     R3, R3, R3,LSL#1\n"
298        "MOV     LR, R3,LSL#2\n"
299        "LDR     R2, [R5,LR]\n"
300        "LDR     R4, =table2\n"
301        "RSB     R12, R2, R0\n"
302        "LDR     R3, [R4,LR]\n"
303        "CMP     R12, #0\n"
304        "RSB     R0, R3, R0\n"
305        "BLE     loc_FF9865CC\n"
306        "ADD     R3, R5, #4\n"
307        "LDR     R2, [R3,LR]\n"
308        "CMP     R2, R12\n"
309        "ADDGE   R1, R1, #1\n"
310        "BGE     loc_FF9865C0\n"
311        "ADD     R3, R5, #8\n"
312        "LDR     R2, [R3,LR]\n"
313        "CMP     R2, R12\n"
314        "ADDGE   R1, R1, #2\n"
315        "ADDLT   R1, R1, #3\n"
316
317        "loc_FF9865C0:\n"
318        //"CMP     R1, #0xE\n"   // original
319        "CMP     R1, #0x1A\n"   // + like SD800
320        //"MOVGE   R1, #0xE\n"   // original
321        "MOVGE   R1, #0x1A\n"   // + like SD800
322        "B       loc_FF986604\n"
323
324        "loc_FF9865CC:\n"
325        "CMP     R0, #0\n"
326        "BGE     loc_FF986604\n"
327        "ADD     R3, R4, #4\n"
328        "LDR     R2, [R3,LR]\n"
329        "CMP     R2, R0\n"
330        "SUBLE   R1, R1, #1\n"
331        "BLE     loc_FF9865FC\n"
332        "ADD     R3, R4, #8\n"
333        "LDR     R2, [R3,LR]\n"
334        "CMP     R2, R0\n"
335        "SUBLE   R1, R1, #2\n"
336        "SUBGT   R1, R1, #3\n"
337
338        "loc_FF9865FC:\n"
339        "CMP     R1, #0\n"
340        "MOVLT   R1, #0\n"
341
342        "loc_FF986604:\n"
343        "LDR     R0, =0x764F8\n"
344        "LDR     R3, [R0]\n"
345        "CMP     R1, R3\n"
346        "LDRNE   R2, =0x764FC\n"
347        "MOVNE   R3, #1\n"
348        "STRNE   R1, [R0]\n"
349        "STRNE   R3, [R2]\n"
350
351        "loc_FF986620:\n"
352        "LDR     R3, =0x764F8\n"
353        //"LDR     R1, =0x6AFC\n"   // original
354        "LDR     R1, =video_mode\n"   // + like SD800
355        "LDR     R0, [R3]\n"
356        //"LDR     R2, =0xFF986318\n"   // original
357        "LDR     R2, =CompressionRateTable\n"   // +
358        "LDR     R12, [R1]\n"
359        "LDR     R12, [R12]\n"   // from SD800
360        "LDR     LR, [R2,R0,LSL#2]\n"
361        "LDR     R3, =0x764F0\n"
362        "CMP     R12, #1\n"
363        "STR     R7, [R3]\n"
364        "STR     LR, [R6]\n"
365        //"MOVEQ   R3, #0xB\n"   // like SD800
366        "LDREQ   R3, =video_quality\n"   // + like SD800
367        "LDREQ   R3, [R3]\n"   // + like SD800
368        "LDREQ   R3, [R3]\n"   // + like SD800
369        "STREQ   R3, [R6]\n"
370        "LDMFD   SP!, {R4-R7,PC}\n"
371    );
372}
Note: See TracBrowser for help on using the repository browser.