|
|
|
@ -28,7 +28,7 @@ |
|
|
|
|
typedef struct DCShiftContext { |
|
|
|
|
const AVClass *class; |
|
|
|
|
double dcshift; |
|
|
|
|
double limiterthreshhold; |
|
|
|
|
double limiterthreshold; |
|
|
|
|
double limitergain; |
|
|
|
|
} DCShiftContext; |
|
|
|
|
|
|
|
|
@ -47,7 +47,7 @@ static av_cold int init(AVFilterContext *ctx) |
|
|
|
|
{ |
|
|
|
|
DCShiftContext *s = ctx->priv; |
|
|
|
|
|
|
|
|
|
s->limiterthreshhold = INT32_MAX * (1.0 - (fabs(s->dcshift) - s->limitergain)); |
|
|
|
|
s->limiterthreshold = INT32_MAX * (1.0 - (fabs(s->dcshift) - s->limitergain)); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
@ -111,14 +111,14 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) |
|
|
|
|
|
|
|
|
|
d = src[j]; |
|
|
|
|
|
|
|
|
|
if (d > s->limiterthreshhold && dcshift > 0) { |
|
|
|
|
d = (d - s->limiterthreshhold) * s->limitergain / |
|
|
|
|
(INT32_MAX - s->limiterthreshhold) + |
|
|
|
|
s->limiterthreshhold + dcshift; |
|
|
|
|
} else if (d < -s->limiterthreshhold && dcshift < 0) { |
|
|
|
|
d = (d + s->limiterthreshhold) * s->limitergain / |
|
|
|
|
(INT32_MAX - s->limiterthreshhold) - |
|
|
|
|
s->limiterthreshhold + dcshift; |
|
|
|
|
if (d > s->limiterthreshold && dcshift > 0) { |
|
|
|
|
d = (d - s->limiterthreshold) * s->limitergain / |
|
|
|
|
(INT32_MAX - s->limiterthreshold) + |
|
|
|
|
s->limiterthreshold + dcshift; |
|
|
|
|
} else if (d < -s->limiterthreshold && dcshift < 0) { |
|
|
|
|
d = (d + s->limiterthreshold) * s->limitergain / |
|
|
|
|
(INT32_MAX - s->limiterthreshold) - |
|
|
|
|
s->limiterthreshold + dcshift; |
|
|
|
|
} else { |
|
|
|
|
d = dcshift * INT32_MAX + d; |
|
|
|
|
} |
|
|
|
|