[FFmpeg-cvslog] avconv_vdpau: allocate video surface of VDPAU-specified size
Rémi Denis-Courmont
git at videolan.org
Sat Dec 27 13:35:21 CET 2014
ffmpeg | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Dec 19 19:15:11 2014 +0200| [1f9237f2ac46dfbed1bfa1f4f0f1314c2a1d62ec] | committer: Anton Khirnov
avconv_vdpau: allocate video surface of VDPAU-specified size
Signed-off-by: Rémi Denis-Courmont <remi at remlab.net>
Signed-off-by: Anton Khirnov <anton at khirnov.net>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1f9237f2ac46dfbed1bfa1f4f0f1314c2a1d62ec
---
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));
More information about the ffmpeg-cvslog
mailing list