source: trunk/platform/a800/sub/100c/movie_rec.c @ 1723

Revision 1723, 9.1 KB checked in by reyalp, 2 years ago (diff)

a800 100a port from mland, patch by waterwings in http://chdk.setepontos.com/index.php?topic=650.msg81174#msg81174

  • 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
6//ffedb168 A800
7long def_table[24]={0x2000, 0x38D, 0x788, 0x5800, 0x9C5, 0x14B8, 0x10000, 0x1C6A, 0x3C45, 0x8000, 0xE35, 0x1E23,
8           0x1CCD, -0x2E1, -0x579, 0x4F33, -0x7EB, -0xF0C, 0xE666, -0x170A, -0x2BC6, 0x7333, -0xB85, -0x15E3};
9
10long table[24];
11
12void change_video_tables(int a, int b){
13 int i;
14 for (i=0;i<24;i++) table[i]=(def_table[i]*a)/b;
15}
16
17long 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};
18
19//FFD18384 (A495 = ffd0ca2c)
20void __attribute__((naked,noinline)) movie_record_task(){
21        asm volatile(
22                        "push   {r2, r3, r4, r5, r6, r7, r8, lr}\n"
23                        "ldr    r4,=0x5680\n" // [pc, #-2708]   ; ffd178fc: (00005680) \n"
24                        "ldr    r7, =0x37f\n" //[pc, #928]      ; ffd18734: (0000037f) \n"
25                        "ldr    r8, =0x2710\n" //[pc, #-2640]   ; ffd17948: (00002710) \n"
26                        "mov    r5, #1\n"
27                        "mov    r6, #0\n"
28"loc_ffd1839c:\n"
29                        "ldr    r0, [r4, #24]\n"
30                        "mov    r2, #0\n"
31                        "add    r1, sp, #4\n"
32                        "BL             sub_FFC2905C\n"
33                        "ldr    r0, [r4, #32]\n"
34                        "cmp    r0, #0\n"
35                        "BNE    loc_ffd1846c\n"
36                        "ldr    r0, [sp, #4]\n"
37                        "ldr    r1, [r0]\n"
38                        "sub    r1, r1, #2\n"
39                        "cmp    r1, #10\n"
40                        "addcc  pc, pc, r1, lsl #2\n"
41                        "B      loc_ffd1846c\n"
42                        "B      loc_ffd18420\n"
43                        "B      loc_ffd18440\n"
44                        "B      loc_ffd18450\n"
45                        "B      loc_ffd18458\n"
46                        "B      loc_ffd18428\n"
47                        "B      loc_ffd18460\n"
48                        "B      loc_ffd18430\n"
49                        "B      loc_ffd1846c\n"
50                        "B      loc_ffd18468\n"
51                        "B      loc_ffd183f8\n"
52"loc_ffd183f8:\n"
53                        "ldr    r0, =0xffd18098\n" //[pc, #784] ; ffd18710: (ffd18098) \n"
54                        "str    r6, [r4, #52]\n" //     ; 0x34\n"
55                        "str    r0, [r4, #168]\n" //    ; 0xa8\n"
56                        "ldr    r2, =0xffd17a2c\n" //[pc, #-1436]       ; ffd17e70: (ffd17a2c) \n"
57                        "ldr    r1, =0x82b78\n" //[pc, #-1436]  ; ffd17e74: (00082b78) \n"
58                        "ldr    r0, =0xffd17b10\n" //[pc, #-1436]       ; ffd17e78: (ffd17b10) \n"
59                        "str    r6, [r4, #36]\n" //     ; 0x24\n"
60                        "BL             sub_FFCBF254\n"
61                        "str    r5, [r4, #56]\n" //     ; 0x38\n"
62                        "B              loc_ffd1846c\n"
63"loc_ffd18420:\n"
64                        "BL      unlock_optical_zoom\n"         //  +
65                        "BL             sub_FFD18190\n"
66                        "B              loc_ffd1846c\n"
67"loc_ffd18428:\n"
68                        "BL             sub_FFD17E98_my\n"              //---------->
69                        "B              loc_ffd1846c\n"
70"loc_ffd18430:\n"
71                        "ldr    r1, [r0, #16]\n"
72                        "ldr    r0, [r0, #4]\n"
73                        "BL             sub_FFE11D84\n"
74                        "B              loc_ffd1846c\n"
75"loc_ffd18440:\n"
76                        "ldr    r0, [r4, #56]\n" //     ; 0x38\n"
77                        "cmp    r0, #5\n"
78                        "strne  r5, [r4, #40]\n" //     ; 0x28\n"
79                        "B              loc_ffd1846c\n"
80"loc_ffd18450:\n"
81                        "BL             sub_FFD17C98\n"
82                        "B              loc_ffd1846c\n"
83"loc_ffd18458:\n"
84                        "BL             sub_FFD17B5C\n"
85                        "B              loc_ffd1846c\n"
86"loc_ffd18460:\n"
87                        "BL             sub_FFD179B8\n"
88                        "B              loc_ffd1846c\n"
89"loc_ffd18468:\n"
90                        "BL             sub_FFD1866C\n"
91"loc_ffd1846c:\n" // ; 11 refs\n"
92                        "ldr    r1, [sp, #4]\n"
93                        "ldr    r3, =0xffd1790c\n" //[pc, #-1520]       ; ffd17e88: (ffd1790c)  **"MovieRecorder.c"\n"
94                        "str    r6, [r1]\n"
95                        "str    r7, [sp]\n"
96                        "ldr    r0, [r4, #28]\n"
97                        "mov    r2, r8\n"
98                        "BL             sub_FFC0F6A8\n"
99                        "B              loc_ffd1839c\n"
100        );
101}                       
102
103void __attribute__((naked,noinline)) sub_FFD17E98_my(){
104        asm volatile(
105                        "push   {r4, r5, r6, r7, r8, lr}\n"
106                        "sub    sp, sp, #64\n" //       ; 0x40\n"
107                        "mov    r6, #0\n"
108                        "ldr    r5, =0x5680\n" //[pc, #-1456]\n"        //; ffd178fc: (00005680) \n"
109                        "mov    r4, r0\n"
110                        "str    r6, [sp, #48]\n" //     ; 0x30\n"
111                        "str    r6, [sp, #40]\n" //     ; 0x28\n"
112                        "ldr    r0, [r5, #56]\n" //     ; 0x38\n"
113                        "mov    r8, #4\n"
114                        "cmp    r0, #3\n"
115                        "streq  r8, [r5, #56]\n"        //; 0x38\n"
116                        "ldr    r0, [r5, #168]\n"       //; 0xa8\n"
117                        "BLX    r0\n"
118                        "ldr    r0, [r5, #56]\n"        //; 0x38\n"
119                        "cmp    r0, #4\n"
120                        "BNE    loc_ffd17f70\n"
121                        "add    r3, sp, #40\n" //       ; 0x28\n"
122                        "add    r2, sp, #44\n" //       ; 0x2c\n"
123                        "add    r1, sp, #48\n" //       ; 0x30\n"
124                        "add    r0, sp, #52\n" //       ; 0x34\n"
125                        "BL             sub_FFE11F18\n"
126                        "cmp    r0, #0\n"
127                        "mov    r7, #1\n"
128                        "BNE    loc_ffd17f14\n"
129                        "ldr    r1, [r5, #40]\n"        //; 0x28\n"
130                        "cmp    r1, #1\n"
131                        "BNE    loc_ffd17f78\n"
132                        "ldr    r1, [r5, #96]\n"        //; 0x60\n"
133                        "ldr    r2, [r5, #60]\n"        //; 0x3c\n"
134                        "cmp    r1, r2\n"
135                        "bcc    loc_ffd17f78\n"
136"loc_ffd17f14:\n"
137                        "cmp    r0, #-2147483647\n" //  ; 0x80000001\n"
138                        "streq  r8, [r5, #100]\n"       //; 0x64\n"
139                        "BEQ    loc_ffd17f4c\n"
140                        "cmp    r0, #-2147483645\n" //  ; 0x80000003\n"
141                        "streq  r7, [r5, #100]\n"       //; 0x64\n"
142                        "BEQ    loc_ffd17f4c\n"
143                        "cmp    r0, #-2147483643\n" //  ; 0x80000005\n"
144                        "moveq  r0, #2\n"
145                        "BEQ    loc_ffd17f48\n"
146                        "cmp    r0, #-2147483641\n" //  ; 0x80000007\n"
147                        "strne  r6, [r5, #100]\n"       //; 0x64\n"
148                        "BNE    loc_ffd17f4c\n"
149                        "mov    r0, #3\n"
150"loc_ffd17f48:\n"
151                        "str    r0, [r5, #100]\n"       //; 0x64\n"
152"loc_ffd17f4c:\n" // ; 3 refs\n"
153                        "ldr    r0, =0x82ba4\n" //[pc, #-1588]\n"       //; ffd17920: (00082ba4) \n"
154                        "ldr    r0, [r0, #8]\n"
155                        "cmp    r0, #0\n"
156                        "BEQ    loc_ffd17f64\n"
157                        "BL             sub_FFC44E9C\n"
158                        "B              loc_ffd17f68\n"
159"loc_ffd17f64:\n"
160                        "BL             sub_FFD179B8\n"
161"loc_ffd17f68:\n"
162                        "mov    r0, #5\n"
163                        "str    r0, [r5, #56]\n"        //; 0x38\n"
164"loc_ffd17f70:\n" // ; 3 refs\n"
165                        "add    sp, sp, #64\n" //       ; 0x40\n"
166                        "pop    {r4, r5, r6, r7, r8, pc}\n"
167"loc_ffd17f78:\n" // ; 2 refs\n"
168                        "ldr    ip, [sp, #48]\n"        //; 0x30\n"
169                        "cmp    ip, #0\n"
170                        "BEQ    loc_ffd18040\n"
171                        "str    r7, [r5, #44]\n"        //; 0x2c\n"
172                        "ldr    r0, [r5, #124]\n"       //; 0x7c\n"
173                        "ldr    r1, [r4, #20]\n"
174                        "ldr    r2, [r4, #24]\n"
175                        "ldr    r8, [r4, #12]\n"
176                        "add    r3, sp, #56\n" //       ; 0x38\n"
177                        "add    lr, sp, #20\n"
178                        "stm    lr, {r0, r1, r2, r3}\n"
179                        "ldr    r3, [r5, #104]\n"       //; 0x68\n"
180                        "ldrd   r0, [sp, #40]\n"        //; 0x28\n"
181                        "add    r2, sp, #60\n" //       ; 0x3c\n"
182                        "add    lr, sp, #8\n"
183                        "stm    lr, {r0, r2, r3}\n"
184                        "str    r1, [sp, #4]\n"
185                        "str    ip, [sp]\n"
186                        "ldmib  r4, {r0, r1}\n"
187                        "ldr    r3, [sp, #52]\n"        //; 0x34\n"
188                        "mov    r2, r8\n"
189                        "BL             sub_FFDE46FC\n"
190                        "ldr    r0, [r5, #16]\n"
191                        "ldr    r1, [r5, #88]\n"        //; 0x58\n"
192                        "BL             sub_FFC0F120\n"
193                        "cmp    r0, #9\n"
194                        "BNE    loc_ffd17ff4\n"
195                        "BL             sub_FFE124D0\n"
196                        "mov    r0, #589824\n" //       ; 0x90000\n"
197                        "str    r7, [r5, #56]\n"        //; 0x38\n"
198                        "B              loc_ffd1800c\n"
199"loc_ffd17ff4:\n"
200                        "ldr    r0, [sp, #56]\n"        //; 0x38\n"
201                        "cmp    r0, #0\n"
202                        "BEQ    loc_ffd18014\n"
203                        "BL             sub_FFE124D0\n"
204                        "mov    r0, #655360\n" //       ; 0xa0000\n"
205                        "str    r7, [r5, #56]\n"        //; 0x38\n"
206"loc_ffd1800c:\n"
207                        "BL             sub_FFC70540\n"
208                        "B              loc_ffd17f70\n"
209"loc_ffd18014:\n"
210                        "BL             sub_FFDE47B4\n"
211                        "ldr    r0, [sp, #52]\n"        //; 0x34\n"
212                        "ldr    r1, [sp, #60]\n"        //; 0x3c\n"
213                        "BL             sub_FFE12290\n"
214                        "ldr    r0, [r5, #92]\n"        //; 0x5c\n"
215                        "ldr    r1, =0x56fc\n" //[pc, #1748]\n" //; ffd18704: (000056fc) \n"
216                        "add    r0, r0, #1\n"
217                        "str    r0, [r5, #92]\n"        //; 0x5c\n"
218                        "ldr    r0, [sp, #60]\n"        //; 0x3c\n"
219                        "mov    r2, #0\n"
220                        "BL             sub_FFE10140_my\n"  //----------> patched
221"loc_ffd18040:\n"
222                        "ldr    r0, [r5, #96]\n"        //; 0x60\n"
223                        "add    r0, r0, #1\n"
224                        "str    r0, [r5, #96]\n"        //; 0x60\n"
225                        "ldr    r1, [r5, #76]\n"        //; 0x4c\n"
226                        "mul    r0, r1, r0\n"
227                        "ldr    r1, [r5, #72]\n"        //; 0x48\n"
228                        "BL             sub_FFE99D88\n"
229                        "mov    r4, r0\n"
230                        "BL             sub_FFE12508\n"
231                        "ldr    r1, [r5, #128]\n"       //; 0x80\n"
232                        "cmp    r1, r4\n"
233                        "BNE    loc_ffd1807c\n"
234                        "ldr    r0, [r5, #48]\n"        //; 0x30\n"
235                        "cmp    r0, #1\n"
236                        "BNE    loc_ffd18090\n"
237"loc_ffd1807c:\n"
238                        "ldr    r1, [r5, #140]\n"       //; 0x8c\n"
239                        "mov    r0, r4\n"
240                        "BLX    r1\n"
241                        "str    r4, [r5, #128]\n"       //; 0x80\n"
242                        "str    r6, [r5, #48]\n"        //; 0x30\n"
243"loc_ffd18090:\n"
244                        "str    r6, [r5, #44]\n"        //; 0x2c\n"
245                        "B              loc_ffd17f70\n"
246        );
247}
248
249void __attribute__((naked,noinline)) sub_FFE10140_my(){
250        asm volatile(
251                        "push   {r4, r5, r6, r7, r8, r9, lr}\n"
252                        "ldr    r5, =0x9194\n" //[pc, #276]\n"  //; ffe10260: (00009194) \n"
253                        "ldr    r4, [r5]\n"
254                        "ldr    r2, [r5, #8]\n"
255                        "cmp    r4, #0\n"
256                        "ldrne  r3, [r5, #12]\n"
257                        "mov    r6, r2\n"
258                        "cmpne  r3, #1\n"
259                        "moveq  r2, #0\n"
260                        "streq  r0, [r5]\n"
261                        "streq  r2, [r5, #12]\n"
262                        "BEQ    loc_ffe1020c\n"
263                        "ldr    r3, [r5, #4]\n"
264                        "ldr    r7, =0xffedb168\n" //[pc, #236]\n"      //; ffe10268: (ffedb168) \n"
265                        "add    ip, r3, r3, lsl #1\n"
266                        "ldr    r3, [r7, ip, lsl #2]\n"
267                        "add    r8, r7, #48\n"  //; 0x30\n"
268                        "ldr    r9, [r8, ip, lsl #2]\n"
269                        "sub    r3, r4, r3\n"
270                        "cmp    r3, #0\n"
271                        "sub    r4, r4, r9\n"
272                        "BLE    loc_ffe101c8\n"
273                        "add    ip, r7, ip, lsl #2\n"
274                        "ldr    r4, [ip, #4]\n"
275                        "cmp    r4, r3\n"
276                        "addge  r2, r2, #1\n"
277                        "BGE    loc_ffe101bc\n"
278                        "ldr    ip, [ip, #8]\n"
279                        "cmp    ip, r3\n"
280                        "addlt  r2, r2, #3\n"
281                        "addge  r2, r2, #2\n"
282"loc_ffe101bc:\n"
283                        //"cmp          r2, #23\n"   // -
284                        //"movge        r2, #22\n"   // -
285                        "CMP     R2, #0x1A\n"   // +
286                        "MOVGE   R2, #0x19\n"   // +
287                        "B      loc_ffe101fc\n"
288"loc_ffe101c8:\n"
289                        "cmp    r4, #0\n"
290                        "BGE    loc_ffe101fc\n"
291                        "add    r3, r8, ip, lsl #2\n"
292                        "ldr    ip, [r3, #4]\n"
293                        "cmp    ip, r4\n"
294                        "suble  r2, r2, #1\n"
295                        "BLE    loc_ffe101f4\n"
296                        "ldr    r3, [r3, #8]\n"
297                        "cmp    r3, r4\n"
298                        "subgt  r2, r2, #3\n"
299                        "suble  r2, r2, #2\n"
300"loc_ffe101f4:\n"
301                        "cmp    r2, #0\n"
302                        "movlt  r2, #0\n"
303"loc_ffe101fc:\n" // ; 2 refs\n"
304                        "cmp    r2, r6\n"
305                        "strne  r2, [r5, #8]\n"
306                        "movne  r2, #1\n"
307                        "strne  r2, [r5, #12]\n"
308"loc_ffe1020c:\n"
309                        "ldr    r2, =CompressionRateTable\n" //=0xffedb10c\n" // [pc, #80]\n"   //; ffe10264: (ffedb10c) \n"
310                        "ldr    r3, [r5, #8]\n"
311
312                        "LDR     R3, =video_mode\n"      // +
313                        "LDR     R3, [R3]\n"             // +
314                        "LDR     R3, [R3]\n"             // +
315                        "CMP     R3, #1\n"               // +
316                        "LDREQ   R3, =video_quality\n"   // +     
317                        "LDREQ   R3, [R3]\n"             // +     
318                        "LDREQ   R2, [R3]\n"             // + 
319
320                        "ldr    r2, [r2, r3, lsl #2]\n"
321                        "str    r2, [r1]\n"
322                        "str    r0, [r5]\n"
323                        "pop    {r4, r5, r6, r7, r8, r9, pc}\n"
324        );
325}       
Note: See TracBrowser for help on using the repository browser.