ffmpeg: use AV_BUFFERSRC_FLAG_PUSH.
It reduces the lifespan of buffers in filter graphs, and therefore the memory consumption.
This commit is contained in:
		
							parent
							
								
									3f943fe681
								
							
						
					
					
						commit
						ac07f941ae
					
				
							
								
								
									
										11
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								ffmpeg.c
									
									
									
									
									
								
							@ -193,7 +193,8 @@ static void sub2video_push_ref(InputStream *ist, int64_t pts)
 | 
			
		||||
        av_buffersrc_add_ref(ist->filters[i]->filter,
 | 
			
		||||
                             avfilter_ref_buffer(ref, ~0),
 | 
			
		||||
                             AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT |
 | 
			
		||||
                             AV_BUFFERSRC_FLAG_NO_COPY);
 | 
			
		||||
                             AV_BUFFERSRC_FLAG_NO_COPY |
 | 
			
		||||
                             AV_BUFFERSRC_FLAG_PUSH);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void sub2video_update(InputStream *ist, AVSubtitle *sub, int64_t pts)
 | 
			
		||||
@ -1508,7 +1509,8 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output)
 | 
			
		||||
                                          decoded_frame_tb,
 | 
			
		||||
                                          (AVRational){1, ist->st->codec->sample_rate});
 | 
			
		||||
    for (i = 0; i < ist->nb_filters; i++)
 | 
			
		||||
        av_buffersrc_add_frame(ist->filters[i]->filter, decoded_frame, 0);
 | 
			
		||||
        av_buffersrc_add_frame(ist->filters[i]->filter, decoded_frame,
 | 
			
		||||
                               AV_BUFFERSRC_FLAG_PUSH);
 | 
			
		||||
 | 
			
		||||
    decoded_frame->pts = AV_NOPTS_VALUE;
 | 
			
		||||
 | 
			
		||||
@ -1619,9 +1621,10 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
 | 
			
		||||
            buf->refcount++;
 | 
			
		||||
            av_buffersrc_add_ref(ist->filters[i]->filter, fb,
 | 
			
		||||
                                 AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT |
 | 
			
		||||
                                 AV_BUFFERSRC_FLAG_NO_COPY);
 | 
			
		||||
                                 AV_BUFFERSRC_FLAG_NO_COPY |
 | 
			
		||||
                                 AV_BUFFERSRC_FLAG_PUSH);
 | 
			
		||||
        } else
 | 
			
		||||
        if(av_buffersrc_add_frame(ist->filters[i]->filter, decoded_frame, 0)<0) {
 | 
			
		||||
        if(av_buffersrc_add_frame(ist->filters[i]->filter, decoded_frame, AV_BUFFERSRC_FLAG_PUSH)<0) {
 | 
			
		||||
            av_log(NULL, AV_LOG_FATAL, "Failed to inject frame into filter network\n");
 | 
			
		||||
            exit_program(1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user