int ff_dxva2_common_end_frame(AVCodecContext *avctx, AVFrame *frame,

                              const void *pp, unsigned pp_size,

                              const void *qm, unsigned qm_size,

                              int (*commit_bs_si)(AVCodecContext *,

                                                  DECODER_BUFFER_DESC *bs,

                                                  DECODER_BUFFER_DESC *slice))

{

    AVDXVAContext *ctx = DXVA_CONTEXT(avctx);

    unsigned               buffer_count = 0;

#if CONFIG_D3D11VA

    D3D11_VIDEO_DECODER_BUFFER_DESC buffer11[4];

#endif

#if CONFIG_DXVA2

    DXVA2_DecodeBufferDesc          buffer2[4];

#endif

    DECODER_BUFFER_DESC             *buffer = NULL, *buffer_slice = NULL;

    int result, runs = 0;

    HRESULT hr;

    unsigned type;



    do {

        ff_dxva2_lock(avctx);

#if CONFIG_D3D11VA

        if (ff_dxva2_is_d3d11(avctx))

            hr = ID3D11VideoContext_DecoderBeginFrame(D3D11VA_CONTEXT(ctx)->video_context, D3D11VA_CONTEXT(ctx)->decoder,

                                                      get_surface(frame),

                                                      0, NULL);

#endif

#if CONFIG_DXVA2

        if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD)

            hr = IDirectXVideoDecoder_BeginFrame(DXVA2_CONTEXT(ctx)->decoder,

                                                 get_surface(frame),

                                                 NULL);

#endif

        if (hr != E_PENDING || ++runs > 50)

            break;

        ff_dxva2_unlock(avctx);

        av_usleep(2000);

    } while(1);



    if (FAILED(hr)) {

        av_log(avctx, AV_LOG_ERROR, "Failed to begin frame: 0x%x\n", hr);

        ff_dxva2_unlock(avctx);

        return -1;

    }



#if CONFIG_D3D11VA

    if (ff_dxva2_is_d3d11(avctx)) {

        buffer = &buffer11[buffer_count];

        type = D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS;

    }

#endif

#if CONFIG_DXVA2

    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {

        buffer = &buffer2[buffer_count];

        type = DXVA2_PictureParametersBufferType;

    }

#endif

    result = ff_dxva2_commit_buffer(avctx, ctx, buffer,

                                    type,

                                    pp, pp_size, 0);

    if (result) {

        av_log(avctx, AV_LOG_ERROR,

               "Failed to add picture parameter buffer\n");

        goto end;

    }

    buffer_count++;



    if (qm_size > 0) {

#if CONFIG_D3D11VA

        if (ff_dxva2_is_d3d11(avctx)) {

            buffer = &buffer11[buffer_count];

            type = D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX;

        }

#endif

#if CONFIG_DXVA2

        if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {

            buffer = &buffer2[buffer_count];

            type = DXVA2_InverseQuantizationMatrixBufferType;

        }

#endif

        result = ff_dxva2_commit_buffer(avctx, ctx, buffer,

                                        type,

                                        qm, qm_size, 0);

        if (result) {

            av_log(avctx, AV_LOG_ERROR,

                   "Failed to add inverse quantization matrix buffer\n");

            goto end;

        }

        buffer_count++;

    }



#if CONFIG_D3D11VA

    if (ff_dxva2_is_d3d11(avctx)) {

        buffer       = &buffer11[buffer_count + 0];

        buffer_slice = &buffer11[buffer_count + 1];

    }

#endif

#if CONFIG_DXVA2

    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {

        buffer       = &buffer2[buffer_count + 0];

        buffer_slice = &buffer2[buffer_count + 1];

    }

#endif



    result = commit_bs_si(avctx,

                          buffer,

                          buffer_slice);

    if (result) {

        av_log(avctx, AV_LOG_ERROR,

               "Failed to add bitstream or slice control buffer\n");

        goto end;

    }

    buffer_count += 2;



    /* TODO Film Grain when possible */



    assert(buffer_count == 1 + (qm_size > 0) + 2);



