@@ -5936,6 +5936,9 @@ It accepts the following values: | |||||
@item yuv420 | @item yuv420 | ||||
force YUV420 output | force YUV420 output | ||||
@item yuv422 | |||||
force YUV422 output | |||||
@item yuv444 | @item yuv444 | ||||
force YUV444 output | force YUV444 output | ||||
@@ -31,7 +31,7 @@ | |||||
#define LIBAVFILTER_VERSION_MAJOR 4 | #define LIBAVFILTER_VERSION_MAJOR 4 | ||||
#define LIBAVFILTER_VERSION_MINOR 1 | #define LIBAVFILTER_VERSION_MINOR 1 | ||||
#define LIBAVFILTER_VERSION_MICRO 101 | |||||
#define LIBAVFILTER_VERSION_MICRO 102 | |||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | ||||
LIBAVFILTER_VERSION_MINOR, \ | LIBAVFILTER_VERSION_MINOR, \ | ||||
@@ -92,7 +92,7 @@ typedef struct { | |||||
uint8_t overlay_is_packed_rgb; | uint8_t overlay_is_packed_rgb; | ||||
uint8_t overlay_rgba_map[4]; | uint8_t overlay_rgba_map[4]; | ||||
uint8_t overlay_has_alpha; | uint8_t overlay_has_alpha; | ||||
enum OverlayFormat { OVERLAY_FORMAT_YUV420, OVERLAY_FORMAT_YUV444, OVERLAY_FORMAT_RGB, OVERLAY_FORMAT_NB} format; | |||||
enum OverlayFormat { OVERLAY_FORMAT_YUV420, OVERLAY_FORMAT_YUV422, OVERLAY_FORMAT_YUV444, OVERLAY_FORMAT_RGB, OVERLAY_FORMAT_NB} format; | |||||
enum EvalMode { EVAL_MODE_INIT, EVAL_MODE_FRAME, EVAL_MODE_NB } eval_mode; | enum EvalMode { EVAL_MODE_INIT, EVAL_MODE_FRAME, EVAL_MODE_NB } eval_mode; | ||||
FFDualInputContext dinput; | FFDualInputContext dinput; | ||||
@@ -191,6 +191,13 @@ static int query_formats(AVFilterContext *ctx) | |||||
AV_PIX_FMT_YUVA420P, AV_PIX_FMT_NONE | AV_PIX_FMT_YUVA420P, AV_PIX_FMT_NONE | ||||
}; | }; | ||||
static const enum AVPixelFormat main_pix_fmts_yuv422[] = { | |||||
AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_NONE | |||||
}; | |||||
static const enum AVPixelFormat overlay_pix_fmts_yuv422[] = { | |||||
AV_PIX_FMT_YUVA422P, AV_PIX_FMT_NONE | |||||
}; | |||||
static const enum AVPixelFormat main_pix_fmts_yuv444[] = { | static const enum AVPixelFormat main_pix_fmts_yuv444[] = { | ||||
AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE | AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE | ||||
}; | }; | ||||
@@ -218,6 +225,10 @@ static int query_formats(AVFilterContext *ctx) | |||||
main_formats = ff_make_format_list(main_pix_fmts_yuv420); | main_formats = ff_make_format_list(main_pix_fmts_yuv420); | ||||
overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv420); | overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv420); | ||||
break; | break; | ||||
case OVERLAY_FORMAT_YUV422: | |||||
main_formats = ff_make_format_list(main_pix_fmts_yuv422); | |||||
overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv422); | |||||
break; | |||||
case OVERLAY_FORMAT_YUV444: | case OVERLAY_FORMAT_YUV444: | ||||
main_formats = ff_make_format_list(main_pix_fmts_yuv444); | main_formats = ff_make_format_list(main_pix_fmts_yuv444); | ||||
overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv444); | overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv444); | ||||
@@ -587,6 +598,7 @@ static const AVOption overlay_options[] = { | |||||
{ "shortest", "force termination when the shortest input terminates", OFFSET(dinput.shortest), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS }, | { "shortest", "force termination when the shortest input terminates", OFFSET(dinput.shortest), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS }, | ||||
{ "format", "set output format", OFFSET(format), AV_OPT_TYPE_INT, {.i64=OVERLAY_FORMAT_YUV420}, 0, OVERLAY_FORMAT_NB-1, FLAGS, "format" }, | { "format", "set output format", OFFSET(format), AV_OPT_TYPE_INT, {.i64=OVERLAY_FORMAT_YUV420}, 0, OVERLAY_FORMAT_NB-1, FLAGS, "format" }, | ||||
{ "yuv420", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV420}, .flags = FLAGS, .unit = "format" }, | { "yuv420", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV420}, .flags = FLAGS, .unit = "format" }, | ||||
{ "yuv422", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV422}, .flags = FLAGS, .unit = "format" }, | |||||
{ "yuv444", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV444}, .flags = FLAGS, .unit = "format" }, | { "yuv444", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV444}, .flags = FLAGS, .unit = "format" }, | ||||
{ "rgb", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_RGB}, .flags = FLAGS, .unit = "format" }, | { "rgb", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_RGB}, .flags = FLAGS, .unit = "format" }, | ||||
{ "repeatlast", "repeat overlay of the last overlay frame", OFFSET(dinput.repeatlast), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, FLAGS }, | { "repeatlast", "repeat overlay of the last overlay frame", OFFSET(dinput.repeatlast), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, FLAGS }, | ||||
@@ -80,6 +80,9 @@ fate-filter-overlay_rgb: CMD = framecrc -c:v pgmyuv -i $(SRC) -filter_complex_sc | |||||
FATE_FILTER_VSYNTH-$(call ALLYES, SPLIT_FILTER SCALE_FILTER PAD_FILTER OVERLAY_FILTER) += fate-filter-overlay_yuv420 | FATE_FILTER_VSYNTH-$(call ALLYES, SPLIT_FILTER SCALE_FILTER PAD_FILTER OVERLAY_FILTER) += fate-filter-overlay_yuv420 | ||||
fate-filter-overlay_yuv420: CMD = framecrc -c:v pgmyuv -i $(SRC) -filter_complex_script $(SRC_PATH)/tests/filtergraphs/overlay_yuv420 | fate-filter-overlay_yuv420: CMD = framecrc -c:v pgmyuv -i $(SRC) -filter_complex_script $(SRC_PATH)/tests/filtergraphs/overlay_yuv420 | ||||
FATE_FILTER_VSYNTH-$(call ALLYES, SPLIT_FILTER SCALE_FILTER PAD_FILTER OVERLAY_FILTER) += fate-filter-overlay_yuv422 | |||||
fate-filter-overlay_yuv422: CMD = framecrc -c:v pgmyuv -i $(SRC) -filter_complex_script $(SRC_PATH)/tests/filtergraphs/overlay_yuv422 | |||||
FATE_FILTER_VSYNTH-$(call ALLYES, SPLIT_FILTER SCALE_FILTER PAD_FILTER OVERLAY_FILTER) += fate-filter-overlay_yuv444 | FATE_FILTER_VSYNTH-$(call ALLYES, SPLIT_FILTER SCALE_FILTER PAD_FILTER OVERLAY_FILTER) += fate-filter-overlay_yuv444 | ||||
fate-filter-overlay_yuv444: CMD = framecrc -c:v pgmyuv -i $(SRC) -filter_complex_script $(SRC_PATH)/tests/filtergraphs/overlay_yuv444 | fate-filter-overlay_yuv444: CMD = framecrc -c:v pgmyuv -i $(SRC) -filter_complex_script $(SRC_PATH)/tests/filtergraphs/overlay_yuv444 | ||||
@@ -0,0 +1,4 @@ | |||||
sws_flags=+accurate_rnd+bitexact; | |||||
split [main][over]; | |||||
[over] scale=88:72, pad=96:80:4:4 [overf]; | |||||
[main][overf] overlay=240:16:format=yuv422 |
@@ -0,0 +1,51 @@ | |||||
#tb 0: 1/25 | |||||
0, 0, 0, 1, 304128, 0x9b9e09b2 | |||||
0, 1, 1, 1, 304128, 0x33addb48 | |||||
0, 2, 2, 1, 304128, 0xd5b973e9 | |||||
0, 3, 3, 1, 304128, 0xcb847cb6 | |||||
0, 4, 4, 1, 304128, 0xf64536f0 | |||||
0, 5, 5, 1, 304128, 0xda17564a | |||||
0, 6, 6, 1, 304128, 0x85e33692 | |||||
0, 7, 7, 1, 304128, 0x081a657f | |||||
0, 8, 8, 1, 304128, 0xf15f69ee | |||||
0, 9, 9, 1, 304128, 0x0a2dd737 | |||||
0, 10, 10, 1, 304128, 0x14ae5b1b | |||||
0, 11, 11, 1, 304128, 0x0b654f1e | |||||
0, 12, 12, 1, 304128, 0x35a11962 | |||||
0, 13, 13, 1, 304128, 0x010b7514 | |||||
0, 14, 14, 1, 304128, 0x5db20c43 | |||||
0, 15, 15, 1, 304128, 0xafb6c615 | |||||
0, 16, 16, 1, 304128, 0xa671a3ac | |||||
0, 17, 17, 1, 304128, 0x1a0fc75d | |||||
0, 18, 18, 1, 304128, 0xe3a05ff1 | |||||
0, 19, 19, 1, 304128, 0x58437c36 | |||||
0, 20, 20, 1, 304128, 0x1303f940 | |||||
0, 21, 21, 1, 304128, 0xec2f3248 | |||||
0, 22, 22, 1, 304128, 0xe9ff7d49 | |||||
0, 23, 23, 1, 304128, 0x3972a1ed | |||||
0, 24, 24, 1, 304128, 0xee2311df | |||||
0, 25, 25, 1, 304128, 0x5b62c4d9 | |||||
0, 26, 26, 1, 304128, 0x9e1e52e2 | |||||
0, 27, 27, 1, 304128, 0x60c56d07 | |||||
0, 28, 28, 1, 304128, 0x313a8534 | |||||
0, 29, 29, 1, 304128, 0x9f548f56 | |||||
0, 30, 30, 1, 304128, 0x8d894ed3 | |||||
0, 31, 31, 1, 304128, 0x3ce0500a | |||||
0, 32, 32, 1, 304128, 0xb8dd487a | |||||
0, 33, 33, 1, 304128, 0xdde97863 | |||||
0, 34, 34, 1, 304128, 0x8d9d1689 | |||||
0, 35, 35, 1, 304128, 0x703634dd | |||||
0, 36, 36, 1, 304128, 0x3e321210 | |||||
0, 37, 37, 1, 304128, 0x6b5a1a8c | |||||
0, 38, 38, 1, 304128, 0xffc1015d | |||||
0, 39, 39, 1, 304128, 0x4abc4495 | |||||
0, 40, 40, 1, 304128, 0x3c03ada9 | |||||
0, 41, 41, 1, 304128, 0x6fa0344a | |||||
0, 42, 42, 1, 304128, 0x36572833 | |||||
0, 43, 43, 1, 304128, 0x31646c4d | |||||
0, 44, 44, 1, 304128, 0xa22d18c7 | |||||
0, 45, 45, 1, 304128, 0xf3b058f2 | |||||
0, 46, 46, 1, 304128, 0x4c6be349 | |||||
0, 47, 47, 1, 304128, 0xda98914a | |||||
0, 48, 48, 1, 304128, 0x1a6d2f58 | |||||
0, 49, 49, 1, 304128, 0x12684280 |