Commit 08d149d6 authored by Clément Bœsch's avatar Clément Bœsch

lavfi/subtitles: support charenc option.

parent 3a0a959d
...@@ -4678,6 +4678,10 @@ Set the filename of the subtitle file to read. It must be specified. ...@@ -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 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 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. 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 @end table
If the first key is not specified, it is assumed that the first value If the first key is not specified, it is assumed that the first value
......
...@@ -50,6 +50,7 @@ typedef struct { ...@@ -50,6 +50,7 @@ typedef struct {
ASS_Renderer *renderer; ASS_Renderer *renderer;
ASS_Track *track; ASS_Track *track;
char *filename; char *filename;
char *charenc;
uint8_t rgba_map[4]; uint8_t rgba_map[4];
int pix_step[4]; ///< steps per pixel for each plane of the main output int pix_step[4]; ///< steps per pixel for each plane of the main output
int original_w, original_h; int original_w, original_h;
...@@ -253,6 +254,7 @@ AVFilter avfilter_vf_ass = { ...@@ -253,6 +254,7 @@ AVFilter avfilter_vf_ass = {
static const AVOption subtitles_options[] = { static const AVOption subtitles_options[] = {
COMMON_OPTIONS COMMON_OPTIONS
{"charenc", "set input character encoding", OFFSET(charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS},
{NULL}, {NULL},
}; };
...@@ -261,6 +263,7 @@ AVFILTER_DEFINE_CLASS(subtitles); ...@@ -261,6 +263,7 @@ AVFILTER_DEFINE_CLASS(subtitles);
static av_cold int init_subtitles(AVFilterContext *ctx, const char *args) static av_cold int init_subtitles(AVFilterContext *ctx, const char *args)
{ {
int ret, sid; int ret, sid;
AVDictionary *codec_opts = NULL;
AVFormatContext *fmt = NULL; AVFormatContext *fmt = NULL;
AVCodecContext *dec_ctx = NULL; AVCodecContext *dec_ctx = NULL;
AVCodec *dec = NULL; AVCodec *dec = NULL;
...@@ -306,7 +309,9 @@ static av_cold int init_subtitles(AVFilterContext *ctx, const char *args) ...@@ -306,7 +309,9 @@ static av_cold int init_subtitles(AVFilterContext *ctx, const char *args)
avcodec_get_name(dec_ctx->codec_id)); avcodec_get_name(dec_ctx->codec_id));
return AVERROR(EINVAL); 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) if (ret < 0)
goto end; goto end;
...@@ -341,6 +346,7 @@ static av_cold int init_subtitles(AVFilterContext *ctx, const char *args) ...@@ -341,6 +346,7 @@ static av_cold int init_subtitles(AVFilterContext *ctx, const char *args)
} }
end: end:
av_dict_free(&codec_opts);
if (dec_ctx) if (dec_ctx)
avcodec_close(dec_ctx); avcodec_close(dec_ctx);
if (fmt) if (fmt)
......
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