#if CONFIG_D3D11VA

    if (ff_dxva2_is_d3d11(avctx))

        hr = ID3D11VideoContext_SubmitDecoderBuffers(D3D11VA_CONTEXT(ctx)->video_context,

                                                     D3D11VA_CONTEXT(ctx)->decoder,

                                                     buffer_count, buffer11);

#endif

#if CONFIG_DXVA2

    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {

        DXVA2_DecodeExecuteParams exec = {

            .NumCompBuffers     = buffer_count,

            .pCompressedBuffers = buffer2,

            .pExtensionData     = NULL,

        };

        hr = IDirectXVideoDecoder_Execute(DXVA2_CONTEXT(ctx)->decoder, &exec);

    }

#endif

    if (FAILED(hr)) {

        av_log(avctx, AV_LOG_ERROR, "Failed to execute: 0x%x\n", hr);

        result = -1;

    }



end:

#if CONFIG_D3D11VA

    if (ff_dxva2_is_d3d11(avctx))

        hr = ID3D11VideoContext_DecoderEndFrame(D3D11VA_CONTEXT(ctx)->video_context, D3D11VA_CONTEXT(ctx)->decoder);

#endif

#if CONFIG_DXVA2

    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD)

        hr = IDirectXVideoDecoder_EndFrame(DXVA2_CONTEXT(ctx)->decoder, NULL);

#endif

    ff_dxva2_unlock(avctx);

    if (FAILED(hr)) {

        av_log(avctx, AV_LOG_ERROR, "Failed to end frame: 0x%x\n", hr);

        result = -1;

    }



    return result;

}

int ff_dxva2_common_end_frame(AVCodecContext *avctx, AVFrame *frame,

                              const void *pp, unsigned pp_size,

                              const void *qm, unsigned qm_size,

                              int (*commit_bs_si)(AVCodecContext *,

                                                  DECODER_BUFFER_DESC *bs,

                                                  DECODER_BUFFER_DESC *slice))

{

    AVDXVAContext *ctx = DXVA_CONTEXT(avctx);

    unsigned               buffer_count = 0;

#if CONFIG_D3D11VA

    D3D11_VIDEO_DECODER_BUFFER_DESC buffer11[4];

#endif

#if CONFIG_DXVA2

    DXVA2_DecodeBufferDesc          buffer2[4];

#endif

    DECODER_BUFFER_DESC             *buffer = NULL, *buffer_slice = NULL;

    int result, runs = 0;

    HRESULT hr;

    unsigned type;



    do {

        ff_dxva2_lock(avctx);

#if CONFIG_D3D11VA

        if (ff_dxva2_is_d3d11(avctx))

            hr = ID3D11VideoContext_DecoderBeginFrame(D3D11VA_CONTEXT(ctx)->video_context, D3D11VA_CONTEXT(ctx)->decoder,

                                                      get_surface(frame),

                                                      0, NULL);

#endif

#if CONFIG_DXVA2

        if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD)

            hr = IDirectXVideoDecoder_BeginFrame(DXVA2_CONTEXT(ctx)->decoder,

                                                 get_surface(frame),

                                                 NULL);

#endif

        if (hr != E_PENDING || ++runs > 50)

            break;

        ff_dxva2_unlock(avctx);

        av_usleep(2000);

    } while(1);



    if (FAILED(hr)) {

        av_log(avctx, AV_LOG_ERROR, "Failed to begin frame: 0x%x\n", hr);

        ff_dxva2_unlock(avctx);

        return -1;

    }



#if CONFIG_D3D11VA

    if (ff_dxva2_is_d3d11(avctx)) {

        buffer = &buffer11[buffer_count];

        type = D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS;

    }

#endif

#if CONFIG_DXVA2

    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {

        buffer = &buffer2[buffer_count];

        type = DXVA2_PictureParametersBufferType;

    }

#endif

    result = ff_dxva2_commit_buffer(avctx, ctx, buffer,

                                    type,

                                    pp, pp_size, 0);

    if (result) {

        av_log(avctx, AV_LOG_ERROR,

               "Failed to add picture parameter buffer\n");

        goto end;

    }

    buffer_count++;



    if (qm_size > 0) {

#if CONFIG_D3D11VA

        if (ff_dxva2_is_d3d11(avctx)) {

            buffer = &buffer11[buffer_count];

            type = D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX;

        }

#endif

#if CONFIG_DXVA2

        if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {

            buffer = &buffer2[buffer_count];

            type = DXVA2_InverseQuantizationMatrixBufferType;

        }

#endif

        result = ff_dxva2_commit_buffer(avctx, ctx, buffer,

                                        type,

                                        qm, qm_size, 0);

        if (result) {

            av_log(avctx, AV_LOG_ERROR,

                   "Failed to add inverse quantization matrix buffer\n");

            goto end;

        }

        buffer_count++;

    }



