[MPlayer-dev-eng] [PATCH] hack x264_encoder_encode returns 0 incorrectly when flushing

Reimar Döffinger Reimar.Doeffinger at gmx.de
Wed Jul 8 10:40:06 CEST 2009


On Wed, Jul 08, 2009 at 03:31:14AM +0000, Loren Merritt wrote:
> The correct implementation of end of stream flush is: Pass nulls until you 
> have gotten some frames back, then pass nulls until x264 stops returning 
> frames. (Unless you haven't encoded any frames at all, in which case that 
> will hang.)

And have an endless loop if there isn't any delay? Apart from limiting
the first wait for getting frames back to 255 that is what my patch
does.

> If the above is too cumbersome, I suppose I can add a return value saying 
> whether there are any remaining delayed frames.

I'd say that might be a good idea. Because at least mencoder and FFmpeg
do it wrong, and I have some suspicion that nobody does it right
actually, because given this code in x264.c:
    /* Flush delayed B-frames */
    do {
        i_file +=
        i_frame_size = Encode_frame( h, opt->hout, NULL );
    } while( i_frame_size );
I'd claim that not even x264 CLI gets it right.
Maybe a little bit of documentation wouldn't hurt after all?



More information about the MPlayer-dev-eng mailing list