Hi Ivan,

On Mon, Aug 3, 2015 at 4:50 PM, Ivan Uskov <ivan.us...@nablet.com> wrote:

> Hello Ronald,
>
> Monday, August 3, 2015, 11:37:22 PM, you wrote:
>
> RSB> On Mon, Aug 3, 2015 at 3:25 PM, Ivan Uskov <ivan.us...@nablet.com>
> wrote:
>
> >> By the way, about old implementation which "worked fine".
> >> It just did drop all buffered frames at decoder re-init on new
> >> sequence header, there is nice comment inside old qsvdec_h264.c:
> >> /* TODO: flush delayed frames on reinit */
>
>
> RSB> Each AVCodec has a flush function which should do this. So as you
> RSB> suggested, you need a flushing state which means you will output "old"
> RSB> frames while consuming new frames and caching them internally in some
> way.
> RSB> Then, when the decoder is flushed (either because flush was called, or
> RSB> because all old cached frames have been returned), you can use all
> queued
> RSB> packets to reinit the hw and start outputing frames right away.
> Thank you for suggestion but unfortunately AVCodec::flush is useless
> for this issue. The AVCodec::flush intended to *drop* decoded frames
> and reset decoder before seeking and it calls by module outside of decoder.
> My task is keep all frames without losing and decoder initiates
> "flushing" by itself. So it is different kind of "flush".


That's exactly what I said, I think you misunderstood.

Libav's decoder handles AVCodec.flush inside the size-change function. What
I'm saying is to make it a state machine and move that code to
AVCodec.flush (if it's not there already), and otherwise (as part of your
state machine) buffer incoming patches after a size change until all
previous-sized packets have been processed.

Then, N new-sized frames later, you'll have N packets buffered, you can
input them into the decoder all at once and immediately start outputing
frames of the new size without additional delay except for the hw reinit.

Ronald
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to