annotate mpcommon.c @ 26110:69790f7caffa

configure: Set CONFIG_ENCODERS=yes in config.mak unconditionally config.h already had "#define CONFIG_ENCODERS 1" unconditionally, but the config.mak value depended on whether MEncoder was enabled. Encoders need to be enabled as some encoder code is used by MPlayer too. The inconsistent values broke compilation with --disable-mencoder after libavcodec Makefile made compilation of i386/dsputilenc_mmx.o depend on the config.mak value.
author uau
date Mon, 03 Mar 2008 03:02:36 +0000
parents c585e2ad8ebf
children 65ad20416dd7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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"
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
8 #include "spudec.h"
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
9 #include "vobsub.h"
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
10 #ifdef HAVE_TV_TELETEXT
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
11 #include "stream/tv.h"
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
12 #endif
25855
57a1511f4e76 Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents: 25656
diff changeset
13 #include "libavutil/intreadwrite.h"
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
14
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
15 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
16
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
17 #ifdef USE_ASS
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
18 #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
19 #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
20 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
21 #endif
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
22
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
23 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
24 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
25
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
26 void update_subtitles(sh_video_t *sh_video, demux_stream_t *d_dvdsub, int reset)
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
27 {
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
28 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
29 int len;
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
30 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
31 static subtitle subs;
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
32 if (reset) {
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
33 sub_clear_text(&subs, MP_NOPTS_VALUE);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
34 if (vo_sub) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
35 vo_sub = NULL;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
36 vo_osd_changed(OSDTYPE_SUBTITLE);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
37 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
38 if (vo_spudec) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
39 spudec_reset(vo_spudec);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
40 vo_osd_changed(OSDTYPE_SPU);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
41 }
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
42 }
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
43 // find sub
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
44 if (subdata) {
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
45 double pts = sh_video->pts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
46 if (sub_fps==0) sub_fps = sh_video->fps;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
47 current_module = "find_sub";
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
48 if (pts > sub_last_pts || pts < sub_last_pts-1.0) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
49 find_sub(subdata, (pts+sub_delay) *
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
50 (subdata->sub_uses_time ? 100. : sub_fps));
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
51 if (vo_sub) vo_sub_last = vo_sub;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
52 // FIXME! frame counter...
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
53 sub_last_pts = pts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
54 }
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
55 }
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
56
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
57 // DVD sub:
25509
1cfa39a320cc Fix update_subtitles() checking subtitle type for the wrong track.
eugeni
parents: 25322
diff changeset
58 if (vo_config_count && vo_spudec &&
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
59 (vobsub_id >= 0 || (dvdsub_id >= 0 && type == 'v'))) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
60 int timestamp;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
61 current_module = "spudec";
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
62 spudec_heartbeat(vo_spudec, 90000*sh_video->timer);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
63 /* Get a sub packet from the DVD or a vobsub and make a timestamp
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
64 * relative to sh_video->timer */
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
65 while(1) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
66 // Vobsub
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
67 len = 0;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
68 if (vo_vobsub) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
69 if (sh_video->pts+sub_delay >= 0) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
70 len = vobsub_get_packet(vo_vobsub, sh_video->pts+sub_delay,
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
71 (void**)&packet, &timestamp);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
72 if (len > 0) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
73 timestamp -= (sh_video->pts + sub_delay - sh_video->timer)*90000;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
74 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,sh_video->pts,sh_video->timer,timestamp / 90000.0,timestamp);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
75 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
76 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
77 } else {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
78 // DVD sub
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
79 len = ds_get_packet_sub(d_dvdsub, (unsigned char**)&packet);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
80 if (len > 0) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
81 // XXX This is wrong, sh_video->pts can be arbitrarily
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
82 // much behind demuxing position. Unfortunately using
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
83 // d_video->pts which would have been the simplest
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
84 // improvement doesn't work because mpeg specific hacks
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
85 // in video.c set d_video->pts to 0.
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
86 float x = d_dvdsub->pts - sh_video->pts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
87 if (x > -20 && x < 20) // prevent missing subs on pts reset
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
88 timestamp = 90000*(sh_video->timer + d_dvdsub->pts
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
89 + sub_delay - sh_video->pts);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
90 else timestamp = 90000*(sh_video->timer + sub_delay);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
91 mp_dbg(MSGT_CPLAYER, MSGL_V, "\rDVD sub: len=%d "
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
92 "v_pts=%5.3f s_pts=%5.3f ts=%d \n", len,
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
93 sh_video->pts, d_dvdsub->pts, timestamp);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
94 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
95 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
96 if (len<=0 || !packet) break;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
97 if (vo_vobsub || timestamp >= 0)
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
98 spudec_assemble(vo_spudec, packet, len, timestamp);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
99 }
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
100
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
101 if (spudec_changed(vo_spudec))
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
102 vo_osd_changed(OSDTYPE_SPU);
25855
57a1511f4e76 Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents: 25656
diff changeset
103 } else if (dvdsub_id >= 0 && (type == 't' || type == 'm' || type == 'a')) {
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
104 double curpts = sh_video->pts + sub_delay;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
105 double endpts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
106 vo_sub = &subs;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
107 while (d_dvdsub->first) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
108 double pts = ds_get_next_pts(d_dvdsub);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
109 if (pts > curpts)
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
110 break;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
111 endpts = d_dvdsub->first->endpts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
112 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
113 if (type == 'm') {
57a1511f4e76 Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents: 25656
diff changeset
114 if (len < 2) continue;
57a1511f4e76 Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents: 25656
diff changeset
115 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
116 packet += 2;
57a1511f4e76 Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents: 25656
diff changeset
117 }
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
118 #ifdef USE_ASS
25856
d42e4a4942a4 Simplify subtitle handling with -ass
reimar
parents: 25855
diff changeset
119 if (ass_enabled) {
25655
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
120 sh_sub_t* sh = d_dvdsub->sh;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
121 ass_track = sh ? sh->ass_track : NULL;
25856
d42e4a4942a4 Simplify subtitle handling with -ass
reimar
parents: 25855
diff changeset
122 if (!ass_track) continue;
d42e4a4942a4 Simplify subtitle handling with -ass
reimar
parents: 25855
diff changeset
123 if (type == 'a') { // ssa/ass subs with libass
25655
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
124 ass_process_chunk(ass_track, packet, len,
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
125 (long long)(pts*1000 + 0.5),
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
126 (long long)((endpts-pts)*1000 + 0.5));
25857
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
127 } else { // plaintext subs with libass
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
128 vo_sub = NULL;
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
129 if (pts != MP_NOPTS_VALUE) {
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
130 if (endpts == MP_NOPTS_VALUE) endpts = pts + 3;
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
131 sub_clear_text(&subs, MP_NOPTS_VALUE);
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
132 sub_add_text(&subs, packet, len, endpts);
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
133 subs.start = pts * 100;
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
134 subs.end = endpts * 100;
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
135 ass_process_subtitle(ass_track, &subs);
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
136 }
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
137 }
25655
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
138 continue;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
139 }
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
140 #endif
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
141 if (pts != MP_NOPTS_VALUE) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
142 if (endpts == MP_NOPTS_VALUE)
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
143 sub_clear_text(&subs, MP_NOPTS_VALUE);
25655
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
144 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
145 int i;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
146 unsigned char* p = packet;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
147 for (i=0; i < 8 && *p != '\0'; p++)
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
148 if (*p == ',')
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
149 i++;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
150 if (*p == '\0') /* Broken line? */
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
151 continue;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
152 len -= p - packet;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
153 packet = p;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
154 }
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
155 sub_add_text(&subs, packet, len, endpts);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
156 vo_osd_changed(OSDTYPE_SUBTITLE);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
157 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
158 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
159 if (sub_clear_text(&subs, curpts))
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
160 vo_osd_changed(OSDTYPE_SUBTITLE);
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
161 }
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
162 current_module=NULL;
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
163 }
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
164
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
165 void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset)
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
166 {
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
167 #ifdef HAVE_TV_TELETEXT
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
168 tvi_handle_t* tvh=demuxer->priv;
24342
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
169 int page_changed;
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
170
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
171 if (demuxer->type != DEMUXER_TYPE_TV || !tvh) return;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
172
24342
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
173 //Also forcing page update when such ioctl is not supported or call error occured
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
174 if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_IS_CHANGED,&page_changed)!=TVI_CONTROL_TRUE)
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
175 page_changed=1;
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
176
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
177 if(!page_changed)
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
178 return;
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
179
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
180 if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_VBIPAGE,&vo_osd_teletext_page)!=TVI_CONTROL_TRUE)
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
181 vo_osd_teletext_page=NULL;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
182 if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_HALF_PAGE,&vo_osd_teletext_half)!=TVI_CONTROL_TRUE)
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
183 vo_osd_teletext_half=0;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
184 if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_MODE,&vo_osd_teletext_mode)!=TVI_CONTROL_TRUE)
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
185 vo_osd_teletext_mode=0;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
186 if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_FORMAT,&vo_osd_teletext_format)!=TVI_CONTROL_TRUE)
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
187 vo_osd_teletext_format=0;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
188 vo_osd_changed(OSDTYPE_TELETEXT);
24342
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
189
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
190 tvh->functions->control(tvh->priv,TV_VBI_CONTROL_MARK_UNCHANGED,NULL);
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
191 #endif
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
192 }
26090
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
193
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
194 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
195 {
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
196 if (audio_id == -1 && audio_lang)
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
197 audio_id = demuxer_audio_track_by_lang(demuxer, audio_lang);
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
198 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
199 demuxer_switch_audio(demuxer, audio_id);
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
200 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
201 demuxer->audio->id = -2;
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
202 demuxer->audio->sh = NULL;
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
203 }
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
204 return demuxer->audio->id;
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
205 }