[vlc-commits] vdpau/avcodec: update to libavcodec 55.26.0

Rémi Denis-Courmont git at videolan.org
Wed Feb 5 22:39:15 CET 2014


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Feb  5 19:49:25 2014 +0200| [fccfbd2fd1f6e91ecc3888c361348d35893140fb] | committer: Rémi Denis-Courmont

vdpau/avcodec: update to libavcodec 55.26.0

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fccfbd2fd1f6e91ecc3888c361348d35893140fb
---

 modules/hw/vdpau/avcodec.c |   41 +++++++++++++++++++++++++++--------------
 1 file changed, 27 insertions(+), 14 deletions(-)

diff --git a/modules/hw/vdpau/avcodec.c b/modules/hw/vdpau/avcodec.c
index acc1c41..7081dee 100644
--- a/modules/hw/vdpau/avcodec.c
+++ b/modules/hw/vdpau/avcodec.c
@@ -52,10 +52,10 @@ vlc_module_end()
 
 struct vlc_va_sys_t
 {
+    AVVDPAUContext *context;
     vdp_t *vdp;
     VdpDevice device;
     VdpDecoderProfile profile;
-    AVVDPAUContext context;
     uint16_t width;
     uint16_t height;
 };
@@ -130,16 +130,16 @@ static int Init(vlc_va_t *va, void **ctxp, vlc_fourcc_t *chromap,
     }
 
     err = vdp_decoder_create(sys->vdp, sys->device, sys->profile, width,
-                             height, surfaces, &sys->context.decoder);
+                             height, surfaces, &sys->context->decoder);
     if (err != VDP_STATUS_OK)
     {
         msg_Err(va, "%s creation failure: %s", "decoder",
                 vdp_get_error_string(sys->vdp, err));
-        sys->context.decoder = VDP_INVALID_HANDLE;
+        sys->context->decoder = VDP_INVALID_HANDLE;
         return VLC_EGENERIC;
     }
 
-    *ctxp = &sys->context;
+    *ctxp = sys->context;
     /* TODO: select better chromas when appropriate */
     *chromap = VLC_CODEC_VDPAU_VIDEO_420;
     return VLC_SUCCESS;
@@ -149,10 +149,10 @@ static void Deinit(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
 
-    assert(sys->context.decoder != VDP_INVALID_HANDLE);
-    vdp_decoder_destroy(sys->vdp, sys->context.decoder);
+    assert(sys->context->decoder != VDP_INVALID_HANDLE);
+    vdp_decoder_destroy(sys->vdp, sys->context->decoder);
 #if (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 13, 0))
-    av_freep(&sys->context.bitstream_buffers);
+    av_freep(&sys->context->bitstream_buffers);
 #endif
 }
 
@@ -161,12 +161,12 @@ static int Setup(vlc_va_t *va, void **ctxp, vlc_fourcc_t *chromap,
 {
     vlc_va_sys_t *sys = va->sys;
 
-    if (sys->context.decoder != VDP_INVALID_HANDLE)
+    if (sys->context->decoder != VDP_INVALID_HANDLE)
     {
         if (sys->width == width && sys->height == height)
             return VLC_SUCCESS;
         Deinit(va);
-        sys->context.decoder = VDP_INVALID_HANDLE;
+        sys->context->decoder = VDP_INVALID_HANDLE;
     }
 
     return Init(va, ctxp, chromap, width, height);
@@ -279,13 +279,21 @@ static int Open(vlc_va_t *va, int codec, const es_format_t *fmt)
     if (unlikely(sys == NULL))
        return VLC_ENOMEM;
 
-    sys->profile = profile;
-    memset(&sys->context, 0, sizeof (sys->context));
-    sys->context.decoder = VDP_INVALID_HANDLE;
+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55, 26, 0))
+    sys->context = av_vdpau_alloc_context();
+#else
+    sys->context = calloc(1, sizeof (*sys->context));
+#endif
+    if (unlikely(sys->context == NULL))
+    {
+        free(sys);
+        return VLC_ENOMEM;
+    }
 
     err = vdp_get_x11(NULL, -1, &sys->vdp, &sys->device);
     if (err != VDP_STATUS_OK)
     {
+        free(sys->context);
         free(sys);
         return VLC_EGENERIC;
     }
@@ -295,7 +303,10 @@ static int Open(vlc_va_t *va, int codec, const es_format_t *fmt)
                                VDP_FUNC_ID_DECODER_RENDER, &func);
     if (err != VDP_STATUS_OK)
         goto error;
-    sys->context.render = func;
+
+    sys->context->decoder = VDP_INVALID_HANDLE;
+    sys->context->render = func;
+    sys->profile = profile;
 
     /* Check capabilities */
     VdpBool support;
@@ -349,6 +360,7 @@ static int Open(vlc_va_t *va, int codec, const es_format_t *fmt)
 
 error:
     vdp_release_x11(sys->vdp);
+    free(sys->context);
     free(sys);
     return VLC_EGENERIC;
 }
@@ -357,8 +369,9 @@ static void Close(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
 
-    if (sys->context.decoder != VDP_INVALID_HANDLE)
+    if (sys->context->decoder != VDP_INVALID_HANDLE)
         Deinit(va);
     vdp_release_x11(sys->vdp);
+    free(sys->context);
     free(sys);
 }



More information about the vlc-commits mailing list