GFX-3D: add yv12 support to video buffer class driver
authorYun Tu(Mark Tu) <yun.tu@intel.com>
Mon, 31 Oct 2011 07:00:46 +0000 (15:00 +0800)
committerbuildbot <buildbot@intel.com>
Fri, 23 Dec 2011 16:44:50 +0000 (08:44 -0800)
BZ:13400

add yv12 format support to video buffer class driver

Change-Id: Id7c4c217f683e7c2671b19531456c0ced1974e28
Signed-off-by: Yun Tu(Mark Tu) <yun.tu@intel.com>
Reviewed-on: http://android.intel.com:8080/27732
Reviewed-by: Xu, Randy <randy.xu@intel.com>
Tested-by: Xu, Randy <randy.xu@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
drivers/staging/mrst/bc_video/bufferclass_video_linux.c
drivers/staging/mrst/bc_video/bufferclass_video_linux.h

index a67c2eb..2eaa82f 100755 (executable)
@@ -421,7 +421,7 @@ BC_CreateBuffers(int id, bc_buf_params_t * p, IMG_BOOL is_conti_addr)
 
        if (p->width <= 1 || p->height <= 1)
                return -EINVAL;
-
+       printk(KERN_ERR "foucc: %x \n", p->fourcc);
        switch (p->fourcc) {
        case BC_PIX_FMT_NV12:
                pixel_fmt = PVRSRV_PIXEL_FORMAT_NV12;
@@ -436,6 +436,9 @@ BC_CreateBuffers(int id, bc_buf_params_t * p, IMG_BOOL is_conti_addr)
        case BC_PIX_FMT_YUYV:
                pixel_fmt = PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YUYV;
                break;
+       case BC_PIX_FMT_YV12:
+               pixel_fmt = PVRSRV_PIXEL_FORMAT_YV12;
+               break;
        default:
                return -EINVAL;
                break;
@@ -461,7 +464,8 @@ BC_CreateBuffers(int id, bc_buf_params_t * p, IMG_BOOL is_conti_addr)
 
        memset(psDevInfo->psSystemBuffer, 0, sizeof(BC_VIDEO_BUFFER) * p->count);
        size = p->height * stride;
-       if (pixel_fmt == PVRSRV_PIXEL_FORMAT_NV12)
+       if (pixel_fmt == PVRSRV_PIXEL_FORMAT_NV12 ||
+               pixel_fmt == PVRSRV_PIXEL_FORMAT_YV12)
                size += (stride >> 1) * (p->height >> 1) << 1;
 
        for (i = 0; i < p->count; i++) {
@@ -696,9 +700,10 @@ BC_Video_Bridge(struct drm_device *dev, IMG_VOID * arg,
                }
 
                bufferInfo = &(devinfo->sBufferInfo);
-               if (bufferInfo->pixelformat != PVRSRV_PIXEL_FORMAT_NV12) {
+               if (bufferInfo->pixelformat != PVRSRV_PIXEL_FORMAT_NV12 &&
+                       bufferInfo->pixelformat != PVRSRV_PIXEL_FORMAT_YV12) {
                        printk(KERN_ERR DRVNAME
-                              " : BC_Video_ioctl_alloc_buffer only support NV12 format.\n");
+                              " : BC_Video_ioctl_alloc_buffer only support NV12/YV12 format.\n");
                        return -EINVAL;
                }
                ui32Size = bufferInfo->ui32Height * bufferInfo->ui32ByteStride;
index 10d9f67..9de8682 100755 (executable)
@@ -35,6 +35,8 @@
 #define BC_PIX_FMT_UYVY     BC_FOURCC('U', 'Y', 'V', 'Y')    /*YUV 4:2:2 */
 #define BC_PIX_FMT_YUYV     BC_FOURCC('Y', 'U', 'Y', 'V')    /*YUV 4:2:2 */
 #define BC_PIX_FMT_RGB565   BC_FOURCC('R', 'G', 'B', 'P')    /*RGB 5:6:5 */
+#define BC_PIX_FMT_YV12     BC_FOURCC('Y', 'V', '1', '2')      /*YUV 4:2:0*/
+
 
 int FillBuffer(unsigned int uiBufferIndex);