annotate mpcommon.c @ 27518:e54c9b7eb0d8

Revert bad changes to SSA/ASS subtitle packet format The following commits are reverted partially or completely: "a valid ASS line contains 9 ',' before actual text" "demux_mkv: output correctly formated ASS packets" "libass: add a new ass_process_data() to process demuxed subtitle packets" These commits converted the internal representation of SSA/ASS subtitle packets from the format used by Matroska to a custom format where each packet has contents exactly matching one line in complete SSA script files. AFAIK no files natively use such a format for muxed subtitles. The stated reason for this change was to use a format that could in principle be muxed into a maximal number of containers. SSA subtitles do not have an implicit duration so both start time and duration or end time need to be specified explicitly; the new format moved timing information inside the codec packet data so it could be muxed without modification into containers that can represent only start time at the container level. However such a change is wrong from the viewpoint of program architecture. Timing information belongs to the demuxer level, but these commits moved not only the duration but also the authoritative value of the start time to inside the codec data. Additionally the new format lost the value of the Matroska ReadOrder field which is used by MPlayer. This commit changes the internal packet format back to that used by Matroska and makes the internal Matroska demuxer output that format again. Libavformat still outputs the "new" format; it could be converted back to the Matroska format in demux_lavf.c, but I'm not adding that code at least yet. The current lavf code has similar problems as the reverted code in MPlayer, and it also currently fails to provide any way to access the value of the ReadOrder field. I hope that the lavf side will be improved; if it isn't conversion can be added later. For now I'll make MPlayer default to the internal Matroska demuxer instead of the lavf one in a separate commit.
author uau
date Mon, 08 Sep 2008 21:26:22 +0000
parents d895515b366d
children 21504ba0f5d3
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"
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27343
diff changeset
10 #ifdef CONFIG_TV_TELETEXT
23903
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"
26416
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
14 #include "m_option.h"
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
15
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
16 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
17
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26422
diff changeset
18 #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
19 #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
20 #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
21 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
22 #endif
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
23
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
24 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
25 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
26
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
27 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
28 {
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
29 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
30 int len;
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
31 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
32 static subtitle subs;
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
33 if (reset) {
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
34 sub_clear_text(&subs, MP_NOPTS_VALUE);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
35 if (vo_sub) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
36 vo_sub = NULL;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
37 vo_osd_changed(OSDTYPE_SUBTITLE);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
38 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
39 if (vo_spudec) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
40 spudec_reset(vo_spudec);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
41 vo_osd_changed(OSDTYPE_SPU);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
42 }
22233
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 // find sub
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
45 if (subdata) {
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
46 double pts = sh_video->pts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
47 if (sub_fps==0) sub_fps = sh_video->fps;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
48 current_module = "find_sub";
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
49 if (pts > sub_last_pts || pts < sub_last_pts-1.0) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
50 find_sub(subdata, (pts+sub_delay) *
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
51 (subdata->sub_uses_time ? 100. : sub_fps));
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
52 if (vo_sub) vo_sub_last = vo_sub;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
53 // FIXME! frame counter...
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
54 sub_last_pts = pts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
55 }
22233
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
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
58 // DVD sub:
25509
1cfa39a320cc Fix update_subtitles() checking subtitle type for the wrong track.
eugeni
parents: 25322
diff changeset
59 if (vo_config_count && vo_spudec &&
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
60 (vobsub_id >= 0 || (dvdsub_id >= 0 && type == 'v'))) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
61 int timestamp;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
62 current_module = "spudec";
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
63 spudec_heartbeat(vo_spudec, 90000*sh_video->timer);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
64 /* 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
65 * relative to sh_video->timer */
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
66 while(1) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
67 // Vobsub
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
68 len = 0;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
69 if (vo_vobsub) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
70 if (sh_video->pts+sub_delay >= 0) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
71 len = vobsub_get_packet(vo_vobsub, sh_video->pts+sub_delay,
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
72 (void**)&packet, &timestamp);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
73 if (len > 0) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
74 timestamp -= (sh_video->pts + sub_delay - sh_video->timer)*90000;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
75 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
76 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
77 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
78 } else {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
79 // DVD sub
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
80 len = ds_get_packet_sub(d_dvdsub, (unsigned char**)&packet);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
81 if (len > 0) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
82 // XXX This is wrong, sh_video->pts can be arbitrarily
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
83 // much behind demuxing position. Unfortunately using
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
84 // d_video->pts which would have been the simplest
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
85 // improvement doesn't work because mpeg specific hacks
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
86 // in video.c set d_video->pts to 0.
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
87 float x = d_dvdsub->pts - sh_video->pts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
88 if (x > -20 && x < 20) // prevent missing subs on pts reset
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
89 timestamp = 90000*(sh_video->timer + d_dvdsub->pts
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
90 + sub_delay - sh_video->pts);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
91 else timestamp = 90000*(sh_video->timer + sub_delay);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
92 mp_dbg(MSGT_CPLAYER, MSGL_V, "\rDVD sub: len=%d "
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
93 "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
94 sh_video->pts, d_dvdsub->pts, timestamp);
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 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
97 if (len<=0 || !packet) break;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
98 if (vo_vobsub || timestamp >= 0)
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
99 spudec_assemble(vo_spudec, packet, len, timestamp);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
100 }
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
101
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
102 if (spudec_changed(vo_spudec))
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
103 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
104 } 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
105 double curpts = sh_video->pts + sub_delay;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
106 double endpts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
107 vo_sub = &subs;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
108 while (d_dvdsub->first) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
109 double pts = ds_get_next_pts(d_dvdsub);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
110 if (pts > curpts)
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
111 break;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
112 endpts = d_dvdsub->first->endpts;
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
113 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
114 if (type == 'm') {
57a1511f4e76 Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents: 25656
diff changeset
115 if (len < 2) continue;
57a1511f4e76 Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents: 25656
diff changeset
116 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
117 packet += 2;
57a1511f4e76 Support mov subtitle format directly instead of converting to text in the demuxer
reimar
parents: 25656
diff changeset
118 }
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26422
diff changeset
119 #ifdef CONFIG_ASS
25856
d42e4a4942a4 Simplify subtitle handling with -ass
reimar
parents: 25855
diff changeset
120 if (ass_enabled) {
25655
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
121 sh_sub_t* sh = d_dvdsub->sh;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
122 ass_track = sh ? sh->ass_track : NULL;
25856
d42e4a4942a4 Simplify subtitle handling with -ass
reimar
parents: 25855
diff changeset
123 if (!ass_track) continue;
d42e4a4942a4 Simplify subtitle handling with -ass
reimar
parents: 25855
diff changeset
124 if (type == 'a') { // ssa/ass subs with libass
27518
e54c9b7eb0d8 Revert bad changes to SSA/ASS subtitle packet format
uau
parents: 27498
diff changeset
125 ass_process_chunk(ass_track, packet, len,
e54c9b7eb0d8 Revert bad changes to SSA/ASS subtitle packet format
uau
parents: 27498
diff changeset
126 (long long)(pts*1000 + 0.5),
e54c9b7eb0d8 Revert bad changes to SSA/ASS subtitle packet format
uau
parents: 27498
diff changeset
127 (long long)((endpts-pts)*1000 + 0.5));
25857
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
128 } else { // plaintext subs with libass
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
129 vo_sub = NULL;
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
130 if (pts != MP_NOPTS_VALUE) {
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
131 if (endpts == MP_NOPTS_VALUE) endpts = pts + 3;
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
132 sub_clear_text(&subs, MP_NOPTS_VALUE);
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
133 sub_add_text(&subs, packet, len, endpts);
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
134 subs.start = pts * 100;
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
135 subs.end = endpts * 100;
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
136 ass_process_subtitle(ass_track, &subs);
4e593b5b4300 Reindent
reimar
parents: 25856
diff changeset
137 }
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
138 }
25655
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
139 continue;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
140 }
22233
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
141 #endif
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
142 if (pts != MP_NOPTS_VALUE) {
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
143 if (endpts == MP_NOPTS_VALUE)
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
144 sub_clear_text(&subs, MP_NOPTS_VALUE);
25655
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
145 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
146 int i;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
147 unsigned char* p = packet;
27518
e54c9b7eb0d8 Revert bad changes to SSA/ASS subtitle packet format
uau
parents: 27498
diff changeset
148 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
149 if (*p == ',')
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
150 i++;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
151 if (*p == '\0') /* Broken line? */
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
152 continue;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
153 len -= p - packet;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
154 packet = p;
e98ceb0190c1 Move all subtitle parsing from mkv demuxer to update_subtitles().
eugeni
parents: 25604
diff changeset
155 }
25604
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
156 sub_add_text(&subs, packet, len, endpts);
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
157 vo_osd_changed(OSDTYPE_SUBTITLE);
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 }
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
160 if (sub_clear_text(&subs, curpts))
11cae072ab88 Whitespace-only cosmetics: get rid of tabs
reimar
parents: 25509
diff changeset
161 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
162 }
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
163 current_module=NULL;
5bf6c178f09a Move some subtitle handling from mplayer.c to mpcommon.c and share it with mencoder.c
reimar
parents:
diff changeset
164 }
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
165
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
166 void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset)
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
167 {
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27343
diff changeset
168 #ifdef CONFIG_TV_TELETEXT
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
169 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
170 int page_changed;
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
171
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
172 if (demuxer->type != DEMUXER_TYPE_TV || !tvh) return;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
173
24342
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
174 //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
175 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
176 page_changed=1;
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
177
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
178 if(!page_changed)
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
179 return;
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
180
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
181 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
182 vo_osd_teletext_page=NULL;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
183 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
184 vo_osd_teletext_half=0;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
185 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
186 vo_osd_teletext_mode=0;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
187 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
188 vo_osd_teletext_format=0;
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
189 vo_osd_changed(OSDTYPE_TELETEXT);
24342
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
190
8873c972c6aa Decrease teletext page rendering frequency from 1/frame to about 4/sec.
voroshil
parents: 23903
diff changeset
191 tvh->functions->control(tvh->priv,TV_VBI_CONTROL_MARK_UNCHANGED,NULL);
23903
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
192 #endif
037737866f6a Teletext support
voroshil
parents: 23573
diff changeset
193 }
26090
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
194
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
195 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
196 {
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
197 if (audio_id == -1 && audio_lang)
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
198 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
199 if (audio_id == -1)
65ad20416dd7 Support 'default' attribute for audio and subtitle tracks.
eugeni
parents: 26090
diff changeset
200 audio_id = demuxer_default_audio_track(demuxer);
26090
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
201 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
202 demuxer_switch_audio(demuxer, audio_id);
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
203 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
204 demuxer->audio->id = -2;
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
205 demuxer->audio->sh = NULL;
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
206 }
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
207 return demuxer->audio->id;
c585e2ad8ebf Select audio stream in mplayer and mencoder, overriding demuxer decision.
eugeni
parents: 25857
diff changeset
208 }
26416
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
209
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
210 /* Parse -noconfig common to both programs */
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
211 int disable_system_conf=0;
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
212 int disable_user_conf=0;
27343
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 27341
diff changeset
213 #ifdef CONFIG_GUI
26422
f74bff77f088 noconfig fix, disable_gui_conf was not defined when compiling mencoder.
albeu
parents: 26416
diff changeset
214 int disable_gui_conf=0;
27343
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 27341
diff changeset
215 #endif /* CONFIG_GUI */
26416
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
216
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
217 /* Disable all configuration files */
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
218 static void noconfig_all(void)
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
219 {
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
220 disable_system_conf = 1;
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
221 disable_user_conf = 1;
27343
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 27341
diff changeset
222 #ifdef CONFIG_GUI
26416
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
223 disable_gui_conf = 1;
27343
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 27341
diff changeset
224 #endif /* CONFIG_GUI */
26416
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
225 }
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
226
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
227 const m_option_t noconfig_opts[] = {
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
228 {"all", noconfig_all, CONF_TYPE_FUNC, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 0, NULL},
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
229 {"system", &disable_system_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL},
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
230 {"user", &disable_user_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL},
27343
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 27341
diff changeset
231 #ifdef CONFIG_GUI
26416
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
232 {"gui", &disable_gui_conf, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 1, NULL},
27343
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 27341
diff changeset
233 #endif /* CONFIG_GUI */
26416
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
234 {NULL, NULL, 0, 0, 0, 0, NULL}
9d53b15aed02 Add options to disable some or all config files.
albeu
parents: 26269
diff changeset
235 };