asyncts: fix flushing of final samples at EOF
This commit is contained in:
		
							parent
							
								
									be75fed975
								
							
						
					
					
						commit
						f266486b2e
					
				@ -116,6 +116,12 @@ static int config_props(AVFilterLink *link)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* get amount of data currently buffered, in samples */
 | 
				
			||||||
 | 
					static int64_t get_delay(ASyncContext *s)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return avresample_available(s->avr) + avresample_get_delay(s->avr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int request_frame(AVFilterLink *link)
 | 
					static int request_frame(AVFilterLink *link)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    AVFilterContext *ctx = link->src;
 | 
					    AVFilterContext *ctx = link->src;
 | 
				
			||||||
@ -128,7 +134,7 @@ static int request_frame(AVFilterLink *link)
 | 
				
			|||||||
        ret = ff_request_frame(ctx->inputs[0]);
 | 
					        ret = ff_request_frame(ctx->inputs[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* flush the fifo */
 | 
					    /* flush the fifo */
 | 
				
			||||||
    if (ret == AVERROR_EOF && (nb_samples = avresample_get_delay(s->avr))) {
 | 
					    if (ret == AVERROR_EOF && (nb_samples = get_delay(s))) {
 | 
				
			||||||
        AVFilterBufferRef *buf = ff_get_audio_buffer(link, AV_PERM_WRITE,
 | 
					        AVFilterBufferRef *buf = ff_get_audio_buffer(link, AV_PERM_WRITE,
 | 
				
			||||||
                                                     nb_samples);
 | 
					                                                     nb_samples);
 | 
				
			||||||
        if (!buf)
 | 
					        if (!buf)
 | 
				
			||||||
@ -155,12 +161,6 @@ static int write_to_fifo(ASyncContext *s, AVFilterBufferRef *buf)
 | 
				
			|||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* get amount of data currently buffered, in samples */
 | 
					 | 
				
			||||||
static int64_t get_delay(ASyncContext *s)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return avresample_available(s->avr) + avresample_get_delay(s->avr);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
 | 
					static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    AVFilterContext  *ctx = inlink->dst;
 | 
					    AVFilterContext  *ctx = inlink->dst;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user