From 5b2b23f2d69e05c5fcd1c933e383fe60e185574d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 9 Jan 2014 19:59:54 +0000 Subject: dxva2: Retry IDirectXVideoDecoder_BeginFrame() If the function returns E_PENDING retry for a fixed number of times. Signed-off-by: Luca Barbato --- libavcodec/dxva2.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'libavcodec/dxva2.c') diff --git a/libavcodec/dxva2.c b/libavcodec/dxva2.c index bc43cae813..b6efa157d0 100644 --- a/libavcodec/dxva2.c +++ b/libavcodec/dxva2.c @@ -87,12 +87,19 @@ int ff_dxva2_common_end_frame(AVCodecContext *avctx, Picture *pic, unsigned buffer_count = 0; DXVA2_DecodeBufferDesc buffer[4]; DXVA2_DecodeExecuteParams exec = { 0 }; - int result; - - if (FAILED(IDirectXVideoDecoder_BeginFrame(ctx->decoder, - ff_dxva2_get_surface(pic), - NULL))) { - av_log(avctx, AV_LOG_ERROR, "Failed to begin frame\n"); + int result, runs = 0; + HRESULT hr; + + do { + hr = IDirectXVideoDecoder_BeginFrame(ctx->decoder, + ff_dxva2_get_surface(pic), + NULL); + if (hr == E_PENDING) + av_usleep(2000); + } while (hr == E_PENDING && ++runs < 50); + + if (FAILED(hr)) { + av_log(avctx, AV_LOG_ERROR, "Failed to begin frame: 0x%x\n", hr); return -1; } -- cgit v1.2.3