2 * This is a small DLL that works as a wrapper for the actual realcook.so.6.0
3 * DLL from RealPlayer 8.0.
5 * This file is part of MPlayer.
7 * MPlayer is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * MPlayer is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 Assuming that RACloseCodec is the last call.
32 typedef unsigned long ulong
;
34 ulong (*raCloseCodec
)(ulong
);
35 ulong (*raDecode
)(ulong
,ulong
,ulong
,ulong
,ulong
,ulong
);
36 ulong (*raEncode
)(ulong
,ulong
,ulong
);
37 ulong (*raFlush
)(ulong
,ulong
,ulong
);
38 ulong (*raFreeDecoder
)(ulong
);
39 ulong (*raFreeEncoder
)(ulong
);
40 ulong (*raGetFlavorProperty
)(ulong
,ulong
,ulong
,ulong
);
41 ulong (*raGetNumberOfFlavors
)(void);
42 ulong (*raGetNumberOfFlavors2
)(void);
43 ulong (*raInitDecoder
)(ulong
,ulong
);
44 ulong (*raInitEncoder
)(ulong
,ulong
);
45 ulong (*raOpenCodec
)(ulong
);
46 ulong (*raOpenCodec2
)(ulong
);
47 ulong (*raSetFlavor
)(ulong
,ulong
);
48 void (*raSetDLLAccessPath
)(ulong
);
49 /* the following symbol will be _dlsym()ed by rarender.so,
50 but at least doesn't exist in cook.so
51 ulong (raSetPwd*)(ulong);
57 /* exits program when failure */
59 fputs("loadSyms()\n", stderr
);
63 fputs("opening dll...\n", stderr
);
64 handle
= dlopen ("/usr/local/RealPlayer8/Codecs/realcook.so.6.0", RTLD_LAZY
);
66 fputs (dlerror(), stderr
);
70 raCloseCodec
= dlsym(handle
, "RACloseCodec");
71 if ((error
= dlerror()) != NULL
) {
72 fprintf (stderr
, "dlsym(RACloseCodec): %s\n", error
);
75 raDecode
= dlsym(handle
, "RADecode");
76 if ((error
= dlerror()) != NULL
) {
77 fprintf (stderr
, "dlsym(RADecode): %s\n", error
);
80 raEncode
= dlsym(handle
, "RAEncode");
81 if ((error
= dlerror()) != NULL
) {
82 fprintf (stderr
, "dlsym(RAEncode): %s\n", error
);
85 raFlush
= dlsym(handle
, "RAFlush");
86 if ((error
= dlerror()) != NULL
) {
87 fprintf (stderr
, "dlsym(RAFlush): %s\n", error
);
90 raFreeDecoder
= dlsym(handle
, "RAFreeDecoder");
91 if ((error
= dlerror()) != NULL
) {
92 fprintf (stderr
, "dlsym(RAFreeDecoder): %s\n", error
);
95 raFreeEncoder
= dlsym(handle
, "RAFreeEncoder");
96 if ((error
= dlerror()) != NULL
) {
97 fprintf (stderr
, "dlsym(RAFreeEncoder): %s\n", error
);
100 raGetFlavorProperty
= dlsym(handle
, "RAGetFlavorProperty");
101 if ((error
= dlerror()) != NULL
) {
102 fprintf (stderr
, "dlsym(RAGetFlavorProperty): %s\n", error
);
105 raGetNumberOfFlavors
= dlsym(handle
, "RAGetNumberOfFlavors");
106 if ((error
= dlerror()) != NULL
) {
107 fprintf (stderr
, "dlsym(RAGetNumberOfFlavors): %s\n", error
);
110 raGetNumberOfFlavors2
= dlsym(handle
, "RAGetNumberOfFlavors2");
111 if ((error
= dlerror()) != NULL
) {
112 fprintf (stderr
, "dlsym(RAGetNumberOfFlavors2): %s\n", error
);
115 raInitDecoder
= dlsym(handle
, "RAInitDecoder");
116 if ((error
= dlerror()) != NULL
) {
117 fprintf (stderr
, "dlsym(RAInitDecoder): %s\n", error
);
120 raInitEncoder
= dlsym(handle
, "RAInitEncoder");
121 if ((error
= dlerror()) != NULL
) {
122 fprintf (stderr
, "dlsym(RAInitEncoder): %s\n", error
);
125 raOpenCodec
= dlsym(handle
, "RAOpenCodec");
126 if ((error
= dlerror()) != NULL
) {
127 fprintf (stderr
, "dlsym(RAOpenCodec): %s\n", error
);
130 raOpenCodec2
= dlsym(handle
, "RAOpenCodec2");
131 if ((error
= dlerror()) != NULL
) {
132 fprintf (stderr
, "dlsym(RAOpenCodec2): %s\n", error
);
135 raSetFlavor
= dlsym(handle
, "RASetFlavor");
136 if ((error
= dlerror()) != NULL
) {
137 fprintf (stderr
, "dlsym(RASetFlavor): %s\n", error
);
140 raSetDLLAccessPath
= dlsym(handle
, "SetDLLAccessPath");
141 if ((error
= dlerror()) != NULL
) {
142 fprintf (stderr
, "dlsym(SetDLLAccessPath): %s\n", error
);
149 void closeDll(void) {
162 struct timeval tv1
, tv2
;
165 gettimeofday(&tv1
, &tz
);
170 gettimeofday(&tv2
, &tz
);
171 secs
=tv2
.tv_sec
-tv1
.tv_sec
;
172 usecs
=tv2
.tv_usec
-tv1
.tv_usec
;
177 fprintf(stderr
, "Duration: %ld.%.6lds\n", secs
, usecs
);
181 void hexdump(void *pos
, int len
) {
182 unsigned char *cpos
=pos
, *cpos1
;
183 int lines
=(len
+15)>>4;
186 fprintf(stderr
, "%0x ", cpos
);
190 fprintf(stderr
, "%02x ", *(cpos
++));
192 fprintf(stderr
, " ");
200 unsigned char ch
=(*(cpos
++));
201 if ((ch
<32)||(ch
>127)) ch
='.';
212 ulong
RACloseCodec(ulong p1
) {
214 fprintf(stderr
, "RACloseCodec(ulong p1=0x%0lx(%ld))\n", p1
, p1
);
215 result
=(*raCloseCodec
)(p1
);
217 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
221 ulong
RADecode(ulong p1
,ulong p2
,ulong p3
,ulong p4
,ulong p5
,ulong p6
) {
223 fprintf(stderr
, "RADecode(ulong p1=0x%0lx(%ld), ", p1
, p1
);
224 fprintf(stderr
, "ulong p2=0x%0lx(%ld),\n", p2
, p2
);
225 fprintf(stderr
, "ulong p3=0x%0lx(%ld),", p3
, p3
);
226 fprintf(stderr
, "\tulong p4=0x%0lx(%ld),\n", p4
, p4
);
227 fprintf(stderr
, "ulong p5=0x%0lx(%ld), ", p5
, p5
);
228 fprintf(stderr
, "ulong p6=0x%0lx(%ld))\n", p6
, p6
);
229 hexdump((void*)p1
, 44);
230 hexdump((void*)p2
, p3
);
231 hexdump((void*)p4
, 80);
232 hexdump((void*)p5
, 16);
234 result
=(*raDecode
)(p1
,p2
,p3
,p4
,p5
,p6
);
236 hexdump((void*)p1
, 44);
237 hexdump((void*)p4
, 80);
238 hexdump((void*)p5
, 16);
239 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
243 ulong
RAEncode(ulong p1
,ulong p2
,ulong p3
) {
245 fprintf(stderr
, "RAEncode(ulong p1=0x%0lx(%ld), ", p1
, p1
);
246 fprintf(stderr
, "ulong p2=0x%0lx(%ld),\n", p2
, p2
);
247 fprintf(stderr
, "ulong p3=0x%0lx(%ld))\n", p3
, p3
);
248 result
=(*raEncode
)(p1
,p2
,p3
);
249 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
253 ulong
RAFlush(ulong p1
,ulong p2
,ulong p3
) {
255 fprintf(stderr
, "RAFlush(ulong p1=0x%0lx(%ld), ", p1
, p1
);
256 fprintf(stderr
, "ulong p2=0x%0lx(%ld),\n", p2
, p2
);
257 fprintf(stderr
, "ulong p3=0x%0lx(%ld))\n", p3
, p3
);
258 result
=(*raFlush
)(p1
,p2
,p3
);
259 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
263 ulong
RAFreeDecoder(ulong p1
) {
265 fprintf(stderr
, "RAFreeDecoder(ulong p1=0x%0lx(%ld))\n", p1
, p1
);
266 hexdump((void*)p1
, 44);
267 result
=(*raFreeDecoder
)(p1
);
268 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
272 ulong
RAFreeEncoder(ulong p1
) {
274 fprintf(stderr
, "RAFreeEncoder(ulong p1=0x%0lx(%ld))\n", p1
, p1
);
275 result
=(*raFreeEncoder
)(p1
);
276 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
280 ulong
RAGetFlavorProperty(ulong p1
,ulong p2
,ulong p3
, ulong p4
) {
282 fprintf(stderr
, "RAGetFlavorProperty(ulong p1=0x%0lx(%ld), ", p1
, p1
);
283 fprintf(stderr
, "ulong p2=0x%0lx(%ld),\n", p2
, p2
);
284 fprintf(stderr
, "ulong p3=0x%0lx(%ld), ", p3
, p3
);
285 fprintf(stderr
, "ulong p4=0x%0lx(%ld))\n", p4
, p4
);
286 hexdump((void*)p4
/*(void*)(*((void**)p4))*/,p2
);
287 hexdump((void*)p1
, 44);
289 result
=(*raGetFlavorProperty
)(p1
,p2
,p3
,p4
);
291 fprintf(stderr
, "*p4=0x%0lx\n", *((ulong
*)p4
));
292 hexdump((void*)p4
/*(void*)(*((void**)p4))*/,p2
);
293 hexdump((void*)p1
, 44);
294 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
298 ulong
RAGetNumberOfFlavors(void) {
300 fprintf(stderr
, "RAGetNumberOfFlavors(void)\n");
301 result
=(*raGetNumberOfFlavors
)();
302 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
306 ulong
RAGetNumberOfFlavors2(void) {
308 fprintf(stderr
, "RAGetNumberOfFlavors2(void)\n");
309 result
=(*raGetNumberOfFlavors2
)();
310 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
314 ulong
RAInitDecoder(ulong p1
,ulong p2
) {
316 fprintf(stderr
, "RAInitDecoder(ulong p1=0x%0lx(%ld), ", p1
, p1
);
317 fprintf(stderr
, "ulong p2=0x%0lx(%ld))\n", p2
, p2
);
318 hexdump((void*)p2
, 44);
319 hexdump((void*)p1
, 44);
320 result
=(*raInitDecoder
)(p1
,p2
);
321 hexdump((void*)p1
, 44);
322 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
326 ulong
RAInitEncoder(ulong p1
,ulong p2
) {
328 fprintf(stderr
, "RAInitEncoder(ulong p1=0x%0lx(%ld), ", p1
, p1
);
329 fprintf(stderr
, "ulong p2=0x%0lx(%ld))\n", p2
, p2
);
330 result
=(*raInitEncoder
)(p1
,p2
);
331 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
335 ulong
RAOpenCodec(ulong p1
) {
338 fprintf(stderr
, "RAOpenCodec(ulong p1=0x%0lx(%ld))\n", p1
, p1
);
339 result
=(*raOpenCodec
)(p1
);
340 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
344 ulong
RAOpenCodec2(ulong p1
) {
347 fprintf(stderr
, "RAOpenCodec2(ulong p1=0x%0lx(%ld))\n", p1
, p1
);
348 hexdump((void*)p1
, 44);
349 result
=(*raOpenCodec2
)(p1
);
350 hexdump((void*)p1
, 44);
351 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
355 ulong
RASetFlavor(ulong p1
,ulong p2
) {
357 // ulong numflavors, flavor, numprop=0, result1=0;
358 // unsigned short property;
359 fprintf(stderr
, "RASetFlavor(ulong p1=0x%0lx(%ld), ", p1
, p1
);
360 fprintf(stderr
, "ulong p2=0x%0lx(%ld))\n", p2
, p2
);
361 hexdump((void*)p1
, 44);
362 hexdump((void*)p1
, 44);
363 result
=(*raSetFlavor
)(p1
,p2
);
364 fprintf(stderr
, "--> 0x%0lx(%ld)\n\n\n", result
, result
);
365 /* fputs("######################## FLAVOR PROPERTIES ###################\n\n", stderr);
367 numflavors=raGetNumberOfFlavors2();
369 while (flavor<numflavors) {
370 fprintf(stderr, "************ Flavor %ld *************\n\n", flavor);
373 result1=raGetFlavorProperty(p1, flavor, numprop, (ulong)&property);
374 fprintf(stderr, "property %ld=%d, result=0x%0lx\n\n",
375 numprop, property, result1);
376 hexdump((void*)result1, property);
382 fputs("######################## FLAVOR PROPERTIES ###################\n\n", stderr);
387 void SetDLLAccessPath(ulong p1
) {
389 fprintf(stderr
, "SetDLLAccessPath(ulong p1=0x%0lx(%ld))\n", p1
, p1
);
390 hexdump((void*)p1
, 44);
391 (*raSetDLLAccessPath
)(p1
);
392 hexdump((void*)p1
, 44);
393 fprintf(stderr
, "--> void\n\n\n");