mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2024-12-24 20:01:53 +00:00
Merged 2233
This commit is contained in:
parent
e1f9a62abc
commit
d29a4552fa
@ -1,5 +1,8 @@
|
||||
2004-09-28 Moritz Bunkus <moritz@bunkus.org>
|
||||
|
||||
* mkvmerge, mkvextract: bug fix: ASS was handled like SSA which is
|
||||
not correct in each case, especially when extracting it.
|
||||
|
||||
* mkvextract: bug fix: The WAV writer was not endian safe.
|
||||
|
||||
2004-09-27 Moritz Bunkus <moritz@bunkus.org>
|
||||
|
@ -534,7 +534,7 @@ create_output_files() {
|
||||
tracks[i].out->write_bom(tracks[i].sub_charset);
|
||||
|
||||
} else if (tracks[i].type == TYPESSA) {
|
||||
char *s;
|
||||
char *s, *p1;
|
||||
unsigned char *pd;
|
||||
int bom_len;
|
||||
string sconv;
|
||||
@ -568,8 +568,19 @@ create_output_files() {
|
||||
sconv = s;
|
||||
safefree(s);
|
||||
tracks[i].out->write_bom(tracks[i].sub_charset);
|
||||
|
||||
if (((p1 = strstr(sconv.c_str(), "[Events]")) == NULL) ||
|
||||
(strstr(p1, "Format:") == NULL)) {
|
||||
if (!strcmp(tracks[i].codec_id, MKV_S_TEXTSSA))
|
||||
sconv += "\n[Events]\nFormat: Marked, Start, End, "
|
||||
"Style, Name, MarginL, MarginR, MarginV, Effect, Text\n";
|
||||
else
|
||||
sconv += "\n[Events]\nFormat: Layer, Start, End, "
|
||||
"Style, Actor, MarginL, MarginR, MarginV, Effect, Text\n";
|
||||
} else if ((sconv.length() == 0) ||
|
||||
(sconv[sconv.length()- 1] != '\n'))
|
||||
sconv += "\n";
|
||||
|
||||
from_utf8(tracks[i].conv_handle, sconv);
|
||||
tracks[i].out->puts_unl(sconv.c_str());
|
||||
|
||||
@ -764,30 +775,46 @@ handle_data(KaxBlock *block,
|
||||
// Reconstruct the 'original' line. It'll look like this for SSA:
|
||||
// Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect,
|
||||
// Text
|
||||
// and for ASS:
|
||||
// Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect,
|
||||
// Text
|
||||
|
||||
line = string("Dialogue: Marked=0,");
|
||||
|
||||
if (!strcmp(track->codec_id, MKV_S_TEXTSSA))
|
||||
line = string("Dialogue: Marked=0,") +
|
||||
// Append the start and end time.
|
||||
mxprints(buffer, "%lld:%02lld:%02lld.%02lld",
|
||||
mxsprintf("%lld:%02lld:%02lld.%02lld",
|
||||
start / 1000 / 60 / 60, (start / 1000 / 60) % 60,
|
||||
(start / 1000) % 60, (start % 1000) / 10);
|
||||
line += string(buffer) + comma;
|
||||
|
||||
mxprints(buffer, "%lld:%02lld:%02lld.%02lld",
|
||||
(start / 1000) % 60, (start % 1000) / 10) + comma +
|
||||
mxsprintf("%lld:%02lld:%02lld.%02lld",
|
||||
end / 1000 / 60 / 60, (end / 1000 / 60) % 60,
|
||||
(end / 1000) % 60, (end % 1000) / 10);
|
||||
line += string(buffer) + comma;
|
||||
|
||||
(end / 1000) % 60, (end % 1000) / 10) + comma +
|
||||
// Append the other fields.
|
||||
line += fields[2] + comma + // Style
|
||||
fields[2] + comma + // Style
|
||||
fields[3] + comma + // Name
|
||||
fields[4] + comma + // MarginL
|
||||
fields[5] + comma + // MarginR
|
||||
fields[6] + comma + // MarginV
|
||||
fields[7] + comma; // Effect
|
||||
fields[7] + comma + // Effect
|
||||
fields[8] + string("\n"); // Text
|
||||
|
||||
else
|
||||
line = string("Dialogue: ") +
|
||||
fields[1] + comma + // Layer
|
||||
mxsprintf("%lld:%02lld:%02lld.%02lld",
|
||||
start / 1000 / 60 / 60, (start / 1000 / 60) % 60,
|
||||
(start / 1000) % 60, (start % 1000) / 10) + comma +
|
||||
mxsprintf("%lld:%02lld:%02lld.%02lld",
|
||||
end / 1000 / 60 / 60, (end / 1000 / 60) % 60,
|
||||
(end / 1000) % 60, (end % 1000) / 10) + comma +
|
||||
fields[2] + comma + // Style
|
||||
comma + // Actor
|
||||
fields[4] + comma + // MarginL
|
||||
fields[5] + comma + // MarginR
|
||||
fields[6] + comma + // MarginV
|
||||
fields[7] + comma + // Effect
|
||||
fields[8] + string("\n"); // Text
|
||||
|
||||
// Do the charset conversion.
|
||||
line += fields[8] + "\n";
|
||||
from_utf8(track->conv_handle, line);
|
||||
|
||||
// Now store that entry.
|
||||
|
@ -120,13 +120,9 @@ ssa_reader_c::ssa_reader_c(track_info_c *nti)
|
||||
strip(format);
|
||||
}
|
||||
|
||||
// Now just append the current line and some DOS style newlines.
|
||||
// But not if we've already encountered the [Events] section.
|
||||
if (section != 'e') {
|
||||
global += "\r\n";
|
||||
global += line;
|
||||
}
|
||||
}
|
||||
|
||||
if (format.size() == 0)
|
||||
throw error_c("ssa_reader: Invalid format. Could not find the "
|
||||
@ -232,7 +228,7 @@ ssa_reader_c::read(generic_packetizer_c *,
|
||||
vector<string> fields;
|
||||
ssa_line_c cline;
|
||||
|
||||
num = 1;
|
||||
num = 0;
|
||||
|
||||
do {
|
||||
line = mm_io->getline();
|
||||
|
Loading…
Reference in New Issue
Block a user