Package: gst-plugins0.8
Severity: important

* start sound-juicer
* try to extract an album in flac
=> crash

This is due to the flac API change:
http://bugzilla.gnome.org/show_bug.cgi?id=164252

Patch from the gstreamer's CVS attached to the mail.




===================================================================
RCS file: /cvs/gstreamer/gst-plugins/ext/flac/gstflacenc.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- ext/flac/gstflacenc.c	2004/11/01 14:43:35	1.49
+++ ext/flac/gstflacenc.c	2005/01/09 20:01:59	1.50
@@ -329,6 +329,7 @@
   flacenc->encoder = FLAC__seekable_stream_encoder_new ();
 
   flacenc->negotiated = FALSE;
+  flacenc->offset = 0;
   flacenc->first = TRUE;
   flacenc->first_buf = NULL;
   flacenc->data = NULL;
@@ -442,8 +443,10 @@
       gst_event_new_seek ((GstSeekType) (int) (GST_FORMAT_BYTES |
           GST_SEEK_METHOD_SET), absolute_byte_offset);
 
-  if (event)
+  if (event) {
     gst_pad_push (flacenc->srcpad, GST_DATA (event));
+    flacenc->offset = absolute_byte_offset;
+  }
 
   return FLAC__STREAM_ENCODER_OK;
 }
@@ -472,6 +475,18 @@
   }
 
   gst_pad_push (flacenc->srcpad, GST_DATA (outbuf));
+  flacenc->offset += bytes;
+
+  return FLAC__STREAM_ENCODER_OK;
+}
+
+static FLAC__SeekableStreamEncoderTellStatus
+gst_flacenc_tell_callback (const FLAC__SeekableStreamEncoder * encoder,
+    FLAC__uint64 * absolute_byte_offset, void *client_data)
+{
+  FlacEnc *flacenc = GST_FLACENC (client_data);
+
+  *absolute_byte_offset = flacenc->offset;
 
   return FLAC__STREAM_ENCODER_OK;
 }
@@ -579,6 +594,8 @@
         gst_flacenc_write_callback);
     FLAC__seekable_stream_encoder_set_seek_callback (flacenc->encoder,
         gst_flacenc_seek_callback);
+    FLAC__seekable_stream_encoder_set_tell_callback (flacenc->encoder,
+        gst_flacenc_tell_callback);
 
     FLAC__seekable_stream_encoder_set_client_data (flacenc->encoder, flacenc);
 
@@ -782,6 +799,7 @@
         FLAC__seekable_stream_encoder_finish (flacenc->encoder);
       }
       flacenc->negotiated = FALSE;
+      flacenc->offset = 0;
       if (flacenc->first_buf)
         gst_buffer_unref (flacenc->first_buf);
       flacenc->first_buf = NULL;
===================================================================
RCS file: /cvs/gstreamer/gst-plugins/ext/flac/gstflacenc.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- ext/flac/gstflacenc.h	2004/03/15 16:32:30	1.10
+++ ext/flac/gstflacenc.h	2005/01/09 20:01:59	1.11
@@ -46,6 +46,7 @@
 
   gboolean 	 first;
   GstBuffer	*first_buf;
+  guint64	 offset;
   gboolean 	 eos;
   gint 		 channels;
   gint 		 depth;

Reply via email to