From 824260b5ebdff16546c0f55b637b198ab2e5df0c Mon Sep 17 00:00:00 2001 From: Jamie Tittle Date: Tue, 11 Oct 2005 02:37:22 +0000 Subject: improved uyvy to yv12 conversion code svn path=/trunk/externals/gem2pdp/; revision=3690 --- pix_2pdp.cpp | 55 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/pix_2pdp.cpp b/pix_2pdp.cpp index 34d0a12..f8743f2 100755 --- a/pix_2pdp.cpp +++ b/pix_2pdp.cpp @@ -7,6 +7,7 @@ * Many thanks to IOhannes M Zmölnig * * Copyright (c) 2005 Georg Holzmann + * parts Copyright (c) 2005 James Tittle II * */ @@ -43,7 +44,7 @@ void pix_2pdp::processImage(imageStruct &image) void pix_2pdp::bangMess() { t_int psize, px, py; - short int *pY, *pU, *pV; + short int *pY, *pY2, *pU, *pV; unsigned char g1,g2,g3,g4; t_int helper; @@ -56,6 +57,7 @@ void pix_2pdp::bangMess() m_data = (short int *)pdp_packet_data(m_packet0); pY = m_data; + pY2 = m_data + gem_xsize; pV = m_data+psize; pU = m_data+psize+(psize>>2); @@ -64,6 +66,8 @@ void pix_2pdp::bangMess() // RGB case GL_RGB: case GL_RGBA: + case GL_BGR: + case GL_BGRA: for ( py=0; py>1; + int cols=gem_xsize>>1; + short u,v; + unsigned char *pixel = gem_image; + unsigned char *pixel2 = gem_image + gem_xsize * gem_csize; + while (row--){ + int col=cols; + while(col--){ + u=(pixel[0]-128)<<8; v=(pixel[2]-128)<<8; + *pU = u; + *pY++ = (pixel[1])<<7; + *pV = v; + *pY++ = (pixel[3])<<7; + *pU = u; + *pY2++ = (pixel2[1])<<7; + *pV = v; + *pY2++ = (pixel2[3])<<7; + pixel+=4; + pixel2+=4; + pU++; pV++; + } + pixel += gem_xsize * gem_csize; + pixel2 += gem_xsize * gem_csize; + pY += gem_xsize; pY2 += gem_xsize; + } pdp_packet_pass_if_valid(m_pdpoutlet, &m_packet0); break; @@ -139,7 +146,7 @@ void pix_2pdp::bangMess() void pix_2pdp::obj_setupCallback(t_class *classPtr) { - post( "pix_2pdp : a bridge between a Gem pix and PDP/PiDiP, Georg Holzmann 2005 " ); + post( "pix_2pdp : a bridge between a Gem pix and PDP/PiDiP, Georg Holzmann 2005 & tigital 2005 " ); class_addmethod(classPtr, (t_method)&pix_2pdp::bangMessCallback, gensym("bang"), A_NULL); } -- cgit v1.2.1