[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