diff options
-rw-r--r-- | libmpdemux/demux_mkv.c | 39 | ||||
-rw-r--r-- | mpcommon.c | 6 |
2 files changed, 5 insertions, 40 deletions
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 166ee236c0..3e667d2534 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -2566,42 +2566,10 @@ demux_mkv_read_block_lacing (uint8_t *buffer, uint64_t *size, return 0; } -static void fix_ass_packet(char **block, int64_t *size, - uint64_t block_duration, uint64_t timecode) -{ - char *line, *layer, *ptr = *block, *end = ptr+*size; - *end = 0; - for (; *ptr!=',' && ptr<end-1; ptr++); - if (*ptr == ',') - layer = ++ptr; - for (; *ptr!=',' && ptr<end-1; ptr++); - if (*ptr == ',') { - int64_t end_pts = timecode + block_duration; - int sc = timecode / 10; - int ec = end_pts / 10; - int sh, sm, ss, eh, em, es, len; - sh = sc/360000; sc -= 360000*sh; - sm = sc/ 6000; sc -= 6000*sm; - ss = sc/ 100; sc -= 100*ss; - eh = ec/360000; ec -= 360000*eh; - em = ec/ 6000; ec -= 6000*em; - es = ec/ 100; ec -= 100*es; - *ptr++ = '\0'; - len = 50 + end-ptr; - if (!(line = malloc(len))) - return; - snprintf(line,len,"Dialogue: %s,%d:%02d:%02d.%02d,%d:%02d:%02d.%02d,%s", - layer, sh, sm, ss, sc, eh, em, es, ec, ptr); - *block = line; - *size = strlen(line); - } -} - static void handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block, int64_t size, uint64_t block_duration, uint64_t timecode) { - char *data = block; demux_packet_t *dp; if (block_duration == 0) @@ -2611,17 +2579,12 @@ handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block, return; } - if (track->subtitle_type == MATROSKA_SUBTYPE_SSA) - fix_ass_packet(&data, &size, block_duration, timecode); - sub_utf8 = 1; dp = new_demux_packet(size); - memcpy(dp->buffer, data, size); + memcpy(dp->buffer, block, size); dp->pts = timecode / 1000.0f; dp->endpts = (timecode + block_duration) / 1000.0f; ds_add_packet(demuxer->sub, dp); - if (data != block) - free(data); } // Taken from demux_real.c. Thanks to the original developpers :) diff --git a/mpcommon.c b/mpcommon.c index 489cc5fc48..79af866cab 100644 --- a/mpcommon.c +++ b/mpcommon.c @@ -122,7 +122,9 @@ void update_subtitles(sh_video_t *sh_video, demux_stream_t *d_dvdsub, int reset) ass_track = sh ? sh->ass_track : NULL; if (!ass_track) continue; if (type == 'a') { // ssa/ass subs with libass - ass_process_data(ass_track, packet, len); + ass_process_chunk(ass_track, packet, len, + (long long)(pts*1000 + 0.5), + (long long)((endpts-pts)*1000 + 0.5)); } else { // plaintext subs with libass vo_sub = NULL; if (pts != MP_NOPTS_VALUE) { @@ -143,7 +145,7 @@ void update_subtitles(sh_video_t *sh_video, demux_stream_t *d_dvdsub, int reset) if (type == 'a') { // ssa/ass subs without libass => convert to plaintext int i; unsigned char* p = packet; - for (i=0; i < 9 && *p != '\0'; p++) + for (i=0; i < 8 && *p != '\0'; p++) if (*p == ',') i++; if (*p == '\0') /* Broken line? */ |