/* * 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 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" ); class_addmethod(classPtr, (t_method)&pix_2pdp::bangMessCallback, gensym("bang"), A_NULL); } void pix_2pdp::bangMessCallback(void *data) { GetMyClass(data)->bangMess(); }