History

avfilter/vf_waveform: add option to control strechness of waveform

Paul B Mahol committed 5 years ago

Commit ca788d11 parent e0de0aa2 files · +39 −1Browse files

Unified · Split

2 files
  1. doc/filters.texi +13 −0
  2. libavfilter/vf_waveform.c +26 −1
doc/filters.texi+13−0
@@ -22115,6 +22115,19 @@ Set background opacity. · 22114 unmodified lines
22115Set tint for output.22115Set tint for output.
22116Only used with lowpass filter and when display is not overlay and input22116Only used with lowpass filter and when display is not overlay and input
22117pixel formats are not RGB.22117pixel formats are not RGB.
22118
22119@item fitmode, fm
22120Set sample aspect ratio of video output frames.
22121Can be used to configure waveform so it is not
22122streched too much in one of directions.
22123
22124@table @samp
22125@item none
22126Set sample aspect ration to 1/1.
22127@item size
22128Set sample aspect ratio to match input size of video
22129@end table
22130Default is @samp{none}.
22118@end table22131@end table
22119 22132
22120@section weave, doubleweave22133@section weave, doubleweave
libavfilter/vf_waveform.c+26−1
@@ -36,6 +36,12 @@ typedef struct ThreadData { · 35 unmodified lines
36 int offset_x;36 int offset_x;
37} ThreadData;37} ThreadData;
38 38
39enum FitMode {
40 FM_NONE,
41 FM_SIZE,
42 NB_FITMODES
43};
44
39enum FilterType {45enum FilterType {
40 LOWPASS,46 LOWPASS,
41 FLAT,47 FLAT,
@@ -113,6 +119,7 @@ typedef struct WaveformContext { · 71 unmodified lines
113 int rgb;119 int rgb;
114 float ftint[2];120 float ftint[2];
115 int tint[2];121 int tint[2];
122 int fitmode;
116 123
117 int (*waveform_slice)(AVFilterContext *ctx, void *arg,124 int (*waveform_slice)(AVFilterContext *ctx, void *arg,
118 int jobnr, int nb_jobs);125 int jobnr, int nb_jobs);
@@ -184,6 +191,10 @@ static const AVOption waveform_options[] = { · 65 unmodified lines
184 { "t0", "set 1st tint", OFFSET(ftint[0]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},191 { "t0", "set 1st tint", OFFSET(ftint[0]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},
185 { "tint1", "set 2nd tint", OFFSET(ftint[1]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},192 { "tint1", "set 2nd tint", OFFSET(ftint[1]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},
186 { "t1", "set 2nd tint", OFFSET(ftint[1]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},193 { "t1", "set 2nd tint", OFFSET(ftint[1]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},
194 { "fitmode", "set fit mode", OFFSET(fitmode), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_FITMODES-1, FLAGS, "fitmode" },
195 { "fm", "set fit mode", OFFSET(fitmode), AV_OPT_TYPE_INT, {.i64=0}, 0, NB_FITMODES-1, FLAGS, "fitmode" },
196 { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64=FM_NONE}, 0, 0, FLAGS, "fitmode" },
197 { "size", NULL, 0, AV_OPT_TYPE_CONST, {.i64=FM_SIZE}, 0, 0, FLAGS, "fitmode" },
187 { NULL }198 { NULL }
188};199};
189 200
@@ -3357,7 +3368,20 @@ static int config_output(AVFilterLink *outlink) · 3167 unmodified lines
3357 }3368 }
3358 }3369 }
3359 3370
3360 outlink->sample_aspect_ratio = (AVRational){1,1};3371 switch (s->fitmode) {
3372 case FM_NONE:
3373 outlink->sample_aspect_ratio = (AVRational){ 1, 1 };
3374 break;
3375 case FM_SIZE:
3376 if (s->mode)
3377 outlink->sample_aspect_ratio = (AVRational){ s->size * comp, inlink->h };
3378 else
3379 outlink->sample_aspect_ratio = (AVRational){ inlink->w, s->size * comp };
3380 break;
3381 }
3382
3383 av_reduce(&outlink->sample_aspect_ratio.num, &outlink->sample_aspect_ratio.den,
3384 outlink->sample_aspect_ratio.num, outlink->sample_aspect_ratio.den, INT_MAX);
3361 3385
3362 return 0;3386 return 0;
3363}3387}
@@ -3461,6 +3485,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) · 97 unmodified lines
3461 s->graticulef(s, out);3485 s->graticulef(s, out);
3462 3486
3463 av_frame_free(&in);3487 av_frame_free(&in);
3488 out->sample_aspect_ratio = outlink->sample_aspect_ratio;
3464 return ff_filter_frame(outlink, out);3489 return ff_filter_frame(outlink, out);
3465}3490}
3466 3491

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t