mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
avcodec: add a subcharenc mode that disables UTF-8 check
This is for applications which want to explicitly check for invalid UTF-8 manually, and take actions that are better than dropping invalid subtitles silently. (It's pretty much silent because sporadic avcodec error messages are so common that you can't reasonably display them in a prominent and meaningful way in a application GUI.)
This commit is contained in:
parent
5b31dd1c6b
commit
b7d0d912ef
@ -15,6 +15,9 @@ libavutil: 2017-10-21
|
||||
|
||||
API changes, most recent first:
|
||||
|
||||
2018-03-xx - xxxxxxx - lavc 58.16.100 - avcodec.h
|
||||
Add FF_SUB_CHARENC_MODE_IGNORE.
|
||||
|
||||
2018-xx-xx - xxxxxxx - lavu 56.8.100 - encryption_info.h
|
||||
Add AVEncryptionInitInfo and AVEncryptionInfo structures to hold new side-data
|
||||
for encryption info.
|
||||
|
@ -3092,6 +3092,7 @@ typedef struct AVCodecContext {
|
||||
#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
|
||||
#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself
|
||||
#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
|
||||
#define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8
|
||||
|
||||
/**
|
||||
* Skip processing alpha if supported by codec.
|
||||
|
@ -1057,7 +1057,8 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
|
||||
sub->format = 1;
|
||||
|
||||
for (i = 0; i < sub->num_rects; i++) {
|
||||
if (sub->rects[i]->ass && !utf8_check(sub->rects[i]->ass)) {
|
||||
if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_IGNORE &&
|
||||
sub->rects[i]->ass && !utf8_check(sub->rects[i]->ass)) {
|
||||
av_log(avctx, AV_LOG_ERROR,
|
||||
"Invalid UTF-8 in decoded subtitles text; "
|
||||
"maybe missing -sub_charenc option\n");
|
||||
|
@ -447,6 +447,7 @@ static const AVOption avcodec_options[] = {
|
||||
{"do_nothing", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_DO_NOTHING}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
{"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
{"ignore", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_IGNORE}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
#if FF_API_ASS_TIMING
|
||||
{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, 0, 1, S|D, "sub_text_format"},
|
||||
#else
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 58
|
||||
#define LIBAVCODEC_VERSION_MINOR 15
|
||||
#define LIBAVCODEC_VERSION_MINOR 16
|
||||
#define LIBAVCODEC_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
|
Loading…
Reference in New Issue
Block a user