diff libmpcodecs/vf.c @ 30110:19414a605695

Add support for 16-bit per component YUV formats.
author reimar
date Thu, 31 Dec 2009 22:53:25 +0000
parents 5cb79ad246f2
children c26218c27e73
line wrap: on
line diff
--- a/libmpcodecs/vf.c	Thu Dec 31 19:59:58 2009 +0000
+++ b/libmpcodecs/vf.c	Thu Dec 31 22:53:25 2009 +0000
@@ -383,25 +383,26 @@
 	  else
 	     mpi->planes[0]=memalign(64, mpi->bpp*mpi->width*(mpi->height+2)/8);
 	  if(mpi->flags&MP_IMGFLAG_PLANAR){
+	      int bpp = IMGFMT_IS_YUVP16(mpi->imgfmt)? 2 : 1;
 	      // YV12/I420/YVU9/IF09. feel free to add other planar formats here...
 	      //if(!mpi->stride[0])
-	      mpi->stride[0]=mpi->width;
+	      mpi->stride[0]=bpp*mpi->width;
 	      //if(!mpi->stride[1])
 	      if(mpi->num_planes > 2){
-	      mpi->stride[1]=mpi->stride[2]=mpi->chroma_width;
+	      mpi->stride[1]=mpi->stride[2]=bpp*mpi->chroma_width;
 	      if(mpi->flags&MP_IMGFLAG_SWAPPED){
 	          // I420/IYUV  (Y,U,V)
-	          mpi->planes[1]=mpi->planes[0]+mpi->width*mpi->height;
-	          mpi->planes[2]=mpi->planes[1]+mpi->chroma_width*mpi->chroma_height;
+	          mpi->planes[1]=mpi->planes[0]+mpi->stride[0]*mpi->height;
+	          mpi->planes[2]=mpi->planes[1]+mpi->stride[1]*mpi->chroma_height;
 	      } else {
 	          // YV12,YVU9,IF09  (Y,V,U)
-	          mpi->planes[2]=mpi->planes[0]+mpi->width*mpi->height;
-	          mpi->planes[1]=mpi->planes[2]+mpi->chroma_width*mpi->chroma_height;
+	          mpi->planes[2]=mpi->planes[0]+mpi->stride[0]*mpi->height;
+	          mpi->planes[1]=mpi->planes[2]+mpi->stride[1]*mpi->chroma_height;
 	      }
 	      } else {
 	          // NV12/NV21
 	          mpi->stride[1]=mpi->chroma_width;
-	          mpi->planes[1]=mpi->planes[0]+mpi->width*mpi->height;
+	          mpi->planes[1]=mpi->planes[0]+mpi->stride[0]*mpi->height;
 	      }
 	  } else {
 	      //if(!mpi->stride[0])