avfilter/vf_vectorscope: add color5 mode, mode like color but with higher saturation
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
		
							parent
							
								
									c6f4720b86
								
							
						
					
					
						commit
						2ad1c87bb2
					
				| @ -12513,7 +12513,7 @@ same component color value on location in graph. This is the default mode. | |||||||
| @item color | @item color | ||||||
| Gray values are displayed on graph. Surrounding pixels values which are not | Gray values are displayed on graph. Surrounding pixels values which are not | ||||||
| present in video frame are drawn in gradient of 2 color components which are | present in video frame are drawn in gradient of 2 color components which are | ||||||
| set by option @code{x} and @code{y}. | set by option @code{x} and @code{y}. The 3rd color component is static. | ||||||
| 
 | 
 | ||||||
| @item color2 | @item color2 | ||||||
| Actual color components values present in video frame are displayed on graph. | Actual color components values present in video frame are displayed on graph. | ||||||
| @ -12527,6 +12527,10 @@ default values of @code{x} and @code{y}. | |||||||
| Actual colors present in video frame are displayed on graph. If two different | Actual colors present in video frame are displayed on graph. If two different | ||||||
| colors map to same position on graph then color with higher value of component | colors map to same position on graph then color with higher value of component | ||||||
| not present in graph is picked. | not present in graph is picked. | ||||||
|  | 
 | ||||||
|  | @item color5 | ||||||
|  | Gray values are displayed on graph. Similar to @code{color} but with 3rd color | ||||||
|  | component picked from radial gradient. | ||||||
| @end table | @end table | ||||||
| 
 | 
 | ||||||
| @item x | @item x | ||||||
| @ -12536,7 +12540,7 @@ Set which color component will be represented on X-axis. Default is @code{1}. | |||||||
| Set which color component will be represented on Y-axis. Default is @code{2}. | Set which color component will be represented on Y-axis. Default is @code{2}. | ||||||
| 
 | 
 | ||||||
| @item intensity, i | @item intensity, i | ||||||
| Set intensity, used by modes: gray, color and color3 for increasing brightness | Set intensity, used by modes: gray, color, color3 and color5 for increasing brightness | ||||||
| of color component which represents frequency of (X, Y) location in graph. | of color component which represents frequency of (X, Y) location in graph. | ||||||
| 
 | 
 | ||||||
