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 @item yuv420
force YUV420 output force YUV420 output
@item yuv422
force YUV422 output
@item yuv444 @item yuv444
force YUV444 output force YUV444 output

View File

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

View File

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

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

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