aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Tittle <tigital@users.sourceforge.net>2005-04-14 16:03:28 +0000
committerJamie Tittle <tigital@users.sourceforge.net>2005-04-14 16:03:28 +0000
commit0eab96abeebc4ef6983d3e25fb195fcd277d9af8 (patch)
tree489160142b4b799c90626384ef2a01208409c21e
parentcfdb61a896ce0d933d0ea6f218c988520d6de8f5 (diff)
forgot pthread_mutex_lock() (oops), tightened screws (cleanup), some comments
svn path=/trunk/externals/gem2pdp/; revision=2766
-rw-r--r--pdp2gem.cpp141
1 files 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<m_ysize; py++)
- {
- for ( px=0; px<m_xsize; px++)
- {
- cpt=((m_ysize-py)*m_xsize+px)*3;
- y = *(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<m_ysize; py++)
- {
- for ( px=0; px<m_xsize; px++)
- {
- cpt=((m_ysize-py)*m_xsize+px)*4;
- y = *(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();
}