Mercurial > mplayer.hg
diff libmpdemux/demux_mkv.c @ 22137:3d415b28e5e4
Another round of subtitle code cleanup
author | reimar |
---|---|
date | Mon, 05 Feb 2007 18:25:28 +0000 |
parents | fde1ddcc04c7 |
children | b6f01e891ba8 |
line wrap: on
line diff
--- a/libmpdemux/demux_mkv.c Mon Feb 05 18:21:14 2007 +0000 +++ b/libmpdemux/demux_mkv.c Mon Feb 05 18:25:28 2007 +0000 @@ -166,8 +166,6 @@ uint64_t tc_scale, cluster_tc, first_tc; int has_first_tc; - subtitle subs; - uint64_t cluster_size; uint64_t blockgroup_size; @@ -523,7 +521,6 @@ return 0; memcpy(buf, t->private_data, t->private_size); buf[t->private_size] = 0; - t->sh_sub.type = 'v'; t->sh_sub.has_palette = 0; pos = buf; @@ -2376,8 +2373,6 @@ track->subtitle_type == MATROSKA_SUBTYPE_VOBSUB) continue; - track->sh_sub.type = 'a'; - if (track->subtitle_type == MATROSKA_SUBTYPE_SSA) { track->sh_sub.ass_track = ass_new_track(ass_library); @@ -2391,10 +2386,6 @@ } ass_process_codec_private(track->sh_sub.ass_track, track->private_data, track->private_size); } - else - { - track->sh_sub.ass_track = ass_default_track(ass_library); - } } } #endif @@ -2405,15 +2396,13 @@ if (track->subtitle_type != MATROSKA_SUBTYPE_UNKNOWN) { sh_sub_t *sh = new_sh_sub_sid(demuxer, track->tnum, sid); - if ((track->subtitle_type == MATROSKA_SUBTYPE_VOBSUB) || - (track->subtitle_type == MATROSKA_SUBTYPE_SSA)) - { - if (track->private_data != NULL) - { + track->sh_sub.type = 't'; + if (track->subtitle_type == MATROSKA_SUBTYPE_VOBSUB) + track->sh_sub.type = 'v'; + if (track->subtitle_type == MATROSKA_SUBTYPE_SSA) + track->sh_sub.type = 'a'; if (sh) memcpy(sh, &track->sh_sub, sizeof(sh_sub_t)); - } - } } else { @@ -2718,9 +2707,6 @@ } static void -clear_subtitles(demuxer_t *demuxer, uint64_t timecode, int clear_all); - -static void demux_close_mkv (demuxer_t *demuxer) { mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; @@ -2731,7 +2717,6 @@ #ifdef USE_ICONV subcp_close(); #endif - clear_subtitles(demuxer, 0, 1); free_cached_dps (demuxer); if (mkv_d->tracks) { @@ -2853,6 +2838,7 @@ int64_t size, uint64_t block_duration, uint64_t timecode) { mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; + demux_packet_t *dp; char *ptr1; int i; @@ -2868,9 +2854,6 @@ ass_process_chunk(track->sh_sub.ass_track, block, size, (long long)timecode, (long long)block_duration); return; } - // Use code below only to parse this single sub, old subs timed in libass - if (ass_enabled) - clear_subtitles(demuxer, timecode, 1); #endif ptr1 = block; @@ -2885,27 +2868,12 @@ } sub_utf8 = 1; - sub_add_text(&mkv_d->subs, ptr1, size - (ptr1 - block), - (timecode + block_duration) / 1000.0f); -#ifdef USE_ASS - if (ass_enabled) { - mkv_d->subs.start = timecode / 10; - mkv_d->subs.end = (timecode + block_duration) / 10; - ass_process_subtitle(track->sh_sub.ass_track, &mkv_d->subs); - return; - } -#endif - vo_sub = &mkv_d->subs; - vo_osd_changed (OSDTYPE_SUBTITLE); -} - -static void -clear_subtitles(demuxer_t *demuxer, uint64_t timecode, int clear_all) -{ - mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; - double pts = clear_all ? MP_NOPTS_VALUE : (timecode / 1000.0f); - if (sub_clear_text(&mkv_d->subs, pts)) - vo_osd_changed(OSDTYPE_SUBTITLE); + size -= ptr1 - block; + dp = new_demux_packet(size); + memcpy(dp->buffer, ptr1, size); + dp->pts = timecode / 1000.0f; + dp->endpts = (timecode + block_duration) / 1000.0f; + ds_add_packet(demuxer->sub, dp); } // Taken from demux_real.c. Thanks to the original developpers :) @@ -3241,8 +3209,6 @@ } current_pts = tc / 1000.0; - clear_subtitles(demuxer, tc, 0); - for (i=0; i<mkv_d->num_tracks; i++) if (mkv_d->tracks[i]->tnum == num) { track = mkv_d->tracks[i]; @@ -3628,10 +3594,6 @@ mkv_d->skip_to_timecode = target_timecode; mkv_d->a_skip_to_keyframe = 1; - /* Clear subtitles. */ - if (target_timecode <= mkv_d->last_pts * 1000) - clear_subtitles(demuxer, 0, 1); - demux_mkv_fill_buffer(demuxer, NULL); } else if ((demuxer->movi_end <= 0) || !(flags & 1)) @@ -3670,10 +3632,6 @@ mkv_d->skip_to_timecode = index->timecode; mkv_d->a_skip_to_keyframe = 1; - /* Clear subtitles. */ - if (index->timecode <= mkv_d->last_pts * 1000) - clear_subtitles(demuxer, 0, 1); - demux_mkv_fill_buffer(demuxer, NULL); } }