From 1f9237f2ac46dfbed1bfa1f4f0f1314c2a1d62ec Mon Sep 17 00:00:00 2001 From: Rémi Denis-Courmont Date: Fri, 19 Dec 2014 19:15:11 +0200 Subject: avconv_vdpau: allocate video surface of VDPAU-specified size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémi Denis-Courmont Signed-off-by: Anton Khirnov --- avconv_vdpau.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'avconv_vdpau.c') diff --git a/avconv_vdpau.c b/avconv_vdpau.c index 37b50f619c..1bd1f48190 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)); -- cgit v1.2.3