#if CONFIG_D3D11VA

    if (ff_dxva2_is_d3d11(avctx)) {

        buffer       = &buffer11[buffer_count + 0];

        buffer_slice = &buffer11[buffer_count + 1];

    }

#endif

#if CONFIG_DXVA2

    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {

        buffer       = &buffer2[buffer_count + 0];

        buffer_slice = &buffer2[buffer_count + 1];

    }

#endif



    result = commit_bs_si(avctx,

                          buffer,

                          buffer_slice);

    if (result) {

        av_log(avctx, AV_LOG_ERROR,

               "Failed to add bitstream or slice control buffer\n");

        goto end;

    }

    buffer_count += 2;



    



    assert(buffer_count == 1 + (qm_size > 0) + 2);



#if CONFIG_D3D11VA

    if (ff_dxva2_is_d3d11(avctx))

        hr = ID3D11VideoContext_SubmitDecoderBuffers(D3D11VA_CONTEXT(ctx)->video_context,

                                                     D3D11VA_CONTEXT(ctx)->decoder,

                                                     buffer_count, buffer11);

#endif

#if CONFIG_DXVA2

    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) {

        DXVA2_DecodeExecuteParams exec = {

            .NumCompBuffers     = buffer_count,

            .pCompressedBuffers = buffer2,

            .pExtensionData     = NULL,

        };

        hr = IDirectXVideoDecoder_Execute(DXVA2_CONTEXT(ctx)->decoder, &exec);

    }

#endif

    if (FAILED(hr)) {

        av_log(avctx, AV_LOG_ERROR, "Failed to execute: 0x%x\n", hr);

        result = -1;

    }



end:

#if CONFIG_D3D11VA

    if (ff_dxva2_is_d3d11(avctx))

        hr = ID3D11VideoContext_DecoderEndFrame(D3D11VA_CONTEXT(ctx)->video_context, D3D11VA_CONTEXT(ctx)->decoder);

#endif

#if CONFIG_DXVA2

    if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD)

        hr = IDirectXVideoDecoder_EndFrame(DXVA2_CONTEXT(ctx)->decoder, NULL);

#endif

    ff_dxva2_unlock(avctx);

    if (FAILED(hr)) {

        av_log(avctx, AV_LOG_ERROR, "Failed to end frame: 0x%x\n", hr);

        result = -1;

    }



    return result;

}

VAR_7intVAR_7 VAR_7ff_dxva2_common_end_frameVAR_7(VAR_7AVCodecContextVAR_7 *VAR_7VAR_0VAR_7, VAR_7AVFrameVAR_7 *VAR_7VAR_1VAR_7,

                              VAR_7constVAR_7 VAR_7voidVAR_7 *VAR_7VAR_2VAR_7, VAR_7unsignedVAR_7 VAR_7VAR_3VAR_7,

                              VAR_7constVAR_7 VAR_7voidVAR_7 *VAR_7VAR_4VAR_7, VAR_7unsignedVAR_7 VAR_7VAR_5VAR_7,

                              VAR_7intVAR_7 (*VAR_7VAR_6VAR_7)(VAR_7AVCodecContextVAR_7 *,

                                                  VAR_7DECODER_BUFFER_DESCVAR_7 *VAR_7bsVAR_7,

                                                  VAR_7DECODER_BUFFER_DESCVAR_7 *VAR_7sliceVAR_7))

