summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-08-01 23:25:50 +0200
committerwm4 <wm4@nowhere>2015-08-01 23:49:37 +0200
commit11f2be2bcc264aa4f24cdad036231e34d09f5630 (patch)
tree6e0b8a258cf6d8de882bd21d7d61a644ca379dd9 /sub
parent17fe9d7c0d33ead1d13535952d8491aaf68d3c46 (diff)
downloadmpv-11f2be2bcc264aa4f24cdad036231e34d09f5630.tar.bz2
mpv-11f2be2bcc264aa4f24cdad036231e34d09f5630.tar.xz
charset_conv: make it possible to return an allocated string as guess
uchardet is written in C++, and thus doesn't appreciate the value of using static strings, and internally stores the guessed charset as allocated std::string. Add a minimal hack to deal with this. (I don't appreciate that the code is potentially harder to understand by returning either a static or allocated string, but I do appreciate for not having to litter the existing code with strdups.)
Diffstat (limited to 'sub')
-rw-r--r--sub/dec_sub.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index 1800cf34d9..20fa9eff83 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -303,8 +303,8 @@ void sub_decode(struct dec_sub *sub, struct demux_packet *packet)
pthread_mutex_unlock(&sub->lock);
}
-static const char *guess_sub_cp(struct mp_log *log, struct packet_list *subs,
- const char *usercp)
+static const char *guess_sub_cp(struct mp_log *log, void *talloc_ctx,
+ struct packet_list *subs, const char *usercp)
{
if (!mp_charset_requires_guess(usercp))
return usercp;
@@ -330,7 +330,7 @@ static const char *guess_sub_cp(struct mp_log *log, struct packet_list *subs,
memcpy(text.start + text.len + pkt->len, sep, sep_len);
text.len += pkt->len + sep_len;
}
- const char *guess = mp_charset_guess(log, text, usercp, 0);
+ const char *guess = mp_charset_guess(talloc_ctx, log, text, usercp, 0);
talloc_free(text.start);
return guess;
}
@@ -455,7 +455,7 @@ bool sub_read_all_packets(struct dec_sub *sub, struct sh_stream *sh)
}
if (opts->sub_cp && !sh->sub->is_utf8)
- sub->charset = guess_sub_cp(sub->log, subs, opts->sub_cp);
+ sub->charset = guess_sub_cp(sub->log, sub, subs, opts->sub_cp);
if (sub->charset && sub->charset[0] && !mp_charset_is_utf8(sub->charset))
MP_INFO(sub, "Using subtitle charset: %s\n", sub->charset);