[FFmpeg-cvslog] dxva2: get the slice number directly from the surface in D3D11VA

Steve Lhomme git at videolan.org
Mon Jan 16 03:54:57 EET 2017


ffmpeg | branch: master | Steve Lhomme <robux4 at gmail.com> | Fri Jan 13 14:01:06 2017 +0100| [153b36fc62849e0e1540a43829794e0503994ebb] | committer: Michael Niedermayer

dxva2: get the slice number directly from the surface in D3D11VA

No need to loop through the known surfaces, we'll use the requested surface
anyway.

The loop is only done for DXVA2.

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=153b36fc62849e0e1540a43829794e0503994ebb
---

 libavcodec/dxva2.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/libavcodec/dxva2.c b/libavcodec/dxva2.c
index 2ac3f3e..c782f1c 100644
--- a/libavcodec/dxva2.c
+++ b/libavcodec/dxva2.c
@@ -41,20 +41,19 @@ unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx,
     void *surface = 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;



More information about the ffmpeg-cvslog mailing list