| @@ -2369,14 +2369,21 @@ static void mov_read_chapters(AVFormatContext *s) | |||||
| // The samples could theoretically be in any encoding if there's an encd | // The samples could theoretically be in any encoding if there's an encd | ||||
| // atom following, but in practice are only utf-8 or utf-16, distinguished | // atom following, but in practice are only utf-8 or utf-16, distinguished | ||||
| // instead by the presence of a BOM | // instead by the presence of a BOM | ||||
| ch = avio_rb16(sc->pb); | |||||
| if (ch == 0xfeff) | |||||
| avio_get_str16be(sc->pb, len, title, title_len); | |||||
| else if (ch == 0xfffe) | |||||
| avio_get_str16le(sc->pb, len, title, title_len); | |||||
| else { | |||||
| AV_WB16(title, ch); | |||||
| avio_get_str(sc->pb, len - 2, title + 2, title_len - 2); | |||||
| if (!len) { | |||||
| title[0] = 0; | |||||
| } else { | |||||
| ch = avio_rb16(sc->pb); | |||||
| if (ch == 0xfeff) | |||||
| avio_get_str16be(sc->pb, len, title, title_len); | |||||
| else if (ch == 0xfffe) | |||||
| avio_get_str16le(sc->pb, len, title, title_len); | |||||
| else { | |||||
| AV_WB16(title, ch); | |||||
| if (len == 1 || len == 2) | |||||
| title[len] = '0'; | |||||
| else | |||||
| avio_get_str(sc->pb, len - 2, title + 2, title_len - 2); | |||||
| } | |||||
| } | } | ||||
| ff_new_chapter(s, i, st->time_base, sample->timestamp, end, title); | ff_new_chapter(s, i, st->time_base, sample->timestamp, end, title); | ||||