comparison libmpdemux/demux_mov.c @ 21827:b0bc0d81f91b

Subtitle handling cleanup: factor out code for parsing embedded subtitles and adding and removing of lines in subtitle struct into subreader.c.
author reimar
date Sat, 06 Jan 2007 19:07:58 +0000
parents d7b2fa4c39da
children 71cb05a537e1
comparison
equal deleted inserted replaced
21826:d4dbadf11019 21827:b0bc0d81f91b
2170 sh_sub_t *sh = demuxer->sub->sh; 2170 sh_sub_t *sh = demuxer->sub->sh;
2171 off_t pos = trak->samples[samplenr].pos; 2171 off_t pos = trak->samples[samplenr].pos;
2172 int len = trak->samples[samplenr].size; 2172 int len = trak->samples[samplenr].size;
2173 double subpts = (double)trak->samples[samplenr].pts / (double)trak->timescale; 2173 double subpts = (double)trak->samples[samplenr].pts / (double)trak->timescale;
2174 stream_seek(demuxer->stream, pos); 2174 stream_seek(demuxer->stream, pos);
2175 if (sh->type == 'v') 2175 if (sh->type != 'v') {
2176 ds_read_packet(demuxer->sub, demuxer->stream, len, subpts, pos, 0);
2177 else {
2178 int i;
2179 char *line = priv->subtext;
2180 stream_skip(demuxer->stream, 2); // size 2176 stream_skip(demuxer->stream, 2); // size
2181 len -= 2; 2177 len -= 2;
2182 if (len < 0) len = 0; 2178 if (len < 0) len = 0;
2183 if (len > MOV_MAX_SUBLEN) len = MOV_MAX_SUBLEN; 2179 if (len > MOV_MAX_SUBLEN) len = MOV_MAX_SUBLEN;
2184 stream_read(demuxer->stream, priv->subtext, len);
2185 priv->subtext[len] = 0;
2186 priv->subs.lines = 1;
2187 priv->subs.text[0] = &priv->subtext;
2188 while ((line = strchr(line, '\n'))) {
2189 *line++ = 0;
2190 priv->subs.text[priv->subs.lines] = line;
2191 priv->subs.lines++;
2192 }
2193 vo_sub = &priv->subs;
2194 } 2180 }
2181 ds_read_packet(demuxer->sub, demuxer->stream, len, subpts, pos, 0);
2195 priv->current_sub = samplenr; 2182 priv->current_sub = samplenr;
2196 } 2183 }
2197 vo_osd_changed (OSDTYPE_SUBTITLE);
2198 } 2184 }
2199 2185
2200 return 1; 2186 return 1;
2201 2187
2202 } 2188 }