[FFmpeg-devel] avcodec/qsvenc Question for Intel QSV low latency

Natsuki Kai n.kai.cj.github at gmail.com
Sun Nov 12 04:40:57 EET 2017


Hello guys,

this is my first posting to ffmpeg-devel, and I believe my mail format is
correct.

I'm using ffmpeg for encoding video in real-time, so low encode delay is
needed.
Once I call "avcodec_send_frame(avctx, frame)", I'd like to get the encoded
data from "avcodec_receive_packet(avctx, avpkt)".

However I cannot do that in ffmpeg and Intel QSV (qsv),
"avcodec_receive_packet()" returns nothing when I input the first frame to
qsv encoder by calling "avcodec_send_frame()".
Of cource, after second frame inputs, qsv encoder returns valid data.
I'd like to get a valid data from first calling.

I've tried some cases and as a result, my requirement is satisfied when
avcodec/qsvenc.c will be fixed like below diff info.
Then I have a question.
Why q->async_fifo is set to be q->async_depth "+ 1"?
Anybody knows?

--- a/avcodec/qsvenc.c
+++ b/avcodec/qsvenc.c
@@ -803,7 +803,7 @@

     q->param.AsyncDepth = q->async_depth;

-    q->async_fifo = av_fifo_alloc((1 + q->async_depth) *
+    q->async_fifo = av_fifo_alloc((q->async_depth) *
                                   (sizeof(AVPacket) +
sizeof(mfxSyncPoint*) + sizeof(mfxBitstream*)));
     if (!q->async_fifo)
         return AVERROR(ENOMEM);


More information about the ffmpeg-devel mailing list