Mercurial > mplayer.hg
annotate mpcommon.c @ 30903:565f6d0f0d2a
Make all instances of codec_patch unconditional, otherwise
compilation will break on systems that do not have win32 dlls
enabled. Fixes compilation bug introduced by r30942
10l to the anonymous guy who explains the importance of commit messages
and would like to have romance novels in these very messages.
author | attila |
---|---|
date | Sun, 21 Mar 2010 10:13:00 +0000 |
parents | eb1b97313903 |
children | b32527b30d17 |
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 |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
19 #include <stdlib.h> |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
20 #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
|
21 #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
|
22 #include "libmpdemux/stheader.h" |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
23 #include "mplayer.h" |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
24 #include "libvo/sub.h" |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
25 #include "libvo/video_out.h" |
28325 | 26 #include "cpudetect.h" |
27 #include "help_mp.h" | |
28 #include "mp_msg.h" | |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
29 #include "spudec.h" |
28325 | 30 #include "version.h" |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
31 #include "vobsub.h" |
29759
d287e2785570
Move teletext specific code from stream into libmpcodecs.
cehoyos
parents:
29670
diff
changeset
|
32 #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
|
33 #include "libavutil/intreadwrite.h" |
26416 | 34 #include "m_option.h" |
29666
ca2030774a61
Include mpcommon.h in mpcommon.c, ensures that the declarations in the header
reimar
parents:
29665
diff
changeset
|
35 #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
|
36 |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
37 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
|
38 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26422
diff
changeset
|
39 #ifdef CONFIG_ASS |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
40 #include "libass/ass_mp.h" |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
41 ass_track_t* ass_track = 0; // current track to render |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
42 #endif |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
43 |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
44 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
|
45 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
|
46 |
28325 | 47 |
48 void print_version(const char* name) | |
49 { | |
50 mp_msg(MSGT_CPLAYER, MSGL_INFO, MP_TITLE, name); | |
51 | |
52 /* Test for CPU capabilities (and corresponding OS support) for optimizing */ | |
53 GetCpuCaps(&gCpuCaps); | |
54 #if ARCH_X86 | |
55 mp_msg(MSGT_CPLAYER, MSGL_V, | |
28331
8461282f0eed
Add SSSE3 and CMOV to CPU information printed on startup.
diego
parents:
28330
diff
changeset
|
56 "CPUflags: MMX: %d MMX2: %d 3DNow: %d 3DNowExt: %d SSE: %d SSE2: %d SSSE3: %d\n", |
28325 | 57 gCpuCaps.hasMMX, gCpuCaps.hasMMX2, |
58 gCpuCaps.has3DNow, gCpuCaps.has3DNowExt, | |
28331
8461282f0eed
Add SSSE3 and CMOV to CPU information printed on startup.
diego
parents:
28330
diff
changeset
|
59 gCpuCaps.hasSSE, gCpuCaps.hasSSE2, gCpuCaps.hasSSSE3); |
29114
06540eb5ef6a
Rename RUNTIME_CPUDETECT to CONFIG_RUNTIME_CPUDETECT and always define it.
ramiro
parents:
28340
diff
changeset
|
60 #if CONFIG_RUNTIME_CPUDETECT |
28325 | 61 mp_msg(MSGT_CPLAYER,MSGL_V, MSGTR_CompiledWithRuntimeDetection); |
62 #else | |
63 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
|
64 if (HAVE_MMX) |
28325 | 65 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
|
66 if (HAVE_MMX2) |
28325 | 67 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
|
68 if (HAVE_AMD3DNOW) |
28325 | 69 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
|
70 if (HAVE_AMD3DNOWEXT) |
28330 | 71 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
|
72 if (HAVE_SSE) |
28325 | 73 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
|
74 if (HAVE_SSE2) |
28325 | 75 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
|
76 if (HAVE_SSSE3) |
28331
8461282f0eed
Add SSSE3 and CMOV to CPU information printed on startup.
diego
parents:
28330
diff
changeset
|
77 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
|
78 if (HAVE_CMOV) |
28331
8461282f0eed
Add SSSE3 and CMOV to CPU information printed on startup.
diego
parents:
28330
diff
changeset
|
79 mp_msg(MSGT_CPLAYER,MSGL_V," CMOV"); |
28325 | 80 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
|
81 #endif /* CONFIG_RUNTIME_CPUDETECT */ |
28325 | 82 #endif /* ARCH_X86 */ |
83 } | |
84 | |
85 | |
29668
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29666
diff
changeset
|
86 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
|
87 { |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
88 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
|
89 int len; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
90 char type = d_dvdsub->sh ? ((sh_sub_t *)d_dvdsub->sh)->type : 'v'; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
91 static subtitle subs; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
92 if (reset) { |
25604 | 93 sub_clear_text(&subs, MP_NOPTS_VALUE); |
94 if (vo_sub) { | |
29670
2e3751815a21
Add support for displaying subtitles on the command-line when playing
reimar
parents:
29668
diff
changeset
|
95 set_osd_subtitle(NULL); |
25604 | 96 } |
97 if (vo_spudec) { | |
98 spudec_reset(vo_spudec); | |
99 vo_osd_changed(OSDTYPE_SPU); | |
100 } | |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
101 } |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
102 // find sub |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
103 if (subdata) { |
29668
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29666
diff
changeset
|
104 if (sub_fps==0) sub_fps = sh_video ? sh_video->fps : 25; |
25604 | 105 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
|
106 if (refpts > sub_last_pts || refpts < sub_last_pts-1.0) { |
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
107 find_sub(subdata, (refpts+sub_delay) * |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29114
diff
changeset
|
108 (subdata->sub_uses_time ? 100. : sub_fps)); |
25604 | 109 if (vo_sub) vo_sub_last = vo_sub; |
110 // FIXME! frame counter... | |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
111 sub_last_pts = refpts; |
25604 | 112 } |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
113 } |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
114 |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
115 // DVD sub: |
25509
1cfa39a320cc
Fix update_subtitles() checking subtitle type for the wrong track.
eugeni
parents:
25322
diff
changeset
|
116 if (vo_config_count && vo_spudec && |
25604 | 117 (vobsub_id >= 0 || (dvdsub_id >= 0 && type == 'v'))) { |
118 int timestamp; | |
119 current_module = "spudec"; | |
120 spudec_heartbeat(vo_spudec, 90000*sh_video->timer); | |
121 /* Get a sub packet from the DVD or a vobsub and make a timestamp | |
122 * relative to sh_video->timer */ | |
123 while(1) { | |
124 // Vobsub | |
125 len = 0; | |
126 if (vo_vobsub) { | |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
127 if (refpts+sub_delay >= 0) { |
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
128 len = vobsub_get_packet(vo_vobsub, refpts+sub_delay, |
25604 | 129 (void**)&packet, ×tamp); |
130 if (len > 0) { | |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
131 timestamp -= (refpts + sub_delay - sh_video->timer)*90000; |
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
132 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 | 133 } |
134 } | |
135 } else { | |
136 // DVD sub | |
137 len = ds_get_packet_sub(d_dvdsub, (unsigned char**)&packet); | |
138 if (len > 0) { | |
139 // XXX This is wrong, sh_video->pts can be arbitrarily | |
140 // much behind demuxing position. Unfortunately using | |
141 // d_video->pts which would have been the simplest | |
142 // improvement doesn't work because mpeg specific hacks | |
143 // 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
|
144 float x = d_dvdsub->pts - refpts; |
25604 | 145 if (x > -20 && x < 20) // prevent missing subs on pts reset |
146 timestamp = 90000*(sh_video->timer + d_dvdsub->pts | |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
147 + sub_delay - refpts); |
25604 | 148 else timestamp = 90000*(sh_video->timer + sub_delay); |
149 mp_dbg(MSGT_CPLAYER, MSGL_V, "\rDVD sub: len=%d " | |
150 "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
|
151 refpts, d_dvdsub->pts, timestamp); |
25604 | 152 } |
153 } | |
154 if (len<=0 || !packet) break; | |
155 if (vo_vobsub || timestamp >= 0) | |
156 spudec_assemble(vo_spudec, packet, len, timestamp); | |
157 } | |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
158 |
25604 | 159 if (spudec_changed(vo_spudec)) |
160 vo_osd_changed(OSDTYPE_SPU); | |
29833 | 161 } else if (dvdsub_id >= 0 && (type == 't' || type == 'm' || type == 'a' || type == 'd')) { |
29665
6f1ebc60c04f
Factor out sh_video->pts into a refpts variable. This simplifies a future patch
reimar
parents:
29664
diff
changeset
|
162 double curpts = refpts + sub_delay; |
25604 | 163 double endpts; |
29833 | 164 if (type == 'd' && !d_dvdsub->demuxer->teletext) { |
165 tt_stream_props tsp = {0}; | |
166 void *ptr = &tsp; | |
167 if (teletext_control(NULL, TV_VBI_CONTROL_START, &ptr) == VBI_CONTROL_TRUE) | |
168 d_dvdsub->demuxer->teletext = ptr; | |
169 } | |
29768
fa5a020677d6
Unbreak the demuxer-specific code in video.c with e.g.
reimar
parents:
29760
diff
changeset
|
170 if (d_dvdsub->non_interleaved) |
fa5a020677d6
Unbreak the demuxer-specific code in video.c with e.g.
reimar
parents:
29760
diff
changeset
|
171 ds_get_next_pts(d_dvdsub); |
25604 | 172 while (d_dvdsub->first) { |
29664 | 173 double subpts = ds_get_next_pts(d_dvdsub); |
174 if (subpts > curpts) | |
25604 | 175 break; |
176 endpts = d_dvdsub->first->endpts; | |
177 len = ds_get_packet_sub(d_dvdsub, &packet); | |
25855
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
178 if (type == 'm') { |
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
179 if (len < 2) continue; |
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
180 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
|
181 packet += 2; |
57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents:
25656
diff
changeset
|
182 } |
29833 | 183 if (type == 'd') { |
184 if (d_dvdsub->demuxer->teletext) { | |
185 uint8_t *p = packet; | |
186 p++; | |
187 len--; | |
188 while (len >= 46) { | |
189 int sublen = p[1]; | |
190 if (p[0] == 2 || p[0] == 3) | |
191 teletext_control(d_dvdsub->demuxer->teletext, | |
192 TV_VBI_CONTROL_DECODE_DVB, p + 2); | |
193 p += sublen + 2; | |
194 len -= sublen + 2; | |
195 } | |
196 } | |
197 continue; | |
198 } | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26422
diff
changeset
|
199 #ifdef CONFIG_ASS |
25856 | 200 if (ass_enabled) { |
25655
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
201 sh_sub_t* sh = d_dvdsub->sh; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
202 ass_track = sh ? sh->ass_track : NULL; |
25856 | 203 if (!ass_track) continue; |
204 if (type == 'a') { // ssa/ass subs with libass | |
27518 | 205 ass_process_chunk(ass_track, packet, len, |
29664 | 206 (long long)(subpts*1000 + 0.5), |
207 (long long)((endpts-subpts)*1000 + 0.5)); | |
25857 | 208 } else { // plaintext subs with libass |
29664 | 209 if (subpts != MP_NOPTS_VALUE) { |
30017
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
210 subtitle tmp_subs = {0}; |
29664 | 211 if (endpts == MP_NOPTS_VALUE) endpts = subpts + 3; |
30017
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
212 sub_add_text(&tmp_subs, packet, len, endpts); |
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
213 tmp_subs.start = subpts * 100; |
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
214 tmp_subs.end = endpts * 100; |
7119354805e7
Use on-stack subtitle struct for temporary storage for passing subtitles on
reimar
parents:
29833
diff
changeset
|
215 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
|
216 sub_clear_text(&tmp_subs, MP_NOPTS_VALUE); |
25857 | 217 } |
25604 | 218 } |
25655
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
219 continue; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
220 } |
22233
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
221 #endif |
29664 | 222 if (subpts != MP_NOPTS_VALUE) { |
25604 | 223 if (endpts == MP_NOPTS_VALUE) |
224 sub_clear_text(&subs, MP_NOPTS_VALUE); | |
25655
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
225 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
|
226 int i; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
227 unsigned char* p = packet; |
27518 | 228 for (i=0; i < 8 && *p != '\0'; p++) |
25655
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
229 if (*p == ',') |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
230 i++; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
231 if (*p == '\0') /* Broken line? */ |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
232 continue; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
233 len -= p - packet; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
234 packet = p; |
e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents:
25604
diff
changeset
|
235 } |
25604 | 236 sub_add_text(&subs, packet, len, endpts); |
29670
2e3751815a21
Add support for displaying subtitles on the command-line when playing
reimar
parents:
29668
diff
changeset
|
237 set_osd_subtitle(&subs); |
25604 | 238 } |
29768
fa5a020677d6
Unbreak the demuxer-specific code in video.c with e.g.
reimar
parents:
29760
diff
changeset
|
239 if (d_dvdsub->non_interleaved) |
fa5a020677d6
Unbreak the demuxer-specific code in video.c with e.g.
reimar
parents:
29760
diff
changeset
|
240 ds_get_next_pts(d_dvdsub); |
25604 | 241 } |
242 if (sub_clear_text(&subs, curpts)) | |
29670
2e3751815a21
Add support for displaying subtitles on the command-line when playing
reimar
parents:
29668
diff
changeset
|
243 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
|
244 } |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
245 current_module=NULL; |
5bf6c178f09a
Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff
changeset
|
246 } |
23903 | 247 |
248 void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset) | |
249 { | |
24342
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
250 int page_changed; |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
251 |
29806 | 252 if (!demuxer->teletext) |
253 return; | |
23903 | 254 |
24342
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
255 //Also forcing page update when such ioctl is not supported or call error occured |
29806 | 256 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
|
257 page_changed=1; |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
258 |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
259 if(!page_changed) |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
260 return; |
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
261 |
29806 | 262 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_VBIPAGE,&vo_osd_teletext_page)!=VBI_CONTROL_TRUE) |
23903 | 263 vo_osd_teletext_page=NULL; |
29806 | 264 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_HALF_PAGE,&vo_osd_teletext_half)!=VBI_CONTROL_TRUE) |
23903 | 265 vo_osd_teletext_half=0; |
29806 | 266 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_MODE,&vo_osd_teletext_mode)!=VBI_CONTROL_TRUE) |
23903 | 267 vo_osd_teletext_mode=0; |
29806 | 268 if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_FORMAT,&vo_osd_teletext_format)!=VBI_CONTROL_TRUE) |
23903 | 269 vo_osd_teletext_format=0; |
270 vo_osd_changed(OSDTYPE_TELETEXT); | |
24342
8873c972c6aa
Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents:
23903
diff
changeset
|
271 |
29806 | 272 teletext_control(demuxer->teletext,TV_VBI_CONTROL_MARK_UNCHANGED,NULL); |
23903 | 273 } |
26090
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
274 |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
275 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
|
276 { |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
277 if (audio_id == -1 && audio_lang) |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
278 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
|
279 if (audio_id == -1) |
65ad20416dd7
Support 'default' attribute for audio and subtitle tracks.
eugeni
parents:
26090
diff
changeset
|
280 audio_id = demuxer_default_audio_track(demuxer); |
26090
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
281 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
|
282 demuxer_switch_audio(demuxer, audio_id); |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
283 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
|
284 demuxer->audio->id = -2; |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
285 demuxer->audio->sh = NULL; |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
286 } |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
287 return demuxer->audio->id; |
c585e2ad8ebf
Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents:
25857
diff
changeset
|
288 } |
26416 | 289 |
290 /* Parse -noconfig common to both programs */ | |
291 int disable_system_conf=0; | |
292 int disable_user_conf=0; | |
27343 | 293 #ifdef CONFIG_GUI |
26422
f74bff77f088
noconfig fix, disable_gui_conf was not defined when compiling mencoder.
albeu
parents:
26416
diff
changeset
|
294 int disable_gui_conf=0; |
27343 | 295 #endif /* CONFIG_GUI */ |
26416 | 296 |
297 /* Disable all configuration files */ | |
298 static void noconfig_all(void) | |
299 { | |
300 disable_system_conf = 1; | |
301 disable_user_conf = 1; | |
27343 | 302 #ifdef CONFIG_GUI |
26416 | 303 disable_gui_conf = 1; |
27343 | 304 #endif /* CONFIG_GUI */ |
26416 | 305 } |
306 | |
307 const m_option_t noconfig_opts[] = { | |
308 {"all", noconfig_all, CONF_TYPE_FUNC, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 0, NULL}, | |
309 {"system", &disable_system_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL}, | |
310 {"user", &disable_user_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL}, | |
27343 | 311 #ifdef CONFIG_GUI |
26416 | 312 {"gui", &disable_gui_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL}, |
27343 | 313 #endif /* CONFIG_GUI */ |
26416 | 314 {NULL, NULL, 0, 0, 0, 0, NULL} |
315 }; | |
30872 | 316 |
317 char *codec_path = NULL; | |
318 |