mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-27 18:02:11 +00:00
avfilter/vf_waveform: add yflat filter
This commit is contained in:
parent
33fd82ae9e
commit
e923e6205e
@ -19086,6 +19086,9 @@ Similar as above, but shows difference between blue and red chroma.
|
||||
@item xflat
|
||||
Similar as above, but use different colors.
|
||||
|
||||
@item yflat
|
||||
Similar as above, but again with different colors.
|
||||
|
||||
@item chroma
|
||||
Displays only chroma.
|
||||
|
||||
|
@ -45,6 +45,7 @@ enum FilterType {
|
||||
COLOR,
|
||||
ACOLOR,
|
||||
XFLAT,
|
||||
YFLAT,
|
||||
NB_FILTERS
|
||||
};
|
||||
|
||||
@ -158,6 +159,7 @@ static const AVOption waveform_options[] = {
|
||||
{ "color", NULL, 0, AV_OPT_TYPE_CONST, {.i64=COLOR}, 0, 0, FLAGS, "filter" },
|
||||
{ "acolor", NULL, 0, AV_OPT_TYPE_CONST, {.i64=ACOLOR}, 0, 0, FLAGS, "filter" },
|
||||
{ "xflat", NULL, 0, AV_OPT_TYPE_CONST, {.i64=XFLAT}, 0, 0, FLAGS, "filter" },
|
||||
{ "yflat", NULL, 0, AV_OPT_TYPE_CONST, {.i64=YFLAT}, 0, 0, FLAGS, "filter" },
|
||||
{ "graticule", "set graticule", OFFSET(graticule), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_GRATICULES-1, FLAGS, "graticule" },
|
||||
{ "g", "set graticule", OFFSET(graticule), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_GRATICULES-1, FLAGS, "graticule" },
|
||||
{ "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64=GRAT_NONE}, 0, 0, FLAGS, "graticule" },
|
||||
@ -317,6 +319,7 @@ static int query_formats(AVFilterContext *ctx)
|
||||
case LOWPASS: in_pix_fmts = in_lowpass_pix_fmts; break;
|
||||
case CHROMA:
|
||||
case XFLAT:
|
||||
case YFLAT:
|
||||
case AFLAT:
|
||||
case FLAT: in_pix_fmts = in_flat_pix_fmts; break;
|
||||
case ACOLOR:
|
||||
@ -1412,6 +1415,10 @@ AFLAT16(xflat16_row, update16, update16_cr, 0, 0)
|
||||
AFLAT16(xflat16_row_mirror, update16, update16_cr, 0, 1)
|
||||
AFLAT16(xflat16_column, update16, update16_cr, 1, 0)
|
||||
AFLAT16(xflat16_column_mirror, update16, update16_cr, 1, 1)
|
||||
AFLAT16(yflat16_row, update16_cr, update16_cr, 0, 0)
|
||||
AFLAT16(yflat16_row_mirror, update16_cr, update16_cr, 0, 1)
|
||||
AFLAT16(yflat16_column, update16_cr, update16_cr, 1, 0)
|
||||
AFLAT16(yflat16_column_mirror, update16_cr, update16_cr, 1, 1)
|
||||
|
||||
AFLAT(aflat_row, update, update, 0, 0)
|
||||
AFLAT(aflat_row_mirror, update, update, 0, 1)
|
||||
@ -1421,6 +1428,10 @@ AFLAT(xflat_row, update, update_cr, 0, 0)
|
||||
AFLAT(xflat_row_mirror, update, update_cr, 0, 1)
|
||||
AFLAT(xflat_column, update, update_cr, 1, 0)
|
||||
AFLAT(xflat_column_mirror, update, update_cr, 1, 1)
|
||||
AFLAT(yflat_row, update_cr, update_cr, 0, 0)
|
||||
AFLAT(yflat_row_mirror, update_cr, update_cr, 0, 1)
|
||||
AFLAT(yflat_column, update_cr, update_cr, 1, 0)
|
||||
AFLAT(yflat_column_mirror, update_cr, update_cr, 1, 1)
|
||||
|
||||
static av_always_inline void chroma16(WaveformContext *s,
|
||||
AVFrame *in, AVFrame *out,
|
||||
@ -2957,6 +2968,7 @@ static int config_input(AVFilterLink *inlink)
|
||||
|
||||
switch (s->filter) {
|
||||
case XFLAT:
|
||||
case YFLAT:
|
||||
case AFLAT: s->size = 256 * 2; break;
|
||||
case FLAT: s->size = 256 * 3; break;
|
||||
default: s->size = 256; break;
|
||||
@ -3020,6 +3032,14 @@ static int config_input(AVFilterLink *inlink)
|
||||
case 0x1016: s->waveform_slice = xflat16_row_mirror; break;
|
||||
case 0x0116: s->waveform_slice = xflat16_column; break;
|
||||
case 0x0016: s->waveform_slice = xflat16_row; break;
|
||||
case 0x1107: s->waveform_slice = yflat_column_mirror; break;
|
||||
case 0x1007: s->waveform_slice = yflat_row_mirror; break;
|
||||
case 0x0107: s->waveform_slice = yflat_column; break;
|
||||
case 0x0007: s->waveform_slice = yflat_row; break;
|
||||
case 0x1117: s->waveform_slice = yflat16_column_mirror; break;
|
||||
case 0x1017: s->waveform_slice = yflat16_row_mirror; break;
|
||||
case 0x0117: s->waveform_slice = yflat16_column; break;
|
||||
case 0x0017: s->waveform_slice = yflat16_row; break;
|
||||
}
|
||||
|
||||
s->grat_yuva_color[0] = 255;
|
||||
@ -3048,6 +3068,7 @@ static int config_input(AVFilterLink *inlink)
|
||||
case CHROMA:
|
||||
case AFLAT:
|
||||
case XFLAT:
|
||||
case YFLAT:
|
||||
case FLAT:
|
||||
if (s->graticule > GRAT_NONE && s->mode == 1)
|
||||
s->graticulef = s->bits > 8 ? graticule16_column : graticule_column;
|
||||
@ -3116,6 +3137,7 @@ static int config_input(AVFilterLink *inlink)
|
||||
}
|
||||
break;
|
||||
case XFLAT:
|
||||
case YFLAT:
|
||||
case AFLAT:
|
||||
switch (s->scale) {
|
||||
case DIGITAL:
|
||||
@ -3332,6 +3354,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
||||
break;
|
||||
case AFLAT:
|
||||
case XFLAT:
|
||||
case YFLAT:
|
||||
if (s->bits <= 8) {
|
||||
envelope(s, out, plane, (plane + 0) % s->ncomp, s->mode ? offset_x : offset_y);
|
||||
envelope(s, out, plane, (plane + 1) % s->ncomp, s->mode ? offset_x : offset_y);
|
||||
|
Loading…
Reference in New Issue
Block a user