[Goodies-commits] r7505 - xfburn/trunk/xfburn

David Mohr squisher at xfce.org
Tue Jun 9 02:20:40 CEST 2009


Author: squisher
Date: 2009-06-09 00:20:39 +0000 (Tue, 09 Jun 2009)
New Revision: 7505

Modified:
   xfburn/trunk/xfburn/xfburn-audio-track-gst.c
   xfburn/trunk/xfburn/xfburn-audio-track.c
   xfburn/trunk/xfburn/xfburn-transcoder-basic.c
   xfburn/trunk/xfburn/xfburn-transcoder-gst.c
   xfburn/trunk/xfburn/xfburn-transcoder.c
   xfburn/trunk/xfburn/xfburn-transcoder.h
Log:
Create XfburnAudioTrack in the interface, properly copy and free it

Modified: xfburn/trunk/xfburn/xfburn-audio-track-gst.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-track-gst.c	2009-06-08 19:01:16 UTC (rev 7504)
+++ xfburn/trunk/xfburn/xfburn-audio-track-gst.c	2009-06-09 00:20:39 UTC (rev 7505)
@@ -47,6 +47,8 @@
 {
   XfburnAudioTrackGst *copy;
 
+  DBG ("copying...");
+
   copy = g_new0(XfburnAudioTrackGst, 1);
 
   memcpy (copy, boxed, sizeof (XfburnAudioTrackGst));

Modified: xfburn/trunk/xfburn/xfburn-audio-track.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-track.c	2009-06-08 19:01:16 UTC (rev 7504)
+++ xfburn/trunk/xfburn/xfburn-audio-track.c	2009-06-09 00:20:39 UTC (rev 7505)
@@ -48,10 +48,13 @@
   XfburnAudioTrack *atrack = XFBURN_AUDIO_TRACK (boxed);
   XfburnAudioTrack *copy;
 
+  DBG ("copying...");
+
   copy = g_new0(XfburnAudioTrack, 1);
-
   memcpy (copy, boxed, sizeof (XfburnAudioTrack));
 
+  copy->inputfile = g_strdup (atrack->inputfile);
+
   if (atrack->data)
     copy->data = g_boxed_copy (atrack->type, atrack->data);
 
@@ -65,7 +68,10 @@
 
   DBG ("Freeing audio track");
 
-  g_boxed_free (atrack->type, atrack->data);
+  g_free (atrack->inputfile);
 
+  if (atrack->data)
+    g_boxed_free (atrack->type, atrack->data);
+
   g_free (boxed);
 }

Modified: xfburn/trunk/xfburn/xfburn-transcoder-basic.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-transcoder-basic.c	2009-06-08 19:01:16 UTC (rev 7504)
+++ xfburn/trunk/xfburn/xfburn-transcoder-basic.c	2009-06-09 00:20:39 UTC (rev 7505)
@@ -55,7 +55,7 @@
 static const gchar * get_description (XfburnTranscoder *trans);
 static gboolean is_initialized (XfburnTranscoder *trans, GError **error);
 
-static XfburnAudioTrack * get_audio_track (XfburnTranscoder *trans, const gchar *fn, GError **error);
+static gboolean get_audio_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error);
 static gboolean has_audio_ext (const gchar *path);
 static gboolean is_valid_wav (const gchar *path);
 static gboolean valid_wav_headers (guchar header[44]);
@@ -187,39 +187,34 @@
   return TRUE;
 }
 
-static XfburnAudioTrack *
-get_audio_track (XfburnTranscoder *trans, const gchar *fn, GError **error)
+static gboolean
+get_audio_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error)
 {
-  XfburnAudioTrack *atrack;
   struct stat s;
 
-  if (!has_audio_ext (fn)) {
+  if (!has_audio_ext (atrack->inputfile)) {
     g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_NOT_AUDIO_EXT,
-                 _("File %s does not have a .wav extension"), fn);
-    return NULL;
+                 _("File %s does not have a .wav extension"), atrack->inputfile);
+    return FALSE;
   }
-  if (!is_valid_wav (fn)) {
+  if (!is_valid_wav (atrack->inputfile)) {
     g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_NOT_AUDIO_FORMAT,
-                 _("File %s does not contain uncompressed PCM wave audio"), fn);
-    return NULL;
+                 _("File %s does not contain uncompressed PCM wave audio"), atrack->inputfile);
+    return FALSE;
   }
 
-  if (stat (fn, &s) != 0) {
+  if (stat (atrack->inputfile, &s) != 0) {
     g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_STAT,
-                 _("Could not stat %s: %s"), fn, g_strerror (errno));
-    return NULL;
+                 _("Could not stat %s: %s"), atrack->inputfile, g_strerror (errno));
+    return FALSE;
   }
 
-  atrack = g_new0 (XfburnAudioTrack, 1);
-  /* FIXME: when do we free inputfile?? */
-  atrack->inputfile = g_strdup (fn);
-  atrack->pos = -1;
   atrack->length = (s.st_size - 44) / PCM_BYTES_PER_SECS;
   atrack->sectors = (s.st_size / AUDIO_BYTES_PER_SECTOR);
   if (s.st_size % AUDIO_BYTES_PER_SECTOR > 0)
     atrack->sectors++;
 
-  return atrack;
+  return TRUE;
 }
 
 static gboolean 

