fftools/ffmpeg_mux: forward EOF from the sync queue
EOF from sq_receive() means no packets will ever be output by the sync queue. Since the muxing sync queue is always used by all interleaved (i.e. non-attachment) streams, this means no further packets can make it to the muxer and we can terminate muxing now.
This commit is contained in:
		
							parent
							
								
									7430ee2b8b
								
							
						
					
					
						commit
						9a2335444b
					
				| @ -166,8 +166,14 @@ static int sync_queue_process(Muxer *mux, OutputStream *ost, AVPacket *pkt, int | |||||||
| 
 | 
 | ||||||
|         while (1) { |         while (1) { | ||||||
|             ret = sq_receive(mux->sq_mux, -1, SQPKT(mux->sq_pkt)); |             ret = sq_receive(mux->sq_mux, -1, SQPKT(mux->sq_pkt)); | ||||||
|             if (ret < 0) |             if (ret < 0) { | ||||||
|                 return (ret == AVERROR_EOF || ret == AVERROR(EAGAIN)) ? 0 : ret; |                 /* n.b.: We forward EOF from the sync queue, terminating muxing.
 | ||||||
|  |                  * This assumes that if a muxing sync queue is present, then all | ||||||
|  |                  * the streams use it. That is true currently, but may change in | ||||||
|  |                  * the future, then this code needs to be revisited. | ||||||
|  |                  */ | ||||||
|  |                 return ret == AVERROR(EAGAIN) ? 0 : ret; | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
|             ret = write_packet(mux, of->streams[ret], |             ret = write_packet(mux, of->streams[ret], | ||||||
|                                mux->sq_pkt); |                                mux->sq_pkt); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user