[PD-cvs] externals/pidip/modules Makefile,1.11,1.12 Makefile.in,1.11,1.12 pdp_ascii.c,1.2,1.3 pdp_canvas.c,1.4,1.5 pdp_ffmpeg~.c,1.3,1.4 pdp_i.c,1.2,1.3 pdp_lumafilt.c,1.2,1.3 pdp_mp4audiosource.cpp,1.1,1.2 pdp_mp4audiosync.cpp,1.1,1.2 pdp_mp4live~.cpp,1.1,1.2 pdp_mp4player~.cpp,1.1,1.2 pdp_mp4videosync.cpp,1.1,1.2 pdp_ocanvas.c,1.1,1.2 pdp_vertigo.c,1.2,1.3

Yves Degoyon sevyves at users.sourceforge.net
Tue May 18 02:44:11 CEST 2004


Update of /cvsroot/pure-data/externals/pidip/modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13994

Modified Files:
	Makefile Makefile.in pdp_ascii.c pdp_canvas.c pdp_ffmpeg~.c 
	pdp_i.c pdp_lumafilt.c pdp_mp4audiosource.cpp 
	pdp_mp4audiosync.cpp pdp_mp4live~.cpp pdp_mp4player~.cpp 
	pdp_mp4videosync.cpp pdp_ocanvas.c pdp_vertigo.c 
Log Message:
PiDiP 0.12.14

Index: pdp_mp4player~.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_mp4player~.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** pdp_mp4player~.cpp	30 Mar 2004 02:59:55 -0000	1.1
--- pdp_mp4player~.cpp	18 May 2004 00:44:09 -0000	1.2
***************
*** 103,110 ****
--- 103,113 ----
  
     x->x_streaming = 0;
+    x->x_newpicture = 0;
  
     outlet_float( x->x_outlet_streaming, x->x_streaming );
     x->x_nbframes = 0;
     outlet_float( x->x_outlet_nbframes, x->x_nbframes );
+    x->x_framerate = 0;
+    outlet_float( x->x_outlet_framerate, x->x_framerate );
  
     post( "pdp_mp4player~ : deleting session" );