{

    VAR_7AVDXVAContextVAR_7 *VAR_7ctxVAR_7 = VAR_7DXVA_CONTEXTVAR_7(VAR_7VAR_0VAR_7);

    VAR_7unsignedVAR_7               VAR_7buffer_countVAR_7 = VAR_70VAR_7;

#VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7

    VAR_7D3D11_VIDEO_DECODER_BUFFER_DESCVAR_7 VAR_7buffer11VAR_7[VAR_74VAR_7];

#VAR_7endifVAR_7

#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7

    VAR_7DXVA2_DecodeBufferDescVAR_7          VAR_7buffer2VAR_7[VAR_74VAR_7];

#VAR_7endifVAR_7

    VAR_7DECODER_BUFFER_DESCVAR_7             *VAR_7bufferVAR_7 = VAR_7NULLVAR_7, *VAR_7buffer_sliceVAR_7 = VAR_7NULLVAR_7;

    VAR_7intVAR_7 VAR_7resultVAR_7, VAR_7runsVAR_7 = VAR_70VAR_7;

    VAR_7HRESULTVAR_7 VAR_7hrVAR_7;

    VAR_7unsignedVAR_7 VAR_7typeVAR_7;



    VAR_7doVAR_7 {

        VAR_7ff_dxva2_lockVAR_7(VAR_7VAR_0VAR_7);

#VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7

        VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7))

            VAR_7hrVAR_7 = VAR_7ID3D11VideoContext_DecoderBeginFrameVAR_7(VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7video_contextVAR_7, VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7,

                                                      VAR_7get_surfaceVAR_7(VAR_7VAR_1VAR_7),

                                                      VAR_70VAR_7, VAR_7NULLVAR_7);

#VAR_7endifVAR_7

#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7

        VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7)

            VAR_7hrVAR_7 = VAR_7IDirectXVideoDecoder_BeginFrameVAR_7(VAR_7DXVA2_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7,

                                                 VAR_7get_surfaceVAR_7(VAR_7VAR_1VAR_7),

                                                 VAR_7NULLVAR_7);

#VAR_7endifVAR_7

        VAR_7ifVAR_7 (VAR_7hrVAR_7 != VAR_7E_PENDINGVAR_7 || ++VAR_7runsVAR_7 > VAR_750VAR_7)

            VAR_7breakVAR_7;

        VAR_7ff_dxva2_unlockVAR_7(VAR_7VAR_0VAR_7);

        VAR_7av_usleepVAR_7(VAR_72000VAR_7);

    } VAR_7whileVAR_7(VAR_71VAR_7);



    VAR_7ifVAR_7 (VAR_7FAILEDVAR_7(VAR_7hrVAR_7)) {

        VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7, "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7beginVAR_7 VAR_7VAR_1VAR_7: VAR_70xVAR_7%VAR_7xVAR_7\VAR_7nVAR_7", VAR_7hrVAR_7);

        VAR_7ff_dxva2_unlockVAR_7(VAR_7VAR_0VAR_7);

        VAR_7returnVAR_7 -VAR_71VAR_7;

    }



#VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7

    VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7)) {

        VAR_7bufferVAR_7 = &VAR_7buffer11VAR_7[VAR_7buffer_countVAR_7];

        VAR_7typeVAR_7 = VAR_7D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERSVAR_7;

    }

#VAR_7endifVAR_7

#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7

    VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7) {

        VAR_7bufferVAR_7 = &VAR_7buffer2VAR_7[VAR_7buffer_countVAR_7];

        VAR_7typeVAR_7 = VAR_7DXVA2_PictureParametersBufferTypeVAR_7;

    }

#VAR_7endifVAR_7

    VAR_7resultVAR_7 = VAR_7ff_dxva2_commit_bufferVAR_7(VAR_7VAR_0VAR_7, VAR_7ctxVAR_7, VAR_7bufferVAR_7,

                                    VAR_7typeVAR_7,

                                    VAR_7VAR_2VAR_7, VAR_7VAR_3VAR_7, VAR_70VAR_7);

    VAR_7ifVAR_7 (VAR_7resultVAR_7) {

        VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7,

               "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7addVAR_7 VAR_7pictureVAR_7 VAR_7parameterVAR_7 VAR_7bufferVAR_7\VAR_7nVAR_7");

        VAR_7gotoVAR_7 VAR_7endVAR_7;

    }

    VAR_7buffer_countVAR_7++;



    VAR_7ifVAR_7 (VAR_7VAR_5VAR_7 > VAR_70VAR_7) {

#VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7

        VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7)) {

            VAR_7bufferVAR_7 = &VAR_7buffer11VAR_7[VAR_7buffer_countVAR_7];

            VAR_7typeVAR_7 = VAR_7D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIXVAR_7;

        }

