aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2012-12-31 11:15:59 +0100
committerClément Bœsch <ubitux@gmail.com>2013-02-17 12:58:20 +0100
commit08d149d6889bcf56c9463c153860b89a3c3d2615 (patch)
tree7b75891b240963d6d8e47d9a91a8f96e00f52745
parent3a0a959dcbf80f46241ff4997e5b095e6695b84d (diff)
downloadffmpeg-08d149d6889bcf56c9463c153860b89a3c3d2615.tar.gz
lavfi/subtitles: support charenc option.
-rw-r--r--doc/filters.texi4
-rw-r--r--libavfilter/vf_ass.c8
2 files changed, 11 insertions, 1 deletions
diff --git a/doc/filters.texi b/doc/filters.texi
index bfd0f16a52..a9ee7cb9a9 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -4678,6 +4678,10 @@ Set the filename of the subtitle file to read. It must be specified.
Specify the size of the original video, the video for which the ASS file
was composed. Due to a misdesign in ASS aspect ratio arithmetic, this is
necessary to correctly scale the fonts if the aspect ratio has been changed.
+
+@item charenc
+Set subtitles input character encoding. @code{subtitles} filter only. Only
+useful if not UTF-8.
@end table
If the first key is not specified, it is assumed that the first value
diff --git a/libavfilter/vf_ass.c b/libavfilter/vf_ass.c
index 84ce55d8ce..c4bc755be3 100644
--- a/libavfilter/vf_ass.c
+++ b/libavfilter/vf_ass.c
@@ -50,6 +50,7 @@ typedef struct {
ASS_Renderer *renderer;
ASS_Track *track;
char *filename;
+ char *charenc;
uint8_t rgba_map[4];
int pix_step[4]; ///< steps per pixel for each plane of the main output
int original_w, original_h;
@@ -253,6 +254,7 @@ AVFilter avfilter_vf_ass = {
static const AVOption subtitles_options[] = {
COMMON_OPTIONS
+ {"charenc", "set input character encoding", OFFSET(charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS},
{NULL},
};
@@ -261,6 +263,7 @@ AVFILTER_DEFINE_CLASS(subtitles);
static av_cold int init_subtitles(AVFilterContext *ctx, const char *args)
{
int ret, sid;
+ AVDictionary *codec_opts = NULL;
AVFormatContext *fmt = NULL;
AVCodecContext *dec_ctx = NULL;
AVCodec *dec = NULL;
@@ -306,7 +309,9 @@ static av_cold int init_subtitles(AVFilterContext *ctx, const char *args)
avcodec_get_name(dec_ctx->codec_id));
return AVERROR(EINVAL);
}
- ret = avcodec_open2(dec_ctx, dec, NULL);
+ if (ass->charenc)
+ av_dict_set(&codec_opts, "sub_charenc", ass->charenc, 0);
+ ret = avcodec_open2(dec_ctx, dec, &codec_opts);
if (ret < 0)
goto end;
@@ -341,6 +346,7 @@ static av_cold int init_subtitles(AVFilterContext *ctx, const char *args)
}
end:
+ av_dict_free(&codec_opts);
if (dec_ctx)
avcodec_close(dec_ctx);
if (fmt)