diff mencoder.c @ 37099:5a59a2cfcc80

mencoder: Support flushing audio encoders at end of stream.
author reimar
date Sat, 10 May 2014 19:59:40 +0000
parents 3f213bf6a8a2
children 3466f03a5256
line wrap: on
line diff
--- a/mencoder.c	Sat May 10 19:59:38 2014 +0000
+++ b/mencoder.c	Sat May 10 19:59:40 2014 +0000
@@ -1340,7 +1340,7 @@
 
 			len = dec_audio(sh_audio, aencoder->decode_buffer, len);
 			mux_a->buffer_len += aencoder->encode(aencoder, mux_a->buffer + mux_a->buffer_len,
-				aencoder->decode_buffer, len, mux_a->buffer_size-mux_a->buffer_len);
+				len <= 0 && sh_audio->ds->eof ? NULL : aencoder->decode_buffer, len, mux_a->buffer_size-mux_a->buffer_len);
 			if(mux_a->buffer_len < mux_a->wf->nBlockAlign)
 				len = 0;
 			else
@@ -1362,10 +1362,13 @@
 				len = dec_audio(sh_audio,aencoder->decode_buffer, aencoder->decode_buffer_size);
 				if(len <= 0)
 				{
-					len = 0;
-					break;
-				}
-				len = aencoder->encode(aencoder, mux_a->buffer + mux_a->buffer_len, aencoder->decode_buffer, len, mux_a->buffer_size-mux_a->buffer_len);
+					// try flushing encoder
+					if (sh_audio->ds->eof)
+						len = aencoder->encode(aencoder, mux_a->buffer + mux_a->buffer_len, NULL, 0, mux_a->buffer_size-mux_a->buffer_len);
+					if (len <= 0)
+						break;
+				} else
+					len = aencoder->encode(aencoder, mux_a->buffer + mux_a->buffer_len, aencoder->decode_buffer, len, mux_a->buffer_size-mux_a->buffer_len);
 				mux_a->buffer_len += len;
 			}
 	    }