From a8e7bc2c20f3d404ebc039f573843d8801c30eaa Mon Sep 17 00:00:00 2001 From: Georg Holzmann Date: Fri, 17 Jun 2005 13:45:22 +0000 Subject: added pix_2pdp svn path=/trunk/externals/gem2pdp/; revision=3202 --- pix_2pdp.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100755 pix_2pdp.cpp (limited to 'pix_2pdp.cpp') diff --git a/pix_2pdp.cpp b/pix_2pdp.cpp new file mode 100755 index 0000000..2fb8903 --- /dev/null +++ b/pix_2pdp.cpp @@ -0,0 +1,106 @@ +/* + * pix_2pdp : pix to pdp bridge + * + * Capture the contents of the Gem pix and transform it to a PDP Packet whenever a bang is received + * + * Based on code of gem2pdp by Yves Degoyon + * Many thanks to IOhannes M Zmölnig + * + * Copyright (c) 2005 Georg Holzmann + * + */ + +#include "pix_2pdp.h" +#include "yuv.h" + +CPPEXTERN_NEW(pix_2pdp) + +pix_2pdp::pix_2pdp(void) +{ + gem_image = NULL; + m_pdpoutlet = outlet_new(this->x_obj, &s_anything); +} + +pix_2pdp::~pix_2pdp() +{ + gem_image = NULL; + gem_xsize = 0; + gem_ysize = 0; + gem_csize = 0; +} + +// Image processing +void pix_2pdp::processImage(imageStruct &image) +{ + gem_image = image.data; + gem_xsize = image.xsize; + gem_ysize = image.ysize; + gem_csize = image.csize; + gem_format = image.format; +} + +// pdp processing +void pix_2pdp::bangMess() +{ + 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" ); + class_addmethod(classPtr, (t_method)&pix_2pdp::bangMessCallback, + gensym("bang"), A_NULL); +} + +void pix_2pdp::bangMessCallback(void *data) +{ + GetMyClass(data)->bangMess(); +} -- cgit v1.2.1