***************
*** 228,236 ****
    t_int sn;
  
      // just read the buffer
      if ( x->x_audioon )
      {
        sn=0;
-       n=n*DEFAULT_CHANNELS;
        while (n--) 
        {
--- 231,240 ----
    t_int sn;
  
+     x->x_blocksize = n;
+ 
      // just read the buffer
      if ( x->x_audioon )
      {
        sn=0;
        while (n--) 
        {
***************
*** 250,254 ****
        }
        x->x_audioin_position-=sn;
!       memcpy( &x->x_audio_in[0], &x->x_audio_in[sn], 4*MAX_AUDIO_PACKET_SIZE-sn );
        // post( "pdp_mp4player~ : audio in position : %d", x->x_audioin_position );
        if ( x->x_audioin_position <= sn )
--- 254,258 ----
        }
        x->x_audioin_position-=sn;
!       memcpy( &x->x_audio_in[0], &x->x_audio_in[sn], (4*MAX_AUDIO_PACKET_SIZE-sn-1)*sizeof(short) );
        // post( "pdp_mp4player~ : audio in position : %d", x->x_audioin_position );
        if ( x->x_audioin_position <= sn )
***************
*** 282,286 ****
      if ( x->x_newpicture )
      {
!       pdp_packet_pass_if_valid(x->x_pdp_out, &x->x_packet0);
  
        // update streaming status
--- 286,293 ----
      if ( x->x_newpicture )
      {
!       x->x_packet = pdp_packet_new_image_YCrCb( x->x_vwidth, x->x_vheight );
!       x->x_data = (short int *)pdp_packet_data(x->x_packet);
!       memcpy( x->x_data, x->x_datav, (x->x_vsize + (x->x_vsize>>1))<<1 );
!       pdp_packet_pass_if_valid(x->x_pdp_out, &x->x_packet);
  
        // update streaming status
***************
*** 289,292 ****
--- 296,300 ----
        x->x_secondcount++;
        outlet_float( x->x_outlet_nbframes, x->x_nbframes );
+       x->x_newpicture = 0;
      }
  
***************
*** 308,312 ****
      }
      post( "pdp_mp4player~ : freeing object" );
!     pdp_packet_mark_unused(x->x_packet0);
  
      // remove invalid global ports
--- 316,320 ----
      }
      post( "pdp_mp4player~ : freeing object" );
!     pdp_packet_mark_unused(x->x_packet);
  
      // remove invalid global ports
***************
*** 331,344 ****
      x->x_outlet_framerate = outlet_new(&x->x_obj, &s_float);
  
!     x->x_packet0 = -1;
      x->x_nbframes = 0;
      x->x_cursec = 0;
      x->x_secondcount = 0;
      x->x_audioin_position = 0;
      x->x_priority = DEFAULT_PRIORITY;
      x->x_decodechild = 0;
      x->x_newpicture = 0;
  
!     memset( &x->x_audio_buf[0], 0x0, 4*MAX_AUDIO_PACKET_SIZE*sizeof(short) );
      memset( &x->x_audio_in[0], 0x0, 4*MAX_AUDIO_PACKET_SIZE*sizeof(short) );
  
--- 339,356 ----
      x->x_outlet_framerate = outlet_new(&x->x_obj, &s_float);
  
!     x->x_packet = -1;
      x->x_nbframes = 0;
      x->x_cursec = 0;
      x->x_secondcount = 0;
      x->x_audioin_position = 0;
+     x->x_blocksize = MIN_AUDIO_SIZE;
      x->x_priority = DEFAULT_PRIORITY;
      x->x_decodechild = 0;
      x->x_newpicture = 0;
  
!     x->x_vwidth = -1;
!     x->x_vheight = -1;
!     x->x_datav = NULL;
! 
      memset( &x->x_audio_in[0], 0x0, 4*MAX_AUDIO_PACKET_SIZE*sizeof(short) );
  

Index: pdp_i.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_i.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** pdp_i.c	17 Sep 2003 20:04:48 -0000	1.2
--- pdp_i.c	18 May 2004 00:44:08 -0000	1.3
***************
*** 205,209 ****
             if ( x->x_inwriteposition+ret >= x->x_inbuffersize )
             {
!               // post( "pdp_i : too much input...resetting" );
                x->x_inwriteposition=0;
                return;
--- 205,209 ----
             if ( x->x_inwriteposition+ret >= x->x_inbuffersize )
             {
!               post( "pdp_i : too much input...resetting" );
                x->x_inwriteposition=0;
                return;

Index: Makefile.in
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/Makefile.in,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** Makefile.in	30 Mar 2004 01:56:16 -0000	1.11
--- Makefile.in	18 May 2004 00:44:08 -0000	1.12
***************
*** 16,20 ****
            pdp_transition.o pdp_imgloader.o pdp_imgsaver.o pdp_cache.o \
            pdp_canvas.o pdp_pen.o pdp_shape.o pdp_fqt.o pdp_fcqt.o \
!           pdp_ocanvas.o pdp_spotlight.o @PDP_STREAMING_OBJECTS@
            # pdp_xcanvas.o pdp_aa.o
  
--- 16,20 ----
            pdp_transition.o pdp_imgloader.o pdp_imgsaver.o pdp_cache.o \
            pdp_canvas.o pdp_pen.o pdp_shape.o pdp_fqt.o pdp_fcqt.o \
!           pdp_ocanvas.o pdp_spotlight.o pdp_colorgrid.o @PDP_STREAMING_OBJECTS@
            # pdp_xcanvas.o pdp_aa.o
  

Index: pdp_mp4videosync.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_mp4videosync.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** pdp_mp4videosync.cpp	30 Mar 2004 02:59:55 -0000	1.1
--- pdp_mp4videosync.cpp	18 May 2004 00:44:09 -0000	1.2
***************
*** 176,182 ****
  				    uint64_t time)
  {
!   // post( "pdp_mp4videosync : set video frame : %dx%d", m_width, m_height );
    m_psptr->wake_sync_thread();
  
    // pass the data to the pdp object
    m_father->x_newpicture = 1;
--- 176,220 ----
  				    uint64_t time)
  {
!  short int *pY, *pU, *pV;
!  t_int px, py;
! 
    m_psptr->wake_sync_thread();
  
+   if ( !m_father->x_streaming )
+   {
+     return;
+   }
+ 
+   // transforming into a image for pdp 
+   if ( ( (t_int)m_father->x_vheight != (t_int)m_height ) ||
+        ( (t_int)m_father->x_vwidth != (t_int)m_width ) )
+   {
+     m_father->x_vheight = m_height;
+     m_father->x_vwidth = m_width;
+     m_father->x_vsize = m_father->x_vheight*m_father->x_vwidth;
+     post( "pdp_mp4videosync : allocating video data : %dx%d", m_width, m_height ); 
+ 
+     // allocate video data
+     m_father->x_datav = ( short int* ) malloc( (m_father->x_vsize+(m_father->x_vsize>>1))<<1 );
+   }
+ 
+   // post( "pdp_mp4videosync : set video frame : width : y:%d, uv:%d", pixelw_y, pixelw_uv );
+ 
+   pY = m_father->x_datav;
+   pV = m_father->x_datav+m_father->x_vsize;
+   pU = m_father->x_datav+m_father->x_vsize+(m_father->x_vsize>>2);
+   for(py=0; py<m_father->x_vheight; py++) 
+   {
+     for(px=0; px<m_father->x_vwidth; px++)
+     {
+        *(pY+py*m_father->x_vwidth+px) = *(y+py*pixelw_y+px)<<7;
+        if ( ( px%2 == 0 ) && ( py%2 == 0 ) )
+        {
+          *(pU+(py>>1)*(m_father->x_vwidth>>1)+(px>>1)) = ((*(u+(py>>1)*pixelw_uv+(px>>1)))-128)<<8;
+          *(pV+(py>>1)*(m_father->x_vwidth>>1)+(px>>1)) = ((*(v+(py>>1)*pixelw_uv+(px>>1)))-128)<<8;
+        }
+     }
+   }
+ 
    // pass the data to the pdp object
    m_father->x_newpicture = 1;

Index: Makefile
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/Makefile,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** Makefile	30 Mar 2004 01:56:16 -0000	1.11
--- Makefile	18 May 2004 00:44:08 -0000	1.12
***************
*** 16,20 ****
            pdp_transition.o pdp_imgloader.o pdp_imgsaver.o pdp_cache.o \
            pdp_canvas.o pdp_pen.o pdp_shape.o pdp_fqt.o pdp_fcqt.o \
!           pdp_ocanvas.o pdp_spotlight.o  pdp_live~.o pdp_ffmpeg~.o
            # pdp_xcanvas.o pdp_aa.o
  
--- 16,20 ----
            pdp_transition.o pdp_imgloader.o pdp_imgsaver.o pdp_cache.o \
            pdp_canvas.o pdp_pen.o pdp_shape.o pdp_fqt.o pdp_fcqt.o \
!           pdp_ocanvas.o pdp_spotlight.o pdp_colorgrid.o  pdp_live~.o pdp_ffmpeg~.o
            # pdp_xcanvas.o pdp_aa.o
  

Index: pdp_mp4live~.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_mp4live~.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** pdp_mp4live~.cpp	30 Mar 2004 02:59:55 -0000	1.1
--- pdp_mp4live~.cpp	18 May 2004 00:44:09 -0000	1.2
***************
*** 61,65 ****
  #define VIDEO_BUFFER_SIZE (1024*1024)
  #define MAX_AUDIO_PACKET_SIZE (128 * 1024)
! #define AUDIO_PACKET_SIZE (2*1024) /* using aac encoding */
  
  static char   *pdp_mp4live_version = "pdp_mp4live~: version 0.1, an mpeg4ip video streaming object ( ydegoyon at free.fr )";
--- 61,65 ----
  #define VIDEO_BUFFER_SIZE (1024*1024)
  #define MAX_AUDIO_PACKET_SIZE (128 * 1024)
! #define AUDIO_PACKET_SIZE (2*1024*2) /* using aac encoding, 2 channels, 2 bytes per sample */
  
  static char   *pdp_mp4live_version = "pdp_mp4live~: version 0.1, an mpeg4ip video streaming object ( ydegoyon at free.fr )";
***************
*** 91,96 ****
        /* audio structures */
      short x_audio_buf[2*MAX_AUDIO_PACKET_SIZE]; /* buffer for incoming audio */
-     short x_audio_enc_buf[2*MAX_AUDIO_PACKET_SIZE]; /* buffer for audio to be encoded */
-     uint8_t x_audio_out[4*MAX_AUDIO_PACKET_SIZE]; /* buffer for encoded audio */
      t_int x_audioin_position; // writing position for incoming audio
      t_int x_audio_per_frame;  // number of audio samples to transmit for each frame
--- 91,94 ----
***************
*** 426,431 ****
           pV = data+x->x_vsize+(x->x_vsize>>2);
  
-          x->x_videosource->ProcessVideo( pY, pV, pU );
-    
              /* update frames counter */
  
--- 424,427 ----
***************
*** 443,457 ****
           x->x_secondcount++;
  
!             /* send an audio frame */
!          if ( x->x_audioin_position > x->x_audio_per_frame )
!          {
!             x->x_audiosource->ProcessAudio( (u_int8_t*)x->x_audio_buf, 
!                            (u_int32_t)x->x_audio_per_frame*sizeof(short) );
  
-             /* output resampled raw samples */
-             memcpy( x->x_audio_buf, x->x_audio_buf+x->x_audio_per_frame, 
-                     x->x_audioin_position-x->x_audio_per_frame ); 
-             x->x_audioin_position-=x->x_audio_per_frame;
-          }
      }
      return;
--- 439,444 ----
           x->x_secondcount++;
  
!          x->x_videosource->ProcessVideo( pY, pV, pU );
  
      }
      return;
***************
*** 500,503 ****
--- 487,505 ----
      }
  
