aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorN.N. <sergi_ll@users.sourceforge.net>2009-03-19 21:39:18 +0000
committerN.N. <sergi_ll@users.sourceforge.net>2009-03-19 21:39:18 +0000
commit6f38a27d1c1410036a90d802327c15a7aeec00f6 (patch)
tree206f18b5649207db614ebc0f4bf0e666f3cb30e4
parent8f23f363ed0f4494366e148838cc48598cc843d4 (diff)
cols and rows messages added
svn path=/trunk/externals/pdvjtools/; revision=10880
-rw-r--r--videogrid/videogrid.cc217
1 files changed, 147 insertions, 70 deletions
diff --git a/videogrid/videogrid.cc b/videogrid/videogrid.cc
index ea2bf9a..a6555c1 100644
--- a/videogrid/videogrid.cc
+++ b/videogrid/videogrid.cc
@@ -1,6 +1,6 @@
extern "C"
-{
+{
/*
videogrid external for Puredata
Lluis Gomez i Bigorda :: lluis-at-hangar.org
@@ -27,21 +27,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <unistd.h>
#include <math.h>
-/*
- * incloure les definicions de variables i prototipus de dades i de funcions de puredata
+/*
+ * incloure les definicions de variables i prototipus de dades i de funcions de puredata
*/
#include "m_pd.h"
-/*
- * incloure estructures de dades i capceleres de funcions gàfiques bàsiques de pd
+/*
+ * incloure estructures de dades i capceleres de funcions gàfiques bàsiques de pd
*/
#include "g_canvas.h"
-/*
- * incloure estructures de dades i capceleres de funcions per traballar amb threads
+/*
+ * incloure estructures de dades i capceleres de funcions per traballar amb threads
*/
#include "pthread.h"
/* some linux distros need this to compile ffmpeg correctly as cpp */
-#define __STDC_CONSTANT_MACROS 1
+#define __STDC_CONSTANT_MACROS 1
/* ffmpeg includes */
#include <ffmpeg/avcodec.h>
@@ -141,7 +141,7 @@ int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int pos
int i, videoStream;
AVCodecContext *pCodecCtx;
AVCodec *pCodec;
- AVFrame *pFrame;
+ AVFrame *pFrame;
AVFrame *pFrameRGB;
AVPacket packet;
int frameFinished;
@@ -190,7 +190,7 @@ int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int pos
if(avcodec_open(pCodecCtx, pCodec)<0)
return -1; // Could not open codec
- // Hack to correct wrong frame rates that seem to be generated by some
+ // Hack to correct wrong frame rates that seem to be generated by some
// codecs
// if(pCodecCtx->frame_rate>1000 && pCodecCtx->frame_rate_base==1)
// pCodecCtx->frame_rate_base=1000;
@@ -219,15 +219,15 @@ int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int pos
if(packet.stream_index==videoStream)
{
// Decode video frame
- avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
+ avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
packet.data, packet.size);
// Did we get a video frame?
if(frameFinished)
{
// Convert the image from its native format to RGB
- //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
- // (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
+ //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
+ // (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
// pCodecCtx->height);
img_convert_ctx = sws_getContext( pCodecCtx->width, pCodecCtx->height,
pCodecCtx->pix_fmt,
@@ -253,15 +253,15 @@ int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int pos
if(packet.stream_index==videoStream)
{
// Decode video frame
- avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
+ avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
packet.data, packet.size);
// Did we get a video frame?
if(frameFinished)
{
// Convert the image from its native format to RGB
- //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
- // (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
+ //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
+ // (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
// pCodecCtx->height);
img_convert_ctx = sws_getContext( pCodecCtx->width, pCodecCtx->height,
pCodecCtx->pix_fmt,
@@ -312,7 +312,7 @@ int convertir_img(pathimage pathFitxer, tipus_format f, int W, int H, int posi){
unsigned char *qt_frame = NULL;
/* quicktime decoder */
quicktime_t *qt;
- /* quicktime color model */
+ /* quicktime color model */
int qt_cmodel;
int nN = posi;
@@ -329,39 +329,39 @@ int convertir_img(pathimage pathFitxer, tipus_format f, int W, int H, int posi){
/* post("videogrid: no video stream"); */
quicktime_close(qt);
return -1;
-
+
}
else if (!quicktime_supported_video(qt,0)) {
/* post("videogrid: unsupported video codec\n"); */
quicktime_close(qt);
return -1;
}
- else
+ else
{
qt_cmodel = BC_YUV420P;
x_vwidth = quicktime_video_width(qt,0);
x_vheight = quicktime_video_height(qt,0);
-
+
free(qt_frame);
qt_frame = (unsigned char*)malloc(x_vwidth*x_vheight*4);
-
+
int size = x_vwidth * x_vheight;
qt_rows[0] = &qt_frame[0];
qt_rows[2] = &qt_frame[size];
qt_rows[1] = &qt_frame[size + (size>>2)];
-
+
quicktime_set_cmodel(qt, qt_cmodel);
}
/* int length = quicktime_video_length(qt,0); */
/* int Vpos = quicktime_video_position(qt,0); */
lqt_decode_video(qt, qt_rows, 0);
-
+
switch(qt_cmodel){
case BC_YUV420P:
/* printf(" "); */
/* post("videogrid: qt colormodel : BC_YUV420P"); */
-
+
/* per a fer la miniatura
cada k colomnes pillem una
cada l files pillem una */
@@ -482,7 +482,7 @@ int desencuar (Cua *cua)
/* printf("Cua buida\a\n"); */
return 0;
}
-
+
}
/* funció que retorna si la cua és buida */
@@ -494,7 +494,7 @@ int cuaBuida(Cua *cua)
/* elimina el contingut de la cua */
void eliminarCua(Cua *cua)
{
- while (!cuaBuida(cua)) desencuar(cua);
+ while (!cuaBuida(cua)) desencuar(cua);
/* printf("Cua eliminada\n"); */
}
@@ -525,7 +525,7 @@ void escriuCua(Cua *cua)
actual = actual->seguent;
}while(actual);
post("]\n");
-
+
}
else
post("EMPTY: NO THUMBS INSIDE\n");
@@ -540,7 +540,7 @@ static int videogridcount = 0;
/* definició de la classe i la seva estructura de dades */
typedef struct _videogrid {
- t_object x_obj;
+ t_object x_obj;
/* declaració de la sortida de l'objecte */
t_outlet *x_sortida;
/* llista d'objectes gràfics */
@@ -721,6 +721,7 @@ void load_tk_procs () {
sys_gui("focus $id.1rangef.name\n");
sys_gui("}\n");
+ /*
sys_gui("proc table {w content args} {\n");
sys_gui("frame $w -bg black\n");
sys_gui("set r 0\n");
@@ -746,6 +747,7 @@ void load_tk_procs () {
sys_gui("}\n");
sys_gui("pack .tauler\n");
sys_gui("}\n");
+ */
}
/* calcula la posició x del tauler a partir de la posició de l'element de la cua (d'esquerra a dreta) */
@@ -785,7 +787,7 @@ void eliminar_imatges_temporals(int maxim){
int format_adequat_v(path nomF, t_symbol *format_list){
int retorn = 0;
-
+
path ig_path = "";
strcat(ig_path,nomF);
path fl;
@@ -855,14 +857,14 @@ void videogrid_afegir_imatge(t_videogrid *x, path entrada)
fferror=convertir_img_ff(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
}
/* post ("%d",fferror); */
- if (fferror>=0) {
+ if (fferror>=0) {
/* encua el nou node */
encuar(&x->x_cua, entrada);
/* si no és el primer element a encuar incrementem la posicio de la última imatge insertada */
if(numNodes(&x->x_cua) != 0) x->x_ultima_img ++;
- /*
- * si assoleix el maxim torna a començar,
- * inicialitzant la posició en el tauler de la última imatge insertada
+ /*
+ * si assoleix el maxim torna a començar,
+ * inicialitzant la posició en el tauler de la última imatge insertada
*/
if(x->x_ultima_img == maxim) x->x_ultima_img = 0;
@@ -870,11 +872,11 @@ void videogrid_afegir_imatge(t_videogrid *x, path entrada)
strcat(ig_path,nNstr);
strcat(ig_path,".");
strcat(ig_path,FORMAT_MINIATURA);
-
+
sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
- sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
+ sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
glist_getcanvas(x->x_glist),
- text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2),
+ text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2),
text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),
x,nN,x,nN);
if(nN == 0){
@@ -915,14 +917,14 @@ void videogrid_drawme(t_videogrid *x, t_glist *glist, int firsttime)
// videogrid_afegir_imatge(x,actual->pathFitxer);
convertir_img_ff(actual->pathFitxer,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
- sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
+ sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
glist_getcanvas(x->x_glist),text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),x,nN,x,nN);
actual = actual->seguent;
nN++;
}while(actual);
}
}
- else {
+ else {
sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n", glist_getcanvas(glist), x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
if(!cuaBuida(&x->x_cua))
{
@@ -934,13 +936,13 @@ void videogrid_drawme(t_videogrid *x, t_glist *glist, int firsttime)
text_xpix(&x->x_obj, x->x_glist) + getX(x,contador) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,contador) + (x->x_h_cell/2));
contador++;
}
-
+
/* char buf[800];
sprintf(buf, "pdtk_videogrid_table %%s %s %d %d\n", x->x_name->s_name, x->x_num_fil, x->x_num_col);
gfxstub_new(&x->x_obj.ob_pd, x, buf); */
}
if (x->x_pos_selected > -1){
- sys_vgui(".x%x.c coords %xGRASP %d %d %d %d\n", glist_getcanvas(glist), x,
+ sys_vgui(".x%x.c coords %xGRASP %d %d %d %d\n", glist_getcanvas(glist), x,
text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell);
}
@@ -999,7 +1001,7 @@ void videogrid_erase(t_videogrid* x,t_glist* glist, int toclear)
sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
}
/* v 0.2 -- elimina el marc de la casella seleccionada */
- if(x->x_pos_selected > -1){
+ if(x->x_pos_selected > -1){
sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(glist), x);
x->x_pos_selected = -1;
}
@@ -1031,7 +1033,7 @@ void videogrid_putvideo(t_videogrid *x, t_symbol *entrada)
/* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideodir +string( com a paràmetre */
void *videogrid_putvideodir_thread(void *z)
-{
+{
t_videogrid *x = (t_videogrid *)z;
DIR *dirp;
struct dirent * direntp;
@@ -1045,9 +1047,9 @@ void *videogrid_putvideodir_thread(void *z)
maxim = x->x_num_fil * x->x_num_col;
strcpy(directoriAnterior, x->x_dir_actual);
strcpy(x->x_dir_actual, x->x_dir_canvi);
- /*
- * si es el mateix directori entrat l'ultim busca la ultima imatge afegida
- * per a seguir a encuant a partir d'ella en endavant
+ /*
+ * si es el mateix directori entrat l'ultim busca la ultima imatge afegida
+ * per a seguir a encuant a partir d'ella en endavant
*/
if(strcmp(directoriAnterior, x->x_dir_actual) == 0){
/* post("Videogrid: Repeteix directori %s\n", x->x_dir_actual); */
@@ -1086,7 +1088,7 @@ void *videogrid_putvideodir_thread(void *z)
/* incrementa la posició en el directori */
numPosDir++;
/* si el nombre de nodes encuats per aquest directori no supera el màxim enca el nou node */
- if(numEncuats < maxim){
+ if(numEncuats < maxim){
/* post("s'encua la imatge %s\n", direntp->d_name); */
/* concatena el path i el nom de la imatge */
strcpy(nomImatge,direntp->d_name);
@@ -1121,9 +1123,9 @@ void videogrid_putvideodir(t_videogrid *x, t_symbol *entrada)
pthread_t unthread;
pthread_attr_t unatribut;
pthread_attr_init( &unatribut );
-
+
strcpy(x->x_dir_canvi,entrada->s_name);
-
+
// ---------------- THREAD CREAT -------------------------
pthread_mutex_init(&x->x_lock, NULL);
// int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
@@ -1191,19 +1193,90 @@ void videogrid_seek(t_videogrid *x, t_floatarg postauler)
}
}
+/* v 0.2.3 -- mètode de la classe que modifica el nombre de files del tauler [rows N( */
+void videogrid_rows(t_videogrid *x, t_floatarg nfil)
+{
+ /* post("rows a %d\n",postauler); */
+ int maxim, maxdigit, ncol;
+ /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
+ maxdigit = pow(10,BYTES_NUM_TEMP);
+ ncol = x->x_num_col;
+ if((nfil*ncol) <= maxdigit){
+ if((nfil*ncol) > 0){
+ x->x_num_fil = nfil;
+ /* x->x_num_col = ncol; */
+ }else{
+ post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
+ }
+ }else{
+ post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
+ }
+ /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
+ /* elimina els nodes no representables amb la nova configuració */
+ maxim = x->x_num_fil * x->x_num_col;
+ int extret;
+ videogrid_erase(x, x->x_glist,0);
+ /* si hi ha més nodes a la cua que el maxim */
+ while((numNodes(&x->x_cua)) > maxim){
+ /* desencuem */
+ extret = desencuar(&x->x_cua);
+ }
+ /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
+ x->x_ultima_img = numNodes(&x->x_cua) - 1;
+ if (x->x_ultima_img < 0) x->x_ultima_img = 0;
+ x->x_tauler_primer = x->x_cua.davanter;
+ videogrid_drawme(x, x->x_glist, 1);
+}
+
+/* v 0.2.3 -- mètode de la classe que modifica el nombre de columnes del tauler [cols N( */
+void videogrid_cols(t_videogrid *x, t_floatarg ncol)
+{
+ /* post("rows a %d\n",postauler); */
+ /* post("rows a %d\n",postauler); */
+ int maxim, maxdigit, nfil;
+ /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
+ maxdigit = pow(10,BYTES_NUM_TEMP);
+ nfil = x->x_num_fil;
+ if((nfil*ncol) <= maxdigit){
+ if((nfil*ncol) > 0){
+ /* x->x_num_fil = nfil; */
+ x->x_num_col = ncol;
+ }else{
+ post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
+ }
+ }else{
+ post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
+ }
+ /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
+ /* elimina els nodes no representables amb la nova configuració */
+ maxim = x->x_num_fil * x->x_num_col;
+ int extret;
+ videogrid_erase(x, x->x_glist,0);
+ /* si hi ha més nodes a la cua que el maxim */
+ while((numNodes(&x->x_cua)) > maxim){
+ /* desencuem */
+ extret = desencuar(&x->x_cua);
+ }
+ /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
+ x->x_ultima_img = numNodes(&x->x_cua) - 1;
+ if (x->x_ultima_img < 0) x->x_ultima_img = 0;
+ x->x_tauler_primer = x->x_cua.davanter;
+ videogrid_drawme(x, x->x_glist, 1);
+}
+
static int videogrid_click(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit)
{
t_videogrid* x = (t_videogrid *)z;
int x_pos = xpix - text_xpix(&x->x_obj, x->x_glist);
int y_pos = ypix - text_ypix(&x->x_obj, x->x_glist);
int xa, ya, postauler;
- if (doit)
+ if (doit)
{
- /* obtenir la posicio en el tauler */
+ /* obtenir la posicio en el tauler */
// -- v 0.2 -- midoficacio pel gruix del marc //
xa = ((x_pos) / (x->x_w_cell + GRUIX + 1));
ya = ((y_pos) / (x->x_h_cell + GRUIX + 1)) * x->x_num_col;
- postauler = ya + xa;
+ postauler = ya + xa;
// -- v 0.2 -- seleciona la casella disparant el path //
videogrid_seek(x, postauler);
}
@@ -1300,8 +1373,8 @@ static void videogrid_save(t_gobj *z, t_binbuf *b)
Node *actual;
int maxim = x->x_num_fil * x->x_num_col;
int contador = x->x_ultima_img + 1;
-
- if (contador > maxim) {
+
+ if (contador > maxim) {
contador = 0;
}
/* printf("\n contador %d i maxim %d i laultimaPOS %d \n", contador, maxim, x->x_ultima_img); */
@@ -1312,7 +1385,7 @@ static void videogrid_save(t_gobj *z, t_binbuf *b)
*/
/* prenem el davanter de la cua */
actual=x->x_cua.davanter;
-
+
while(contador < numNodes(&x->x_cua)){
/* afegim els paths del davanter fins a l'ultim node al tauler */
strcat(cadenaPaths, actual->pathFitxer);
@@ -1376,7 +1449,7 @@ static void videogrid_dialog(t_videogrid *x, t_symbol *s, int argc, t_atom *argv
switch (argc) {
case 3:
/* versio inicial */
- if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT)
+ if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT)
{
post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
return;
@@ -1387,7 +1460,7 @@ static void videogrid_dialog(t_videogrid *x, t_symbol *s, int argc, t_atom *argv
break;
case 5:
/* versio 0.1 */
- if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL)
+ if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL)
{
post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
return;
@@ -1420,7 +1493,7 @@ static void videogrid_dialog(t_videogrid *x, t_symbol *s, int argc, t_atom *argv
x->x_h_cell = 40;
case 7:
/* versio 0.2.1 */
- if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL)
+ if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL)
{
post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
return;
@@ -1434,7 +1507,7 @@ static void videogrid_dialog(t_videogrid *x, t_symbol *s, int argc, t_atom *argv
x->x_format_list = argv[6].a_w.w_symbol;
x->x_w_cell = 60;
x->x_h_cell = 40;
- break;
+ break;
case 9:
/* versio 0.2.2 */
@@ -1567,7 +1640,7 @@ static void *videogrid_new(t_symbol* name, int argc, t_atom *argv)
x->x_w_cell = 60;
x->x_h_cell = 40;
break;
-
+
case 7:
/* versio 0.2.1 */
x->x_num_fil = (int)atom_getintarg(1, argc, argv);
@@ -1621,7 +1694,7 @@ static void *videogrid_new(t_symbol* name, int argc, t_atom *argv)
// -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
// -- imagegrid_afegir_imatge(x,tt->s_name); //
}
-
+
token = strtok(cadenaPaths,"|");
while(token){
tt = gensym(token);
@@ -1632,7 +1705,7 @@ static void *videogrid_new(t_symbol* name, int argc, t_atom *argv)
free(cadenaPaths);
*/
break;
-
+
default:
/* crea un objecte nou per defecte */
/* post("NEW imagegrid created.\n"); */
@@ -1649,9 +1722,9 @@ static void *videogrid_new(t_symbol* name, int argc, t_atom *argv)
x->x_h_cell = 40;
break;
}
-/*
+/*
* printf("S'ha instanciat un videogrid anomenat %s amb les caracteristiques seguents:",x->x_name->s_name);
- * printf("Nombre de files %d - Nombre de columnes: %d", x->x_num_fil, x->x_num_col);
+ * printf("Nombre de files %d - Nombre de columnes: %d", x->x_num_fil, x->x_num_col);
*/
return (x);
@@ -1664,14 +1737,14 @@ static void videogrid_destroy(t_videogrid *x){
}
/* generacio d'una nova classe */
-/* al carregar la nova llibreria my_lib pd intenta cridar la funció my_lib_setup */
+/* al carregar la nova llibreria my_lib pd intenta cridar la funció my_lib_setup */
/* aquesta crea la nova classe i les seves propietats només un sol cop */
void videogrid_setup(void)
{
load_tk_procs();
post("videogrid: version 0.2.1");
- post("written by Sergi Lario (slario@gmail.com) & Lluis Gomez i Bigorda (lluis@artefacte.org)");
+ post("written by Sergi Lario (slario@gmail.com) & Lluis Gomez i Bigorda (lluis@artefacte.org)");
videogrid_class = class_new(gensym("videogrid"),
(t_newmethod)videogrid_new,
@@ -1681,7 +1754,7 @@ void videogrid_setup(void)
A_GIMME,
0);
-/*
+/*
* class_new crea la nova classe retornant un punter al seu prototipus,
* el primer argument es el nom simbolic de la classe,
* el segon i tercer corresponen al constructor i destructor de la classe respectivament,
@@ -1689,7 +1762,7 @@ void videogrid_setup(void)
* el destructor allibera la memoria reservada al destruir l'objecte per qualsevol causa)
* el quart correspon a la mida de l'estructura de dades, per tal de poder reservar la memoria necessària,
* el cinquè influeix en el mòde de representació gràfica del objectes. Per defecte CLASS_DEFAULT o '0',
- * la resta d'arguments defineixen els arguments de l'objecte i el seu tipus, la llista acaba amb 0
+ * la resta d'arguments defineixen els arguments de l'objecte i el seu tipus, la llista acaba amb 0
*/
class_addbang(videogrid_class, videogrid_bang);
@@ -1697,17 +1770,21 @@ void videogrid_setup(void)
class_addmethod(videogrid_class, (t_method)videogrid_putvideo,gensym("putvideo"), A_DEFSYMBOL, 0);
class_addmethod(videogrid_class, (t_method)videogrid_putvideodir,gensym("putvideodir"), A_DEFSYMBOL, 0);
-
+
class_addmethod(videogrid_class, (t_method)videogrid_dialog, gensym("dialog"), A_GIMME, 0);
class_addmethod(videogrid_class, (t_method)videogrid_click, gensym("click"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
class_addmethod(videogrid_class, (t_method)videogrid_clear, gensym("clear"), A_GIMME, 0);
-
+
class_addmethod(videogrid_class, (t_method)videogrid_seek, gensym("seek"), A_FLOAT, 0);
+ class_addmethod(videogrid_class, (t_method)videogrid_rows, gensym("rows"), A_FLOAT, 0);
+
+ class_addmethod(videogrid_class, (t_method)videogrid_cols, gensym("cols"), A_FLOAT, 0);
+
/* inicia el comportament de videogrid */
-
+
videogrid_setwidget();
#if PD_MINOR_VERSION >= 37