[vlc-devel] [PATCH 33/48] avcodec: vdpau: use the decoder device to get the vdp_t*

Steve Lhomme robux4 at ycbcr.xyz
Fri Oct 11 15:35:06 CEST 2019


---
 modules/hw/vdpau/avcodec.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/modules/hw/vdpau/avcodec.c b/modules/hw/vdpau/avcodec.c
index 3c8317ca12d..23c8b14bbd2 100644
--- a/modules/hw/vdpau/avcodec.c
+++ b/modules/hw/vdpau/avcodec.c
@@ -35,6 +35,7 @@
 #include <vlc_plugin.h>
 #include <vlc_fourcc.h>
 #include <vlc_picture.h>
+#include <vlc_codec.h>
 #include <vlc_xlib.h>
 #include "vlc_vdpau.h"
 #include "../../codec/avcodec/va.h"
@@ -136,7 +137,8 @@ static int Open(vlc_va_t *va, AVCodecContext *avctx, const AVPixFmtDescriptor *d
                 enum PixelFormat pix_fmt,
                 const es_format_t *fmt, void *p_sys, vlc_decoder_device *dec_device)
 {
-    if (pix_fmt != AV_PIX_FMT_VDPAU)
+    if (pix_fmt != AV_PIX_FMT_VDPAU|| dec_device == NULL ||
+        dec_device->type != VLC_DECODER_DEVICE_VDPAU)
         return VLC_EGENERIC;
 
     (void) fmt;
@@ -177,13 +179,8 @@ static int Open(vlc_va_t *va, AVCodecContext *avctx, const AVPixFmtDescriptor *d
     sys->width = width;
     sys->height = height;
     sys->hwaccel_context = NULL;
-
-    err = vdp_get_x11(NULL, -1, &sys->vdp, &sys->device);
-    if (err != VDP_STATUS_OK)
-    {
-        free(sys);
-        return VLC_EGENERIC;
-    }
+    sys->vdp = dec_device->opaque;
+    vdp_hold_x11(sys->vdp, &sys->device);
 
     unsigned flags = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH;
 
-- 
2.17.1



More information about the vlc-devel mailing list