+     if ( x->x_streaming )
+     {
+           /* send an audio frame */
+        if ( (t_int)(x->x_audioin_position*sizeof(short)) > (t_int)x->x_audio_per_frame )
+        {
+          x->x_audiosource->ProcessAudio( (u_int8_t*)x->x_audio_buf, 
+                         (u_int32_t)x->x_audio_per_frame );
+ 
+            /* recopy the buffer and set new pointers */
+          memcpy( x->x_audio_buf, x->x_audio_buf+(x->x_audio_per_frame/sizeof(short)), 
+                     x->x_audioin_position*sizeof(short)-x->x_audio_per_frame ); 
+          x->x_audioin_position-=(x->x_audio_per_frame/sizeof(short));
+        }
+     }
+  
      return (w+5);
  }

Index: pdp_ffmpeg~.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_ffmpeg~.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** pdp_ffmpeg~.c	30 Mar 2004 01:56:16 -0000	1.3
--- pdp_ffmpeg~.c	18 May 2004 00:44:08 -0000	1.4
***************
*** 602,606 ****
         if ( x->x_audioin_position == 2*MAX_AUDIO_PACKET_SIZE-1 ) 
         {
!           post( "pdp_ffmpeg~ : reaching end of audio buffer" );
         }
      }
--- 602,606 ----
         if ( x->x_audioin_position == 2*MAX_AUDIO_PACKET_SIZE-1 ) 
         {
!           // post( "pdp_ffmpeg~ : reaching end of audio buffer" );
         }
      }

Index: pdp_mp4audiosync.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_mp4audiosync.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** pdp_mp4audiosync.cpp	30 Mar 2004 02:59:55 -0000	1.1
--- pdp_mp4audiosync.cpp	18 May 2004 00:44:09 -0000	1.2
***************
*** 34,42 ****
  #include "m_pd.h"
  
- #define audio_message(loglevel, fmt...) message(loglevel, "audiosync", fmt)
- 
  static void pdp_audio_callback (void *userdata, Uint8 *stream, int len)
  {
    CPDPAudioSync *a = (CPDPAudioSync *)userdata;
    a->audio_callback(stream, len);
  }
--- 34,41 ----
  #include "m_pd.h"
  
  static void pdp_audio_callback (void *userdata, Uint8 *stream, int len)
  {
    CPDPAudioSync *a = (CPDPAudioSync *)userdata;
+   // post( "pdp_mp4audiosync : audio callback" );
    a->audio_callback(stream, len);
  }
***************
*** 44,85 ****
  CPDPAudioSync::CPDPAudioSync (CPlayerSession *psptr, t_pdp_mp4player *pdp_father) : CAudioSync(psptr)
  {
-   m_fill_index = m_play_index = 0;
-   for (int ix = 0; ix < DECODE_BUFFERS_MAX; ix++) {
-     m_buffer_filled[ix] = 0;
-     m_sample_buffer[ix] = NULL;
-   }
-   m_buffer_size = 0;
    m_config_set = 0;
!   m_audio_initialized = 0;
!   m_audio_paused = 1;
    m_resync_required = 0;
    m_dont_fill = 0;
-   m_consec_no_buffers = 0;
-   m_audio_waiting_buffer = 0;
-   m_skipped_buffers = 0;
-   m_didnt_fill_buffers = 0;
    m_play_time = 0         ;
    m_buffer_latency = 0;
    m_first_time = 1;
-   m_first_filled = 1;
-   m_buffer_offset_on = 0;
-   m_buffer_ts = 0;
-   m_load_audio_do_next_resync = 0;
    m_convert_buffer = NULL;
    m_father = pdp_father;
  }
  
  CPDPAudioSync::~CPDPAudioSync (void)
  {
!   for (int ix = 0; ix < DECODE_BUFFERS_MAX; ix++) {
!     if (m_sample_buffer[ix] != NULL)
!       free(m_sample_buffer[ix]);
!     m_sample_buffer[ix] = NULL;
    }
    CHECK_AND_FREE(m_convert_buffer);
-   audio_message(LOG_NOTICE, 
- 		"Audio sync skipped %u buffers", 
- 		m_skipped_buffers);
-   audio_message(LOG_NOTICE, "didn't fill %u buffers", m_didnt_fill_buffers);
  }
  
--- 43,67 ----
  CPDPAudioSync::CPDPAudioSync (CPlayerSession *psptr, t_pdp_mp4player *pdp_father) : CAudioSync(psptr)
  {
    m_config_set = 0;
!   m_audio_initialized = 1;
!   m_audio_paused = 0;
    m_resync_required = 0;
    m_dont_fill = 0;
    m_play_time = 0         ;
    m_buffer_latency = 0;
    m_first_time = 1;
    m_convert_buffer = NULL;
    m_father = pdp_father;
+   post( "pdp_mp4audiosync : created audio sync" );
  }
  
  CPDPAudioSync::~CPDPAudioSync (void)
  {
!   if (m_sample_buffer[0] != NULL)
!   {
!     free(m_sample_buffer[0]);
    }
+   m_sample_buffer[0] = NULL;
    CHECK_AND_FREE(m_convert_buffer);
  }
  
