--- libfishsound.old/src/libfishsound/flac.c	2004-11-05 14:34:14.000000000 +0100
+++ libfishsound/src/libfishsound/flac.c	2004-10-26 17:35:49.000000000 +0200
@@ -40,7 +40,7 @@ FLAC__StreamDecoderReadStatus fs_flac_re
     return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
   } else if (fi->bufferlength < 1) {
 #ifdef DEBUG
-    fprintf(stderr, "no data\n");
+    fprintf(stderr, "no data, %d\n",fi->bufferlength);
 #endif
     return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
   }
@@ -58,6 +58,7 @@ FLAC__StreamDecoderWriteStatus fs_flac_w
 #ifdef DEBUG
   fprintf(stderr, "fs_flac_write_callback\n");
 #endif
+  fsound->frameno += frame->header.blocksize*frame->header.channels;
   switch (fsound->pcm_type) {
   case FISH_SOUND_PCM_SHORT:
     if (fsound->callback.decoded_short) {
@@ -272,6 +273,7 @@ FLAC__StreamEncoderWriteStatus fs_flac_e
 		 fsound->user_data);
       }
     } else {
+      fsound->frameno += samples;
       encoded (fsound, (unsigned char *)buffer, (long)bytes,
 	       fsound->user_data);
     }
@@ -358,7 +360,7 @@ fs_flac_encode_i_ilv (FishSound * fsound
     fs_flac_enc_headers (fsound);
   //  FLAC__stream_encoder_process_interleaved(fi->fse, pcm, frames);
   fi->packetno++;
-  return 0;
+  return frames;
 }
 
 static long
@@ -381,7 +383,7 @@ fs_flac_encode_f_ilv (FishSound * fsound
     fs_flac_enc_headers (fsound);
   FLAC__stream_encoder_process_interleaved(fi->fse, buffer, frames);
   fi->packetno++;
-  return 0;
+  return frames;
 }
 #endif
 
@@ -492,13 +494,27 @@ fs_flac_delete (FishSound * fsound)
 }
 
 static int
+fs_flac_update (FishSound * fsound, int interleave, FishSoundPCM pcm_type)
+{
+  return 0;
+}
+
+static int
 fs_flac_reset (FishSound * fsound)
 {
   FishSoundFlacInfo * fi = (FishSoundFlacInfo *)fsound->codec_data;
+  /*
   if (fsound->mode == FISH_SOUND_DECODE) {
     FLAC__stream_decoder_reset(fi->fsd);
   } else if (fsound->mode == FISH_SOUND_ENCODE) {
   }
+  */
+  return 0;
+}
+
+static long
+fs_flac_flush (FishSound * fsound)
+{
   return 0;
 }
 
@@ -543,6 +559,7 @@ fish_sound_flac_codec (void)
   codec->init = fs_flac_init;
   codec->del = fs_flac_delete;
   codec->reset = fs_flac_reset;
+  codec->update = fs_flac_update;
   codec->command = fs_flac_command;
   codec->decode = fs_flac_decode;
   codec->encode_s = NULL;
@@ -553,7 +570,7 @@ fish_sound_flac_codec (void)
   codec->encode_f_ilv = fs_flac_encode_f_ilv;
   codec->encode_d = NULL;
   codec->encode_d_ilv = NULL;
-  codec->flush = NULL;
+  codec->flush = fs_flac_flush;
 
   return codec;
 }
