avfilter/vf_amplify: add tolerance option
This commit is contained in:
		
							parent
							
								
									6f93868e46
								
							
						
					
					
						commit
						c679119a73
					
				| @ -5652,6 +5652,11 @@ Set threshold for difference amplification. Any difference greater or equal to | |||||||
| this value will not alter source pixel. Default is 10. | this value will not alter source pixel. Default is 10. | ||||||
| Allowed range is from 0 to 65535. | Allowed range is from 0 to 65535. | ||||||
| 
 | 
 | ||||||
|  | @item tolerance | ||||||
|  | Set tolerance for difference amplification. Any difference lower to | ||||||
|  | this value will not alter source pixel. Default is 0. | ||||||
|  | Allowed range is from 0 to 65535. | ||||||
|  | 
 | ||||||
| @item low | @item low | ||||||
| Set lower limit for changing source pixel. Default is 65535. Allowed range is from 0 to 65535. | Set lower limit for changing source pixel. Default is 65535. Allowed range is from 0 to 65535. | ||||||
| This option controls maximum possible value that will decrease source pixel value. | This option controls maximum possible value that will decrease source pixel value. | ||||||
|  | |||||||
| @ -34,6 +34,7 @@ typedef struct AmplifyContext { | |||||||
|     int radius; |     int radius; | ||||||
|     float factor; |     float factor; | ||||||
|     float threshold; |     float threshold; | ||||||
|  |     float tolerance; | ||||||
|     int planes; |     int planes; | ||||||
| 
 | 
 | ||||||
|     int llimit; |     int llimit; | ||||||
| @ -104,6 +105,7 @@ static int amplify_frame(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs | |||||||
|     const int radius = s->radius; |     const int radius = s->radius; | ||||||
|     const int nb_inputs = s->nb_inputs; |     const int nb_inputs = s->nb_inputs; | ||||||
|     const float threshold = s->threshold; |     const float threshold = s->threshold; | ||||||
|  |     const float tolerance = s->tolerance; | ||||||
|     const float factor = s->factor; |     const float factor = s->factor; | ||||||
|     const int llimit = s->llimit; |     const int llimit = s->llimit; | ||||||
|     const int hlimit = s->hlimit; |     const int hlimit = s->hlimit; | ||||||
| @ -136,7 +138,7 @@ static int amplify_frame(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs | |||||||
| 
 | 
 | ||||||
|                     avg = sum / (float)nb_inputs; |                     avg = sum / (float)nb_inputs; | ||||||
|                     diff = src - avg; |                     diff = src - avg; | ||||||
|                     if (fabsf(diff) < threshold) { |                     if (fabsf(diff) < threshold && fabsf(diff) > tolerance) { | ||||||
|                         int amp; |                         int amp; | ||||||
|                         if (diff < 0) { |                         if (diff < 0) { | ||||||
|                             amp = -FFMIN(FFABS(diff * factor), llimit); |                             amp = -FFMIN(FFABS(diff * factor), llimit); | ||||||
| @ -179,7 +181,7 @@ static int amplify_frame(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs | |||||||
|                     avg = sum / (float)nb_inputs; |                     avg = sum / (float)nb_inputs; | ||||||
|                     diff = src - avg; |                     diff = src - avg; | ||||||
| 
 | 
 | ||||||
|                     if (fabsf(diff) < threshold) { |                     if (fabsf(diff) < threshold && fabsf(diff) > tolerance) { | ||||||
|                         int amp; |                         int amp; | ||||||
|                         if (diff < 0) { |                         if (diff < 0) { | ||||||
|                             amp = -FFMIN(FFABS(diff * factor), llimit); |                             amp = -FFMIN(FFABS(diff * factor), llimit); | ||||||
| @ -271,6 +273,7 @@ static const AVOption amplify_options[] = { | |||||||
|     { "radius", "set radius", OFFSET(radius), AV_OPT_TYPE_INT, {.i64=2}, 1, 63, .flags = FLAGS }, |     { "radius", "set radius", OFFSET(radius), AV_OPT_TYPE_INT, {.i64=2}, 1, 63, .flags = FLAGS }, | ||||||
|     { "factor", "set factor", OFFSET(factor), AV_OPT_TYPE_FLOAT, {.dbl=2}, 0, UINT16_MAX, .flags = FLAGS }, |     { "factor", "set factor", OFFSET(factor), AV_OPT_TYPE_FLOAT, {.dbl=2}, 0, UINT16_MAX, .flags = FLAGS }, | ||||||
|     { "threshold", "set threshold", OFFSET(threshold), AV_OPT_TYPE_FLOAT, {.dbl=10}, 0, UINT16_MAX, .flags = FLAGS }, |     { "threshold", "set threshold", OFFSET(threshold), AV_OPT_TYPE_FLOAT, {.dbl=10}, 0, UINT16_MAX, .flags = FLAGS }, | ||||||
|  |     { "tolerance", "set tolerance", OFFSET(tolerance), AV_OPT_TYPE_FLOAT, {.dbl=0}, 0, UINT16_MAX, .flags = FLAGS }, | ||||||
|     { "low", "set low limit for amplification", OFFSET(llimit), AV_OPT_TYPE_INT, {.i64=UINT16_MAX}, 0, UINT16_MAX, .flags = FLAGS }, |     { "low", "set low limit for amplification", OFFSET(llimit), AV_OPT_TYPE_INT, {.i64=UINT16_MAX}, 0, UINT16_MAX, .flags = FLAGS }, | ||||||
|     { "high", "set high limit for amplification", OFFSET(hlimit), AV_OPT_TYPE_INT, {.i64=UINT16_MAX}, 0, UINT16_MAX, .flags = FLAGS }, |     { "high", "set high limit for amplification", OFFSET(hlimit), AV_OPT_TYPE_INT, {.i64=UINT16_MAX}, 0, UINT16_MAX, .flags = FLAGS }, | ||||||
|     { "planes", "set what planes to filter", OFFSET(planes), AV_OPT_TYPE_FLAGS, {.i64=7},    0, 15,  FLAGS }, |     { "planes", "set what planes to filter", OFFSET(planes), AV_OPT_TYPE_FLAGS, {.i64=7},    0, 15,  FLAGS }, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user