lavfi/buffersrc: push frame directly.
This allows to remove the queued frame entirely.
This commit is contained in:
		
							parent
							
								
									02daafb45c
								
							
						
					
					
						commit
						f09ae7309d
					
				@ -43,7 +43,6 @@
 | 
			
		||||
 | 
			
		||||
typedef struct BufferSourceContext {
 | 
			
		||||
    const AVClass    *class;
 | 
			
		||||
    AVFrame          *queued_frame;
 | 
			
		||||
    AVRational        time_base;     ///< time_base to set in the output link
 | 
			
		||||
    AVRational        frame_rate;    ///< frame_rate to set in the output link
 | 
			
		||||
    unsigned          nb_failed_requests;
 | 
			
		||||
@ -241,11 +240,11 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    av_assert0(s->queued_frame == NULL);
 | 
			
		||||
    s->queued_frame = copy;
 | 
			
		||||
    if ((ret = ctx->output_pads[0].request_frame(ctx->outputs[0])) < 0)
 | 
			
		||||
    ret = ff_filter_frame(ctx->outputs[0], copy);
 | 
			
		||||
    if (ret < 0) {
 | 
			
		||||
        av_frame_free(©);
 | 
			
		||||
        return ret;
 | 
			
		||||
    av_assert0(s->queued_frame == NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((flags & AV_BUFFERSRC_FLAG_PUSH)) {
 | 
			
		||||
        ret = push_frame(ctx->graph);
 | 
			
		||||
@ -369,7 +368,6 @@ static av_cold int init_audio(AVFilterContext *ctx)
 | 
			
		||||
static av_cold void uninit(AVFilterContext *ctx)
 | 
			
		||||
{
 | 
			
		||||
    BufferSourceContext *s = ctx->priv;
 | 
			
		||||
    av_assert0(s->queued_frame == NULL);
 | 
			
		||||
    av_buffer_unref(&s->hw_frames_ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -443,17 +441,11 @@ static int request_frame(AVFilterLink *link)
 | 
			
		||||
    AVFrame *frame;
 | 
			
		||||
    int ret;
 | 
			
		||||
 | 
			
		||||
    if (!c->queued_frame) {
 | 
			
		||||
    if (c->eof)
 | 
			
		||||
        return AVERROR_EOF;
 | 
			
		||||
    c->nb_failed_requests++;
 | 
			
		||||
    return AVERROR(EAGAIN);
 | 
			
		||||
}
 | 
			
		||||
    frame = c->queued_frame;
 | 
			
		||||
    c->queued_frame = NULL;
 | 
			
		||||
    ret = ff_filter_frame(link, frame);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const AVFilterPad avfilter_vsrc_buffer_outputs[] = {
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user