| @item envelope, e | @item envelope, e | ||||||
|  | |||||||
| @ -34,6 +34,7 @@ enum VectorscopeMode { | |||||||
|     COLOR2, |     COLOR2, | ||||||
|     COLOR3, |     COLOR3, | ||||||
|     COLOR4, |     COLOR4, | ||||||
|  |     COLOR5, | ||||||
|     MODE_NB |     MODE_NB | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -68,6 +69,7 @@ static const AVOption vectorscope_options[] = { | |||||||
|     {   "color2", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR2}, 0, 0, FLAGS, "mode" }, |     {   "color2", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR2}, 0, 0, FLAGS, "mode" }, | ||||||
|     {   "color3", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR3}, 0, 0, FLAGS, "mode" }, |     {   "color3", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR3}, 0, 0, FLAGS, "mode" }, | ||||||
|     {   "color4", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR4}, 0, 0, FLAGS, "mode" }, |     {   "color4", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR4}, 0, 0, FLAGS, "mode" }, | ||||||
|  |     {   "color5", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR5}, 0, 0, FLAGS, "mode" }, | ||||||
|     { "x", "set color component on X axis", OFFSET(x), AV_OPT_TYPE_INT, {.i64=1}, 0, 2, FLAGS}, |     { "x", "set color component on X axis", OFFSET(x), AV_OPT_TYPE_INT, {.i64=1}, 0, 2, FLAGS}, | ||||||
|     { "y", "set color component on Y axis", OFFSET(y), AV_OPT_TYPE_INT, {.i64=2}, 0, 2, FLAGS}, |     { "y", "set color component on Y axis", OFFSET(y), AV_OPT_TYPE_INT, {.i64=2}, 0, 2, FLAGS}, | ||||||
|     { "intensity", "set intensity", OFFSET(fintensity), AV_OPT_TYPE_FLOAT, {.dbl=0.004}, 0, 1, FLAGS}, |     { "intensity", "set intensity", OFFSET(fintensity), AV_OPT_TYPE_FLOAT, {.dbl=0.004}, 0, 1, FLAGS}, | ||||||
| @ -354,11 +356,12 @@ static void vectorscope16(VectorscopeContext *s, AVFrame *in, AVFrame *out, int | |||||||
|         for (i = 0; i < out->height ; i++) |         for (i = 0; i < out->height ; i++) | ||||||
|             for (j = 0; j < out->width; j++) |             for (j = 0; j < out->width; j++) | ||||||
|                 AV_WN16(out->data[k] + i * out->linesize[k] + j * 2, |                 AV_WN16(out->data[k] + i * out->linesize[k] + j * 2, | ||||||
|                         s->mode == COLOR && k == s->pd ? 0 : s->bg_color[k] * mult); |                         (s->mode == COLOR || s->mode == COLOR5) && k == s->pd ? 0 : s->bg_color[k] * mult); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     switch (s->mode) { |     switch (s->mode) { | ||||||
|     case COLOR: |     case COLOR: | ||||||
|  |     case COLOR5: | ||||||
|     case GRAY: |     case GRAY: | ||||||
|         if (s->is_yuv) { |         if (s->is_yuv) { | ||||||
|             for (i = 0; i < h; i++) { |             for (i = 0; i < h; i++) { | ||||||
| @ -480,6 +483,16 @@ static void vectorscope16(VectorscopeContext *s, AVFrame *in, AVFrame *out, int | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |     } else if (s->mode == COLOR5) { | ||||||
|  |         for (i = 0; i < out->height; i++) { | ||||||
|  |             for (j = 0; j < out->width; j++) { | ||||||
|  |                 if (!dpd[i * dlinesize + j]) { | ||||||
|  |                     dpx[i * dlinesize + j] = j; | ||||||
|  |                     dpy[i * dlinesize + j] = i; | ||||||
|  |                     dpd[i * dlinesize + j] = mid * M_SQRT2 - hypot(i - mid, j - mid); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -508,9 +521,10 @@ static void vectorscope8(VectorscopeContext *s, AVFrame *in, AVFrame *out, int p | |||||||
|     for (k = 0; k < 4 && dst[k]; k++) |     for (k = 0; k < 4 && dst[k]; k++) | ||||||
|         for (i = 0; i < out->height ; i++) |         for (i = 0; i < out->height ; i++) | ||||||
|             memset(dst[k] + i * out->linesize[k], |             memset(dst[k] + i * out->linesize[k], | ||||||
|                    s->mode == COLOR && k == s->pd ? 0 : s->bg_color[k], out->width); |                    (s->mode == COLOR || s->mode == COLOR5) && k == s->pd ? 0 : s->bg_color[k], out->width); | ||||||
| 
 | 
 | ||||||
|     switch (s->mode) { |     switch (s->mode) { | ||||||
|  |     case COLOR5: | ||||||
|     case COLOR: |     case COLOR: | ||||||
|     case GRAY: |     case GRAY: | ||||||
|         if (s->is_yuv) { |         if (s->is_yuv) { | ||||||
| @ -633,6 +647,16 @@ static void vectorscope8(VectorscopeContext *s, AVFrame *in, AVFrame *out, int p | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |     } else if (s->mode == COLOR5) { | ||||||
|  |         for (i = 0; i < out->height; i++) { | ||||||
|  |             for (j = 0; j < out->width; j++) { | ||||||
|  |                 if (!dpd[i * out->linesize[pd] + j]) { | ||||||
|  |                     dpx[i * out->linesize[px] + j] = j; | ||||||
|  |                     dpy[i * out->linesize[py] + j] = i; | ||||||
|  |                     dpd[i * out->linesize[pd] + j] = 128 * M_SQRT2 - hypot(i - 128, j - 128); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user