From 291fdcdc09420d8e422617070731eb3da3d55b44 Mon Sep 17 00:00:00 2001 From: Ville Syrjälä Date: Fri, 9 Jun 2017 18:15:11 +0300 Subject: sna/video: Expose NV12 support for the textured Xv adaptor on gen4+ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ville Syrjälä --- src/sna/sna_video.h | 9 +++++++++ src/sna/sna_video_textured.c | 28 +++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/sna/sna_video.h b/src/sna/sna_video.h index bb963e7f..6b1c864c 100644 --- a/src/sna/sna_video.h +++ b/src/sna/sna_video.h @@ -70,6 +70,15 @@ THE USE OR OTHER DEALINGS IN THE SOFTWARE. XvTopToBottom \ } +/* no standard define for this */ +#define XVIMAGE_NV12 { \ + FOURCC_NV12, XvYUV, LSBFirst, \ + {'N','V','1','2', 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71}, \ + 12, XvPlanar, 2, 0, 0, 0, 0, 8, 8, 8, 1, 2, 2, 1, 2, 2, \ + {'Y','U','V', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \ + XvTopToBottom \ +} + struct sna_video { struct sna *sna; diff --git a/src/sna/sna_video_textured.c b/src/sna/sna_video_textured.c index 3cce5cf1..bcd42320 100644 --- a/src/sna/sna_video_textured.c +++ b/src/sna/sna_video_textured.c @@ -61,6 +61,15 @@ static const XvImageRec gen3_Images[] = { XVMC_YUV, }; +static const XvImageRec gen4_Images[] = { + XVIMAGE_YUY2, + XVIMAGE_YV12, + XVIMAGE_I420, + XVIMAGE_NV12, + XVIMAGE_UYVY, + XVMC_YUV, +}; + static int sna_video_textured_stop(ddStopVideo_ARGS) { struct sna_video *video = port->devPriv.ptr; @@ -298,6 +307,20 @@ sna_video_textured_query(ddQueryImageAttributes_ARGS) offsets[2] = size; size += tmp; break; + case FOURCC_NV12: + *h = (*h + 1) & ~1; + size = (*w + 3) & ~3; + if (pitches) + pitches[0] = size; + size *= *h; + if (offsets) + offsets[1] = size; + tmp = (*w + 3) & ~3; + if (pitches) + pitches[1] = tmp; + tmp *= (*h >> 1); + size += tmp; + break; case FOURCC_UYVY: case FOURCC_YUY2: default: @@ -374,9 +397,12 @@ void sna_video_textured_setup(struct sna *sna, ScreenPtr screen) if (sna->kgem.gen < 030) { adaptor->nImages = ARRAY_SIZE(gen2_Images); adaptor->pImages = (XvImageRec *)gen2_Images; - } else { + } else if (sna->kgem.gen < 040) { adaptor->nImages = ARRAY_SIZE(gen3_Images); adaptor->pImages = (XvImageRec *)gen3_Images; + } else { + adaptor->nImages = ARRAY_SIZE(gen4_Images); + adaptor->pImages = (XvImageRec *)gen4_Images; } #if XORG_XV_VERSION < 2 adaptor->ddAllocatePort = sna_xv_alloc_port; -- cgit v1.2.3