Mercurial > mplayer.hg
annotate TOOLS/realcodecs/28_8.c @ 33263:5f527a9a9521
Add an exit function.
This function will allow performing clean-up operations.
(MPlayer calls guiDone() before exiting, but only if the GUI has been
initialized, i.e. if guiInit() has been called successfully. Any
exit_player()/exit_player_with_rc() after GUI's cfg_read() until
guiInit(), or any exit_player() during guiInit() itself will end the GUI
without calling guiDone(). This exit function will at least handle
abortions during guiInit() itself. It will be called twice in case of an
guiExit() after GUI initialization - first directly, next by guiDone()
via MPlayer's exit_player_with_rc().)
author | ib |
---|---|
date | Tue, 03 May 2011 12:19:22 +0000 |
parents | 0f1b5b68af32 |
children | cef5275fc11f |
rev | line source |
---|---|
10122 | 1 /* |
28195
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
2 * This is a small DLL that works as a wrapper for the actual real28_8.so.6.0 |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
3 * DLL from RealPlayer 8.0. |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
4 * |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
5 * This file is part of MPlayer. |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
6 * |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
7 * MPlayer is free software; you can redistribute it and/or modify |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
8 * it under the terms of the GNU General Public License as published by |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
9 * the Free Software Foundation; either version 2 of the License, or |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
10 * (at your option) any later version. |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
11 * |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
12 * MPlayer is distributed in the hope that it will be useful, |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
15 * GNU General Public License for more details. |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
16 * |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
17 * You should have received a copy of the GNU General Public License along |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
18 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
3f3f00ce912e
Relicense to GPLv2 or later with the author's permission.
diego
parents:
28193
diff
changeset
|
20 */ |
10122 | 21 |
22 /* | |
23 Assuming that RACloseCodec is the last call. | |
24 */ | |
25 | |
26 #include <stddef.h> | |
27 #include <stdio.h> | |
24208
3b80b74b6813
Fix "incompatible implicit declaration of built-in function 'exit'" warnings.
diego
parents:
10122
diff
changeset
|
28 #include <stdlib.h> |
10122 | 29 #include <dlfcn.h> |
30 #include <sys/time.h> | |
31 | |
32 typedef unsigned long ulong; | |
33 | |
34 ulong (*raCloseCodec)(ulong); | |
35 ulong (*raDecode)(ulong,ulong,ulong,ulong,ulong,ulong); | |
36 ulong (*raFreeDecoder)(ulong); | |
37 ulong (*raGetFlavorProperty)(ulong,ulong,ulong,ulong); | |
38 ulong (*raGetNumberOfFlavors)(void); | |
39 ulong (*raInitDecoder)(ulong,ulong); | |
40 ulong (*raOpenCodec2)(ulong); | |
41 ulong (*raSetFlavor)(ulong); | |
42 | |
43 int b_dlOpened=0; | |
44 void *handle=NULL; | |
45 | |
46 /* exits program when failure */ | |
28232
8df85ad26746
Add missing 'void' keyword to parameterless function declarations.
diego
parents:
28195
diff
changeset
|
47 void loadSyms(void) { |
10122 | 48 fputs("loadSyms()\n", stderr); |
49 if (!b_dlOpened) { | |
50 char *error; | |
51 | |
52 // fputs("opening dll...\n"); | |
53 handle = dlopen ("/home/r/RealPlayer8/Codecs/real28_8.so.6.0", RTLD_LAZY); | |
54 if (!handle) { | |
55 fputs (dlerror(), stderr); | |
56 exit(1); | |
57 } | |
58 | |
59 raCloseCodec = dlsym(handle, "RACloseCodec"); | |
60 if ((error = dlerror()) != NULL) { | |
61 fprintf (stderr, "dlsym(RACloseCodec): %s\n", error); | |
62 exit(1); | |
63 } | |
64 raDecode = dlsym(handle, "RADecode"); | |
65 if ((error = dlerror()) != NULL) { | |
66 fprintf (stderr, "dlsym(RADecode): %s\n", error); | |
67 exit(1); | |
68 } | |
69 raFreeDecoder = dlsym(handle, "RAFreeDecoder"); | |
70 if ((error = dlerror()) != NULL) { | |
71 fprintf (stderr, "dlsym(RAFreeDecoder): %s\n", error); | |
72 exit(1); | |
73 } | |
74 raGetFlavorProperty = dlsym(handle, "RAGetFlavorProperty"); | |
75 if ((error = dlerror()) != NULL) { | |
76 fprintf (stderr, "dlsym(RAGetFlavorProperty): %s\n", error); | |
77 exit(1); | |
78 } | |
79 raGetNumberOfFlavors = dlsym(handle, "RAGetNumberOfFlavors"); | |
80 if ((error = dlerror()) != NULL) { | |
81 fprintf (stderr, "dlsym(RAGetNumberOfFlavors): %s\n", error); | |
82 exit(1); | |
83 } | |
84 raInitDecoder = dlsym(handle, "RAInitDecoder"); | |
85 if ((error = dlerror()) != NULL) { | |
86 fprintf (stderr, "dlsym(RAInitDecoder): %s\n", error); | |
87 exit(1); | |
88 } | |
89 raOpenCodec2 = dlsym(handle, "RAOpenCodec2"); | |
90 if ((error = dlerror()) != NULL) { | |
91 fprintf (stderr, "dlsym(RAOpenCodec2): %s\n", error); | |
92 exit(1); | |
93 } | |
94 raSetFlavor = dlsym(handle, "RASetFlavor"); | |
95 if ((error = dlerror()) != NULL) { | |
96 fprintf (stderr, "dlsym(RASetFlavor): %s\n", error); | |
97 exit(1); | |
98 } | |
99 b_dlOpened=1; | |
100 } | |
101 } | |
102 | |
28232
8df85ad26746
Add missing 'void' keyword to parameterless function declarations.
diego
parents:
28195
diff
changeset
|
103 void closeDll(void) { |
10122 | 104 if (handle) { |
105 b_dlOpened=0; | |
106 dlclose(handle); | |
107 handle=NULL; | |
108 } | |
109 } | |
110 | |
111 void _init(void) { | |
112 loadSyms(); | |
113 } | |
114 | |
115 struct timezone tz; | |
116 struct timeval tv1, tv2; | |
117 | |
28232
8df85ad26746
Add missing 'void' keyword to parameterless function declarations.
diego
parents:
28195
diff
changeset
|
118 void tic(void) { |
10122 | 119 gettimeofday(&tv1, &tz); |
120 } | |
121 | |
28232
8df85ad26746
Add missing 'void' keyword to parameterless function declarations.
diego
parents:
28195
diff
changeset
|
122 void toc(void) { |
10122 | 123 long secs, usecs; |
124 gettimeofday(&tv2, &tz); | |
125 secs=tv2.tv_sec-tv1.tv_sec; | |
126 usecs=tv2.tv_usec-tv1.tv_usec; | |
127 if (usecs<0) { | |
128 usecs+=1000000; | |
129 --secs; | |
130 } | |
26449
105de0884218
Remove pointless '0' flag from fprintf call, fixes the warning:
diego
parents:
25313
diff
changeset
|
131 fprintf(stderr, "Duration: %ld.%.6lds\n", secs, usecs); |
10122 | 132 } |
133 | |
134 | |
135 void hexdump(void *pos, int len) { | |
136 unsigned char *cpos=pos, *cpos1; | |
137 int lines=(len+15)>>4; | |
138 while(lines--) { | |
139 int len1=len, i; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28232
diff
changeset
|
140 fprintf(stderr, "%0x ", cpos); |
10122 | 141 cpos1=cpos; |
142 for (i=0;i<16;i++) { | |
143 if (len1>0) { | |
144 fprintf(stderr, "%02x ", *(cpos++)); | |
145 } else { | |
146 fprintf(stderr, " "); | |
147 } | |
148 len1--; | |
149 } | |
150 fputs(" ", stderr); | |
151 cpos=cpos1; | |
152 for (i=0;i<16;i++) { | |
153 if (len>0) { | |
154 unsigned char ch=(*(cpos++)); | |
155 if ((ch<32)||(ch>127)) ch='.'; | |
156 fputc(ch, stderr); | |
157 } | |
158 len--; | |
159 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28232
diff
changeset
|
160 fputs("\n", stderr); |
10122 | 161 } |
162 fputc('\n', stderr); | |
163 } | |
164 | |
165 | |
166 ulong RACloseCodec(ulong p1) { | |
167 ulong result; | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
168 fprintf(stderr, "RACloseCodec(ulong p1=0x%0lx(%ld))\n", p1, p1); |
10122 | 169 result=(*raCloseCodec)(p1); |
170 // closeDll(); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
171 fprintf(stderr, "--> 0x%0lx(%ld)\n\n\n", result, result); |
10122 | 172 return result; |
173 } | |
174 | |
175 static int pkno=0; | |
176 | |
177 ulong RADecode(ulong p1,ulong p2,ulong p3,ulong p4,ulong* p5,ulong p6) { | |
178 ulong result; | |
179 int x,y; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28232
diff
changeset
|
180 |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
181 fprintf(stderr, "RADecode(ulong ctx=0x%0lx, ", p1); |
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
182 fprintf(stderr, "ulong src=0x%0lx,\n", p2); |
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
183 fprintf(stderr, "ulong len=0x%0lx,", p3); |
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
184 fprintf(stderr, "ulong dst=0x%0lx,\n", p4); |
10122 | 185 fprintf(stderr, "ulong dstcnt=0x%0x, ",p5); |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
186 fprintf(stderr, "ulong p6=%ld)\n", p6); |
10122 | 187 // hexdump((void*)p1, 44); |
188 hexdump((void*)p2, p3); | |
189 // hexdump((void*)p4, 80); | |
190 // hexdump((void*)p5, 16); | |
191 // tic(); | |
192 | |
193 fprintf(stderr,"\n#CRC[%3d]",pkno++); | |
194 for(y=0;y<10;y++){ | |
195 unsigned short crc=0; | |
196 unsigned char* p=p2; | |
197 p+=60*y; | |
198 for(x=0;x<60;x++){ | |
199 crc+=p[x]<<(x&7); | |
200 } | |
201 fprintf(stderr," %04X",crc); | |
202 } | |
203 fprintf(stderr,"\n"); | |
204 | |
205 result=(*raDecode)(p1,p2,p3,p4,p5,p6); | |
206 // toc(); | |
207 // hexdump((void*)p1, 44); | |
208 // hexdump((void*)p4, 80); | |
209 // hexdump((void*)p5, 16); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
210 fprintf(stderr, "--> 0x%0lx(%ld) decoded: %ld \n\n\n", result, result, p5[0]); |
10122 | 211 return result; |
212 } | |
213 | |
214 ulong RAFreeDecoder(ulong p1) { | |
215 ulong result; | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
216 fprintf(stderr, "RAFreeDecoder(ulong p1=0x%0lx(%ld))\n", p1, p1); |
10122 | 217 hexdump((void*)p1, 44); |
218 result=(*raFreeDecoder)(p1); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
219 fprintf(stderr, "--> 0x%0lx(%ld)\n\n\n", result, result); |
10122 | 220 return result; |
221 } | |
222 | |
223 ulong RAGetFlavorProperty(ulong p1,ulong p2,ulong p3, ulong p4) { | |
224 ulong result; | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
225 fprintf(stderr, "RAGetFlavorProperty(ulong p1=0x%0lx(%ld), ", p1, p1); |
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
226 fprintf(stderr, "ulong p2=0x%0lx(%ld),\n", p2, p2); |
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
227 fprintf(stderr, "ulong p3=0x%0lx(%ld), ", p3, p3); |
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
228 fprintf(stderr, "ulong p4=0x%0lx(%ld))\n", p4, p4); |
10122 | 229 hexdump((void*)p4/*(void*)(*((void**)p4))*/,p2); |
230 hexdump((void*)p1, 44); | |
231 tic(); | |
232 result=(*raGetFlavorProperty)(p1,p2,p3,p4); | |
233 toc(); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
234 fprintf(stderr, "*p4=0x%0lx\n", *((ulong*)p4)); |
10122 | 235 hexdump((void*)p4/*(void*)(*((void**)p4))*/,p2); |
236 hexdump((void*)p1, 44); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
237 fprintf(stderr, "--> 0x%0lx(%ld)\n\n\n", result, result); |
10122 | 238 return result; |
239 } | |
240 | |
241 ulong RAGetNumberOfFlavors(void) { | |
242 ulong result; | |
243 fprintf(stderr, "RAGetNumberOfFlavors(void)\n"); | |
244 result=(*raGetNumberOfFlavors)(); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
245 fprintf(stderr, "--> 0x%0lx(%ld)\n\n\n", result, result); |
10122 | 246 return result; |
247 } | |
248 | |
249 ulong RAInitDecoder(ulong p1,ulong p2) { | |
250 ulong result; | |
24214 | 251 // int temp[256]; |
252 // unsigned char temp2[256]; | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
253 fprintf(stderr, "RAInitDecoder(ulong p1=0x%0lx(%ld), ", p1, p1); |
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
254 fprintf(stderr, "ulong p2=0x%0lx(%ld))\n", p2, p2); |
10122 | 255 hexdump((void*)p2, 4*7); |
256 // hexdump((void*)p1, 44); | |
257 // memset(temp,0x77,256*4); | |
258 // memcpy(temp,p2,4*7); | |
259 // hexdump((void*)temp[6], 32); | |
260 | |
261 // memset(temp2,0x77,256); | |
262 // memcpy(temp2,temp[6],16); | |
263 // temp[6]=temp2; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28232
diff
changeset
|
264 |
10122 | 265 result=(*raInitDecoder)(p1,/*temp*/p2); |
266 // hexdump((void*)temp[6], 32); | |
267 // memcpy(p2,temp,4*11); | |
268 // hexdump((void*)p1, 44); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
269 fprintf(stderr, "--> 0x%0lx(%ld)\n\n\n", result, result); |
10122 | 270 return result; |
271 } | |
272 | |
273 ulong RAOpenCodec2(ulong p1) { | |
274 ulong result; | |
275 // loadSyms(); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
276 fprintf(stderr, "RAOpenCodec2(ulong p1=0x%0lx(%ld)\n", p1, p1); |
10122 | 277 hexdump((void*)p1, 44); |
278 result=(*raOpenCodec2)(p1); | |
279 hexdump((void*)p1, 44); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
280 fprintf(stderr, "--> 0x%0lx(%ld)\n\n\n", result, result); |
10122 | 281 return result; |
282 } | |
283 | |
284 ulong RASetFlavor(ulong p1) { | |
24214 | 285 ulong result; |
286 // ulong numflavors, flavor, numprop=0, result1=0; | |
287 // unsigned short property; | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
288 fprintf(stderr, "RASetFlavor(ulong p1=0x%0lx(%ld))\n", p1, p1); |
10122 | 289 hexdump((void*)p1, 44); |
290 // hexdump((void*)p1, 44); | |
291 result=(*raSetFlavor)(p1); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
292 fprintf(stderr, "--> 0x%0lx(%ld)\n\n\n", result, result); |
10122 | 293 |
294 #if 0 | |
295 fputs("######################## FLAVOR PROPERTIES ###################\n\n", stderr); | |
296 numflavors=raGetNumberOfFlavors2(); | |
297 flavor=0; | |
298 while (flavor<numflavors) { | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
299 fprintf(stderr, "************ Flavor %ld *************\n\n", flavor); |
10122 | 300 numprop=0; |
301 while (numprop<32) { | |
302 result1=raGetFlavorProperty(p1, flavor, numprop, (ulong)&property); | |
25313
9e13376e0daa
Fix printf format string length modifiers, removes about a trillion warnings.
diego
parents:
24214
diff
changeset
|
303 fprintf(stderr, "property %ld=%d, result=0x%0lx\n\n", |
10122 | 304 numprop, property, result1); |
305 hexdump((void*)result1, property); | |
306 numprop++; | |
307 } | |
308 flavor++; | |
309 } | |
310 | |
311 fputs("######################## FLAVOR PROPERTIES ###################\n\n", stderr); | |
312 #endif | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28232
diff
changeset
|
313 |
10122 | 314 return result; |
315 } |