***************
*** 108,115 ****
    m_buffer_size = channels * sample_size * m_bytes_per_sample;
  
!   for (int ix = 0; ix < DECODE_BUFFERS_MAX; ix++) {
!     m_buffer_filled[ix] = 0;
!     m_sample_buffer[ix] = (uint8_t *)malloc(2 * m_buffer_size);
!   }
    m_freq = freq;
    m_channels = channels;
--- 90,96 ----
    m_buffer_size = channels * sample_size * m_bytes_per_sample;
  
!   m_buffer_filled[0] = 0;
!   m_sample_buffer[0] = (uint8_t *)malloc(2 * m_buffer_size);
! 
    m_freq = freq;
    m_channels = channels;
***************
*** 122,126 ****
    m_config_set = 1;
    m_msec_per_frame = (sample_size * 1000) / m_freq;
!   audio_message(LOG_DEBUG, "buffer size %d msec per frame %d", m_buffer_size, m_msec_per_frame);
  };
  
--- 103,107 ----
    m_config_set = 1;
    m_msec_per_frame = (sample_size * 1000) / m_freq;
!   post("pdp_mp4audiosync : buffer size %d msec per frame %d", m_buffer_size, m_msec_per_frame);
  };
  
***************
*** 133,158 ****
    }
  
!   if (m_audio_initialized != 0) {
!     locked = 1;
!   }
!   ret = m_buffer_filled[m_fill_index];
!   if (ret == 1) {
!     m_audio_waiting_buffer = 1;
!     m_audio_waiting_buffer = 0;
!     if (m_dont_fill != 0) {
!       return (NULL);
!     }
!     locked = 0;
!     if (m_audio_initialized != 0) {
!       locked = 1;
!     }
!     ret = m_buffer_filled[m_fill_index];
!     if (locked)
!     if (ret == 1) {
!       post("pdp_mp4audiosync : no buffer");
!       return (NULL);
!     }
    }
!   return (m_sample_buffer[m_fill_index]);
  }
  
--- 114,125 ----
    }
  
!   ret = m_buffer_filled[0];
!   if (ret == 1) 
!   {
!     post("pdp_mp4audiosync : no buffer");
!     return (NULL);
    }
!   // post("pdp_mp4audiosync : get_audio_buffer : return %x", m_sample_buffer[0]);
!   return (m_sample_buffer[0]);
  }
  
***************
*** 165,221 ****
    uint32_t copied;
    copied = 0;
-   if (m_buffer_offset_on == 0) {
-     int64_t diff = ts - m_buffer_ts;
  
!     if (m_buffer_ts != 0 && diff > 1) {
!       m_load_audio_do_next_resync = 1;
!       audio_message(LOG_DEBUG, "timeslot doesn't match - %llu %llu",
! 		    ts, m_buffer_ts);
!     }
!     m_buffer_ts = ts;
!   } else {
!     int64_t check;
!     check = ts - m_loaded_next_ts;
!     if (check > m_msec_per_frame) {
!       audio_message(LOG_DEBUG, "potential resync at ts "U64" should be ts "U64,
! 		    ts, m_loaded_next_ts);
!       uint32_t left;
!       left = m_buffer_size - m_buffer_offset_on;
!       to = get_audio_buffer();
!       memset(to + m_buffer_offset_on, 0, left);
!       filled_audio_buffer(m_buffer_ts, 0);
!       m_buffer_offset_on = 0;
!       m_load_audio_do_next_resync = 1;
!       m_buffer_ts = ts;
!     }
    }
!   m_loaded_next_ts = bytes * M_64;
!   m_loaded_next_ts /= m_bytes_per_sample;
!   m_loaded_next_ts /= m_freq;
!   m_loaded_next_ts += ts;
  
!   while ( bytes > 0) {
!     to = get_audio_buffer();
!     if (to == NULL) {
!       return;
!     }
!     int copy;
!     uint32_t left;
  
-     left = m_buffer_size - m_buffer_offset_on;
-     copy = MIN(left, bytes);
-     memcpy(to + m_buffer_offset_on, from, copy);
-     bytes -= copy;
-     copied += copy;
-     from += copy;
-     m_buffer_offset_on += copy;
-     if (m_buffer_offset_on >= m_buffer_size) {
-       m_buffer_offset_on = 0;
-       filled_audio_buffer(m_buffer_ts, resync | m_load_audio_do_next_resync);
-       m_buffer_ts += m_msec_per_frame;
-       resync = 0;
-       m_load_audio_do_next_resync = 0;
-     }
-   }
    return;
  }
--- 132,149 ----
    uint32_t copied;
    copied = 0;
  
!   post( "pdp_mp4audiosync : load audio buffer : length=%d", bytes );
! 
!   to = get_audio_buffer();
!   if (to == NULL) 
!   {
!     return;
    }
!   int copy;
!   uint32_t left;
  
!   bytes = MIN(m_buffer_size, bytes);
!   memcpy(to, from, bytes);
  
    return;
  }