#VAR_7endifVAR_7

#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7

        VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7) {

            VAR_7bufferVAR_7 = &VAR_7buffer2VAR_7[VAR_7buffer_countVAR_7];

            VAR_7typeVAR_7 = VAR_7DXVA2_InverseQuantizationMatrixBufferTypeVAR_7;

        }

#VAR_7endifVAR_7

        VAR_7resultVAR_7 = VAR_7ff_dxva2_commit_bufferVAR_7(VAR_7VAR_0VAR_7, VAR_7ctxVAR_7, VAR_7bufferVAR_7,

                                        VAR_7typeVAR_7,

                                        VAR_7VAR_4VAR_7, VAR_7VAR_5VAR_7, VAR_70VAR_7);

        VAR_7ifVAR_7 (VAR_7resultVAR_7) {

            VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7,

                   "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7addVAR_7 VAR_7inverseVAR_7 VAR_7quantizationVAR_7 VAR_7matrixVAR_7 VAR_7bufferVAR_7\VAR_7nVAR_7");

            VAR_7gotoVAR_7 VAR_7endVAR_7;

        }

        VAR_7buffer_countVAR_7++;

    }



#VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7

    VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7)) {

        VAR_7bufferVAR_7       = &VAR_7buffer11VAR_7[VAR_7buffer_countVAR_7 + VAR_70VAR_7];

        VAR_7buffer_sliceVAR_7 = &VAR_7buffer11VAR_7[VAR_7buffer_countVAR_7 + VAR_71VAR_7];

    }

#VAR_7endifVAR_7

#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7

    VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7) {

        VAR_7bufferVAR_7       = &VAR_7buffer2VAR_7[VAR_7buffer_countVAR_7 + VAR_70VAR_7];

        VAR_7buffer_sliceVAR_7 = &VAR_7buffer2VAR_7[VAR_7buffer_countVAR_7 + VAR_71VAR_7];

    }

#VAR_7endifVAR_7



    VAR_7resultVAR_7 = VAR_7VAR_6VAR_7(VAR_7VAR_0VAR_7,

                          VAR_7bufferVAR_7,

                          VAR_7buffer_sliceVAR_7);

    VAR_7ifVAR_7 (VAR_7resultVAR_7) {

        VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7,

               "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7addVAR_7 VAR_7bitstreamVAR_7 VAR_7orVAR_7 VAR_7sliceVAR_7 VAR_7controlVAR_7 VAR_7bufferVAR_7\VAR_7nVAR_7");

        VAR_7gotoVAR_7 VAR_7endVAR_7;

    }

    VAR_7buffer_countVAR_7 += VAR_72VAR_7;



    



    VAR_7assertVAR_7(VAR_7buffer_countVAR_7 == VAR_71VAR_7 + (VAR_7VAR_5VAR_7 > VAR_70VAR_7) + VAR_72VAR_7);



#VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7

    VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7))

        VAR_7hrVAR_7 = VAR_7ID3D11VideoContext_SubmitDecoderBuffersVAR_7(VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7video_contextVAR_7,

                                                     VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7,

                                                     VAR_7buffer_countVAR_7, VAR_7buffer11VAR_7);

#VAR_7endifVAR_7

#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7

    VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7) {

        VAR_7DXVA2_DecodeExecuteParamsVAR_7 VAR_7execVAR_7 = {

            .VAR_7NumCompBuffersVAR_7     = VAR_7buffer_countVAR_7,

            .VAR_7pCompressedBuffersVAR_7 = VAR_7buffer2VAR_7,

            .VAR_7pExtensionDataVAR_7     = VAR_7NULLVAR_7,

        };

        VAR_7hrVAR_7 = VAR_7IDirectXVideoDecoder_ExecuteVAR_7(VAR_7DXVA2_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7, &VAR_7execVAR_7);

    }

