[FFmpeg-devel] [PATCH 2/2] dxva2: get the slice number directly from the surface in D3D11VA

Stève Lhomme robux4 at videolabs.io
Thu Dec 1 16:13:45 EET 2016


I think I should update the minor version number as I need to rely on
this behaviour change in VLC, the surface array will be empty.

Should I also change the headers so that they don't require the output
surface to be pre-allocated ?

On Thu, Dec 1, 2016 at 3:10 PM, Steve Lhomme <robux4 at videolabs.io> wrote:
> No need to loop through the known surfaces, we'll use it anyway.
>
> The loop is only done for DXVA2
> ---
>  libavcodec/dxva2.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/libavcodec/dxva2.c b/libavcodec/dxva2.c
> index a64b1b5..459e267 100644
> --- a/libavcodec/dxva2.c
> +++ b/libavcodec/dxva2.c
> @@ -41,20 +41,20 @@ unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx,
>      void *surface = ff_dxva2_get_surface(frame);
>      unsigned i;
>
> -    for (i = 0; i < DXVA_CONTEXT_COUNT(avctx, ctx); i++) {
>  #if CONFIG_D3D11VA
> -        if (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD && ctx->d3d11va.surface[i] == surface)
> -        {
> -            D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC viewDesc;
> -            ID3D11VideoDecoderOutputView_GetDesc(ctx->d3d11va.surface[i], &viewDesc);
> -            return viewDesc.Texture2D.ArraySlice;
> -        }
> +    if (avctx->pix_fmt == AV_PIX_FMT_D3D11VA_VLD)
> +    {
> +        D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC viewDesc;
> +        ID3D11VideoDecoderOutputView_GetDesc((ID3D11VideoDecoderOutputView*) surface, &viewDesc);
> +        return viewDesc.Texture2D.ArraySlice;
> +    }
>  #endif
>  #if CONFIG_DXVA2
> +    for (i = 0; i < DXVA_CONTEXT_COUNT(avctx, ctx); i++) {
>          if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD && ctx->dxva2.surface[i] == surface)
>              return i;
> -#endif
>      }
> +#endif
>
>      assert(0);
>      return 0;
> --
> 2.10.1.windows.1
>


More information about the ffmpeg-devel mailing list