avfilter/vf_vectorscope: support more formats for color4 mode in common case
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
		
							parent
							
								
									19dfbe9298
								
							
						
					
					
						commit
						1c88ef0c99
					
				| @ -43,6 +43,7 @@ typedef struct VectorscopeContext { | |||||||
|     const uint8_t *bg_color; |     const uint8_t *bg_color; | ||||||
|     int planewidth[4]; |     int planewidth[4]; | ||||||
|     int planeheight[4]; |     int planeheight[4]; | ||||||
|  |     int hsub, vsub; | ||||||
|     int x, y, pd; |     int x, y, pd; | ||||||
|     int is_yuv; |     int is_yuv; | ||||||
|     int envelope; |     int envelope; | ||||||
| @ -117,8 +118,7 @@ static int query_formats(AVFilterContext *ctx) | |||||||
|     if (!ctx->inputs[0]->out_formats) { |     if (!ctx->inputs[0]->out_formats) { | ||||||
|         const enum AVPixelFormat *in_pix_fmts; |         const enum AVPixelFormat *in_pix_fmts; | ||||||
| 
 | 
 | ||||||
|         if (((s->x == 1 && s->y == 2) || (s->x == 2 && s->y == 1)) && |         if ((s->x == 1 && s->y == 2) || (s->x == 2 && s->y == 1)) | ||||||
|             (s->mode != COLOR4)) |  | ||||||
|             in_pix_fmts = in2_pix_fmts; |             in_pix_fmts = in2_pix_fmts; | ||||||
|         else |         else | ||||||
|             in_pix_fmts = in1_pix_fmts; |             in_pix_fmts = in1_pix_fmts; | ||||||
| @ -173,6 +173,8 @@ static int config_input(AVFilterLink *inlink) | |||||||
|         s->bg_color = black_yuva_color; |         s->bg_color = black_yuva_color; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     s->hsub = desc->log2_chroma_w; | ||||||
|  |     s->vsub = desc->log2_chroma_h; | ||||||
|     s->planeheight[1] = s->planeheight[2] = FF_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h); |     s->planeheight[1] = s->planeheight[2] = FF_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h); | ||||||
|     s->planeheight[0] = s->planeheight[3] = inlink->h; |     s->planeheight[0] = s->planeheight[3] = inlink->h; | ||||||
|     s->planewidth[1]  = s->planewidth[2]  = FF_CEIL_RSHIFT(inlink->w, desc->log2_chroma_w); |     s->planewidth[1]  = s->planewidth[2]  = FF_CEIL_RSHIFT(inlink->w, desc->log2_chroma_w); | ||||||
| @ -266,6 +268,8 @@ static void vectorscope(VectorscopeContext *s, AVFrame *in, AVFrame *out, int pd | |||||||
|     const uint8_t *spx = src[px]; |     const uint8_t *spx = src[px]; | ||||||
|     const uint8_t *spy = src[py]; |     const uint8_t *spy = src[py]; | ||||||
|     const uint8_t *spd = src[pd]; |     const uint8_t *spd = src[pd]; | ||||||
|  |     const int hsub = s->hsub; | ||||||
|  |     const int vsub = s->vsub; | ||||||
|     uint8_t **dst = out->data; |     uint8_t **dst = out->data; | ||||||
|     uint8_t *dpx = dst[px]; |     uint8_t *dpx = dst[px]; | ||||||
|     uint8_t *dpy = dst[py]; |     uint8_t *dpy = dst[py]; | ||||||
| @ -361,13 +365,13 @@ static void vectorscope(VectorscopeContext *s, AVFrame *in, AVFrame *out, int pd | |||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
|     case COLOR4: |     case COLOR4: | ||||||
|         for (i = 0; i < h; i++) { |         for (i = 0; i < in->height; i++) { | ||||||
|             const int iwx = i * slinesizex; |             const int iwx = (i >> vsub) * slinesizex; | ||||||
|             const int iwy = i * slinesizey; |             const int iwy = (i >> vsub) * slinesizey; | ||||||
|             const int iwd = i * slinesized; |             const int iwd = i * slinesized; | ||||||
|             for (j = 0; j < w; j++) { |             for (j = 0; j < in->width; j++) { | ||||||
|                 const int x = spx[iwx + j]; |                 const int x = spx[iwx + (j >> hsub)]; | ||||||
|                 const int y = spy[iwy + j]; |                 const int y = spy[iwy + (j >> hsub)]; | ||||||
|                 const int pos = y * dlinesize + x; |                 const int pos = y * dlinesize + x; | ||||||
| 
 | 
 | ||||||
|                 dpd[pos] = FFMAX(spd[iwd + j], dpd[pos]); |                 dpd[pos] = FFMAX(spd[iwd + j], dpd[pos]); | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| #tb 0: 1/25 | #tb 0: 1/25 | ||||||
| 0,          0,          0,        1,   196608, 0xb6d22af1 | 0,          0,          0,        1,   196608, 0x4d2e53c4 | ||||||
| 0,          1,          1,        1,   196608, 0xd7c6f971 | 0,          1,          1,        1,   196608, 0x795e1dcc | ||||||
| 0,          2,          2,        1,   196608, 0xfe729faa | 0,          2,          2,        1,   196608, 0xe4268800 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user