#VAR_7endifVAR_7

    VAR_7ifVAR_7 (VAR_7FAILEDVAR_7(VAR_7hrVAR_7)) {

        VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7, "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7executeVAR_7: VAR_70xVAR_7%VAR_7xVAR_7\VAR_7nVAR_7", VAR_7hrVAR_7);

        VAR_7resultVAR_7 = -VAR_71VAR_7;

    }



VAR_7endVAR_7:

#VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7

    VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7))

        VAR_7hrVAR_7 = VAR_7ID3D11VideoContext_DecoderEndFrameVAR_7(VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7video_contextVAR_7, VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7);

#VAR_7endifVAR_7

#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7

    VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7)

        VAR_7hrVAR_7 = VAR_7IDirectXVideoDecoder_EndFrameVAR_7(VAR_7DXVA2_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7, VAR_7NULLVAR_7);

#VAR_7endifVAR_7

    VAR_7ff_dxva2_unlockVAR_7(VAR_7VAR_0VAR_7);

    VAR_7ifVAR_7 (VAR_7FAILEDVAR_7(VAR_7hrVAR_7)) {

        VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7, "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7endVAR_7 VAR_7VAR_1VAR_7: VAR_70xVAR_7%VAR_7xVAR_7\VAR_7nVAR_7", VAR_7hrVAR_7);

        VAR_7resultVAR_7 = -VAR_71VAR_7;

    }



    VAR_7returnVAR_7 VAR_7resultVAR_7;

}

