lavfi/vaapi_vpp: Use dynamic frame pool in outlink if possible
This can avoid to exhaust the buffers within outlink when libva2 is available. For example: $ ffmpeg -hwaccel_output_format vaapi -hwaccel vaapi -i input.mp4 \ -vf 'scale_vaapi=w=720:h=480' -c:v hevc_vaapi -f null - ... [vf#0:0 @ 0x55acad91f400] Error while filtering: Cannot allocate memory [vf#0:0 @ 0x55acad91f400] Task finished with error code: -12 (Cannot allocate memory) [vf#0:0 @ 0x55acad91f400] Terminating thread with return code -12 (Cannot allocate memory) Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
		
							parent
							
								
									41e3d36a39
								
							
						
					
					
						commit
						16616a3d1b
					
				@ -204,7 +204,10 @@ int ff_vaapi_vpp_config_output(AVFilterLink *outlink)
 | 
				
			|||||||
    output_frames->width     = ctx->output_width;
 | 
					    output_frames->width     = ctx->output_width;
 | 
				
			||||||
    output_frames->height    = ctx->output_height;
 | 
					    output_frames->height    = ctx->output_height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    output_frames->initial_pool_size = 4;
 | 
					    if (CONFIG_VAAPI_1)
 | 
				
			||||||
 | 
					        output_frames->initial_pool_size = 0;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        output_frames->initial_pool_size = 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    err = ff_filter_init_hw_frames(avctx, outlink, 10);
 | 
					    err = ff_filter_init_hw_frames(avctx, outlink, 10);
 | 
				
			||||||
    if (err < 0)
 | 
					    if (err < 0)
 | 
				
			||||||
@ -220,6 +223,8 @@ int ff_vaapi_vpp_config_output(AVFilterLink *outlink)
 | 
				
			|||||||
    va_frames = output_frames->hwctx;
 | 
					    va_frames = output_frames->hwctx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    av_assert0(ctx->va_context == VA_INVALID_ID);
 | 
					    av_assert0(ctx->va_context == VA_INVALID_ID);
 | 
				
			||||||
 | 
					    av_assert0(output_frames->initial_pool_size ||
 | 
				
			||||||
 | 
					               (va_frames->surface_ids == NULL && va_frames->nb_surfaces == 0));
 | 
				
			||||||
    vas = vaCreateContext(ctx->hwctx->display, ctx->va_config,
 | 
					    vas = vaCreateContext(ctx->hwctx->display, ctx->va_config,
 | 
				
			||||||
                          ctx->output_width, ctx->output_height,
 | 
					                          ctx->output_width, ctx->output_height,
 | 
				
			||||||
                          VA_PROGRESSIVE,
 | 
					                          VA_PROGRESSIVE,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user