Index: vidix/nvidia_vid.c
===================================================================
--- vidix/nvidia_vid.c	(revision 25513)
+++ vidix/nvidia_vid.c	(working copy)
@@ -789,6 +789,10 @@
         value = info->pitch;       
 	    if(info->use_colorkey)value |= 1 << 20; 
         if(info->format == IMGFMT_YUY2)value |= 1 << 16;
+        if(info->format == IMGFMT_NV12) {
+            value |= 1 << 16 | 1;
+            VID_WR32 (info->chip.PVIDEO, 0x820 + 0, info->height * info->pitch);
+        }
         VID_WR32 (info->chip.PVIDEO, 0x958 + 0, value);
 	    //VID_WR32 (info->chip.PVIDEO, 0x958 + 4, (pitch << 1) | 0x00100000);
 
@@ -984,7 +988,8 @@
 
 inline static int is_supported_fourcc(uint32_t fourcc)
 {
-	if	(fourcc == IMGFMT_UYVY || fourcc == IMGFMT_YUY2)
+	if	(fourcc == IMGFMT_UYVY || fourcc == IMGFMT_YUY2 ||
+                 (fourcc == IMGFMT_NV12 && info->chip.arch >= NV_ARCH_10))
 		return 1;
 	else
 		return 0;
@@ -1036,6 +1041,16 @@
 		    info->pitch = ((info->width << 1) + (vinfo->dest.pitch.y-1)) & ~(vinfo->dest.pitch.y-1);
 		    vinfo->frame_size = info->pitch * info->height;
 		    break;
+	    case IMGFMT_NV12:
+		    vinfo->dest.pitch.y = 64;
+		    vinfo->dest.pitch.u = 64;
+		    vinfo->dest.pitch.v = 64;
+		    vinfo->offset.y = 0;
+		    vinfo->offset.u = 0;
+		    vinfo->offset.v = 0;
+		    info->pitch = ((info->width << 1) + (vinfo->dest.pitch.y-1)) & ~(vinfo->dest.pitch.y-1);
+		    vinfo->frame_size = info->pitch * info->height * 2;
+		    break;
     }
     info->buffer_size = vinfo->frame_size;
     info->num_frames = vinfo->num_frames= (info->chip.fbsize - info->picture_offset)/vinfo->frame_size;
Index: vidix/fourcc.h
===================================================================
--- vidix/fourcc.h	(revision 25513)
+++ vidix/fourcc.h	(working copy)
@@ -78,5 +78,6 @@
 
 /*  Vendor-specific formats   */
 #define IMGFMT_WNVA    vid_fourcc('W','N','V','A') /* Winnov hw compress */
+#define IMGFMT_NV12    vid_fourcc('N','V','1','2') /* nvidia NV12 */
 
 #endif
