[PD-cvs] externals/gem2pdp pix_2pdp.cpp,1.1,1.2

Georg Holzmann grholzi at users.sourceforge.net
Sat Jun 18 08:29:34 CEST 2005


Update of /cvsroot/pure-data/externals/gem2pdp
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22575

Modified Files:
	pix_2pdp.cpp 
Log Message:
added YUV and Gray support


Index: pix_2pdp.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/gem2pdp/pix_2pdp.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** pix_2pdp.cpp	17 Jun 2005 13:45:22 -0000	1.1
--- pix_2pdp.cpp	18 Jun 2005 06:29:30 -0000	1.2
***************
*** 45,93 ****
    t_int psize, px, py;
    short int *pY, *pU, *pV;
!   unsigned char r,g,b;
    t_int helper;
  
    if(gem_image)
    {
!     if(gem_format == GL_RGBA)
!     {
!       // make pdp packet
!       psize = gem_xsize * gem_ysize;
!       m_packet0 = pdp_packet_new_image_YCrCb( gem_xsize, gem_ysize);
!       m_header = pdp_packet_header(m_packet0);
!       m_data = (short int *)pdp_packet_data(m_packet0);
  
!       pY = m_data;
!       pV = m_data+psize;
!       pU = m_data+psize+(psize>>2);
!   
!       for ( py=0; py<gem_ysize; py++)
!       {
!         for ( px=0; px<gem_xsize; px++)
          {
!           // the way to access the pixels: (C=chRed, chBlue, ...)
!           // image[Y * xsize * csize + X * csize + C]
!           helper = py*gem_xsize*gem_csize + px*gem_csize;
!           r=gem_image[helper+chRed];
!           g=gem_image[helper+chGreen];
!           b=gem_image[helper+chBlue];
!           
!           *(pY) = yuv_RGBtoY( (r<<16) +  (g<<8) +  b ) << 7;
!           *(pV) = ( yuv_RGBtoV( (r<<16) +  (g<<8) +  b ) - 128 ) << 8;
!           *(pU) = ( yuv_RGBtoU( (r<<16) +  (g<<8) +  b ) - 128 ) << 8;
!           pY++;
!           if ( (px%2==0) && (py%2==0) )
            {
!             pV++; pU++;
            }
          }
!       }
! 
!       pdp_packet_pass_if_valid(m_pdpoutlet, &m_packet0);
! 
!     }
!     else
!     {
!       post( "pix_2pdp: Sorry, Gem-input RGB only for now!" );
      }
    }
--- 45,137 ----
    t_int psize, px, py;
    short int *pY, *pU, *pV;
!   unsigned char g1,g2,g3,g4;
    t_int helper;
  
    if(gem_image)
    {
!     // make pdp packet
!     psize = gem_xsize * gem_ysize;
!     m_packet0 = pdp_packet_new_image_YCrCb( gem_xsize, gem_ysize);
!     m_header = pdp_packet_header(m_packet0);
!     m_data = (short int *)pdp_packet_data(m_packet0);
  
!     pY = m_data;
!     pV = m_data+psize;
!     pU = m_data+psize+(psize>>2);
!     
!     switch(gem_format)
!     {
!       // RGB
!       case GL_RGB:
!       case GL_RGBA:
!         for ( py=0; py<gem_ysize; py++)
          {
!           for ( px=0; px<gem_xsize; px++)
            {
!             // the way to access the pixels: (C=chRed, chBlue, ...)
!             // image[Y * xsize * csize + X * csize + C]
!             helper = py*gem_xsize*gem_csize + px*gem_csize;
!             g1=gem_image[helper+chRed];   // R
!             g2=gem_image[helper+chGreen]; // G
!             g3=gem_image[helper+chBlue];  // B
!             
!             *(pY) = yuv_RGBtoY( (g1<<16) +  (g2<<8) +  g3 ) << 7;
!             *(pV) = ( yuv_RGBtoV( (g1<<16) +  (g2<<8) +  g3 ) - 128 ) << 8;
!             *(pU) = ( yuv_RGBtoU( (g1<<16) +  (g2<<8) +  g3 ) - 128 ) << 8;
!             pY++;
!             if ( (px%2==0) && (py%2==0) )
!               pV++; pU++;
            }
          }
!         pdp_packet_pass_if_valid(m_pdpoutlet, &m_packet0);
!         break;
!         
!       // YUV
!       case GL_YUV422_GEM:
!         for ( py=0; py<gem_ysize; py++)
!         {
!           for ( px=0; px<gem_xsize; px++)
!           {
!             helper = py*gem_xsize*gem_csize + px*gem_csize;
!             g1=gem_image[helper+chU];  // U
!             g2=gem_image[helper+chY0]; // Y0
!             g3=gem_image[helper+chV];  // V
!             g4=gem_image[helper+chY1]; // Y1
!             
!             if(px%2==0)
!               *pY = g2 << 7;
!             else
!               *pY = g4 << 7;
!             pY++;
!             
!             *pU = (g1-128) << 8;
!             *pV = (g3-128) << 8;
!             if ( (px%2==0) && (py%2==0) )
!               pV++; pU++;
!           }
!         }
!         pdp_packet_pass_if_valid(m_pdpoutlet, &m_packet0);
!         break;
!       
!       // grey
!       case GL_LUMINANCE:
!         for ( py=0; py<gem_ysize; py++)
!         {
!           for ( px=0; px<gem_xsize; px++)
!           {
!             *pY = gem_image[py*gem_xsize*gem_csize + px*gem_csize] << 7;
!             pY++;
!             if ( (px%2==0) && (py%2==0) )
!             {
!               *pV++=128;
!               *pU++=128;
!             }
!           }
!         }
!         pdp_packet_pass_if_valid(m_pdpoutlet, &m_packet0);
!         break;
!         
!       default:
!         post( "pix_2pdp: Sorry, wrong input type!" );
      }
    }





More information about the Pd-cvs mailing list