***************
*** 223,316 ****
  void CPDPAudioSync::filled_audio_buffer (uint64_t ts, int resync)
  {
!   uint32_t fill_index;
!   int locked;
!   // m_dont_fill will be set when we have a pause
!   if (m_dont_fill == 1) {
!     return;
!   }
!   //  resync = 0;
!   fill_index = m_fill_index;
!   m_fill_index++;
!   m_fill_index %= DECODE_BUFFERS_MAX;
  
!   locked = 0;
!   if (m_audio_initialized != 0) {
!     locked = 1;
!   }
!   if (m_first_filled != 0) {
!     m_first_filled = 0;
!     resync = 0;
!     m_resync_required = 0;
!   } else {
!     int64_t diff;
!     diff = ts - m_last_fill_timestamp;
!     if (diff - m_msec_per_frame > m_msec_per_frame) {
!       // have a hole here - don't want to resync
!       if (diff > ((m_msec_per_frame + 1) * 4)) {
! 	resync = 1;
!       } else {
! 	// try to fill the holes
! 	m_last_fill_timestamp += m_msec_per_frame + 1; // fill plus extra
! 	int64_t ts_diff;
! 	do {
! 	  uint8_t *retbuffer;
! 	  // Get and swap buffers.
! 	  retbuffer = get_audio_buffer();
! 	  if (retbuffer == NULL) {
! 	    return;
! 	  }
! 	  if (retbuffer != m_sample_buffer[m_fill_index]) {
! 	    audio_message(LOG_ERR, "retbuffer not fill index in audio sync");
! 	    return;
! 	  }
! 	  locked = 0;
! 	  if (m_audio_initialized != 0) {
! 	    locked = 1;
! 	  }
! 	  m_sample_buffer[m_fill_index] = m_sample_buffer[fill_index];
! 	  m_sample_buffer[fill_index] = retbuffer;
! 	  memset(retbuffer, m_silence, m_buffer_size);
! 	  m_buffer_time[fill_index] = m_last_fill_timestamp;
! 	  m_buffer_filled[fill_index] = 1;
! 	  m_samples_loaded += m_buffer_size;
! 	  fill_index++;
! 	  fill_index %= DECODE_BUFFERS_MAX;
! 	  m_fill_index++;
! 	  m_fill_index %= DECODE_BUFFERS_MAX;
! 	  audio_message(LOG_NOTICE, "Filling timestamp %llu with silence",
! 			m_last_fill_timestamp);
! 	  m_last_fill_timestamp += m_msec_per_frame + 1; // fill plus extra
! 	  ts_diff = ts - m_last_fill_timestamp;
! 	  audio_message(LOG_DEBUG, "diff is %lld", ts_diff);
! 	} while (ts_diff > 0);
! 	locked = 0;
! 	if (m_audio_initialized != 0) {
! 	  locked = 1;
! 	}
!       }
!     } else {
!       if (m_last_fill_timestamp == ts) {
! 	audio_message(LOG_NOTICE, "Repeat timestamp with audio %llu", ts);
! 	return;
        }
      }
    }
!   m_last_fill_timestamp = ts;
!   m_buffer_filled[fill_index] = 1;
!   m_samples_loaded += m_buffer_size;
!   m_buffer_time[fill_index] = ts;
!   if (resync) {
!     m_resync_required = 1;
!     m_resync_buffer = fill_index;
! #ifdef DEBUG_AUDIO_FILL
!     audio_message(LOG_DEBUG, "Resync from filled_audio_buffer");
! #endif
!   }
! 
!   // Check this - we might not want to do this unless we're resyncing
!   if (resync) m_psptr->wake_sync_thread();
! #ifdef DEBUG_AUDIO_FILL
!   audio_message(LOG_DEBUG, "Filling " LLU " %u %u", ts, fill_index, m_samples_loaded);
! #endif
  }
  
--- 151,181 ----
  void CPDPAudioSync::filled_audio_buffer (uint64_t ts, int resync)
  {
!   // post( "pdp_mp4audiosync : filled audio buffer" );
!   // if (resync) m_psptr->wake_sync_thread();
  
!   if (  m_father->x_audio )
!   {
!     // copy the buffer filled by the codec towards pdp
!     if ( (m_father->x_audioin_position*sizeof(short)+m_buffer_size) < (4*MAX_AUDIO_PACKET_SIZE*sizeof(short)) )
!     {
!       memcpy( m_father->x_audio_in+m_father->x_audioin_position, m_sample_buffer[0], m_buffer_size );
!       m_father->x_audioin_position+=(m_buffer_size/sizeof(short));
!       // post( "pdp_mp4audiosync : filled_audio_buffer : copied %d PCM samples : audio in : %d : resync : %d", 
!       //                           m_buffer_size/sizeof(short), m_father->x_audioin_position, resync );
!       if ( ( m_father->x_audioin_position > DEFAULT_CHANNELS*m_father->x_blocksize ) 
!            && (!m_father->x_audioon) )
!       {
!         m_father->x_audioon = 1;
!         // post( "pdp_mp4audiosync : audio on" );
        }
      }
+     else
+     {
+       post( "pdp_mp4audiosync : filled_audio_buffer : skipped buffer : (in : %d)", 
+              m_father->x_audioin_position );
+     }
    }
!   
!   return;
  }
  
***************
*** 318,337 ****
  { 
    uint8_t *to;
!   if (m_buffer_offset_on != 0) {
!     to = get_audio_buffer();
!     if (to != NULL) {
!       uint32_t left;
!       left = m_buffer_size - m_buffer_offset_on;
!       memset(to + m_buffer_offset_on, 0, left);
!       m_buffer_offset_on = 0;
!       filled_audio_buffer(m_buffer_ts, 0);
!       m_buffer_ts += m_msec_per_frame;
!     }
!   }
    CAudioSync::set_eof();
  }
  
! int CPDPAudioSync::initialize_audio (int have_video) 
  {
    return (1);
  }
--- 183,194 ----
  { 
    uint8_t *to;
! 
!   to = get_audio_buffer();
    CAudioSync::set_eof();
  }
  
! int CPDPAudioSync::initialize_audio (int have_audio) 
  {
+   m_audio_initialized = 1;
    return (1);
  }
***************
*** 339,344 ****
  int CPDPAudioSync::is_audio_ready (uint64_t &disptime)
  {
!   disptime = m_buffer_time[m_play_index];
!   return (m_dont_fill == 0 && m_buffer_filled[m_play_index] == 1);
  }
  
--- 196,200 ----
  int CPDPAudioSync::is_audio_ready (uint64_t &disptime)
  {
!   return (1);
  }
  
***************
*** 356,359 ****
--- 212,217 ----
    int playtime;
  
+   post( "pdp_mp4audiosync : audio callback" );
+ 
  }
  
