changeset 5316:ce6f625f6682

I420 UV swapping fixed
author arpi
date Sun, 24 Mar 2002 19:14:40 +0000
parents 75092614a37d
children 80fbb03b385a
files libvo/vo_xv.c
diffstat 1 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_xv.c	Sun Mar 24 19:01:01 2002 +0000
+++ b/libvo/vo_xv.c	Sun Mar 24 19:14:40 2002 +0000
@@ -621,7 +621,8 @@
 
  x/=2;y/=2;w/=2;h/=2;
 
- dst = xvimage[current_buf]->data + image_width * image_height + image_width/2 * y + x;
+ dst = xvimage[current_buf]->data + image_width * image_height + (image_width>>1) * y + x;
+ if(image_format!=IMGFMT_YV12) dst+=(image_width>>1)*(image_height>>1);
  src = image[2];
  if(w==stride[2] && w==image_width/2) memcpy(dst,src,w*h);
   else
@@ -631,7 +632,9 @@
      src+=stride[2];
      dst+=image_width/2;
    }
- dst = xvimage[current_buf]->data + image_width * image_height * 5 / 4 + image_width/2 * y + x;
+
+ dst = xvimage[current_buf]->data + image_width * image_height + (image_width>>1) * y + x;
+ if(image_format==IMGFMT_YV12) dst+=(image_width>>1)*(image_height>>1);
  src = image[1];
  if(w==stride[1] && w==image_width/2) memcpy(dst,src,w*h);
   else
@@ -716,9 +719,15 @@
     if(mpi->width==image_width){
        if(mpi->flags&MP_IMGFLAG_PLANAR){
 	   mpi->planes[0]=xvimage[current_buf]->data;
-	   mpi->planes[2]=xvimage[current_buf]->data+image_width*image_height;
-//	   mpi->planes[1]=xvimage[current_buf]->data+image_width*image_height*5/4;
-	   mpi->planes[1]=mpi->planes[2]+(image_width>>1)*(image_height>>1);
+	   if(mpi->flags&MP_IMGFLAG_SWAPPED){
+	       // I420
+	       mpi->planes[1]=xvimage[current_buf]->data+image_width*image_height;
+	       mpi->planes[2]=mpi->planes[1]+(image_width>>1)*(image_height>>1);
+	   } else {
+	       // YV12
+	       mpi->planes[2]=xvimage[current_buf]->data+image_width*image_height;
+	       mpi->planes[1]=mpi->planes[2]+(image_width>>1)*(image_height>>1);
+	   }
 	   mpi->stride[0]=image_width;
 	   mpi->stride[1]=mpi->stride[2]=image_width/2;
        } else {