diff options
author | mosu <mosu@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-09-12 21:56:03 +0000 |
---|---|---|
committer | mosu <mosu@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-09-12 21:56:03 +0000 |
commit | cfb890259e8246fc9625a069496b3908ef75bb0e (patch) | |
tree | 43e633863f6f83bfcdd4e78b8824366fc246107b /libmpdemux | |
parent | 45a22abd6c77b61ec770aa9f7ce21ffa0e1a4b2c (diff) | |
download | mpv-cfb890259e8246fc9625a069496b3908ef75bb0e.tar.bz2 mpv-cfb890259e8246fc9625a069496b3908ef75bb0e.tar.xz |
Marked SSA subs as UTF-8. Better newline handling for SSA subs. Patch by Tristan <z80@oceanfree.net>.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@10862 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/demux_mkv.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/libmpdemux/demux_mkv.cpp b/libmpdemux/demux_mkv.cpp index 48ff30767b..27d7f2d2e1 100644 --- a/libmpdemux/demux_mkv.cpp +++ b/libmpdemux/demux_mkv.cpp @@ -448,18 +448,9 @@ static void handle_subtitles(demuxer_t *d, KaxBlock *block, int64_t duration) { /* Load text. */ while ((unsigned int)(s1 - buffer) < data.Size()) { - if ((*s1 == '{') && ((unsigned int)(s1 + 2 - buffer) < data.Size())) { - /* Newline */ - if (*(s1 + 1) == '\\' && (*(s1 + 2) == 'N' || *(s1 + 2) == 'n')) { - mkv_d->clear_subs_at[mkv_d->subs.lines - 1] = - block->GlobalTimecode() / 1000000 - mkv_d->first_tc + duration; - - mkv_d->subs.lines++; - *s2 = 0; - s2 = mkv_d->subs.text[mkv_d->subs.lines - 1]; - } + if (*s1 == '{') state = 1; - } else if (*s1 == '}' && state == 1) + else if ((*s1 == '}') && (state == 1)) state = 2; if (state == 0) { @@ -470,6 +461,18 @@ static void handle_subtitles(demuxer_t *d, KaxBlock *block, int64_t duration) { } s1++; + /* Newline */ + if ((*s1 == '\\') && ((unsigned int)(s1 + 1 - buffer) < data.Size()) && + ((*(s1 + 1) == 'N') || (*(s1 + 1) == 'n'))) { + mkv_d->clear_subs_at[mkv_d->subs.lines - 1] = + block->GlobalTimecode() / 1000000 - mkv_d->first_tc + duration; + + mkv_d->subs.lines++; + *s2 = 0; + s2 = mkv_d->subs.text[mkv_d->subs.lines - 1]; + s1 += 2; + } + if (state == 2) state = 0; } @@ -1910,9 +1913,10 @@ extern "C" int demux_mkv_open(demuxer_t *demuxer) { if (!strcmp(track->codec_id, MKV_S_TEXTUTF8)) sub_utf8 = 1; // Force UTF-8 conversion. - if (!strcmp(track->codec_id, MKV_S_TEXTSSA)) + if (!strcmp(track->codec_id, MKV_S_TEXTSSA)) { mkv_d->subtitle_type = MKV_SUBTYPE_SSA; - else + sub_utf8 = 1; + } else mkv_d->subtitle_type = MKV_SUBTYPE_TEXT; } else mp_msg(MSGT_DEMUX, MSGL_ERR, "[mkv] File does not contain a " |