mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-03-30 07:08:22 +00:00
avfilter/vf_vibrance: add alternate option
This commit is contained in:
parent
526bc2205b
commit
38baaa1617
@ -17984,6 +17984,10 @@ Set the green luma coefficient.
|
|||||||
|
|
||||||
@item blum
|
@item blum
|
||||||
Set the blue luma coefficient.
|
Set the blue luma coefficient.
|
||||||
|
|
||||||
|
@item alternate
|
||||||
|
If @code{intensity} is negative and this is set to 1, colors will change,
|
||||||
|
otherwise colors will be less saturated, more towards gray.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@anchor{vignette}
|
@anchor{vignette}
|
||||||
|
@ -31,6 +31,7 @@ typedef struct VibranceContext {
|
|||||||
float intensity;
|
float intensity;
|
||||||
float balance[3];
|
float balance[3];
|
||||||
float lcoeffs[3];
|
float lcoeffs[3];
|
||||||
|
int alternate;
|
||||||
|
|
||||||
int depth;
|
int depth;
|
||||||
|
|
||||||
@ -54,12 +55,13 @@ static int vibrance_slice8(AVFilterContext *avctx, void *arg, int jobnr, int nb_
|
|||||||
const float bc = s->lcoeffs[1];
|
const float bc = s->lcoeffs[1];
|
||||||
const float rc = s->lcoeffs[2];
|
const float rc = s->lcoeffs[2];
|
||||||
const float intensity = s->intensity;
|
const float intensity = s->intensity;
|
||||||
|
const float alternate = s->alternate ? 1.f : -1.f;
|
||||||
const float gintensity = intensity * s->balance[0];
|
const float gintensity = intensity * s->balance[0];
|
||||||
const float bintensity = intensity * s->balance[1];
|
const float bintensity = intensity * s->balance[1];
|
||||||
const float rintensity = intensity * s->balance[2];
|
const float rintensity = intensity * s->balance[2];
|
||||||
const float sgintensity = FFSIGN(intensity);
|
const float sgintensity = alternate * FFSIGN(gintensity);
|
||||||
const float sbintensity = FFSIGN(intensity);
|
const float sbintensity = alternate * FFSIGN(bintensity);
|
||||||
const float srintensity = FFSIGN(intensity);
|
const float srintensity = alternate * FFSIGN(rintensity);
|
||||||
const int slice_start = (height * jobnr) / nb_jobs;
|
const int slice_start = (height * jobnr) / nb_jobs;
|
||||||
const int slice_end = (height * (jobnr + 1)) / nb_jobs;
|
const int slice_end = (height * (jobnr + 1)) / nb_jobs;
|
||||||
const int glinesize = frame->linesize[0];
|
const int glinesize = frame->linesize[0];
|
||||||
@ -112,12 +114,13 @@ static int vibrance_slice16(AVFilterContext *avctx, void *arg, int jobnr, int nb
|
|||||||
const int width = frame->width;
|
const int width = frame->width;
|
||||||
const int height = frame->height;
|
const int height = frame->height;
|
||||||
const float intensity = s->intensity;
|
const float intensity = s->intensity;
|
||||||
|
const float alternate = s->alternate ? 1.f : -1.f;
|
||||||
const float gintensity = intensity * s->balance[0];
|
const float gintensity = intensity * s->balance[0];
|
||||||
const float bintensity = intensity * s->balance[1];
|
const float bintensity = intensity * s->balance[1];
|
||||||
const float rintensity = intensity * s->balance[2];
|
const float rintensity = intensity * s->balance[2];
|
||||||
const float sgintensity = FFSIGN(intensity);
|
const float sgintensity = alternate * FFSIGN(gintensity);
|
||||||
const float sbintensity = FFSIGN(intensity);
|
const float sbintensity = alternate * FFSIGN(bintensity);
|
||||||
const float srintensity = FFSIGN(intensity);
|
const float srintensity = alternate * FFSIGN(rintensity);
|
||||||
const int slice_start = (height * jobnr) / nb_jobs;
|
const int slice_start = (height * jobnr) / nb_jobs;
|
||||||
const int slice_end = (height * (jobnr + 1)) / nb_jobs;
|
const int slice_end = (height * (jobnr + 1)) / nb_jobs;
|
||||||
const int glinesize = frame->linesize[0] / 2;
|
const int glinesize = frame->linesize[0] / 2;
|
||||||
@ -231,6 +234,7 @@ static const AVOption vibrance_options[] = {
|
|||||||
{ "rlum", "set the red luma coefficient", OFFSET(lcoeffs[2]), AV_OPT_TYPE_FLOAT, {.dbl=0.072186}, 0, 1, VF },
|
{ "rlum", "set the red luma coefficient", OFFSET(lcoeffs[2]), AV_OPT_TYPE_FLOAT, {.dbl=0.072186}, 0, 1, VF },
|
||||||
{ "glum", "set the green luma coefficient", OFFSET(lcoeffs[0]), AV_OPT_TYPE_FLOAT, {.dbl=0.715158}, 0, 1, VF },
|
{ "glum", "set the green luma coefficient", OFFSET(lcoeffs[0]), AV_OPT_TYPE_FLOAT, {.dbl=0.715158}, 0, 1, VF },
|
||||||
{ "blum", "set the blue luma coefficient", OFFSET(lcoeffs[1]), AV_OPT_TYPE_FLOAT, {.dbl=0.212656}, 0, 1, VF },
|
{ "blum", "set the blue luma coefficient", OFFSET(lcoeffs[1]), AV_OPT_TYPE_FLOAT, {.dbl=0.212656}, 0, 1, VF },
|
||||||
|
{ "alternate", "use alternate colors", OFFSET(alternate), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, VF },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user