On Thu, Jul 23, 2015 at 12:46:47PM +0300, Ivan Uskov wrote: > Hello All , > > There is updated version of patch which should be applied without conflicts. > Also here couple wrong places have been corrected into ff_qsv_decode(). > > Tuesday, July 21, 2015, 4:08:47 PM, you wrote: > > IU> Hello all, > > IU> Actual implementation of ff_qsv_decode() is not reliable, it may > IU> return without consumption of 1..3 last bytes of packet which > IU> initiates infinitive loop. New implementation guarantees that packet > IU> will consumed, now internal fifo uses to join unconsumed previous packet > IU> tail with new packet. > IU> Please review. > IU> > > > > > -- > Best regards, > Ivan mailto:ivan.us...@nablet.com
> qsvdec.c | 130 > +++++++++++++++++++++++++++++++++++++++++++++++---------------- > qsvdec.h | 1 > 2 files changed, 100 insertions(+), 31 deletions(-) > eb551cc0e8ef21a3557cebb850b5a15ce385e30e > 0002-libavcodec-qsvdec.c-The-ff_qsv_decode-now-guarantees.patch > From 1b1d3cae1910eb1a4dcea3ddee31a1b2a42292f5 Mon Sep 17 00:00:00 2001 > From: Ivan Uskov <ivan.us...@nablet.com> > Date: Tue, 21 Jul 2015 08:31:14 -0400 > Subject: [PATCH 2/2] libavcodec/qsvdec.c: The ff_qsv_decode() now guarantees > the consumption of whole packet. > > --- > libavcodec/qsvdec.c | 130 > +++++++++++++++++++++++++++++++++++++++------------- > libavcodec/qsvdec.h | 1 + > 2 files changed, 100 insertions(+), 31 deletions(-) > > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c > index 4e7a0ac..b81781b 100644 > --- a/libavcodec/qsvdec.c > +++ b/libavcodec/qsvdec.c > @@ -126,6 +126,10 @@ int ff_qsv_decode_init(AVCodecContext *avctx, QSVContext > *q, AVPacket *avpkt) > if (!q->async_fifo) > return AVERROR(ENOMEM); > > + q->input_fifo = av_fifo_alloc(1024*16); > + if (!q->input_fifo) > + return AVERROR(ENOMEM); > + > q->engine_ready = 1; > > return 0; > @@ -223,6 +227,31 @@ static QSVFrame *find_frame(QSVContext *q, > mfxFrameSurface1 *surf) > return NULL; > } > > +static void qsv_fifo_relocate(AVFifoBuffer *f, int bytes_to_free) this should be documented, maybe something like drains specifiified amount of data and re-locates the remaining to the start of the buffer [...] > + /* A decoder's latency depends not only by async_depth > + but by DPB size too. The latency may acheve 16 frames. > + So it is necessary to handle the size of async_fifo > dynamically: > + */ > + if (av_fifo_space(q->async_fifo) < sizeof(out_frame) + > sizeof(sync)) > + av_fifo_grow(q->async_fifo, sizeof(out_frame)+sizeof(sync)); the DPB cannot be arbitrary large, so maybe the grow code could be avoided ? or maybe i missunderstand [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I have never wished to cater to the crowd; for what I know they do not approve, and what they approve I do not know. -- Epicurus
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel