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