Module: libav
Branch: master
Commit: 1f9237f2ac46dfbed1bfa1f4f0f1314c2a1d62ec

Author:    Rémi Denis-Courmont <[email protected]>
Committer: Anton Khirnov <[email protected]>
Date:      Fri Dec 19 19:15:11 2014 +0200

avconv_vdpau: allocate video surface of VDPAU-specified size

Signed-off-by: Rémi Denis-Courmont <[email protected]>
Signed-off-by: Anton Khirnov <[email protected]>

---

 avconv_vdpau.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/avconv_vdpau.c b/avconv_vdpau.c
index 37b50f6..1bd1f48 100644
--- a/avconv_vdpau.c
+++ b/avconv_vdpau.c
@@ -90,9 +90,14 @@ static int vdpau_get_buffer(AVCodecContext *s, AVFrame 
*frame, int flags)
     VDPAUContext        *ctx = ist->hwaccel_ctx;
     VdpVideoSurface *surface;
     VdpStatus err;
+    VdpChromaType chroma;
+    uint32_t width, height;
 
     av_assert0(frame->format == AV_PIX_FMT_VDPAU);
 
+    if (av_vdpau_get_surface_parameters(s, &chroma, &width, &height))
+        return AVERROR(ENOSYS);
+
     surface = av_malloc(sizeof(*surface));
     if (!surface)
         return AVERROR(ENOMEM);
@@ -108,8 +113,8 @@ static int vdpau_get_buffer(AVCodecContext *s, AVFrame 
*frame, int flags)
     // properly we should keep a pool of surfaces instead of creating
     // them anew for each frame, but since we don't care about speed
     // much in this code, we don't bother
-    err = ctx->video_surface_create(ctx->device, VDP_CHROMA_TYPE_420,
-                                    frame->width, frame->height, surface);
+    err = ctx->video_surface_create(ctx->device, chroma, width, height,
+                                    surface);
     if (err != VDP_STATUS_OK) {
         av_log(NULL, AV_LOG_ERROR, "Error allocating a VDPAU video surface: 
%s\n",
                ctx->get_error_string(err));

_______________________________________________
libav-commits mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-commits

Reply via email to