Mercurial > mplayer.hg
comparison TOOLS/realcodecs/ra.c @ 7110:86c478bea7ce
realplayer codecs wrappers, originaly written by Florian Schneider, extended
by A'rpi
author | arpi |
---|---|
date | Wed, 28 Aug 2002 14:17:06 +0000 |
parents | |
children | 7725b85ada9f |
comparison
equal
deleted
inserted
replaced
7109:4c51b2ae28c7 | 7110:86c478bea7ce |
---|---|
1 /* | |
2 GPL v2 blah blah | |
3 | |
4 This is a small dll that works as a wrapper for the actual cook.so.6.0 | |
5 dll from real player 8.0. | |
6 */ | |
7 | |
8 /* | |
9 Assuming that RACloseCodec is the last call. | |
10 */ | |
11 | |
12 #include <stddef.h> | |
13 #include <stdio.h> | |
14 #include <dlfcn.h> | |
15 #include <sys/time.h> | |
16 | |
17 typedef unsigned long ulong; | |
18 | |
19 ulong (*raCloseCodec)(ulong); | |
20 ulong (*raDecode)(ulong,ulong,ulong,ulong,ulong,ulong); | |
21 ulong (*raEncode)(ulong,ulong,ulong); | |
22 ulong (*raFlush)(ulong,ulong,ulong); | |
23 ulong (*raFreeDecoder)(ulong); | |
24 ulong (*raFreeEncoder)(ulong); | |
25 ulong (*raGetFlavorProperty)(ulong,ulong,ulong,ulong); | |
26 ulong (*raGetNumberOfFlavors)(void); | |
27 ulong (*raGetNumberOfFlavors2)(void); | |
28 ulong (*raInitDecoder)(ulong,ulong); | |
29 ulong (*raInitEncoder)(ulong,ulong); | |
30 ulong (*raOpenCodec)(ulong); | |
31 ulong (*raOpenCodec2)(ulong); | |
32 ulong (*raSetFlavor)(ulong,ulong); | |
33 void (*raSetDLLAccessPath)(ulong); | |
34 /* the following symbol will be _dlsym()ed by rarender.so, | |
35 but at least doesn't exist in cook.so | |
36 ulong (raSetPwd*)(ulong); | |
37 */ | |
38 | |
39 int b_dlOpened=0; | |
40 void *handle=NULL; | |
41 | |
42 /* exits program when failure */ | |
43 void loadSyms() { | |
44 fputs("loadSyms()\n", stderr); | |
45 if (!b_dlOpened) { | |
46 char *error; | |
47 | |
48 fputs("opening dll...\n"); | |
49 handle = dlopen ("/usr/local/RealPlayer8/Codecs/realcook.so.6.0", RTLD_LAZY); | |
50 if (!handle) { | |
51 fputs (dlerror(), stderr); | |
52 exit(1); | |
53 } | |
54 | |
55 raCloseCodec = dlsym(handle, "RACloseCodec"); | |
56 if ((error = dlerror()) != NULL) { | |
57 fprintf (stderr, "dlsym(RACloseCodec): %s\n", error); | |
58 exit(1); | |
59 } | |
60 raDecode = dlsym(handle, "RADecode"); | |
61 if ((error = dlerror()) != NULL) { | |
62 fprintf (stderr, "dlsym(RADecode): %s\n", error); | |
63 exit(1); | |
64 } | |
65 raEncode = dlsym(handle, "RAEncode"); | |
66 if ((error = dlerror()) != NULL) { | |
67 fprintf (stderr, "dlsym(RAEncode): %s\n", error); | |
68 exit(1); | |
69 } | |
70 raFlush = dlsym(handle, "RAFlush"); | |
71 if ((error = dlerror()) != NULL) { | |
72 fprintf (stderr, "dlsym(RAFlush): %s\n", error); | |
73 exit(1); | |
74 } | |
75 raFreeDecoder = dlsym(handle, "RAFreeDecoder"); | |
76 if ((error = dlerror()) != NULL) { | |
77 fprintf (stderr, "dlsym(RAFreeDecoder): %s\n", error); | |
78 exit(1); | |
79 } | |
80 raFreeEncoder = dlsym(handle, "RAFreeEncoder"); | |
81 if ((error = dlerror()) != NULL) { | |
82 fprintf (stderr, "dlsym(RAFreeEncoder): %s\n", error); | |
83 exit(1); | |
84 } | |
85 raGetFlavorProperty = dlsym(handle, "RAGetFlavorProperty"); | |
86 if ((error = dlerror()) != NULL) { | |
87 fprintf (stderr, "dlsym(RAGetFlavorProperty): %s\n", error); | |
88 exit(1); | |
89 } | |
90 raGetNumberOfFlavors = dlsym(handle, "RAGetNumberOfFlavors"); | |
91 if ((error = dlerror()) != NULL) { | |
92 fprintf (stderr, "dlsym(RAGetNumberOfFlavors): %s\n", error); | |
93 exit(1); | |
94 } | |
95 raGetNumberOfFlavors2 = dlsym(handle, "RAGetNumberOfFlavors2"); | |
96 if ((error = dlerror()) != NULL) { | |
97 fprintf (stderr, "dlsym(RAGetNumberOfFlavors2): %s\n", error); | |
98 exit(1); | |
99 } | |
100 raInitDecoder = dlsym(handle, "RAInitDecoder"); | |
101 if ((error = dlerror()) != NULL) { | |
102 fprintf (stderr, "dlsym(RAInitDecoder): %s\n", error); | |
103 exit(1); | |
104 } | |
105 raInitEncoder = dlsym(handle, "RAInitEncoder"); | |
106 if ((error = dlerror()) != NULL) { | |
107 fprintf (stderr, "dlsym(RAInitEncoder): %s\n", error); | |
108 exit(1); | |
109 } | |
110 raOpenCodec = dlsym(handle, "RAOpenCodec"); | |
111 if ((error = dlerror()) != NULL) { | |
112 fprintf (stderr, "dlsym(RAOpenCodec): %s\n", error); | |
113 exit(1); | |
114 } | |
115 raOpenCodec2 = dlsym(handle, "RAOpenCodec2"); | |
116 if ((error = dlerror()) != NULL) { | |
117 fprintf (stderr, "dlsym(RAOpenCodec2): %s\n", error); | |
118 exit(1); | |
119 } | |
120 raSetFlavor = dlsym(handle, "RASetFlavor"); | |
121 if ((error = dlerror()) != NULL) { | |
122 fprintf (stderr, "dlsym(RASetFlavor): %s\n", error); | |
123 exit(1); | |
124 } | |
125 raSetDLLAccessPath = dlsym(handle, "SetDLLAccessPath"); | |
126 if ((error = dlerror()) != NULL) { | |
127 fprintf (stderr, "dlsym(SetDLLAccessPath): %s\n", error); | |
128 exit(1); | |
129 } | |
130 b_dlOpened=1; | |
131 } | |
132 } | |
133 | |
134 void closeDll() { | |
135 if (handle) { | |
136 b_dlOpened=0; | |
137 dlclose(handle); | |
138 handle=NULL; | |
139 } | |
140 } | |
141 | |
142 void _init(void) { | |
143 loadSyms(); | |
144 } | |
145 | |
146 struct timezone tz; | |
147 struct timeval tv1, tv2; | |
148 | |
149 void tic() { | |
150 gettimeofday(&tv1, &tz); | |
151 } | |
152 | |
153 void toc() { | |
154 long secs, usecs; | |
155 gettimeofday(&tv2, &tz); | |
156 secs=tv2.tv_sec-tv1.tv_sec; | |
157 usecs=tv2.tv_usec-tv1.tv_usec; | |
158 if (usecs<0) { | |
159 usecs+=1000000; | |
160 --secs; | |
161 } | |
162 fprintf(stderr, "Duration: %d.%0.6ds\n", secs, usecs); | |
163 } | |
164 | |
165 | |
166 void hexdump(void *pos, int len) { | |
167 unsigned char *cpos=pos, *cpos1; | |
168 int lines=(len+15)>>4; | |
169 while(lines--) { | |
170 int len1=len, i; | |
171 fprintf(stderr, "%0x ", cpos); | |
172 cpos1=cpos; | |
173 for (i=0;i<16;i++) { | |
174 if (len1>0) { | |
175 fprintf(stderr, "%02x ", *(cpos++)); | |
176 } else { | |
177 fprintf(stderr, " "); | |
178 } | |
179 len1--; | |
180 } | |
181 fputs(" ", stderr); | |
182 cpos=cpos1; | |
183 for (i=0;i<16;i++) { | |
184 if (len>0) { | |
185 unsigned char ch=(*(cpos++)); | |
186 if ((ch<32)||(ch>127)) ch='.'; | |
187 fputc(ch, stderr); | |
188 } | |
189 len--; | |
190 } | |
191 fputs("\n", stderr); | |
192 } | |
193 fputc('\n', stderr); | |
194 } | |
195 | |
196 | |
197 ulong RACloseCodec(ulong p1) { | |
198 ulong result; | |
199 fprintf(stderr, "RACloseCodec(ulong p1=0x%0x(%d))\n", p1, p1); | |
200 result=(*raCloseCodec)(p1); | |
201 // closeDll(); | |
202 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
203 return result; | |
204 } | |
205 | |
206 ulong RADecode(ulong p1,ulong p2,ulong p3,ulong p4,ulong p5,ulong p6) { | |
207 ulong result; | |
208 fprintf(stderr, "RADecode(ulong p1=0x%0x(%d), ", p1, p1); | |
209 fprintf(stderr, "ulong p2=0x%0x(%d),\n", p2, p2); | |
210 fprintf(stderr, "ulong p3=0x%0x(%d),", p3, p3); | |
211 fprintf(stderr, "\tulong p4=0x%0x(%d),\n", p4, p4); | |
212 fprintf(stderr, "ulong p5=0x%0x(%d), ", p5, p5); | |
213 fprintf(stderr, "ulong p6=0x%0x(%d))\n", p6, p6); | |
214 hexdump((void*)p1, 44); | |
215 hexdump((void*)p2, p3); | |
216 hexdump((void*)p4, 80); | |
217 hexdump((void*)p5, 16); | |
218 tic(); | |
219 result=(*raDecode)(p1,p2,p3,p4,p5,p6); | |
220 toc(); | |
221 hexdump((void*)p1, 44); | |
222 hexdump((void*)p4, 80); | |
223 hexdump((void*)p5, 16); | |
224 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
225 return result; | |
226 } | |
227 | |
228 ulong RAEncode(ulong p1,ulong p2,ulong p3) { | |
229 ulong result; | |
230 fprintf(stderr, "RAEncode(ulong p1=0x%0x(%d), ", p1, p1); | |
231 fprintf(stderr, "ulong p2=0x%0x(%d),\n", p2, p2); | |
232 fprintf(stderr, "ulong p3=0x%0x(%d))\n", p3, p3); | |
233 result=(*raEncode)(p1,p2,p3); | |
234 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
235 return result; | |
236 } | |
237 | |
238 ulong RAFlush(ulong p1,ulong p2,ulong p3) { | |
239 ulong result; | |
240 fprintf(stderr, "RAFlush(ulong p1=0x%0x(%d), ", p1, p1); | |
241 fprintf(stderr, "ulong p2=0x%0x(%d),\n", p2, p2); | |
242 fprintf(stderr, "ulong p3=0x%0x(%d))\n", p3, p3); | |
243 result=(*raFlush)(p1,p2,p3); | |
244 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
245 return result; | |
246 } | |
247 | |
248 ulong RAFreeDecoder(ulong p1) { | |
249 ulong result; | |
250 fprintf(stderr, "RAFreeDecoder(ulong p1=0x%0x(%d))\n", p1, p1); | |
251 hexdump((void*)p1, 44); | |
252 result=(*raFreeDecoder)(p1); | |
253 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
254 return result; | |
255 } | |
256 | |
257 ulong RAFreeEncoder(ulong p1) { | |
258 ulong result; | |
259 fprintf(stderr, "RAFreeEncoder(ulong p1=0x%0x(%d))\n", p1, p1); | |
260 result=(*raFreeEncoder)(p1); | |
261 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
262 return result; | |
263 } | |
264 | |
265 ulong RAGetFlavorProperty(ulong p1,ulong p2,ulong p3, ulong p4) { | |
266 ulong result; | |
267 fprintf(stderr, "RAGetFlavorProperty(ulong p1=0x%0x(%d), ", p1, p1); | |
268 fprintf(stderr, "ulong p2=0x%0x(%d),\n", p2, p2); | |
269 fprintf(stderr, "ulong p3=0x%0x(%d), ", p3, p3); | |
270 fprintf(stderr, "ulong p4=0x%0x(%d))\n", p4, p4); | |
271 hexdump((void*)p4/*(void*)(*((void**)p4))*/,p2); | |
272 hexdump((void*)p1, 44); | |
273 tic(); | |
274 result=(*raGetFlavorProperty)(p1,p2,p3,p4); | |
275 toc(); | |
276 fprintf(stderr, "*p4=0x%0x\n", *((ulong*)p4)); | |
277 hexdump((void*)p4/*(void*)(*((void**)p4))*/,p2); | |
278 hexdump((void*)p1, 44); | |
279 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
280 return result; | |
281 } | |
282 | |
283 ulong RAGetNumberOfFlavors(void) { | |
284 ulong result; | |
285 fprintf(stderr, "RAGetNumberOfFlavors(void)\n"); | |
286 result=(*raGetNumberOfFlavors)(); | |
287 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
288 return result; | |
289 } | |
290 | |
291 ulong RAGetNumberOfFlavors2(void) { | |
292 ulong result; | |
293 fprintf(stderr, "RAGetNumberOfFlavors2(void)\n"); | |
294 result=(*raGetNumberOfFlavors2)(); | |
295 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
296 return result; | |
297 } | |
298 | |
299 ulong RAInitDecoder(ulong p1,ulong p2) { | |
300 ulong result; | |
301 fprintf(stderr, "RAInitDecoder(ulong p1=0x%0x(%d), ", p1, p1); | |
302 fprintf(stderr, "ulong p2=0x%0x(%d))\n", p2, p2); | |
303 hexdump((void*)p2, 44); | |
304 hexdump((void*)p1, 44); | |
305 result=(*raInitDecoder)(p1,p2); | |
306 hexdump((void*)p1, 44); | |
307 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
308 return result; | |
309 } | |
310 | |
311 ulong RAInitEncoder(ulong p1,ulong p2) { | |
312 ulong result; | |
313 fprintf(stderr, "RAInitEncoder(ulong p1=0x%0x(%d), ", p1, p1); | |
314 fprintf(stderr, "ulong p2=0x%0x(%d))\n", p2, p2); | |
315 result=(*raInitEncoder)(p1,p2); | |
316 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
317 return result; | |
318 } | |
319 | |
320 ulong RAOpenCodec(ulong p1) { | |
321 ulong result; | |
322 // loadSyms(); | |
323 fprintf(stderr, "RAOpenCodec(ulong p1=0x%0x(%d))\n", p1, p1); | |
324 result=(*raOpenCodec)(p1); | |
325 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
326 return result; | |
327 } | |
328 | |
329 ulong RAOpenCodec2(ulong p1) { | |
330 ulong result; | |
331 // loadSyms(); | |
332 fprintf(stderr, "RAOpenCodec2(ulong p1=0x%0x(%d))\n", p1, p1); | |
333 hexdump((void*)p1, 44); | |
334 result=(*raOpenCodec2)(p1); | |
335 hexdump((void*)p1, 44); | |
336 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
337 return result; | |
338 } | |
339 | |
340 ulong RASetFlavor(ulong p1,ulong p2) { | |
341 ulong result, numprop=0, result1=0; | |
342 ulong numflavors, flavor; | |
343 unsigned short property; | |
344 fprintf(stderr, "RASetFlavor(ulong p1=0x%0x(%d), ", p1, p1); | |
345 fprintf(stderr, "ulong p2=0x%0x(%d))\n", p2, p2); | |
346 hexdump((void*)p1, 44); | |
347 hexdump((void*)p1, 44); | |
348 result=(*raSetFlavor)(p1,p2); | |
349 fprintf(stderr, "--> 0x%0x(%d)\n\n\n", result, result); | |
350 /* fputs("######################## FLAVOR PROPERTIES ###################\n\n", stderr); | |
351 | |
352 numflavors=raGetNumberOfFlavors2(); | |
353 flavor=0; | |
354 while (flavor<numflavors) { | |
355 fprintf(stderr, "************ Flavor %d *************\n\n", flavor); | |
356 numprop=0; | |
357 while (numprop<32) { | |
358 result1=raGetFlavorProperty(p1, flavor, numprop, (ulong)&property); | |
359 fprintf(stderr, "property %d=%d, result=0x%0x\n\n", | |
360 numprop, property, result1); | |
361 hexdump((void*)result1, property); | |
362 numprop++; | |
363 } | |
364 flavor++; | |
365 } | |
366 | |
367 fputs("######################## FLAVOR PROPERTIES ###################\n\n", stderr); | |
368 */ | |
369 return result; | |
370 } | |
371 | |
372 void SetDLLAccessPath(ulong p1) { | |
373 // loadSyms(); | |
374 fprintf(stderr, "SetDLLAccessPath(ulong p1=0x%0x(%d))\n", p1, p1); | |
375 hexdump((void*)p1, 44); | |
376 (*raSetDLLAccessPath)(p1); | |
377 hexdump((void*)p1, 44); | |
378 fprintf(stderr, "--> void\n\n\n"); | |
379 } | |
380 |