[PD-cvs] externals/pidip/modules pdp_fqt.c,1.1,1.2

sevyves at users.sourceforge.net sevyves at users.sourceforge.net
Fri Oct 24 03:42:10 CEST 2003


Update of /cvsroot/pure-data/externals/pidip/modules
In directory sc8-pr-cvs1:/tmp/cvs-serv29310

Modified Files:
	pdp_fqt.c 
Log Message:
Updated for PiDiP 0.12.10

Index: pdp_fqt.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_fqt.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** pdp_fqt.c	23 Oct 2003 17:12:27 -0000	1.1
--- pdp_fqt.c	24 Oct 2003 01:42:08 -0000	1.2
***************
*** 23,34 ****
  #include "pdp.h"
  #include "pdp_llconv.h"
  #include <quicktime/lqt.h>
  #include <quicktime/colormodels.h>
  
- typedef struct pdp_fqt_data
- {
-     short int gain[4];
- } t_pdp_fqt_data;
- 
  typedef struct pdp_fqt_struct
  {
--- 23,31 ----
  #include "pdp.h"
  #include "pdp_llconv.h"
+ #include "time.h"
+ #include "sys/time.h"
  #include <quicktime/lqt.h>
  #include <quicktime/colormodels.h>
  
  typedef struct pdp_fqt_struct
  {
***************
*** 37,50 ****
  
      t_outlet *x_outlet0;
!     t_outlet *x_outlet1;
!     t_outlet *x_outlet2;
  
      int packet0;
      bool initialized;
  
!     unsigned int x_vwidth;
!     unsigned int x_vheight;
! 
!     bool loop;
  
      unsigned char * qt_rows[3];
--- 34,52 ----
  
      t_outlet *x_outlet0;
!     t_outlet *x_curframe;
!     t_outlet *x_nbframes;
!     t_outlet *x_framerate;
  
      int packet0;
      bool initialized;
  
!     t_int x_vwidth;
!     t_int x_vheight;
!     t_int x_size;
!     t_int x_fsize; // frames size
!     t_int x_length;
!     t_int x_current_frame;
!     t_int x_cursec;
!     t_int x_framescount;
  
      unsigned char * qt_rows[3];
***************
*** 54,58 ****
      int qt_cmodel;
  
!     t_pdp_fqt_data *state_data;
  
  } t_pdp_fqt;
--- 56,61 ----
      int qt_cmodel;
  
!     unsigned int** x_frames;
!     t_int* x_fsizes;
  
  } t_pdp_fqt;
