Commit 378a830e authored by Clément Bœsch's avatar Clément Bœsch

avformat/subtitles: support standalone CR (MacOS).

Recent .srt files with CR only were found in the wild.
parent 90fc00a6
...@@ -228,7 +228,7 @@ static inline int is_eol(char c) ...@@ -228,7 +228,7 @@ static inline int is_eol(char c)
void ff_subtitles_read_chunk(AVIOContext *pb, AVBPrint *buf) void ff_subtitles_read_chunk(AVIOContext *pb, AVBPrint *buf)
{ {
char eol_buf[5]; char eol_buf[5], last_was_cr = 0;
int n = 0, i = 0, nb_eol = 0; int n = 0, i = 0, nb_eol = 0;
av_bprint_clear(buf); av_bprint_clear(buf);
...@@ -245,12 +245,13 @@ void ff_subtitles_read_chunk(AVIOContext *pb, AVBPrint *buf) ...@@ -245,12 +245,13 @@ void ff_subtitles_read_chunk(AVIOContext *pb, AVBPrint *buf)
/* line break buffering: we don't want to add the trailing \r\n */ /* line break buffering: we don't want to add the trailing \r\n */
if (is_eol(c)) { if (is_eol(c)) {
nb_eol += c == '\n'; nb_eol += c == '\n' || last_was_cr;
if (nb_eol == 2) if (nb_eol == 2)
break; break;
eol_buf[i++] = c; eol_buf[i++] = c;
if (i == sizeof(eol_buf) - 1) if (i == sizeof(eol_buf) - 1)
break; break;
last_was_cr = c == '\r';
continue; continue;
} }
......
...@@ -99,11 +99,20 @@ void ff_subtitles_read_chunk(AVIOContext *pb, AVBPrint *buf); ...@@ -99,11 +99,20 @@ void ff_subtitles_read_chunk(AVIOContext *pb, AVBPrint *buf);
/** /**
* Get the number of characters to increment to jump to the next line, or to * Get the number of characters to increment to jump to the next line, or to
* the end of the string. * the end of the string.
* The function handles the following line breaks schemes: LF (any sane
* system), CRLF (MS), or standalone CR (old MacOS).
*/ */
static av_always_inline int ff_subtitles_next_line(const char *ptr) static av_always_inline int ff_subtitles_next_line(const char *ptr)
{ {
int n = strcspn(ptr, "\n"); int n = strcspn(ptr, "\r\n");
return n + !!*ptr; ptr += n;
if (*ptr == '\r') {
ptr++;
n++;
}
if (*ptr == '\n')
n++;
return n;
} }
#endif /* AVFORMAT_SUBTITLES_H */ #endif /* AVFORMAT_SUBTITLES_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment