From 0eab96abeebc4ef6983d3e25fb195fcd277d9af8 Mon Sep 17 00:00:00 2001 From: Jamie Tittle Date: Thu, 14 Apr 2005 16:03:28 +0000 Subject: forgot pthread_mutex_lock() (oops), tightened screws (cleanup), some comments svn path=/trunk/externals/gem2pdp/; revision=2766 --- pdp2gem.cpp | 141 +++++++++++++----------------------------------------------- 1 file changed, 30 insertions(+), 111 deletions(-) diff --git a/pdp2gem.cpp b/pdp2gem.cpp index 90b66d5..c1ca999 100644 --- a/pdp2gem.cpp +++ b/pdp2gem.cpp @@ -15,7 +15,10 @@ CPPEXTERN_NEW_WITH_ONE_ARG(pdp2gem, t_symbol *, A_DEFSYM) pdp2gem :: pdp2gem(t_symbol *colorspace) + : m_colorspace(GL_YUV422_GEM) { + // csMess allows us to select what colorspace to convert + // the YV12 pixels into while handing it over to GEM csMess(colorspace->s_name); // initialize the pix block data @@ -31,7 +34,7 @@ pdp2gem :: pdp2gem(t_symbol *colorspace) m_csize = 3; }else if ( m_colorspace == GL_YUV422_GEM ){ m_pixBlock.image.csize = 2; - m_pixBlock.image.format = GL_YCBCR_422_GEM; + m_pixBlock.image.format = GL_YUV422_GEM; #ifdef __APPLE__ m_pixBlock.image.type = GL_UNSIGNED_SHORT_8_8_REV_APPLE; #else @@ -147,7 +150,7 @@ void pdp2gem :: pdpMess(t_symbol *action, int pcktno) if ( PDP_IMAGE == m_header->type ) { if (pdp_packet_header(m_packet0)->info.image.encoding == PDP_IMAGE_YV12 - && (m_colorspace == GL_RGB || m_colorspace == GL_BGR_EXT) ) + && (m_colorspace == GL_RGB || m_colorspace == GL_BGR_EXT) ) { if ( ( m_xsize != (int)m_header->info.image.width ) || ( m_ysize != (int)m_header->info.image.height ) ) @@ -157,52 +160,23 @@ void pdp2gem :: pdpMess(t_symbol *action, int pcktno) createBuffer(); } m_pdpdata = (short int *)pdp_packet_data(m_packet0); -#if 0 - psize = m_xsize*m_ysize; - pY = m_pdpdata; - pV = m_pdpdata+psize; - pU = m_pdpdata+psize+(psize>>2); - - // lock mutex - pthread_mutex_lock(m_mutex); - - // copy image data - for ( py=0; py>7; - v = (*(pV)>>8)+128; - u = (*(pU)>>8)+128; -#ifdef __APPLE__ - m_data[cpt++] = yuv_YUVtoB( y, u, v ); - m_data[cpt++] = yuv_YUVtoG( y, u, v ); - m_data[cpt] = yuv_YUVtoR( y, u, v ); -#else - m_data[cpt++] = yuv_YUVtoR( y, u, v ); - m_data[cpt++] = yuv_YUVtoG( y, u, v ); - m_data[cpt] = yuv_YUVtoB( y, u, v ); -#endif - pY++; - if ( (px%2==0) && (py%2==0) ) - { - pV++; pU++; - } - } - } -#else + + // lock mutex + pthread_mutex_lock(m_mutex); + + // convert pixels from yv12 to RGB/BGR m_pixBlock.image.fromYV12(m_pdpdata); -#endif + // unlock mutex pthread_mutex_unlock(m_mutex); // free PDP packet pdp_packet_mark_unused(m_packet0); m_packet0 = -1; - } else if (pdp_packet_header(m_packet0)->info.image.encoding == PDP_IMAGE_YV12 - && (m_colorspace == GL_RGBA || m_colorspace == GL_BGRA_EXT) ) - { + + } else if (pdp_packet_header(m_packet0)->info.image.encoding == PDP_IMAGE_YV12 + && (m_colorspace == GL_RGBA || m_colorspace == GL_BGRA_EXT) ) + { if ( ( m_xsize != (int)m_header->info.image.width ) || ( m_ysize != (int)m_header->info.image.height ) ) { @@ -211,46 +185,23 @@ void pdp2gem :: pdpMess(t_symbol *action, int pcktno) createBuffer(); } m_pdpdata = (short int *)pdp_packet_data(m_packet0); -#if 0 - psize = m_xsize*m_ysize; - pY = m_pdpdata; - pV = m_pdpdata+psize; - pU = m_pdpdata+psize+(psize>>2); // lock mutex pthread_mutex_lock(m_mutex); - - // copy image data - for ( py=0; py>7; - v = (*(pV)>>8)+128; - u = (*(pU)>>8)+128; - m_data[cpt++] = yuv_YUVtoR( y, u, v ); - m_data[cpt++] = yuv_YUVtoG( y, u, v ); - m_data[cpt] = yuv_YUVtoB( y, u, v ); - pY++; - if ( (px%2==0) && (py%2==0) ) - { - pV++; pU++; - } - } - } -#else + + // convert pixels from yv12 to RGBA/BGRA m_pixBlock.image.fromYV12(m_pdpdata); -#endif + // unlock mutex pthread_mutex_unlock(m_mutex); // free PDP packet pdp_packet_mark_unused(m_packet0); m_packet0 = -1; - } else if (pdp_packet_header(m_packet0)->info.image.encoding == PDP_IMAGE_YV12 - && m_colorspace == GL_YCBCR_422_GEM) - { + + } else if (pdp_packet_header(m_packet0)->info.image.encoding == PDP_IMAGE_YV12 + && m_colorspace == GL_YUV422_GEM) + { if ( ( m_xsize != (int)m_header->info.image.width ) || ( m_ysize != (int)m_header->info.image.height ) ) { @@ -259,45 +210,13 @@ void pdp2gem :: pdpMess(t_symbol *action, int pcktno) createBuffer(); } m_pdpdata = (short int *)pdp_packet_data(m_packet0); -#if 0 - psize = m_xsize*m_ysize; - pY = m_pdpdata; - pY2= m_pdpdata+m_xsize; - pV = m_pdpdata+psize; - pU = m_pdpdata+psize+(psize>>2); - unsigned char *pixels1 = m_data; - unsigned char *pixels2 = m_data + m_xsize * 2; - short *py1 = pY; - short *py2 = pY+m_xsize; // plane_1 is luma - short *pu = pU; - short *pv = pV; - int row = m_ysize>>1; - int cols = m_xsize>>1; - unsigned char u,v; - - // lock mutex - pthread_mutex_lock(m_mutex); - // copy image data - while(row--){ - int col=cols; - while(col--){ - u=((*pu++)>>8)+128; v=((*pv++)>>8)+128; - *pixels1++=u; - *pixels1++=(*py1++)>>7; - *pixels1++=v; - *pixels1++=(*py1++)>>7; - *pixels2++=u; - *pixels2++=(*py2++)>>7; - *pixels2++=v; - *pixels2++=(*py2++)>>7; - } - pixels1+= m_xsize*m_csize; pixels2+= m_xsize*m_csize; - py1+=m_xsize*1; py2+=m_xsize*1; - } - #else + // lock mutex + pthread_mutex_lock(m_mutex); + + // convert pixels from yv12 to uyvy m_pixBlock.image.fromYV12(m_pdpdata); - #endif + // unlock mutex pthread_mutex_unlock(m_mutex); @@ -345,7 +264,7 @@ void pdp2gem :: postrender(GemState *state) void pdp2gem :: csMess(char* format) { if (!strcmp(format, "YUV")){ - m_colorspace = GL_YCBCR_422_GEM; + m_colorspace = GL_YUV422_GEM; post("pdp2gem: colorspace is YUV %d",m_colorspace); m_csize = 2; m_format = GL_YUV422_GEM; @@ -385,10 +304,10 @@ void pdp2gem :: csMess(char* format) return; } else { - post("pdp2gem: colorspace is unknown %d",m_colorspace); + //post("pdp2gem: colorspace is unknown %d",m_colorspace); post("pdp2gem: using default colorspace: YUV"); m_csize = 2; - m_colorspace = GL_YCBCR_422_GEM; + m_colorspace = GL_YUV422_GEM; m_format = GL_YUV422_GEM; createBuffer(); } -- cgit v1.2.1