***************
*** 367,393 ****
  void CPDPAudioSync::flush_sync_buffers (void)
  {
    clear_eof();
-   m_dont_fill = 1;
-   if (m_audio_waiting_buffer) {
-     m_audio_waiting_buffer = 0;
-   }
  }
  
  void CPDPAudioSync::flush_decode_buffers (void)
  {
!   int locked = 0;
!   if (m_audio_initialized != 0) {
!     locked = 1;
!   }
!   m_dont_fill = 0;
!   m_first_filled = 1;
!   for (int ix = 0; ix < DECODE_BUFFERS_MAX; ix++) {
!     m_buffer_filled[ix] = 0;
!   }
!   m_buffer_offset_on = 0;
!   m_play_index = m_fill_index = 0;
!   m_audio_paused = 1;
!   m_resync_buffer = 0;
!   m_samples_loaded = 0;
  }
  
--- 225,236 ----
  void CPDPAudioSync::flush_sync_buffers (void)
  {
+   post( "pdp_mp4audiosync : flush sync buffer" );
    clear_eof();
  }
  
  void CPDPAudioSync::flush_decode_buffers (void)
  {
!   post( "pdp_mp4audiosync : flush decode buffer" );
!   m_buffer_filled[0] = 0;
  }
  
***************
*** 467,471 ****
  {
    ((CPDPAudioSync *)ifptr)->filled_audio_buffer(ts, 
! 					     resync_req);
  }
  
--- 310,314 ----
  {
    ((CPDPAudioSync *)ifptr)->filled_audio_buffer(ts, 
! 				   resync_req);
  }
  

Index: pdp_mp4audiosource.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_mp4audiosource.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** pdp_mp4audiosource.cpp	30 Mar 2004 02:59:55 -0000	1.1
--- pdp_mp4audiosource.cpp	18 May 2004 00:44:08 -0000	1.2
***************
*** 102,107 ****
    // for live capture we can match the source to the destination
    m_audioSrcSamplesPerFrame = m_audioDstSamplesPerFrame;
!   m_pcmFrameSize = 
!     m_audioSrcSamplesPerFrame * m_audioSrcChannels * sizeof(u_int16_t);
  
    if (m_audioOssMaxBufferSize > 0) {
--- 102,106 ----
    // for live capture we can match the source to the destination
    m_audioSrcSamplesPerFrame = m_audioDstSamplesPerFrame;
!   m_pcmFrameSize = m_audioSrcSamplesPerFrame * m_audioSrcChannels * sizeof(u_int16_t);
  
    if (m_audioOssMaxBufferSize > 0) {
***************
*** 136,140 ****
  void CPDPAudioSource::ProcessAudio(u_int8_t* pcmBuffer, u_int32_t pcmBufferSize)
  {
-   audio_buf_info info;
    Timestamp currentTime = GetTimestamp();
    Timestamp timestamp;
--- 135,138 ----
***************
*** 157,203 ****
      }
  
!     if (info.bytes == m_audioOssMaxBufferSize) {
!       // means the audio buffer is full, and not capturing
!       // we want to make the timestamp based on the previous one
!       // When we hit this case, we start using the m_timestampOverflowArray
!       // This will give us a timestamp for when the array is full.
!       // 
!       // In other words, if we have a full audio buffer (ie: it's not loading
!       // any more), we start storing the current timestamp into the array.
!       // This will let us "catch up", and have a somewhat accurate timestamp
!       // when we loop around
!       // 
!       // wmay - I'm not convinced that this actually works - if the buffer
!       // cleans up, we'll ignore m_timestampOverflowArray
!       if (m_timestampOverflowArray != NULL && 
! 	  m_timestampOverflowArray[m_timestampOverflowArrayIndex] != 0) {
! 	timestamp = m_timestampOverflowArray[m_timestampOverflowArrayIndex];
!       } else {
! 	timestamp = m_prevTimestamp + SrcSamplesToTicks(m_audioSrcSamplesPerFrame);
!       }
! 
!       if (m_timestampOverflowArray != NULL)
! 	m_timestampOverflowArray[m_timestampOverflowArrayIndex] = currentTime;
! 
!       debug_message("pdp_mp4live~ : audio buffer full !");
! 
!     } else {
!       // buffer is not full - so, we make the timestamp based on the number
!       // of bytes in the buffer that we read.
!       timestamp = currentTime - SrcSamplesToTicks(SrcBytesToSamples(info.bytes));
!       if (m_timestampOverflowArray != NULL)
! 	m_timestampOverflowArray[m_timestampOverflowArrayIndex] = 0;
!     }
  
  #ifdef DEBUG_TIMESTAMPS
!     debug_message("pdp_mp4live~ : info.bytes=%d t=%llu timestamp=%llu delta=%llu",
!                   info.bytes, currentTime, timestamp, timestamp - m_prevTimestamp);
  #endif
  
      m_prevTimestamp = timestamp;
-     if (m_timestampOverflowArray != NULL) {
-       m_timestampOverflowArrayIndex = (m_timestampOverflowArrayIndex + 1) % 
- 	m_audioOssMaxBufferFrames;
-     }
  
      ProcessAudioFrame(m_pcmFrameBuffer, m_pcmFrameSize, timestamp, false);
--- 155,166 ----
      }
  
!     timestamp = currentTime - SrcSamplesToTicks(SrcBytesToSamples(pcmBufferSize));
  
  #ifdef DEBUG_TIMESTAMPS
!     debug_message("pdp_mp4live~ : bytes=%d t=%llu timestamp=%llu delta=%llu",
!                   pcmBufferSize, currentTime, timestamp, timestamp - m_prevTimestamp);
  #endif
  
      m_prevTimestamp = timestamp;
  
      ProcessAudioFrame(m_pcmFrameBuffer, m_pcmFrameSize, timestamp, false);

Index: pdp_canvas.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_canvas.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** pdp_canvas.c	25 Oct 2003 02:06:30 -0000	1.4
--- pdp_canvas.c	18 May 2004 00:44:08 -0000	1.5
***************
*** 42,45 ****
--- 42,46 ----
  
      t_int x_opacket;
+     t_int x_lastpacket;
  
      t_int x_current;
***************
*** 140,143 ****
--- 141,145 ----
                       ppV+((py-(t_int)x->x_yoffsets[ii])>>1)*(x->x_widths[ii]>>1)+(mx>>1), dx );
        }
+ 
      }
    }