Modified: xfburn/trunk/xfburn/xfburn-transcoder-gst.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-transcoder-gst.c	2009-06-08 19:01:16 UTC (rev 7504)
+++ xfburn/trunk/xfburn/xfburn-transcoder-gst.c	2009-06-09 00:20:39 UTC (rev 7505)
@@ -76,7 +76,7 @@
 static void recreate_pipeline (XfburnTranscoderGst *trans);
 static const gchar * get_name (XfburnTranscoder *trans);
 static const gchar * get_description (XfburnTranscoder *trans);
-static XfburnAudioTrack * get_audio_track (XfburnTranscoder *trans, const gchar *fn, GError **error);
+static gboolean get_audio_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error);
 
 static struct burn_track * create_burn_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error);
 
@@ -756,24 +756,23 @@
 #endif
 
 
-static XfburnAudioTrack *
-get_audio_track (XfburnTranscoder *trans, const gchar *fn, GError **error)
+static gboolean
+get_audio_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error)
 {
   XfburnTranscoderGst *tgst = XFBURN_TRANSCODER_GST (trans);
   XfburnTranscoderGstPrivate *priv= XFBURN_TRANSCODER_GST_GET_PRIVATE (tgst);
 
-  XfburnAudioTrack *atrack;
   XfburnAudioTrackGst *gtrack;
   GTimeVal tv;
   off_t size;
 
   priv->is_audio = FALSE;
 #if DEBUG_GST > 0
-  DBG ("Querying GST about %s", fn);
+  DBG ("Querying GST about %s", atrack->inputfile);
 #endif
 
   priv->state = XFBURN_TRANSCODER_GST_STATE_IDENTIFYING;
-  g_object_set (G_OBJECT (priv->source), "location", fn, NULL);
+  g_object_set (G_OBJECT (priv->source), "location", atrack->inputfile, NULL);
   if (gst_element_set_state (priv->pipeline, GST_STATE_PAUSED) == GST_STATE_CHANGE_FAILURE) {
 #if DEBUG_GST > 0
     g_message ("Supposedly failed to change gstreamer state, ignoring it as usually it does it anyways.");
@@ -790,7 +789,7 @@
     recreate_pipeline (tgst);
     g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_GST_TIMEOUT,
                  _("Gstreamer did not like this file (detection timed out)"));
-    return NULL;
+    return FALSE;
   }
 #if DEBUG_GST > 0
   DBG ("Got an identification result ");
@@ -798,16 +797,12 @@
 
   if (!priv->is_audio) {
     g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_NOT_AUDIO_FORMAT,
-                 _("%s\n\nis not an audio file:\n\n%s"), fn, priv->error->message);
+                 _("%s\n\nis not an audio file:\n\n%s"), atrack->inputfile, priv->error->message);
     g_error_free (priv->error);
     priv->error = NULL;
-    return NULL;
+    return FALSE;
   }
 
-  atrack = g_new0 (XfburnAudioTrack, 1);
-  /* FIXME: when do we free inputfile?? */
-  atrack->inputfile = g_strdup (fn);
-  atrack->pos = -1;
   atrack->length = priv->duration / 1000000000;
 
   size = (off_t) floorf (priv->duration * (PCM_BYTES_PER_SECS / (float) 1000000000));
@@ -822,7 +817,7 @@
 
   gtrack->size = size;
 
-  return atrack;
+  return TRUE;
 }
 
 

Modified: xfburn/trunk/xfburn/xfburn-transcoder.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-transcoder.c	2009-06-08 19:01:16 UTC (rev 7504)
+++ xfburn/trunk/xfburn/xfburn-transcoder.c	2009-06-09 00:20:39 UTC (rev 7505)
@@ -130,8 +130,23 @@
 xfburn_transcoder_get_audio_track (XfburnTranscoder *trans, const gchar *fn, GError **error)
 {
   XfburnTranscoderInterface *iface = XFBURN_TRANSCODER_GET_INTERFACE (trans);
-  if (iface->get_audio_track)
-    return iface->get_audio_track (trans, fn, error);
+
+  if (iface->get_audio_track) {
+    XfburnAudioTrack *atrack = g_new0 (XfburnAudioTrack, 1);
+    gboolean valid_track;
+
+    atrack->inputfile = g_strdup (fn);
+    atrack->pos = -1;
+
+    valid_track = iface->get_audio_track (trans, atrack, error);
+    
+    if (valid_track)
+      return atrack;
+    
+    /* not a valid track, clean up */
+    g_boxed_free (XFBURN_TYPE_AUDIO_TRACK, atrack);
+    return NULL;
+  }
   
   g_warning ("Falling back to base implementation for xfburn_transcoder_get_audio_track, which always says false.");
   g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_NOT_IMPLEMENTED, _("not implemented"));

Modified: xfburn/trunk/xfburn/xfburn-transcoder.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-transcoder.h	2009-06-08 19:01:16 UTC (rev 7504)
+++ xfburn/trunk/xfburn/xfburn-transcoder.h	2009-06-09 00:20:39 UTC (rev 7505)
@@ -49,7 +49,7 @@
   const gchar * (*get_name) (XfburnTranscoder *trans);
   const gchar * (*get_description) (XfburnTranscoder *trans);
   gboolean (*is_initialized) (XfburnTranscoder *trans, GError **error);
-  XfburnAudioTrack * (*get_audio_track) (XfburnTranscoder *trans, const gchar *fn, GError **error);
+  gboolean (*get_audio_track) (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error);
   struct burn_track * (*create_burn_track) (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error);
 
   /* optional functions */




More information about the Goodies-commits mailing list