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