Mercurial > mplayer.hg
annotate mpcommon.c @ 32714:5248e989612a
Remove libswscale subdirectory.
libswscale has been moved to FFmpeg since some time and only kept in the
MPlayer repository for historical reasons and difficulty in moving code
complete with history between Subversion repositories.
FFmpeg now contains libswscale directly without indirection through an
svn:externals property, so no reason to keep libswscale in MPlayer remains.
author | diego |
---|---|
date | Thu, 20 Jan 2011 09:41:43 +0000 |
parents | 24e4682ce6ec |
children | 9404cb19e08d |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
17 */ |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30025
diff
changeset
|
18 |
32414
a14dd8b8d314
Add windows.h include to fix compilation in some cases.
reimar
parents:
32389
diff
changeset
|
19 #if defined(__MINGW32__) || defined(__CYGWIN__) |
a14dd8b8d314
Add windows.h include to fix compilation in some cases.
reimar
parents:
32389
diff
changeset
|
20 #include <windows.h> |
a14dd8b8d314
Add windows.h include to fix compilation in some cases.
reimar
parents:
32389
diff
changeset
|
21 #endif |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
22 #include <stdlib.h> |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
23 #include "stream/stream.h" |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
24 #include "libmpdemux/demuxer.h" |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
25 #include "libmpdemux/stheader.h" |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
26 #include "codec-cfg.h" |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
27 #include "osdep/timer.h" |
32416 | 28 #include "osdep/priority.h" |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
29 #include "path.h" |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
30 #include "mplayer.h" |
32466
9e627a1793b1
Move font_load.[ch], font_load_ft.c and osd_font.h from libvo to sub.
cigaes
parents:
32461
diff
changeset
|
31 #include "sub/font_load.h" |
32467 | 32 #include "sub/sub.h" |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
33 #include "libvo/video_out.h" |
28325 | 34 #include "cpudetect.h" |
35 #include "help_mp.h" | |
36 #include "mp_msg.h" | |
32456 | 37 #include "sub/spudec.h" |
28325 | 38 #include "version.h" |
32459
1a605463f62b
Move vobsub.[ch] and unrar_exec.[ch] to the sub directory.
cigaes
parents:
32457
diff
changeset
|
39 #include "sub/vobsub.h" |
32457 | 40 #include "sub/av_sub.h" |
29759
d287e2785570
Move teletext specific code from stream into libmpcodecs.
cehoyos
parents:
29670
diff
changeset
|
41 #include "libmpcodecs/dec_teletext.h" |
25855
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
42 #include "libavutil/intreadwrite.h" |
26416 | 43 #include "m_option.h" |
29666
ca2030774a61
Include mpcommon.h in mpcommon.c, ensures that the declarations in the header
reimar
parents:
29665
diff
changeset
|
44 #include "mpcommon.h" |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
45 |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
46 double sub_last_pts = -303; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
47 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26422
diff
changeset
|
48 #ifdef CONFIG_ASS |
32461 | 49 #include "sub/ass_mp.h" |
31792
55dacfca4a43
Rename libass types to match upstream libass >= 0.9.7
greg
parents:
31686
diff
changeset
|
50 ASS_Track* ass_track = 0; // current track to render |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
51 #endif |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
52 |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
53 sub_data* subdata = NULL; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
54 subtitle* vo_sub_last = NULL; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
55 |
31796
a6abbb323d04
10l: Add the Subversion revision to the version string, not "VERSION".
diego
parents:
31792
diff
changeset
|
56 const char *mencoder_version = "MEncoder " VERSION; |
a6abbb323d04
10l: Add the Subversion revision to the version string, not "VERSION".
diego
parents:
31792
diff
changeset
|
57 const char *mplayer_version = "MPlayer " VERSION; |
28325 | 58 |
59 void print_version(const char* name) | |
60 { | |
61 mp_msg(MSGT_CPLAYER, MSGL_INFO, MP_TITLE, name); | |
62 | |
63 /* Test for CPU capabilities (and corresponding OS support) for optimizing */ | |
64 GetCpuCaps(&gCpuCaps); | |
65 #if ARCH_X86 | |
66 mp_msg(MSGT_CPLAYER, MSGL_V, | |
28331
8461282f0eed
Add SSSE3 and CMOV to CPU information printed on startup.
diego
parents:
28330
diff
changeset
|
67 "CPUflags: MMX: %d MMX2: %d 3DNow: %d 3DNowExt: %d SSE: %d SSE2: %d SSSE3: %d\n", |
28325 | 68 gCpuCaps.hasMMX, gCpuCaps.hasMMX2, |
69 gCpuCaps.has3DNow, gCpuCaps.has3DNowExt, | |
28331
8461282f0eed
Add SSSE3 and CMOV to CPU information printed on startup.
diego
parents:
28330
diff
changeset
|
70 gCpuCaps.hasSSE, gCpuCaps.hasSSE2, gCpuCaps.hasSSSE3); |
29114
06540eb5ef6a
Rename RUNTIME_CPUDETECT to CONFIG_RUNTIME_CPUDETECT and always define it.
ramiro
parents:
28340
diff
changeset
|
71 #if CONFIG_RUNTIME_CPUDETECT |
28325 | 72 mp_msg(MSGT_CPLAYER,MSGL_V, MSGTR_CompiledWithRuntimeDetection); |
73 #else | |
74 mp_msg(MSGT_CPLAYER,MSGL_V, MSGTR_CompiledWithCPUExtensions); | |
28340
b0af9b4b5015
Replace a bunch of '#if HAVE_FOO' preprocessor checks by 'if (HAVE_FOO)'.
diego
parents:
28335
diff
changeset
|
75 if (HAVE_MMX) |
28325 | 76 mp_msg(MSGT_CPLAYER,MSGL_V," MMX"); |
28340
b0af9b4b5015
Replace a bunch of '#if HAVE_FOO' preprocessor checks by 'if (HAVE_FOO)'.
diego
parents:
28335
diff
changeset
|
77 if (HAVE_MMX2) |
28325 | 78 mp_msg(MSGT_CPLAYER,MSGL_V," MMX2"); |
28340
b0af9b4b5015
Replace a bunch of '#if HAVE_FOO' preprocessor checks by 'if (HAVE_FOO)'.
diego
parents:
28335
diff
changeset
|
79 if (HAVE_AMD3DNOW) |
28325 | 80 mp_msg(MSGT_CPLAYER,MSGL_V," 3DNow"); |
28340
b0af9b4b5015
Replace a bunch of '#if HAVE_FOO' preprocessor checks by 'if (HAVE_FOO)'.
diego
parents:
28335
diff
changeset
|
81 if (HAVE_AMD3DNOWEXT) |
28330 | 82 mp_msg(MSGT_CPLAYER,MSGL_V," 3DNowExt"); |
28340
b0af9b4b5015
Replace a bunch of '#if HAVE_FOO' preprocessor checks by 'if (HAVE_FOO)'.
diego
parents:
28335
diff
changeset
|
83 if (HAVE_SSE) |
28325 | 84 mp_msg(MSGT_CPLAYER,MSGL_V," SSE"); |
28340
b0af9b4b5015
Replace a bunch of '#if HAVE_FOO' preprocessor checks by 'if (HAVE_FOO)'.
diego
parents:
28335
diff
changeset
|
85 if (HAVE_SSE2) |
28325 | 86 mp_msg(MSGT_CPLAYER,MSGL_V," SSE2"); |
28340
b0af9b4b5015
Replace a bunch of '#if HAVE_FOO' preprocessor checks by 'if (HAVE_FOO)'.
diego
parents:
28335
diff
changeset
|
87 if (HAVE_SSSE3) |
28331
8461282f0eed
Add SSSE3 and CMOV to CPU information printed on startup.
diego
parents:
28330
diff
changeset
|
88 mp_msg(MSGT_CPLAYER,MSGL_V," SSSE3"); |
28340
b0af9b4b5015
Replace a bunch of '#if HAVE_FOO' preprocessor checks by 'if (HAVE_FOO)'.
diego
parents:
28335
diff
changeset
|
89 if (HAVE_CMOV) |
28331
8461282f0eed
Add SSSE3 and CMOV to CPU information printed on startup.
diego
parents:
28330
diff
changeset
|
90 mp_msg(MSGT_CPLAYER,MSGL_V," CMOV"); |
28325 | 91 mp_msg(MSGT_CPLAYER,MSGL_V,"\n"); |
29114
06540eb5ef6a
Rename RUNTIME_CPUDETECT to CONFIG_RUNTIME_CPUDETECT and always define it.
ramiro
parents:
28340
diff
changeset
|
92 #endif /* CONFIG_RUNTIME_CPUDETECT */ |
28325 | 93 #endif /* ARCH_X86 */ |
94 } | |
95 | |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
96 static int is_text_sub(int type) |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
97 { |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
98 return type == 't' || type == 'm' || type == 'a'; |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
99 } |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
100 |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
101 static int is_av_sub(int type) |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
102 { |
31628
f15df2e3081b
Add support for DVB and XSUB subtitles, not yet working properly.
reimar
parents:
31626
diff
changeset
|
103 return type == 'b' || type == 'p' || type == 'x'; |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
104 } |
28325 | 105 |
29668
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29666
diff
changeset
|
106 void update_subtitles(sh_video_t *sh_video, double refpts, demux_stream_t *d_dvdsub, int reset) |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
107 { |
31597
1eb8dc8f96fa
Make subdelay handling work the same way for all subtitle types and also allow
reimar
parents:
31559
diff
changeset
|
108 double curpts = refpts - sub_delay; |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
109 unsigned char *packet=NULL; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
110 int len; |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
111 int type = d_dvdsub->sh ? ((sh_sub_t *)d_dvdsub->sh)->type : 'v'; |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
112 static subtitle subs; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
113 if (reset) { |
25604 | 114 sub_clear_text(&subs, MP_NOPTS_VALUE); |
115 if (vo_sub) { | |
29670
2e3751815a21
Add support for displaying subtitles on the command-line when playing
reimar
parents:
29668
diff
changeset
|
116 set_osd_subtitle(NULL); |
25604 | 117 } |
118 if (vo_spudec) { | |
119 spudec_reset(vo_spudec); | |
120 vo_osd_changed(OSDTYPE_SPU); | |
121 } | |
32142
4614728cab25
build system: Merge all FFmpeg library checks into a single FFmpeg check.
diego
parents:
31948
diff
changeset
|
122 #ifdef CONFIG_FFMPEG |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
123 if (is_av_sub(type)) |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
124 reset_avsub(d_dvdsub->sh); |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
125 #endif |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
126 } |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
127 // find sub |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
128 if (subdata) { |
29668
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29666
diff
changeset
|
129 if (sub_fps==0) sub_fps = sh_video ? sh_video->fps : 25; |
25604 | 130 current_module = "find_sub"; |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
131 if (refpts > sub_last_pts || refpts < sub_last_pts-1.0) { |
31597
1eb8dc8f96fa
Make subdelay handling work the same way for all subtitle types and also allow
reimar
parents:
31559
diff
changeset
|
132 find_sub(subdata, curpts * |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29114
diff
changeset
|
133 (subdata->sub_uses_time ? 100. : sub_fps)); |
25604 | 134 if (vo_sub) vo_sub_last = vo_sub; |
135 // FIXME! frame counter... | |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
136 sub_last_pts = refpts; |
25604 | 137 } |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
138 } |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
139 |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
140 // DVD sub: |
31608
ad007a37ae4e
Automatically allocate a vo_spudec if there is none.
reimar
parents:
31599
diff
changeset
|
141 if (vo_config_count && |
31626
8bb62807f3b8
Remove dvdsub_id checks that should not be necessary.
reimar
parents:
31608
diff
changeset
|
142 (vobsub_id >= 0 || type == 'v')) { |
25604 | 143 int timestamp; |
144 current_module = "spudec"; | |
31597
1eb8dc8f96fa
Make subdelay handling work the same way for all subtitle types and also allow
reimar
parents:
31559
diff
changeset
|
145 /* Get a sub packet from the DVD or a vobsub */ |
25604 | 146 while(1) { |
147 // Vobsub | |
148 len = 0; | |
149 if (vo_vobsub) { | |
31597
1eb8dc8f96fa
Make subdelay handling work the same way for all subtitle types and also allow
reimar
parents:
31559
diff
changeset
|
150 if (curpts >= 0) { |
1eb8dc8f96fa
Make subdelay handling work the same way for all subtitle types and also allow
reimar
parents:
31559
diff
changeset
|
151 len = vobsub_get_packet(vo_vobsub, curpts, |
25604 | 152 (void**)&packet, ×tamp); |
153 if (len > 0) { | |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
154 mp_dbg(MSGT_CPLAYER,MSGL_V,"\rVOB sub: len=%d v_pts=%5.3f v_timer=%5.3f sub=%5.3f ts=%d \n",len,refpts,sh_video->timer,timestamp / 90000.0,timestamp); |
25604 | 155 } |
156 } | |
157 } else { | |
158 // DVD sub | |
31558 | 159 len = ds_get_packet_sub(d_dvdsub, (unsigned char**)&packet, NULL, NULL); |
25604 | 160 if (len > 0) { |
161 // XXX This is wrong, sh_video->pts can be arbitrarily | |
162 // much behind demuxing position. Unfortunately using | |
163 // d_video->pts which would have been the simplest | |
164 // improvement doesn't work because mpeg specific hacks | |
165 // in video.c set d_video->pts to 0. | |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
166 float x = d_dvdsub->pts - refpts; |
25604 | 167 if (x > -20 && x < 20) // prevent missing subs on pts reset |
31597
1eb8dc8f96fa
Make subdelay handling work the same way for all subtitle types and also allow
reimar
parents:
31559
diff
changeset
|
168 timestamp = 90000*d_dvdsub->pts; |
1eb8dc8f96fa
Make subdelay handling work the same way for all subtitle types and also allow
reimar
parents:
31559
diff
changeset
|
169 else timestamp = 90000*curpts; |
25604 | 170 mp_dbg(MSGT_CPLAYER, MSGL_V, "\rDVD sub: len=%d " |
171 "v_pts=%5.3f s_pts=%5.3f ts=%d \n", len, | |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
172 refpts, d_dvdsub->pts, timestamp); |
25604 | 173 } |
174 } | |
175 if (len<=0 || !packet) break; | |
31838
31ece8c6baed
Move initialization of vo_spudec further behind to avoid issues with
reimar
parents:
31796
diff
changeset
|
176 // create it only here, since with some broken demuxers we might |
31ece8c6baed
Move initialization of vo_spudec further behind to avoid issues with
reimar
parents:
31796
diff
changeset
|
177 // type = v but no DVD sub and we currently do not change the |
31ece8c6baed
Move initialization of vo_spudec further behind to avoid issues with
reimar
parents:
31796
diff
changeset
|
178 // "original frame size" ever after init, leading to wrong-sized |
31ece8c6baed
Move initialization of vo_spudec further behind to avoid issues with
reimar
parents:
31796
diff
changeset
|
179 // PGS subtitles. |
31ece8c6baed
Move initialization of vo_spudec further behind to avoid issues with
reimar
parents:
31796
diff
changeset
|
180 if (!vo_spudec) |
31ece8c6baed
Move initialization of vo_spudec further behind to avoid issues with
reimar
parents:
31796
diff
changeset
|
181 vo_spudec = spudec_new(NULL); |
25604 | 182 if (vo_vobsub || timestamp >= 0) |
183 spudec_assemble(vo_spudec, packet, len, timestamp); | |
184 } | |
31626
8bb62807f3b8
Remove dvdsub_id checks that should not be necessary.
reimar
parents:
31608
diff
changeset
|
185 } else if (is_text_sub(type) || is_av_sub(type) || type == 'd') { |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
186 int orig_type = type; |
25604 | 187 double endpts; |
29833 | 188 if (type == 'd' && !d_dvdsub->demuxer->teletext) { |
189 tt_stream_props tsp = {0}; | |
190 void *ptr = &tsp; | |
191 if (teletext_control(NULL, TV_VBI_CONTROL_START, &ptr) == VBI_CONTROL_TRUE) | |
192 d_dvdsub->demuxer->teletext = ptr; | |
193 } | |
29768
fa5a020677d6
Unbreak the demuxer-specific code in video.c with e.g.
reimar
parents:
29760
diff
changeset
|
194 if (d_dvdsub->non_interleaved) |
fa5a020677d6
Unbreak the demuxer-specific code in video.c with e.g.
reimar
parents:
29760
diff
changeset
|
195 ds_get_next_pts(d_dvdsub); |
31558 | 196 while (1) { |
197 double subpts = curpts; | |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
198 type = orig_type; |
31558 | 199 len = ds_get_packet_sub(d_dvdsub, &packet, &subpts, &endpts); |
200 if (len < 0) | |
25604 | 201 break; |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
202 if (is_av_sub(type)) { |
32142
4614728cab25
build system: Merge all FFmpeg library checks into a single FFmpeg check.
diego
parents:
31948
diff
changeset
|
203 #ifdef CONFIG_FFMPEG |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
204 type = decode_avsub(d_dvdsub->sh, &packet, &len, &subpts, &endpts); |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
205 if (type <= 0) |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
206 #endif |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
207 continue; |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
208 } |
25855
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
209 if (type == 'm') { |
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
210 if (len < 2) continue; |
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
211 len = FFMIN(len - 2, AV_RB16(packet)); |
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
212 packet += 2; |
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
213 } |
29833 | 214 if (type == 'd') { |
215 if (d_dvdsub->demuxer->teletext) { | |
216 uint8_t *p = packet; | |
217 p++; | |
218 len--; | |
219 while (len >= 46) { | |
220 int sublen = p[1]; | |
221 if (p[0] == 2 || p[0] == 3) | |
222 teletext_control(d_dvdsub->demuxer->teletext, | |
223 TV_VBI_CONTROL_DECODE_DVB, p + 2); | |
224 p += sublen + 2; | |
225 len -= sublen + 2; | |
226 } | |
227 } | |
228 continue; | |
229 } | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26422
diff
changeset
|
230 #ifdef CONFIG_ASS |
25856 | 231 if (ass_enabled) { |
25655
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
232 sh_sub_t* sh = d_dvdsub->sh; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
233 ass_track = sh ? sh->ass_track : NULL; |
25856 | 234 if (!ass_track) continue; |
235 if (type == 'a') { // ssa/ass subs with libass | |
30992
bf1afb0fa07d
Make ASS processing work with both subtitle formats, the MKV one and the
reimar
parents:
30907
diff
changeset
|
236 if (len > 10 && memcmp(packet, "Dialogue: ", 10) == 0) |
bf1afb0fa07d
Make ASS processing work with both subtitle formats, the MKV one and the
reimar
parents:
30907
diff
changeset
|
237 ass_process_data(ass_track, packet, len); |
bf1afb0fa07d
Make ASS processing work with both subtitle formats, the MKV one and the
reimar
parents:
30907
diff
changeset
|
238 else |
31948 | 239 ass_process_chunk(ass_track, packet, len, |
240 (long long)(subpts*1000 + 0.5), | |
241 (long long)((endpts-subpts)*1000 + 0.5)); | |
25857 | 242 } else { // plaintext subs with libass |
29664 | 243 if (subpts != MP_NOPTS_VALUE) { |
30017
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
244 subtitle tmp_subs = {0}; |
29664 | 245 if (endpts == MP_NOPTS_VALUE) endpts = subpts + 3; |
31686
b41cbf02f854
subtitles: convert SRT/MicroDVD markup into ASS markup
greg
parents:
31628
diff
changeset
|
246 sub_add_text(&tmp_subs, packet, len, endpts, 0); |
30017
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
247 tmp_subs.start = subpts * 100; |
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
248 tmp_subs.end = endpts * 100; |
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
249 ass_process_subtitle(ass_track, &tmp_subs); |
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
250 sub_clear_text(&tmp_subs, MP_NOPTS_VALUE); |
25857 | 251 } |
25604 | 252 } |
25655
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
253 continue; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
254 } |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
255 #endif |
29664 | 256 if (subpts != MP_NOPTS_VALUE) { |
25604 | 257 if (endpts == MP_NOPTS_VALUE) |
258 sub_clear_text(&subs, MP_NOPTS_VALUE); | |
25655
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
259 if (type == 'a') { // ssa/ass subs without libass => convert to plaintext |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
260 int i; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
261 unsigned char* p = packet; |
30992
bf1afb0fa07d
Make ASS processing work with both subtitle formats, the MKV one and the
reimar
parents:
30907
diff
changeset
|
262 int skip_commas = 8; |
bf1afb0fa07d
Make ASS processing work with both subtitle formats, the MKV one and the
reimar
parents:
30907
diff
changeset
|
263 if (len > 10 && memcmp(packet, "Dialogue: ", 10) == 0) |
bf1afb0fa07d
Make ASS processing work with both subtitle formats, the MKV one and the
reimar
parents:
30907
diff
changeset
|
264 skip_commas = 9; |
bf1afb0fa07d
Make ASS processing work with both subtitle formats, the MKV one and the
reimar
parents:
30907
diff
changeset
|
265 for (i=0; i < skip_commas && *p != '\0'; p++) |
25655
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
266 if (*p == ',') |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
267 i++; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
268 if (*p == '\0') /* Broken line? */ |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
269 continue; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
270 len -= p - packet; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
271 packet = p; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
272 } |
31686
b41cbf02f854
subtitles: convert SRT/MicroDVD markup into ASS markup
greg
parents:
31628
diff
changeset
|
273 sub_add_text(&subs, packet, len, endpts, 1); |
29670
2e3751815a21
Add support for displaying subtitles on the command-line when playing
reimar
parents:
29668
diff
changeset
|
274 set_osd_subtitle(&subs); |
25604 | 275 } |
29768
fa5a020677d6
Unbreak the demuxer-specific code in video.c with e.g.
reimar
parents:
29760
diff
changeset
|
276 if (d_dvdsub->non_interleaved) |
fa5a020677d6
Unbreak the demuxer-specific code in video.c with e.g.
reimar
parents:
29760
diff
changeset
|
277 ds_get_next_pts(d_dvdsub); |
25604 | 278 } |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
279 if (sub_clear_text(&subs, curpts)) |
29670
2e3751815a21
Add support for displaying subtitles on the command-line when playing
reimar
parents:
29668
diff
changeset
|
280 set_osd_subtitle(&subs); |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
281 } |
31599
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
282 if (vo_spudec) { |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
283 spudec_heartbeat(vo_spudec, 90000*curpts); |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
284 if (spudec_changed(vo_spudec)) |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
285 vo_osd_changed(OSDTYPE_SPU); |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
286 } |
cafeb7863de8
Add support for PGS subtitle decoding via libavcodec.
reimar
parents:
31597
diff
changeset
|
287 |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
288 current_module=NULL; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
289 } |
23903 | 290 |
291 void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset) | |
292 { | |
24342
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
293 int page_changed; |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
294 |
29806 | 295 if (!demuxer->teletext) |
296 return; | |
23903 | 297 |
24342
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
298 //Also forcing page update when such ioctl is not supported or call error occured |
29806 | 299 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_IS_CHANGED,&page_changed)!=VBI_CONTROL_TRUE) |
24342
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
300 page_changed=1; |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
301 |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
302 if(!page_changed) |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
303 return; |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
304 |
29806 | 305 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_VBIPAGE,&vo_osd_teletext_page)!=VBI_CONTROL_TRUE) |
23903 | 306 vo_osd_teletext_page=NULL; |
29806 | 307 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_HALF_PAGE,&vo_osd_teletext_half)!=VBI_CONTROL_TRUE) |
23903 | 308 vo_osd_teletext_half=0; |
29806 | 309 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_MODE,&vo_osd_teletext_mode)!=VBI_CONTROL_TRUE) |
23903 | 310 vo_osd_teletext_mode=0; |
29806 | 311 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_FORMAT,&vo_osd_teletext_format)!=VBI_CONTROL_TRUE) |
23903 | 312 vo_osd_teletext_format=0; |
313 vo_osd_changed(OSDTYPE_TELETEXT); | |
24342
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
314 |
29806 | 315 teletext_control(demuxer->teletext,TV_VBI_CONTROL_MARK_UNCHANGED,NULL); |
23903 | 316 } |
26090
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
317 |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
318 int select_audio(demuxer_t* demuxer, int audio_id, char* audio_lang) |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
319 { |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
320 if (audio_id == -1 && audio_lang) |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
321 audio_id = demuxer_audio_track_by_lang(demuxer, audio_lang); |
26269
65ad20416dd7
Support 'default' attribute for audio and subtitle tracks.
eugeni
parents:
26090
diff
changeset
|
322 if (audio_id == -1) |
65ad20416dd7
Support 'default' attribute for audio and subtitle tracks.
eugeni
parents:
26090
diff
changeset
|
323 audio_id = demuxer_default_audio_track(demuxer); |
26090
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
324 if (audio_id != -1) // -1 (automatic) is the default behaviour of demuxers |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
325 demuxer_switch_audio(demuxer, audio_id); |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
326 if (audio_id == -2) { // some demuxers don't yet know how to switch to no sound |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
327 demuxer->audio->id = -2; |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
328 demuxer->audio->sh = NULL; |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
329 } |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
330 return demuxer->audio->id; |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
331 } |
26416 | 332 |
333 /* Parse -noconfig common to both programs */ | |
334 int disable_system_conf=0; | |
335 int disable_user_conf=0; | |
27343 | 336 #ifdef CONFIG_GUI |
26422
f74bff77f088
noconfig fix, disable_gui_conf was not defined when compiling mencoder.
albeu
parents:
26416
diff
changeset
|
337 int disable_gui_conf=0; |
27343 | 338 #endif /* CONFIG_GUI */ |
26416 | 339 |
340 /* Disable all configuration files */ | |
341 static void noconfig_all(void) | |
342 { | |
343 disable_system_conf = 1; | |
344 disable_user_conf = 1; | |
27343 | 345 #ifdef CONFIG_GUI |
26416 | 346 disable_gui_conf = 1; |
27343 | 347 #endif /* CONFIG_GUI */ |
26416 | 348 } |
349 | |
350 const m_option_t noconfig_opts[] = { | |
351 {"all", noconfig_all, CONF_TYPE_FUNC, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 0, NULL}, | |
352 {"system", &disable_system_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL}, | |
353 {"user", &disable_user_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL}, | |
27343 | 354 #ifdef CONFIG_GUI |
26416 | 355 {"gui", &disable_gui_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL}, |
27343 | 356 #endif /* CONFIG_GUI */ |
26416 | 357 {NULL, NULL, 0, 0, 0, 0, NULL} |
358 }; | |
30872 | 359 |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
360 /** |
32594 | 361 * Initialization code to be run at the very start, must not depend |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
362 * on option values. |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
363 */ |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
364 void common_preinit(void) |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
365 { |
32384 | 366 InitTimer(); |
367 srand(GetTimerMS()); | |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
368 |
32384 | 369 mp_msg_init(); |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
370 } |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
371 |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
372 /** |
32385
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
373 * Code to fix any kind of insane defaults some OS might have. |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
374 * Currently mostly fixes for insecure-by-default Windows. |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
375 */ |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
376 static void sanitize_os(void) |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
377 { |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
378 #if defined(__MINGW32__) || defined(__CYGWIN__) |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
379 HMODULE kernel32 = GetModuleHandle("Kernel32.dll"); |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
380 BOOL WINAPI (*setDEP)(DWORD) = NULL; |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
381 BOOL WINAPI (*setDllDir)(LPCTSTR) = NULL; |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
382 if (kernel32) { |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
383 setDEP = GetProcAddress(kernel32, "SetProcessDEPPolicy"); |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
384 setDllDir = GetProcAddress(kernel32, "SetDllDirectoryA"); |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
385 } |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
386 if (setDEP) setDEP(3); |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
387 if (setDllDir) setDllDir(""); |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
388 // stop Windows from showing all kinds of annoying error dialogs |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
389 SetErrorMode(0x8003); |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
390 // request 1ms timer resolution |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
391 timeBeginPeriod(1); |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
392 #endif |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
393 } |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
394 |
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
395 /** |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
396 * Initialization code to be run after command-line parsing. |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
397 */ |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
398 int common_init(void) |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
399 { |
32415
d1f6c6cf8905
Move gui-specific code out of common_init, it certainly does
reimar
parents:
32414
diff
changeset
|
400 #if (defined(__MINGW32__) || defined(__CYGWIN__)) && defined(CONFIG_WIN32DLL) |
32384 | 401 set_path_env(); |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
402 #endif |
32385
8d841a288ca7
Move OS-fixup hacks in init code into a separate function.
reimar
parents:
32384
diff
changeset
|
403 sanitize_os(); |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
404 |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
405 #ifdef CONFIG_PRIORITY |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
406 set_priority(); |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
407 #endif |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
408 |
32384 | 409 if (codec_path) |
410 set_codec_path(codec_path); | |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
411 |
32384 | 412 /* Check codecs.conf. */ |
32388
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
413 if (!codecs_file || !parse_codec_cfg(codecs_file)) { |
32389
4fb3f810de30
Write the code in a more understandable way instead of trying to explain
reimar
parents:
32388
diff
changeset
|
414 char *conf_path = get_path("codecs.conf"); |
4fb3f810de30
Write the code in a more understandable way instead of trying to explain
reimar
parents:
32388
diff
changeset
|
415 if (!parse_codec_cfg(conf_path)) { |
32388
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
416 if (!parse_codec_cfg(MPLAYER_CONFDIR "/codecs.conf")) { |
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
417 if (!parse_codec_cfg(NULL)) { |
32389
4fb3f810de30
Write the code in a more understandable way instead of trying to explain
reimar
parents:
32388
diff
changeset
|
418 free(conf_path); |
32384 | 419 return 0; |
420 } | |
421 mp_msg(MSGT_CPLAYER,MSGL_V,MSGTR_BuiltinCodecsConf); | |
422 } | |
423 } | |
32389
4fb3f810de30
Write the code in a more understandable way instead of trying to explain
reimar
parents:
32388
diff
changeset
|
424 free(conf_path); |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
425 } |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
426 |
32384 | 427 // check font |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
428 #ifdef CONFIG_FREETYPE |
32384 | 429 init_freetype(); |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
430 #endif |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
431 #ifdef CONFIG_FONTCONFIG |
32388
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
432 if (font_fontconfig <= 0) |
32386 | 433 #endif |
32384 | 434 { |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
435 #ifdef CONFIG_BITMAP_FONT |
32388
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
436 if (font_name) { |
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
437 vo_font = read_font_desc(font_name, font_factor, verbose>1); |
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
438 if (!vo_font) |
32384 | 439 mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont, |
440 filename_recode(font_name)); | |
441 } else { | |
442 // try default: | |
32389
4fb3f810de30
Write the code in a more understandable way instead of trying to explain
reimar
parents:
32388
diff
changeset
|
443 char *desc_path = get_path("font/font.desc"); |
4fb3f810de30
Write the code in a more understandable way instead of trying to explain
reimar
parents:
32388
diff
changeset
|
444 vo_font = read_font_desc(desc_path, font_factor, verbose>1); |
4fb3f810de30
Write the code in a more understandable way instead of trying to explain
reimar
parents:
32388
diff
changeset
|
445 free(desc_path); |
32388
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
446 if (!vo_font) |
211cd5f02401
Whitespace cosmetics: format init function more consistent with the
reimar
parents:
32386
diff
changeset
|
447 vo_font = read_font_desc(MPLAYER_DATADIR "/font/font.desc", font_factor, verbose>1); |
32384 | 448 } |
449 if (sub_font_name) | |
450 sub_font = read_font_desc(sub_font_name, font_factor, verbose>1); | |
451 else | |
452 sub_font = vo_font; | |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
453 #endif |
32384 | 454 } |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
455 |
32384 | 456 vo_init_osd(); |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
457 |
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
458 #ifdef CONFIG_ASS |
32384 | 459 ass_library = ass_init(); |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
460 #endif |
32384 | 461 return 1; |
32383
f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
reimar
parents:
32209
diff
changeset
|
462 } |