lavfi/subtitles: support charenc option.
This commit is contained in:
@@ -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 {
|
|||||||
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 = {
|
|||||||
|
|
||||||
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);
|
|||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
Reference in New Issue
Block a user