From d79d561819277cc24818a3106080258d32755c89 Mon Sep 17 00:00:00 2001 From: Gwenole Beauchesne Date: Fri, 12 Jul 2013 15:15:07 +0200 Subject: [PATCH] vaapiupload: use implicit color conversion to NV12. Always perform conversion of sources buffers to NV12 since this is the way we tested for this capability in ensure_allowed_caps(). This also saves memory bandwidth for further rendering. However, this may not preserve quality since the YUV buffers are down-sampled to 4:2:0. --- gst/vaapi/gstvaapiuploader.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gst/vaapi/gstvaapiuploader.c b/gst/vaapi/gstvaapiuploader.c index ca7f675c5e..234674b9c9 100755 --- a/gst/vaapi/gstvaapiuploader.c +++ b/gst/vaapi/gstvaapiuploader.c @@ -219,6 +219,21 @@ ensure_surface_pool(GstVaapiUploader *uploader, GstCaps *caps, if (!*caps_changed_ptr) return TRUE; + /* Always try to downsample source buffers to YUV 4:2:0 format as + this saves memory bandwidth for further rendering */ + /* XXX: this also means that visual quality is not preserved */ + if (format != GST_VIDEO_FORMAT_ENCODED) { + const GstVaapiChromaType chroma_type = + gst_video_format_get_chroma_type(format); + if (chroma_type != GST_VAAPI_CHROMA_TYPE_YUV420) { + const GstVideoFormat image_format = + GST_VIDEO_INFO_FORMAT(&priv->image_info); + GST_INFO("use implicit conversion of %s buffers to NV12 surfaces", + gst_video_format_to_string(image_format)); + gst_video_info_set_format(&vi, GST_VIDEO_FORMAT_NV12, width, height); + } + } + pool = gst_vaapi_surface_pool_new(priv->display, &vi); if (!pool) return FALSE;