***************
*** 62,68 ****
  static void pdp_fqt_close(t_pdp_fqt *x)
  {
      if (x->initialized){
  	quicktime_close(x->qt);
! 	free(x->qt_frame);
  	x->initialized = false;
      }
--- 65,78 ----
  static void pdp_fqt_close(t_pdp_fqt *x)
  {
+   t_int fi;
+ 
      if (x->initialized){
  	quicktime_close(x->qt);
! 	if ( x->qt_frame ) freebytes(x->qt_frame, x->x_size*3/2);
!         for ( fi=0; fi<x->x_length; fi++ )
!         {
!           if ( x->x_frames[fi] ) freebytes( x->x_frames[fi], x->x_fsizes[fi] );
!         }
!         if ( x->x_frames ) freebytes( x->x_frames, x->x_length*sizeof(unsigned int*) );
  	x->initialized = false;
      }
***************
*** 72,76 ****
  static void pdp_fqt_open(t_pdp_fqt *x, t_symbol *name)
  {
!     unsigned int size;
  
      post("pdp_fqt: opening %s", name->s_name);
--- 82,86 ----
  static void pdp_fqt_open(t_pdp_fqt *x, t_symbol *name)
  {
!   t_int fi;
  
      post("pdp_fqt: opening %s", name->s_name);
***************
*** 78,82 ****
      pdp_fqt_close(x);
  
!     x->qt = quicktime_open(name->s_name, 1, 0);
  
      if (!(x->qt)){
--- 88,92 ----
      pdp_fqt_close(x);
  
!     x->qt = quicktime_open(name->s_name, 1, 0); // read=yes, write=no 
  
      if (!(x->qt)){
***************
*** 104,118 ****
  	x->x_vwidth  = quicktime_video_width(x->qt,0);
  	x->x_vheight = quicktime_video_height(x->qt,0);
! 	x->qt_frame = (unsigned char*)malloc(x->x_vwidth*x->x_vheight*4);
! 	size = x->x_vwidth * x->x_vheight;
  	x->qt_rows[0] = &x->qt_frame[0];
! 	x->qt_rows[2] = &x->qt_frame[size];
! 	x->qt_rows[1] = &x->qt_frame[size + (size>>2)];
      
  	quicktime_set_cmodel(x->qt, x->qt_cmodel);
  	x->initialized = true;
! 	outlet_float(x->x_outlet2, (float)quicktime_video_length(x->qt,0));
  
      }
  }
  
--- 114,173 ----
  	x->x_vwidth  = quicktime_video_width(x->qt,0);
  	x->x_vheight = quicktime_video_height(x->qt,0);
! 	x->x_size = x->x_vwidth * x->x_vheight;
! 	x->qt_frame = (unsigned char*)getbytes(x->x_size*3/2);
  	x->qt_rows[0] = &x->qt_frame[0];
! 	x->qt_rows[2] = &x->qt_frame[x->x_size];
! 	x->qt_rows[1] = &x->qt_frame[x->x_size + (x->x_size>>2)];
      
  	quicktime_set_cmodel(x->qt, x->qt_cmodel);
  	x->initialized = true;
!         x->x_length = quicktime_video_length(x->qt,0);
! 	outlet_float(x->x_nbframes, (float)x->x_length);
  
      }
+ 
+     // read all frames
+     x->x_current_frame = 0;
+     x->x_frames = (unsigned int**) getbytes( x->x_length*sizeof(unsigned int*) );
+     x->x_fsizes = (t_int*) getbytes( x->x_length*sizeof(t_int) );
+     x->x_fsize = 0;
+     if ( !x->x_frames )
+     {
+       post("pdp_fqt: couldn't allocate memory for frames" );
+       quicktime_close(x->qt);
+       x->initialized = false;
+       return;
+     }
+ 
+     for ( fi=0; fi<x->x_length; fi++ )
+     {
+        x->x_fsizes[fi] = ((x->x_size)+(x->x_size>>1))<<1;
+        x->x_fsize += x->x_fsizes[fi];
+        x->x_frames[fi] = (unsigned int*) getbytes( x->x_fsizes[fi] );
+        if ( !x->x_frames[fi] )
+        {
+          post("pdp_fqt: couldn't allocate memory for frames" );
+          quicktime_close(x->qt);
+          x->initialized = false;
+          return;
+        }
+ 
+        lqt_decode_video(x->qt, x->qt_rows, 0);
+ 
+        switch(x->qt_cmodel){
+        case BC_YUV420P:
+            pdp_llconv(x->qt_frame, RIF_YVU__P411_U8, x->x_frames[fi], RIF_YVU__P411_S16, 
+                             x->x_vwidth, x->x_vheight);
+            break;
+ 
+        default:
+            post("pdp_fqt : error on decode: unkown colour model");
+            break;
+        }
+     
+     }
+ 
+     post("pdp_fqt: allocated memory for %d frames (size=%db %dM)", 
+                    x->x_length, x->x_fsize, x->x_fsize/(1024*1024) );
  }
  
***************
*** 120,129 ****
  static void pdp_fqt_bang(t_pdp_fqt *x)
  {
!   unsigned int w, h, nbpixels, packet_size;
!   int object, length, pos, i, j;
    short int* data;
    t_pdp* header;
! 
!   static short int gain[4] = {0x7fff, 0x7fff, 0x7fff, 0x7fff};
  
      if (!(x->initialized)){
--- 175,182 ----
  static void pdp_fqt_bang(t_pdp_fqt *x)
  {
!   int object;
    short int* data;
    t_pdp* header;
!   struct timeval etime;
  
      if (!(x->initialized)){
***************
*** 132,140 ****
      }
  
-     w = x->x_vwidth;
-     h = x->x_vheight;
-     nbpixels = w * h;
-     packet_size = (nbpixels + (nbpixels >> 1)) << 1;
- 
      object = pdp_packet_new_image_YCrCb( x->x_vwidth, x->x_vheight );
      header = pdp_packet_header(object);
--- 185,188 ----
***************
*** 142,187 ****
  
      header->info.image.encoding = PDP_IMAGE_YV12;
!     header->info.image.width = w;
!     header->info.image.height = h;
! 
!     length = quicktime_video_length(x->qt,0);
!     pos = quicktime_video_position(x->qt,0);
!     // post("pdp_fqt : video position : %d length =%d", pos, length );
! 
!     if (pos >= length){
! 	pos = (x->loop) ? 0 : length - 1;
!         // post("pdp_fqt : setting video position to %d", pos);
! 	quicktime_set_video_position(x->qt, pos, 0);
!     }
! 
!     lqt_decode_video(x->qt, x->qt_rows, 0);
! 
!     switch(x->qt_cmodel){
!     case BC_YUV420P:
!         pdp_llconv(x->qt_frame, RIF_YVU__P411_U8, data, RIF_YVU__P411_S16, x->x_vwidth, x->x_vheight);
!         break;
  
!     case BC_YUV422:
!         pdp_llconv(x->qt_frame, RIF_YUYV_P____U8, data, RIF_YVU__P411_S16, x->x_vwidth, x->x_vheight);
!         break;
  
!     case BC_RGB888:
!         pdp_llconv(x->qt_frame, RIF_RGB__P____U8, data, RIF_YVU__P411_S16, x->x_vwidth, x->x_vheight);
!         break;
  
!     default:
!         post("pdp_fqt : error on decode: unkown colour model");
!         break;
      }
!     
!     outlet_float(x->x_outlet1, (float)pos);
!     pdp_packet_pass_if_valid(x->x_outlet0, &object);
  
! }
  
- static void pdp_fqt_loop(t_pdp_fqt *x, t_floatarg loop)
- {
-     int loopi = (int)loop;
-     x->loop = !(loopi == 0);
  }
  
--- 190,216 ----
  
      header->info.image.encoding = PDP_IMAGE_YV12;
!     header->info.image.width = x->x_vwidth;
!     header->info.image.height = x->x_vheight;
  
!     x->x_current_frame = ( x->x_current_frame + 1 ) % x->x_length;
!     // post( "pdp_fqt : current frame : %d", x->x_current_frame );
  
!     memcpy( data, x->x_frames[x->x_current_frame], x->x_fsizes[x->x_current_frame] );
  
!     if ( gettimeofday(&etime, NULL) == -1)
!     {
!         post("pdp_fcqt : could not get time" );
      }
!     if ( etime.tv_sec != x->x_cursec )
!     {
!        x->x_cursec = etime.tv_sec;
!        outlet_float(x->x_framerate, (float)x->x_framescount);
!        x->x_framescount = 0;
!     }
!     x->x_framescount++;
  
!     outlet_float(x->x_curframe, (float)x->x_current_frame);
!     pdp_packet_pass_if_valid(x->x_outlet0, &object);
  
  }
  
***************
*** 209,231 ****
  }
  
- static void pdp_fqt_gain(t_pdp_fqt *x, t_floatarg f)
- {
-     int i;
-     short int g;
-     float bound = (float)0x7fff;
- 
-     f *= (float)0x7fff;
- 
-     f = (f>bound) ? bound : f;
-     f = (f<-bound) ? -bound : f;
- 
-     g = (short int)f;
- 
-     for (i=0; i<4; i++) x->state_data->gain[i] = g;
- }
- 
  static void pdp_fqt_free(t_pdp_fqt *x)
  {
-     free (x->state_data);
      pdp_fqt_close(x);
  }
--- 238,243 ----
***************
*** 238,246 ****
  
      inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("frame_cold"));
-     inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("gain"));
  
      x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
