X-Git-Url: https://git.piment-noir.org/?p=deb_ffmpeg.git;a=blobdiff_plain;f=ffmpeg%2Flibavfilter%2Fvf_subtitles.c;h=be4c6a534dc1fa5af0521845ef9d739bef9fdc49;hp=4fa11744c4d3c5db67134fff5b663414a92e5c69;hb=f6fa7814ccfe3e76514b36cf04f5cd3cb657c8cf;hpb=2ba45a602cbfa7b771effba9b11bb4245c21bc00 diff --git a/ffmpeg/libavfilter/vf_subtitles.c b/ffmpeg/libavfilter/vf_subtitles.c index 4fa1174..be4c6a5 100644 --- a/ffmpeg/libavfilter/vf_subtitles.c +++ b/ffmpeg/libavfilter/vf_subtitles.c @@ -55,6 +55,7 @@ typedef struct { uint8_t rgba_map[4]; int pix_step[4]; ///< steps per pixel for each plane of the main output int original_w, original_h; + int shaping; FFDrawContext draw; } AssContext; @@ -68,19 +69,21 @@ typedef struct { /* libass supports a log level ranging from 0 to 7 */ static const int ass_libavfilter_log_level_map[] = { - AV_LOG_QUIET, /* 0 */ - AV_LOG_PANIC, /* 1 */ - AV_LOG_FATAL, /* 2 */ - AV_LOG_ERROR, /* 3 */ - AV_LOG_WARNING, /* 4 */ - AV_LOG_INFO, /* 5 */ - AV_LOG_VERBOSE, /* 6 */ - AV_LOG_DEBUG, /* 7 */ + [0] = AV_LOG_FATAL, /* MSGL_FATAL */ + [1] = AV_LOG_ERROR, /* MSGL_ERR */ + [2] = AV_LOG_WARNING, /* MSGL_WARN */ + [3] = AV_LOG_WARNING, /* */ + [4] = AV_LOG_INFO, /* MSGL_INFO */ + [5] = AV_LOG_INFO, /* */ + [6] = AV_LOG_VERBOSE, /* MSGL_V */ + [7] = AV_LOG_DEBUG, /* MSGL_DBG2 */ }; static void ass_log(int ass_level, const char *fmt, va_list args, void *ctx) { - int level = ass_libavfilter_log_level_map[ass_level]; + const int ass_level_clip = av_clip(ass_level, 0, + FF_ARRAY_ELEMS(ass_libavfilter_log_level_map) - 1); + const int level = ass_libavfilter_log_level_map[ass_level_clip]; av_vlog(ctx, level, fmt, args); av_log(ctx, level, "\n"); @@ -139,6 +142,8 @@ static int config_input(AVFilterLink *inlink) if (ass->original_w && ass->original_h) ass_set_aspect_ratio(ass->renderer, (double)inlink->w / inlink->h, (double)ass->original_w / ass->original_h); + if (ass->shaping != -1) + ass_set_shaper(ass->renderer, ass->shaping); return 0; } @@ -205,6 +210,10 @@ static const AVFilterPad ass_outputs[] = { static const AVOption ass_options[] = { COMMON_OPTIONS + {"shaping", "set shaping engine", OFFSET(shaping), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, FLAGS, "shaping_mode"}, + {"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = -1}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"}, + {"simple", "simple shaping", 0, AV_OPT_TYPE_CONST, {.i64 = ASS_SHAPING_SIMPLE}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"}, + {"complex", "complex shaping", 0, AV_OPT_TYPE_CONST, {.i64 = ASS_SHAPING_COMPLEX}, INT_MIN, INT_MAX, FLAGS, "shaping_mode"}, {NULL}, };