From 0471f3780a9313c2969fb5a58a33964399977fbe Mon Sep 17 00:00:00 2001 From: Zhao Halley Date: Wed, 5 Sep 2012 17:23:18 +0800 Subject: [PATCH] test: fix an issue in loading YV12 surface --- test/loadsurface.h | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) mode change 100644 => 100755 test/loadsurface.h diff --git a/test/loadsurface.h b/test/loadsurface.h old mode 100644 new mode 100755 index 2cd09c3..e775927 --- a/test/loadsurface.h +++ b/test/loadsurface.h @@ -220,21 +220,43 @@ static int upload_surface(VADisplay va_dpy, VASurfaceID surface_id, VAImage surface_image; void *surface_p=NULL, *U_start,*V_start; VAStatus va_status; + unsigned int pitches[3]; va_status = vaDeriveImage(va_dpy,surface_id,&surface_image); CHECK_VASTATUS(va_status,"vaDeriveImage"); vaMapBuffer(va_dpy,surface_image.buf,&surface_p); assert(VA_STATUS_SUCCESS == va_status); - - U_start = (char *)surface_p + surface_image.offsets[1]; - V_start = (char *)surface_p + surface_image.offsets[2]; + + pitches[0] = surface_image.pitches[0]; + switch (surface_image.format.fourcc) { + case VA_FOURCC_NV12: + U_start = (char *)surface_p + surface_image.offsets[1]; + V_start = U_start + 1; + pitches[1] = surface_image.pitches[1]; + pitches[2] = surface_image.pitches[1]; + break; + case VA_FOURCC_IYUV: + U_start = (char *)surface_p + surface_image.offsets[1]; + V_start = (char *)surface_p + surface_image.offsets[2]; + pitches[1] = surface_image.pitches[1]; + pitches[2] = surface_image.pitches[2]; + break; + case VA_FOURCC_YV12: + U_start = (char *)surface_p + surface_image.offsets[2]; + V_start = (char *)surface_p + surface_image.offsets[1]; + pitches[1] = surface_image.pitches[2]; + pitches[2] = surface_image.pitches[1]; + break; + default: + assert(0); + } /* assume surface is planar format */ yuvgen_planar(surface_image.width, surface_image.height, - (unsigned char *)surface_p, surface_image.pitches[0], - (unsigned char *)U_start, surface_image.pitches[1], - (unsigned char *)V_start, surface_image.pitches[2], + (unsigned char *)surface_p, pitches[0], + (unsigned char *)U_start, pitches[1], + (unsigned char *)V_start, pitches[2], (surface_image.format.fourcc==VA_FOURCC_NV12), box_width, row_shift, field); -- 2.7.4