changeset 10744:666cef3fe7e3

nv21 support
author alex
date Sun, 31 Aug 2003 20:58:25 +0000
parents 3d1eab0d9c5a
children 90f92fd5047e
files libmpcodecs/vd_hmblck.c
diffstat 1 files changed, 6 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vd_hmblck.c	Sun Aug 31 20:57:34 2003 +0000
+++ b/libmpcodecs/vd_hmblck.c	Sun Aug 31 20:58:25 2003 +0000
@@ -9,9 +9,9 @@
 #define TEMP_BUF_SIZE (720*576)
 
 static vd_info_t info = {
-	"Hauppauge Macroblock/NV12 Decoder",
+	"Hauppauge Macroblock/NV12/NV21 Decoder",
 	"hmblck",
-	"Alex <d18c7db@hotmail.com>, A'rpi",
+	"Alex <d18c7db@hotmail.com>, A'rpi, Alex Beregszaszi",
 	"Alex <d18c7db@hotmail.com>",
 	"uncompressed"
 };
@@ -59,13 +59,13 @@
 /*************************************************************************
  * convert a nv12 buffer to yv12
  */
-static int nv12_to_yv12(void *data, int len, mp_image_t* mpi) {
+static int nv12_to_yv12(void *data, int len, mp_image_t* mpi, int swapped) {
     unsigned int Y_size  = mpi->width * mpi->height;
     unsigned int UV_size = mpi->chroma_width * mpi->chroma_height;
     unsigned int idx;
     unsigned char *dst_Y = mpi->planes[0];
-    unsigned char *dst_U = mpi->planes[1];
-    unsigned char *dst_V = mpi->planes[2];
+    unsigned char *dst_U = swapped?mpi->planes[2]:mpi->planes[1];
+    unsigned char *dst_V = swapped?mpi->planes[1]:mpi->planes[2];
     unsigned char *src   = data + Y_size;
 
     // sanity check raw stream
@@ -130,7 +130,7 @@
 	de_macro_y(mpi->planes[0],data,mpi->stride[0],mpi->w,mpi->h);
 	de_macro_uv(mpi->planes[1],mpi->planes[2],data+mpi->w*mpi->h,mpi->stride[1],mpi->w/2,mpi->h/2);
     } else {
-	if(!nv12_to_yv12(data, len, mpi)) return NULL;
+	if(!nv12_to_yv12(data, len, mpi,(sh->format == IMGFMT_NV12))) return NULL;
     }
 
     return mpi;