From cb1d0d800a56e0080f4d14b4bfbc3ed30ff492a9 Mon Sep 17 00:00:00 2001 From: Matthew Szatmary Date: Wed, 20 Sep 2017 11:42:00 -0700 Subject: [PATCH] skip blanks lines when rendering to text --- examples/ts2srt.c | 1 + src/caption.c | 17 ++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/ts2srt.c b/examples/ts2srt.c index 4c6c17e..b5bce82 100644 --- a/examples/ts2srt.c +++ b/examples/ts2srt.c @@ -42,6 +42,7 @@ int main(int argc, char** argv) FILE* file = fopen(path, "rb+"); + // This fread 188 bytes at a time is VERY slow. Need to rewrite that while (TS_PACKET_SIZE == fread(&pkt[0], 1, TS_PACKET_SIZE, file)) { switch (ts_parse_packet(&ts, &pkt[0])) { case LIBCAPTION_OK: diff --git a/src/caption.c b/src/caption.c index 8e17b03..f8f20c6 100644 --- a/src/caption.c +++ b/src/caption.c @@ -398,27 +398,26 @@ int caption_frame_from_text(caption_frame_t* frame, const utf8_char_t* data) //////////////////////////////////////////////////////////////////////////////// size_t caption_frame_to_text(caption_frame_t* frame, utf8_char_t* data) { - int r, c, uln, a, b = 0; + int r, c, uln, crlf = 0, count = 0; size_t s, size = 0; eia608_style_t sty; data[0] = 0; for (r = 0; r < SCREEN_ROWS; ++r) { - a = b, b = 0; + crlf += count, count = 0; for (c = 0; c < SCREEN_COLS; ++c) { const utf8_char_t* chr = caption_frame_read_char(frame, r, c, &sty, &uln); - if (0 < utf8_char_length(chr) && (0 < b || !utf8_char_whitespace(chr))) { - if (0 < a) { - // insert a new line if necessary - utf8_char_copy(data + 0, "\r"); - utf8_char_copy(data + 1, "\n"); - data += 2, size += 2, a = 0; + // dont start a new line until we encounter at least one printable character + if (0 < utf8_char_length(chr) && (0 < count || !utf8_char_whitespace(chr))) { + if (0 < crlf) { + memcpy(data, "\r\n", 2); + data += 2, size += 2, crlf = 0; } s = utf8_char_copy(data, chr); - data += s, size += s, ++b; + data += s, size += s, ++count; } } }