!     x->x_outlet1 = outlet_new(&x->x_obj, &s_float);
!     x->x_outlet2 = outlet_new(&x->x_obj, &s_float);
  
      x->packet0 = -1;
--- 250,258 ----
  
      inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("frame_cold"));
  
      x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
!     x->x_curframe = outlet_new(&x->x_obj, &s_float);
!     x->x_nbframes = outlet_new(&x->x_obj, &s_float);
!     x->x_framerate = outlet_new(&x->x_obj, &s_float);
  
      x->packet0 = -1;
***************
*** 248,256 ****
      x->initialized = false;
  
-     x->loop = false;
- 
-     x->state_data = (t_pdp_fqt_data *)malloc(sizeof(t_pdp_fqt_data));
-     pdp_fqt_gain(x, 1.0f);
- 
      return (void *)x;
  }
--- 260,263 ----
***************
*** 270,277 ****
      class_addmethod(pdp_fqt_class, (t_method)pdp_fqt_close, gensym("close"), A_NULL);
      class_addmethod(pdp_fqt_class, (t_method)pdp_fqt_open, gensym("open"), A_SYMBOL, A_NULL);
-     class_addmethod(pdp_fqt_class, (t_method)pdp_fqt_loop, gensym("loop"), A_DEFFLOAT, A_NULL);
      class_addfloat (pdp_fqt_class, (t_method)pdp_fqt_frame);
      class_addmethod(pdp_fqt_class, (t_method)pdp_fqt_frame_cold, gensym("frame_cold"), A_FLOAT, A_NULL);
-     class_addmethod(pdp_fqt_class, (t_method)pdp_fqt_gain, gensym("gain"), A_FLOAT, A_NULL);
      class_addmethod(pdp_fqt_class, nullfn, gensym("signal"), 0);
      class_sethelpsymbol( pdp_fqt_class, gensym("pdp_fqt.pd") );
--- 277,282 ----






More information about the Pd-cvs mailing list