From 6e411d9cc7ecf266c2ee463f0addb596cbf470a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <u@pkh.me> Date: Sun, 23 Nov 2014 12:56:02 +0100 Subject: [PATCH] avcodec/microdvddec: support non persistent italic marker '/' Inspired from a patch by Michal Wazgird <mplayer@cyryl.net> See https://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2014-November/072772.html --- libavcodec/microdvddec.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libavcodec/microdvddec.c b/libavcodec/microdvddec.c index b225ab9f7e9..96034a042ae 100644 --- a/libavcodec/microdvddec.c +++ b/libavcodec/microdvddec.c @@ -66,8 +66,24 @@ static void microdvd_set_tag(struct microdvd_tag *tags, struct microdvd_tag tag) // italic, bold, underline, strike-through #define MICRODVD_STYLES "ibus" +/* some samples have lines that start with a / indicating non persistent italic + * marker */ +static char *check_for_italic_slash_marker(struct microdvd_tag *tags, char *s) +{ + if (*s == '/') { + struct microdvd_tag tag = tags[indexof(MICRODVD_TAGS, 'y')]; + tag.key = 'y'; + tag.data1 |= 1 << 0 /* 'i' position in MICRODVD_STYLES */; + microdvd_set_tag(tags, tag); + s++; + } + return s; +} + static char *microdvd_load_tags(struct microdvd_tag *tags, char *s) { + s = check_for_italic_slash_marker(tags, s); + while (*s == '{') { char *start = s; char tag_char = *(s + 1); @@ -178,7 +194,7 @@ static char *microdvd_load_tags(struct microdvd_tag *tags, char *s) microdvd_set_tag(tags, tag); s++; } - return s; + return check_for_italic_slash_marker(tags, s); } static void microdvd_open_tags(AVBPrint *new_line, struct microdvd_tag *tags) -- GitLab