q->nb_ext_buffers = qsv->nb_ext_buffers;
}
if (!q->session) {
- ret = ff_qsv_init_internal_session(avctx, &q->internal_qs, NULL);
+ ret = ff_qsv_init_internal_session(avctx, &q->internal_qs,
+ q->load_plugins);
if (ret < 0)
return ret;
HEVC which is 16 for both cases.
So weare pre-allocating fifo big enough for 17 elements:
*/
- q->async_fifo = av_fifo_alloc((1 + 16) *
- (sizeof(mfxSyncPoint) + sizeof(QSVFrame*)));
- if (!q->async_fifo)
- return AVERROR(ENOMEM);
+ if (!q->async_fifo) {
+ q->async_fifo = av_fifo_alloc((1 + 16) *
+ (sizeof(mfxSyncPoint) + sizeof(QSVFrame*)));
+ if (!q->async_fifo)
+ return AVERROR(ENOMEM);
+ }
q->input_fifo = av_fifo_alloc(1024*16);
if (!q->input_fifo)
insurf, &outsurf, &sync);
if (ret != MFX_WRN_DEVICE_BUSY)
break;
- av_usleep(1);
+ av_usleep(500);
} while (1);
if (MFX_WRN_VIDEO_PARAM_CHANGED==ret) {
break;
}
+ /* make sure we do not enter an infinite loop if the SDK
+ * did not consume any data and did not return anything */
+ if (!sync && !bs.DataOffset) {
+ av_log(avctx, AV_LOG_WARNING, "A decode call did not consume any data\n");
+ bs.DataOffset = avpkt->size;
+ }
+
if (buffered) {
qsv_fifo_relocate(q->input_fifo, bs.DataOffset);
} else if (bs.DataOffset!=avpkt->size) {