lavfi/overlay: add yuv422 format mode

This commit is contained in:
Stefano Sabatini 2014-01-24 17:53:03 +01:00
parent 95d1809981
commit a270f63e83
6 changed files with 75 additions and 2 deletions

View File

@ -5936,6 +5936,9 @@ It accepts the following values:
@item yuv420
force YUV420 output
@item yuv422
force YUV422 output
@item yuv444
force YUV444 output

View File

@ -31,7 +31,7 @@
#define LIBAVFILTER_VERSION_MAJOR 4
#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, \
LIBAVFILTER_VERSION_MINOR, \

View File

@ -92,7 +92,7 @@ typedef struct {
uint8_t overlay_is_packed_rgb;
uint8_t overlay_rgba_map[4];
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;
FFDualInputContext dinput;
@ -191,6 +191,13 @@ static int query_formats(AVFilterContext *ctx)
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[] = {
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);
overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv420);
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:
main_formats = ff_make_format_list(main_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 },
{ "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" },
{ "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" },
{ "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 },

View File

@ -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-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-overlay_yuv444: CMD = framecrc -c:v pgmyuv -i $(SRC) -filter_complex_script $(SRC_PATH)/tests/filtergraphs/overlay_yuv444

View File

@ -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

View File

@ -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