VAR_7intVAR_7 VAR_7ff_dxva2_common_end_frameVAR_7(VAR_7AVCodecContextVAR_7 *VAR_7VAR_0VAR_7, VAR_7AVFrameVAR_7 *VAR_7VAR_1VAR_7,
VAR_7constVAR_7 VAR_7voidVAR_7 *VAR_7VAR_2VAR_7, VAR_7unsignedVAR_7 VAR_7VAR_3VAR_7,
VAR_7constVAR_7 VAR_7voidVAR_7 *VAR_7VAR_4VAR_7, VAR_7unsignedVAR_7 VAR_7VAR_5VAR_7,
VAR_7intVAR_7 (*VAR_7VAR_6VAR_7)(VAR_7AVCodecContextVAR_7 *,
VAR_7DECODER_BUFFER_DESCVAR_7 *VAR_7bsVAR_7,
VAR_7DECODER_BUFFER_DESCVAR_7 *VAR_7sliceVAR_7))
{ VAR_7AVDXVAContextVAR_7 *VAR_7ctxVAR_7 = VAR_7DXVA_CONTEXTVAR_7(VAR_7VAR_0VAR_7); VAR_7unsignedVAR_7               VAR_7buffer_countVAR_7 = VAR_70VAR_7; #VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7
VAR_7D3D11_VIDEO_DECODER_BUFFER_DESCVAR_7 VAR_7buffer11VAR_7[VAR_74VAR_7]; #VAR_7endifVAR_7
#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7
VAR_7DXVA2_DecodeBufferDescVAR_7          VAR_7buffer2VAR_7[VAR_74VAR_7]; #VAR_7endifVAR_7
VAR_7DECODER_BUFFER_DESCVAR_7             *VAR_7bufferVAR_7 = VAR_7NULLVAR_7, *VAR_7buffer_sliceVAR_7 = VAR_7NULLVAR_7; VAR_7intVAR_7 VAR_7resultVAR_7, VAR_7runsVAR_7 = VAR_70VAR_7; VAR_7HRESULTVAR_7 VAR_7hrVAR_7; VAR_7unsignedVAR_7 VAR_7typeVAR_7; VAR_7doVAR_7 { VAR_7ff_dxva2_lockVAR_7(VAR_7VAR_0VAR_7); #VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7
VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7))
VAR_7hrVAR_7 = VAR_7ID3D11VideoContext_DecoderBeginFrameVAR_7(VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7video_contextVAR_7, VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7,
VAR_7get_surfaceVAR_7(VAR_7VAR_1VAR_7),
VAR_70VAR_7, VAR_7NULLVAR_7); #VAR_7endifVAR_7
#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7
VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7)
VAR_7hrVAR_7 = VAR_7IDirectXVideoDecoder_BeginFrameVAR_7(VAR_7DXVA2_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7,
VAR_7get_surfaceVAR_7(VAR_7VAR_1VAR_7),
VAR_7NULLVAR_7); #VAR_7endifVAR_7
VAR_7ifVAR_7 (VAR_7hrVAR_7 != VAR_7E_PENDINGVAR_7 || ++VAR_7runsVAR_7 > VAR_750VAR_7)
VAR_7breakVAR_7; VAR_7ff_dxva2_unlockVAR_7(VAR_7VAR_0VAR_7); VAR_7av_usleepVAR_7(VAR_72000VAR_7); } VAR_7whileVAR_7(VAR_71VAR_7); VAR_7ifVAR_7 (VAR_7FAILEDVAR_7(VAR_7hrVAR_7)) { VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7, "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7beginVAR_7 VAR_7VAR_1VAR_7: VAR_70xVAR_7%VAR_7xVAR_7\VAR_7nVAR_7", VAR_7hrVAR_7); VAR_7ff_dxva2_unlockVAR_7(VAR_7VAR_0VAR_7); VAR_7returnVAR_7 -VAR_71VAR_7; } #VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7
VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7)) { VAR_7bufferVAR_7 = &VAR_7buffer11VAR_7[VAR_7buffer_countVAR_7]; VAR_7typeVAR_7 = VAR_7D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERSVAR_7; } #VAR_7endifVAR_7
#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7
VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7) { VAR_7bufferVAR_7 = &VAR_7buffer2VAR_7[VAR_7buffer_countVAR_7]; VAR_7typeVAR_7 = VAR_7DXVA2_PictureParametersBufferTypeVAR_7; } #VAR_7endifVAR_7
VAR_7resultVAR_7 = VAR_7ff_dxva2_commit_bufferVAR_7(VAR_7VAR_0VAR_7, VAR_7ctxVAR_7, VAR_7bufferVAR_7,
VAR_7typeVAR_7,
VAR_7VAR_2VAR_7, VAR_7VAR_3VAR_7, VAR_70VAR_7); VAR_7ifVAR_7 (VAR_7resultVAR_7) { VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7,
"VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7addVAR_7 VAR_7pictureVAR_7 VAR_7parameterVAR_7 VAR_7bufferVAR_7\VAR_7nVAR_7"); VAR_7gotoVAR_7 VAR_7endVAR_7; } VAR_7buffer_countVAR_7++; VAR_7ifVAR_7 (VAR_7VAR_5VAR_7 > VAR_70VAR_7) { #VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7
VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7)) { VAR_7bufferVAR_7 = &VAR_7buffer11VAR_7[VAR_7buffer_countVAR_7]; VAR_7typeVAR_7 = VAR_7D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIXVAR_7; } #VAR_7endifVAR_7
#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7
VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7) { VAR_7bufferVAR_7 = &VAR_7buffer2VAR_7[VAR_7buffer_countVAR_7]; VAR_7typeVAR_7 = VAR_7DXVA2_InverseQuantizationMatrixBufferTypeVAR_7; } #VAR_7endifVAR_7
VAR_7resultVAR_7 = VAR_7ff_dxva2_commit_bufferVAR_7(VAR_7VAR_0VAR_7, VAR_7ctxVAR_7, VAR_7bufferVAR_7,
VAR_7typeVAR_7,
VAR_7VAR_4VAR_7, VAR_7VAR_5VAR_7, VAR_70VAR_7); VAR_7ifVAR_7 (VAR_7resultVAR_7) { VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7,
"VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7addVAR_7 VAR_7inverseVAR_7 VAR_7quantizationVAR_7 VAR_7matrixVAR_7 VAR_7bufferVAR_7\VAR_7nVAR_7"); VAR_7gotoVAR_7 VAR_7endVAR_7; } VAR_7buffer_countVAR_7++; } #VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7
VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7)) { VAR_7bufferVAR_7       = &VAR_7buffer11VAR_7[VAR_7buffer_countVAR_7 + VAR_70VAR_7]; VAR_7buffer_sliceVAR_7 = &VAR_7buffer11VAR_7[VAR_7buffer_countVAR_7 + VAR_71VAR_7]; } #VAR_7endifVAR_7
#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7
VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7) { VAR_7bufferVAR_7       = &VAR_7buffer2VAR_7[VAR_7buffer_countVAR_7 + VAR_70VAR_7]; VAR_7buffer_sliceVAR_7 = &VAR_7buffer2VAR_7[VAR_7buffer_countVAR_7 + VAR_71VAR_7]; } #VAR_7endifVAR_7
VAR_7resultVAR_7 = VAR_7VAR_6VAR_7(VAR_7VAR_0VAR_7,
VAR_7bufferVAR_7,
VAR_7buffer_sliceVAR_7); VAR_7ifVAR_7 (VAR_7resultVAR_7) { VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7,
"VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7addVAR_7 VAR_7bitstreamVAR_7 VAR_7orVAR_7 VAR_7sliceVAR_7 VAR_7controlVAR_7 VAR_7bufferVAR_7\VAR_7nVAR_7"); VAR_7gotoVAR_7 VAR_7endVAR_7; } VAR_7buffer_countVAR_7 += VAR_72VAR_7; VAR_7assertVAR_7(VAR_7buffer_countVAR_7 == VAR_71VAR_7 + (VAR_7VAR_5VAR_7 > VAR_70VAR_7) + VAR_72VAR_7); #VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7
VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7))
VAR_7hrVAR_7 = VAR_7ID3D11VideoContext_SubmitDecoderBuffersVAR_7(VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7video_contextVAR_7,
VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7,
VAR_7buffer_countVAR_7, VAR_7buffer11VAR_7); #VAR_7endifVAR_7
#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7
VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7) { VAR_7DXVA2_DecodeExecuteParamsVAR_7 VAR_7execVAR_7 = { .VAR_7NumCompBuffersVAR_7     = VAR_7buffer_countVAR_7,
.VAR_7pCompressedBuffersVAR_7 = VAR_7buffer2VAR_7,
.VAR_7pExtensionDataVAR_7     = VAR_7NULLVAR_7,
}; VAR_7hrVAR_7 = VAR_7IDirectXVideoDecoder_ExecuteVAR_7(VAR_7DXVA2_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7, &VAR_7execVAR_7); } #VAR_7endifVAR_7
VAR_7ifVAR_7 (VAR_7FAILEDVAR_7(VAR_7hrVAR_7)) { VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7, "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7executeVAR_7: VAR_70xVAR_7%VAR_7xVAR_7\VAR_7nVAR_7", VAR_7hrVAR_7); VAR_7resultVAR_7 = -VAR_71VAR_7; } VAR_7endVAR_7:
#VAR_7ifVAR_7 VAR_7CONFIG_D3D11VAVAR_7
VAR_7ifVAR_7 (VAR_7ff_dxva2_is_d3d11VAR_7(VAR_7VAR_0VAR_7))
VAR_7hrVAR_7 = VAR_7ID3D11VideoContext_DecoderEndFrameVAR_7(VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7video_contextVAR_7, VAR_7D3D11VA_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7); #VAR_7endifVAR_7
#VAR_7ifVAR_7 VAR_7CONFIG_DXVA2VAR_7
VAR_7ifVAR_7 (VAR_7VAR_0VAR_7->VAR_7pix_fmtVAR_7 == VAR_7AV_PIX_FMT_DXVA2_VLDVAR_7)
VAR_7hrVAR_7 = VAR_7IDirectXVideoDecoder_EndFrameVAR_7(VAR_7DXVA2_CONTEXTVAR_7(VAR_7ctxVAR_7)->VAR_7decoderVAR_7, VAR_7NULLVAR_7); #VAR_7endifVAR_7
VAR_7ff_dxva2_unlockVAR_7(VAR_7VAR_0VAR_7); VAR_7ifVAR_7 (VAR_7FAILEDVAR_7(VAR_7hrVAR_7)) { VAR_7av_logVAR_7(VAR_7VAR_0VAR_7, VAR_7AV_LOG_ERRORVAR_7, "VAR_7FailedVAR_7 VAR_7toVAR_7 VAR_7endVAR_7 VAR_7VAR_1VAR_7: VAR_70xVAR_7%VAR_7xVAR_7\VAR_7nVAR_7", VAR_7hrVAR_7); VAR_7resultVAR_7 = -VAR_71VAR_7; } VAR_7returnVAR_7 VAR_7resultVAR_7; }