[PD-cvs] externals/gem2pdp help-pix_2pdp.pd, NONE, 1.1 pix_2pdp.cpp, NONE, 1.1 pix_2pdp.h, NONE, 1.1
Georg Holzmann
grholzi at users.sourceforge.net
Fri Jun 17 15:45:24 CEST 2005
- Previous message: [PD-cvs] externals/gem2pdp configure.ac, 1.5, 1.6 configure, 1.4, 1.5 gem2pdp.h, 1.1, 1.2 INSTALL, 1.1, 1.2 Makefile.in, 1.2, 1.3
- Next message: [PD-cvs] pd/src s_audio_pa.c, 1.4.4.7, 1.4.4.8 s_inter.c, 1.5.4.11, 1.5.4.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pure-data/externals/gem2pdp
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5514
Added Files:
help-pix_2pdp.pd pix_2pdp.cpp pix_2pdp.h
Log Message:
added pix_2pdp
--- NEW FILE: pix_2pdp.cpp ---
/*
* 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 <grh at mur.at>
*
*/
#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<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!" );
}
}
}
void pix_2pdp::obj_setupCallback(t_class *classPtr)
{
post( "pix_2pdp : a bridge between a Gem pix and PDP/PiDiP, Georg Holzmann 2005 <grh at mur.at>" );
class_addmethod(classPtr, (t_method)&pix_2pdp::bangMessCallback,
gensym("bang"), A_NULL);
}
void pix_2pdp::bangMessCallback(void *data)
{
GetMyClass(data)->bangMess();
}
--- NEW FILE: help-pix_2pdp.pd ---
#N canvas 140 53 889 703 10;
#X obj 92 298 gemwin;
#X obj 338 264 gemhead;
#X obj 151 557 pix_texture;
#X obj 151 589 rectangle 4 4;
#X obj 501 531 pdp_xv;
#X msg 546 478 create;
#X msg 546 502 destroy;
#X obj 338 398 pix_2pdp;
#X obj 338 341 t a b;
#X obj 338 307 pix_film;
#X floatatom 405 293 5 0 1000 0 - - -;
#X msg 405 237 set open \$1;
#X text 446 293 <- frame;
#X obj 405 214 openpanel;
#X obj 405 194 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 405 262 open /home/Georg/pd-cvs/gem/Gem/examples/data/homer.avi
;
#X msg 92 251 create \, 1;
#X msg 104 273 0 \, destroy;
#X text 90 229 Gem Control:;
#X text 313 223 Gem input:;
#X text 385 341 <- so you can trigger pdp automatically each frame
;
#X text 401 403 pdp outlet;
#X text 261 403 Gem outlet;
#X obj 151 528 spigot;
#X obj 188 508 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 210 514 chain to save CPU;
#X obj 368 369 spigot;
#X obj 419 370 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 441 370 <- turn on/off pdp processing;
#X text 210 499 cut Gem render-;
#X obj 500 578 pdp_rec~;
#X text 498 598 (record a gem-pix !!!);
#X text 45 321 (Gem rendering must be on \,;
#X text 47 335 but you can cut the Gem;
#X text 48 348 render-chain after pix_2pdp;
#X text 46 362 and hide the Gem-window;
#X text 46 376 to save CPU !);
#X text 264 667 =%)!(%= (c) Georg Holzmann <grh at mur.at> \, 2005 =%)!(%=
;
#X text 27 79 pix_2pdp captures the contents of a Gem pix and transforms
it to a PDP packet with almost no cpu power. So it's possible to convert
from Gem to PDP to Gem to PDP to ... if you use the Gem pix objects!
;
#X text 490 77 So what can you do with it?;
#X text 503 96 - use pix_video/pix_2pdp for firewire input in PDP;
#X text 503 111 - use pix_2pdp/pdp_rec~ to record Gem pixes;
#X text 503 126 - maybe switch between Gem and PDP all the time;
#X text 503 141 - ...;
#X text 395 25 pix_2pdp;
#X connect 1 0 9 0;
#X connect 2 0 3 0;
#X connect 5 0 4 0;
#X connect 6 0 4 0;
#X connect 7 0 23 0;
#X connect 7 1 4 0;
#X connect 7 1 30 0;
#X connect 8 0 7 0;
#X connect 8 1 26 0;
#X connect 9 0 8 0;
#X connect 10 0 9 1;
#X connect 11 0 15 0;
#X connect 13 0 11 0;
#X connect 14 0 13 0;
#X connect 15 0 9 0;
#X connect 16 0 0 0;
#X connect 17 0 0 0;
#X connect 23 0 2 0;
#X connect 24 0 23 1;
#X connect 26 0 7 0;
#X connect 27 0 26 1;
--- NEW FILE: pix_2pdp.h ---
/*
* 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 <grh at mur.at>
*
*/
#ifndef INCLUDE_PIX2PDP_H_
#define INCLUDE_PIX2PDP_H_
#include "Base/GemPixObj.h"
#include "pdp-light.h"
class GEM_EXTERN pix_2pdp : public GemPixObj
{
CPPEXTERN_HEADER(pix_2pdp, GemPixObj)
public:
// Constructor
pix_2pdp(void);
protected:
// Destructor
virtual ~pix_2pdp(void);
// Image processing
virtual void processImage(imageStruct &image);
// pdp processing
virtual void bangMess(void);
// the pixBlock with the current image
unsigned char *gem_image;
int gem_xsize;
int gem_ysize;
int gem_csize;
int gem_format;
// pdp data
t_outlet *m_pdpoutlet;
int m_packet0;
t_pdp *m_header;
short int *m_data;
private:
static void bangMessCallback(void *data);
};
#endif
- Previous message: [PD-cvs] externals/gem2pdp configure.ac, 1.5, 1.6 configure, 1.4, 1.5 gem2pdp.h, 1.1, 1.2 INSTALL, 1.1, 1.2 Makefile.in, 1.2, 1.3
- Next message: [PD-cvs] pd/src s_audio_pa.c, 1.4.4.7, 1.4.4.8 s_inter.c, 1.5.4.11, 1.5.4.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Pd-cvs
mailing list