***************
*** 242,249 ****
      if (s== gensym("register_rw")) 
      {
-       /* release the packet */
        if ( x->x_packets[ni] != -1 )
!       {
!         pdp_packet_mark_unused(x->x_packets[ni]);
          x->x_packets[ni] = -1;
        }
--- 244,251 ----
      if (s== gensym("register_rw")) 
      {
        if ( x->x_packets[ni] != -1 )
!       { 
!         // delete the packet
!         pdp_packet_delete(x->x_packets[ni]);
          x->x_packets[ni] = -1;
        }

Index: pdp_vertigo.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_vertigo.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** pdp_vertigo.c	17 Sep 2003 20:09:51 -0000	1.2
--- pdp_vertigo.c	18 May 2004 00:44:09 -0000	1.3
***************
*** 212,216 ****
            v = pcy[i] & 0xffff;
            v = (v * 3) + ((*poy++) & 0xffff);
!           *pny++ = (v>>2);
            if ( (((px+1)%2)==0) && (((py+1)%2)==0) )
            {
--- 212,216 ----
            v = pcy[i] & 0xffff;
            v = (v * 3) + ((*poy++) & 0xffff);
!           *pny++ = (v>>2)<<7;
            if ( (((px+1)%2)==0) && (((py+1)%2)==0) )
            {

Index: pdp_lumafilt.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_lumafilt.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** pdp_lumafilt.c	17 Sep 2003 20:05:59 -0000	1.2
--- pdp_lumafilt.c	18 May 2004 00:44:08 -0000	1.3
***************
*** 135,139 ****
  	 else
  	 {
!            post( "pdp_lumafilt : luminosity value out of bounds : %d", luma );
  	 }
  	 pnY++;
--- 135,139 ----
  	 else
  	 {
!            // post( "pdp_lumafilt : luminosity value out of bounds : %d", luma );
  	 }
  	 pnY++;

Index: pdp_ascii.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_ascii.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** pdp_ascii.c	17 Sep 2003 20:01:29 -0000	1.2
--- pdp_ascii.c	18 May 2004 00:44:08 -0000	1.3
***************
*** 26,32 ****
  #include "pdp.h"
  #include "yuv.h"
! #include "charmaps.h"
  #include <math.h>
  
  static char *pdp_ascii_version = "pdp_ascii: version 0.1, ASCII art output written by ydegoyon at free.fr";
  
--- 26,34 ----
  #include "pdp.h"
  #include "yuv.h"
! #include "default.map"
  #include <math.h>
  
+ #define LINE_MAX_LENGTH 1024
+ 
  static char *pdp_ascii_version = "pdp_ascii: version 0.1, ASCII art output written by ydegoyon at free.fr";
  
***************
*** 50,53 ****
--- 52,62 ----
      t_float x_ratio;    // character to pixel ratio
  
+     t_int x_charwidth;  // width of characters 
+     t_int x_charheight; // height of characters 
+     t_int x_nbchars;    // number of characters in the map
+     char* x_charmaps;   // the table of characters
+ 
+     FILE  *x_filed;     // charmaps file descriptor
+ 
  } t_pdp_ascii;
  
***************
*** 62,68 ****
  static void pdp_ascii_ratio(t_pdp_ascii *x, t_floatarg fratio)
  {
!    if ( ( fratio > 0) && ( x->x_ratio < x->x_vwidth/2 ) ) 
     {
        x->x_ratio = fratio;
     }
  }
--- 71,80 ----
  static void pdp_ascii_ratio(t_pdp_ascii *x, t_floatarg fratio)
  {
!    if ( ( fratio > 0) 
!         && ( fratio < x->x_vwidth/x->x_charwidth ) 
!         && ( fratio < x->x_vheight/x->x_charheight ) ) 
     {
        x->x_ratio = fratio;
+       // post( "psp_ascii : set ratio : %f", x->x_ratio );
     }
  }
***************
*** 85,89 ****
      t_int     px, py, ppx, ppy;
      t_int     rank, value;
!     t_int     pwidth, pheight;
  
      x->x_vwidth = header->info.image.width;
--- 97,101 ----
      t_int     px, py, ppx, ppy;
      t_int     rank, value;
!     t_int     pwidth, pheight, offset;
  
      x->x_vwidth = header->info.image.width;
***************
*** 97,108 ****
      memset( newdata, 0x00, (x->x_vsize+(x->x_vsize>>1))<<1 );
  
!     pwidth = (int) CHARWIDTH*x->x_ratio;
      if (pwidth==0) pwidth=1;
!     if (pwidth>x->x_vwidth) return;
!     pheight = (int) CHARHEIGHT*x->x_ratio;
      if (pheight==0) pheight=1;
!     if (pheight>x->x_vheight) return;
  
!     for(py=1; py<x->x_vheight; py+=pheight)
      {
        for(px=0; px<x->x_vwidth; px+=pwidth)
--- 109,122 ----
      memset( newdata, 0x00, (x->x_vsize+(x->x_vsize>>1))<<1 );
  
!     pwidth = (int) x->x_charwidth*x->x_ratio;
      if (pwidth==0) pwidth=1;
!     // if (pwidth>x->x_vwidth) return;
!     pheight = (int) x->x_charheight*x->x_ratio;
      if (pheight==0) pheight=1;
!     // if (pheight>x->x_vheight) return;
  
!     // post( "psp_ascii : pwidth=%d, pheight=%d", pwidth, pheight );
! 
!     for(py=0; py<x->x_vheight; py+=pheight)
      {
        for(px=0; px<x->x_vwidth; px+=pwidth)
***************
*** 113,116 ****
--- 127,135 ----
             for ( ppx=0; ppx<pwidth; ppx++ )
             {
+              if ( ( px+ppx >= x->x_vwidth ) ||
+                   ( py+ppy >= x->x_vheight ) )
+              {
+                 break;
+              }
               pixsum += (data[(py+ppy)*x->x_vwidth + (px+ppx)]>>7);
             }
***************
*** 121,130 ****
             for ( ppx=0; ppx<pwidth; ppx++ )
             {
!               if ( ( px+ppx > x->x_vwidth ) ||
!                    ( py+ppy > x->x_vheight ) )
                {
                   break;
                }
!               if ( charmaps[rank][((int)(ppy/x->x_ratio))*CHARWIDTH+((int)(ppx/x->x_ratio))] )
                {
                   value = ( (2*rank+x->x_brightness) > 255 ) ? 255 : (2*rank+x->x_brightness);
--- 140,151 ----
             for ( ppx=0; ppx<pwidth; ppx++ )
             {
!               if ( ( px+ppx >= x->x_vwidth ) ||
!                    ( py+ppy >= x->x_vheight ) )
                {
                   break;
                }
!               offset = rank*x->x_charwidth*x->x_charheight
!                    +((int)(ppy/x->x_ratio))*x->x_charwidth+((int)(ppx/x->x_ratio));
!               if ( *(x->x_charmaps+offset) && ( offset < x->x_nbchars*x->x_charwidth*x->x_charheight ) )
                {
                   value = ( (2*rank+x->x_brightness) > 255 ) ? 255 : (2*rank+x->x_brightness);
***************
*** 210,217 ****
--- 231,341 ----
    int i;
  
+    if ( x->x_charmaps ) free( x->x_charmaps );
     pdp_queue_finish(x->x_queue_id);
     pdp_packet_mark_unused(x->x_packet0);
  }
  
+     /* load a new charmaps file */
+ static void pdp_ascii_load(t_pdp_ascii *x, t_symbol *sfile)
+ {
+  char *lineread = (char*) getbytes( LINE_MAX_LENGTH );
+  char *word1 = (char*) getbytes( LINE_MAX_LENGTH );
+  char *word2 = (char*) getbytes( LINE_MAX_LENGTH );
+  char *word3 = (char*) getbytes( LINE_MAX_LENGTH );
+  t_int charwidth, charheight, nbchars, nblines;
+  t_int nbexpdata;
+  char *pdata;
+  char charread;
+ 
+   // opening new charmaps file
+   if ( ( x->x_filed = fopen( sfile->s_name, "r" ) ) == NULL )
+   {
+        error( "pdp_ascii : cannot open >%s<", sfile->s_name);
+        return;
+   }
+   post( "pdp_ascii : opened >%s<", sfile->s_name);
+ 
+   // read the new dimensions of the charmaps
+   charwidth = -1;
+   charheight = -1;
+   nbchars = -1;
+   nblines = 0;
+   while ( lineread[0] != '{' )
+   {
+      if ( fgets( lineread, LINE_MAX_LENGTH, x->x_filed ) == 0 )
+      {
+        post( "pdp_ascii : abnormal end of file encountered..." );
+        goto closeandreturn;
+      }
+ 
+      if ( strncmp( lineread, "#define", 7 ) == 0 )
+      {
+         sscanf( lineread, "%s %s %s", word1, word2, word3 );
+         // post( "pdp_ascii : definition : %s = %s", word2, word3 );
+         if ( !strcmp( word2, "CHARWIDTH" ) )
+         {
+            charwidth = atoi( word3 );
+         }
+         if ( !strcmp( word2, "CHARHEIGHT" ) )
+         {
+            charheight = atoi( word3 );
+         }
+         if ( !strcmp( word2, "NBCHARS" ) )
+         {
+            nbchars = atoi( word3 );
+         }
+      }
+ 
+      nblines++;
+      if ( nblines>20 ) break;
+   }
+ 
+   if ( ( charwidth > 0 ) && ( charheight > 0 ) && ( nbchars > 0 ) )
+   {
+     post( "pdp_ascii : new dimensions : %d %dx%d characters", nbchars, charwidth, charheight );
+     if ( x->x_charmaps ) free( x->x_charmaps );
+     x->x_charwidth = charwidth;
+     x->x_charheight = charheight;
+     x->x_nbchars = nbchars;
+     x->x_charmaps = (char*)malloc(x->x_nbchars*x->x_charwidth*x->x_charheight*sizeof(char));
+   }
+   else
+   {
+     post( "pdp_ascii : wrong file format : couldn't read new dimensions" );
+     goto closeandreturn;
+   }
+ 
+   nbexpdata = nbchars*charwidth*charheight;
+   pdata = x->x_charmaps;
+ 
+   while ( ( ( charread = fgetc( x->x_filed ) ) != EOF ) && ( nbexpdata > 0 ) )
+   {
+     switch ( charread )
+     {
+       case '0':
+       case '1':
+         *pdata++ = ( charread == '0' )?0:1;
+         nbexpdata--;
+         break;
+ 
+       default:
+         break;
+     }
+   }
+ 
+ closeandreturn :
+ 
+   // closing opened file
+   if ( x->x_filed != NULL ) 
+   {
+     if(fclose(x->x_filed) < 0)
+     {
+       perror( "pdp_ascii : closing file" );
+     }
+     x->x_filed = NULL;
+     return;
+   }
+ }
+ 
  t_class *pdp_ascii_class;
  
***************
*** 231,234 ****
--- 355,364 ----
     x->x_brightness = 25;
  
+    x->x_charwidth = CHARWIDTH;
+    x->x_charheight = CHARHEIGHT;
+    x->x_nbchars = NBCHARS;
+    x->x_charmaps = (char*)malloc(x->x_nbchars*x->x_charwidth*x->x_charheight*sizeof(char));
+    memcpy( (void*)x->x_charmaps, (void*)charmaps, x->x_nbchars*x->x_charwidth*x->x_charheight*sizeof(char) );
+ 
     return (void *)x;
  }
***************
*** 251,254 ****
--- 381,385 ----
      class_addmethod(pdp_ascii_class, (t_method)pdp_ascii_brightness, gensym("brightness"),  A_DEFFLOAT, A_NULL);
      class_addmethod(pdp_ascii_class, (t_method)pdp_ascii_ratio, gensym("ratio"),  A_DEFFLOAT, A_NULL);
+     class_addmethod( pdp_ascii_class, (t_method)pdp_ascii_load, gensym("load"), A_SYMBOL, 0);
      class_sethelpsymbol( pdp_ascii_class, gensym("pdp_ascii.pd") );
  

Index: pdp_ocanvas.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_ocanvas.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** pdp_ocanvas.c	8 Dec 2003 23:06:15 -0000	1.1
--- pdp_ocanvas.c	18 May 2004 00:44:09 -0000	1.2
***************
*** 239,243 ****
        if ( x->x_packets[ni] != -1 )
        {
!         pdp_packet_mark_unused(x->x_packets[ni]);
          x->x_packets[ni] = -1;
        }
--- 239,243 ----
        if ( x->x_packets[ni] != -1 )
        {
!         pdp_packet_delete(x->x_packets[ni]);
          x->x_packets[ni] = -1;
        }





More information about the Pd-cvs mailing list