[Goodies-commits] r5577 - xfburn/trunk/xfburn
David Mohr
squisher at xfce.org
Sun Oct 12 05:37:41 CEST 2008
Author: squisher
Date: 2008-10-12 03:37:40 +0000 (Sun, 12 Oct 2008)
New Revision: 5577
Modified:
xfburn/trunk/xfburn/xfburn-audio-composition.c
xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c
xfburn/trunk/xfburn/xfburn-global.h
xfburn/trunk/xfburn/xfburn-preferences-dialog.c
xfburn/trunk/xfburn/xfburn-transcoder-basic.c
xfburn/trunk/xfburn/xfburn-transcoder.c
xfburn/trunk/xfburn/xfburn-transcoder.h
Log:
Moving code to get burn_tracks from wave files into TranscoderBasic, increasing maximum fifo size
Modified: xfburn/trunk/xfburn/xfburn-audio-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-composition.c 2008-10-12 00:53:33 UTC (rev 5576)
+++ xfburn/trunk/xfburn/xfburn-audio-composition.c 2008-10-12 03:37:40 UTC (rev 5577)
@@ -1159,7 +1159,6 @@
else if (S_ISREG (s.st_mode)) {
GError *error = NULL;
- DBG ("foo1");
if (!xfburn_transcoder_is_audio_file (priv->trans, path, &error)) {
XfburnNotAddingReason reason;
@@ -1175,7 +1174,6 @@
gdk_threads_leave ();
return FALSE;
}
- DBG ("bar1");
gdk_threads_enter ();
if (insertion != NULL) {
Modified: xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c 2008-10-12 00:53:33 UTC (rev 5576)
+++ xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c 2008-10-12 03:37:40 UTC (rev 5577)
@@ -42,6 +42,7 @@
#include "xfburn-progress-dialog.h"
#include "xfburn-perform-burn.h"
#include "xfburn-audio-composition.h"
+#include "xfburn-transcoder.h"
#define XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_BURN_AUDIO_CD_COMPOSITION_DIALOG, XfburnBurnAudioCdCompositionDialogPrivate))
@@ -83,7 +84,6 @@
static void cb_disc_refreshed (GtkWidget *device_box, XfburnDevice *device, XfburnBurnAudioCdCompositionDialog * dialog);
static void cb_dialog_response (XfburnBurnAudioCdCompositionDialog * dialog, gint response_id,
XfburnBurnAudioCdCompositionDialogPrivate * priv);
-static gboolean needs_swap (char header[44]);
/* globals */
static XfceTitledDialogClass *parent_class = NULL;
@@ -496,15 +496,6 @@
burn_write_opts_free (burn_options);
}
-static gboolean
-needs_swap (char header[44])
-{
- if (header[0] == 'R' && header[1] == 'I' && header[2] == 'F' && header[3] == 'X')
- return TRUE;
- else
- return FALSE;
-}
-
static void
thread_burn_composition (ThreadBurnCompositionParams * params)
{
@@ -513,12 +504,11 @@
struct burn_disc *disc;
struct burn_session *session;
struct burn_track **tracks;
- struct burn_source **srcs;
- int *fds;
int n_tracks;
int i,j;
GSList *track_list;
gboolean abort = FALSE;
+ XfburnTranscoder *trans;
struct burn_drive_info *drive_info = NULL;
@@ -534,56 +524,21 @@
n_tracks = g_slist_length (params->tracks);
tracks = g_new (struct burn_track *, n_tracks);
- srcs = g_new (struct burn_source *, n_tracks);
- fds = g_new (int, n_tracks);
+ trans = xfburn_transcoder_get_global ();
track_list = params->tracks;
for (i=0; i<n_tracks; i++) {
- char header[44];
XfburnAudioTrack *atrack = track_list->data;
+ GError *error = NULL;
- fds[i] = open (atrack->inputfile, 0);
- if (fds[i] == -1) {
- gchar *str;
- str = g_strdup_printf (_("Could not open %s!"), atrack->inputfile);
- xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), str);
- g_free (str);
+ tracks[i] = xfburn_transcoder_create_burn_track (trans, atrack, &error);
+ if (tracks[i] && error) {
+ xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), error->message);
+ g_error_free (error);
abort = TRUE;
break;
}
- /* perform a read so that libburn skips the wav header */
- read (fds[i], header, 44);
-
- srcs[i] = burn_fd_source_new (fds[i], -1 , 0);
- if (srcs[i] == NULL) {
- gchar *str;
- str = g_strdup_printf (_("Could not create burn_source from %s!"), atrack->inputfile);
- xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), str);
- g_free (str);
- close(fds[i]);
- abort = TRUE;
- break;
- }
-
- tracks[i] = burn_track_create ();
-
- if (burn_track_set_source (tracks[i], srcs[i]) != BURN_SOURCE_OK) {
- gchar *str;
- str = g_strdup_printf (_("Could not add source to track!"));
- xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), str);
- g_free (str);
- close(fds[i]);
- burn_source_free (srcs[i]);
- abort = TRUE;
- break;
- }
-
- if (needs_swap (header))
- burn_track_set_byte_swap (tracks[i], TRUE);
-
- burn_track_define_data (tracks[i], 0, 0, 1, BURN_AUDIO);
-
track_list = g_slist_next (track_list);
}
@@ -604,12 +559,12 @@
for (j=0; j<i; j++) {
burn_track_free (tracks[j]);
- burn_source_free (srcs[j]);
- close (fds[j]);
}
- g_free (srcs);
g_free (tracks);
- g_free (fds);
+
+ xfburn_transcoder_clear (trans, NULL);
+ g_object_unref (trans);
+
burn_session_free (session);
burn_disc_free (disc);
burn_finish ();
Modified: xfburn/trunk/xfburn/xfburn-global.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-global.h 2008-10-12 00:53:33 UTC (rev 5576)
+++ xfburn/trunk/xfburn/xfburn-global.h 2008-10-12 03:37:40 UTC (rev 5577)
@@ -42,7 +42,8 @@
#define DATA_COMPOSITION_DEFAULT_NAME "Data composition"
-#define XFBURN_FIFO_DEFAULT_SIZE 4096 /* in kb/s */
+#define XFBURN_FIFO_DEFAULT_SIZE 4096 /* in kb, as int */
+#define XFBURN_FIFO_MAX_SIZE 16384.0 /* in kb, as float */
#define PCM_BYTES_PER_SECS 176400
Modified: xfburn/trunk/xfburn/xfburn-preferences-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-preferences-dialog.c 2008-10-12 00:53:33 UTC (rev 5576)
+++ xfburn/trunk/xfburn/xfburn-preferences-dialog.c 2008-10-12 03:37:40 UTC (rev 5577)
@@ -326,7 +326,7 @@
gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, BORDER);
gtk_widget_show (frame);
- priv->scale_fifo = gtk_hscale_new_with_range (0.0, 8192.0, 32.0);
+ priv->scale_fifo = gtk_hscale_new_with_range (0.0, XFBURN_FIFO_MAX_SIZE, 32.0);
gtk_scale_set_value_pos (GTK_SCALE (priv->scale_fifo), GTK_POS_LEFT);
gtk_range_set_value (GTK_RANGE (priv->scale_fifo), 0);
gtk_box_pack_start (GTK_BOX (vbox3), priv->scale_fifo, FALSE, FALSE, BORDER/2);
Modified: xfburn/trunk/xfburn/xfburn-transcoder-basic.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-transcoder-basic.c 2008-10-12 00:53:33 UTC (rev 5576)
+++ xfburn/trunk/xfburn/xfburn-transcoder-basic.c 2008-10-12 03:37:40 UTC (rev 5577)
@@ -31,9 +31,13 @@
#include <unistd.h>
#include <fcntl.h>
+#include <errno.h>
+
#include <libxfce4util/libxfce4util.h>
#include <libxfcegui4/libxfcegui4.h>
+#include <libburn.h>
+
#include "xfburn-global.h"
#include "xfburn-error.h"
@@ -52,7 +56,11 @@
static gboolean is_valid_wav (const gchar *path);
static gboolean valid_wav_headers (guchar header[44]);
+static struct burn_track * create_burn_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error);
+static gboolean needs_swap (char header[44]);
+static gboolean clear (XfburnTranscoder *trans, GError **error);
+
#define XFBURN_TRANSCODER_BASIC_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_TRANSCODER_BASIC, XfburnTranscoderBasicPrivate))
enum {
@@ -60,7 +68,8 @@
};
typedef struct {
- gboolean dummy;
+ GSList *fds;
+ GSList *srcs;
} XfburnTranscoderBasicPrivate;
/*********************/
@@ -138,6 +147,8 @@
transcoder_interface_init (XfburnTranscoderInterface *iface, gpointer iface_data)
{
iface->is_audio_file = is_audio_file;
+ iface->create_burn_track = create_burn_track;
+ iface->clear = clear;
}
/* */
/* internals */
@@ -245,6 +256,82 @@
return TRUE;
}
+static struct burn_track *
+create_burn_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error)
+{
+ XfburnTranscoderBasic *basic = XFBURN_TRANSCODER_BASIC (trans);
+ XfburnTranscoderBasicPrivate *priv= XFBURN_TRANSCODER_BASIC_GET_PRIVATE (basic);
+
+ char header[44];
+ int fd;
+ struct burn_track *track;
+ struct burn_source *src;
+
+ fd = open (atrack->inputfile, 0);
+ if (fd == -1) {
+ g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_COULD_NOT_OPEN_FILE,
+ _("Could not open %s: %s"), atrack->inputfile, g_strerror (errno));
+ return NULL;
+ }
+
+ /* perform a read so that libburn skips the wav header */
+ read (fd, header, 44);
+
+ src = burn_fd_source_new (fd, -1 , 0);
+ if (src == NULL) {
+ g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_BURN_SOURCE,
+ _("Could not create burn_source from %s!"), atrack->inputfile);
+ return NULL;
+ }
+
+ track = burn_track_create ();
+
+ if (burn_track_set_source (track, src) != BURN_SOURCE_OK) {
+ g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_BURN_SOURCE,
+ _("Could not add source to track %s!"), atrack->inputfile);
+ return NULL;
+ }
+
+ if (needs_swap (header))
+ burn_track_set_byte_swap (track, TRUE);
+
+ burn_track_define_data (track, 0, 0, 1, BURN_AUDIO);
+
+ priv->fds = g_slist_prepend (priv->fds, GINT_TO_POINTER (fd));
+ priv->srcs = g_slist_prepend (priv->srcs, src);
+
+ return track;
+}
+
+static gboolean
+needs_swap (char header[44])
+{
+ if (header[0] == 'R' && header[1] == 'I' && header[2] == 'F' && header[3] == 'X')
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static gboolean
+clear (XfburnTranscoder *trans, GError **error)
+{
+ XfburnTranscoderBasic *basic = XFBURN_TRANSCODER_BASIC (trans);
+ XfburnTranscoderBasicPrivate *priv= XFBURN_TRANSCODER_BASIC_GET_PRIVATE (basic);
+
+ while (priv->fds) {
+ close (GPOINTER_TO_INT (priv->fds->data));
+
+ priv->fds = g_slist_next (priv->fds);
+ }
+ while (priv->srcs) {
+ burn_source_free ( (struct burn_source *) priv->srcs->data);
+
+ priv->srcs= g_slist_next (priv->srcs);
+ }
+
+ return TRUE;
+}
+
/* */
/* public */
/* */
Modified: xfburn/trunk/xfburn/xfburn-transcoder.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-transcoder.c 2008-10-12 00:53:33 UTC (rev 5576)
+++ xfburn/trunk/xfburn/xfburn-transcoder.c 2008-10-12 03:37:40 UTC (rev 5577)
@@ -24,6 +24,7 @@
#include "xfburn-global.h"
#include "xfburn-transcoder.h"
+#include "xfburn-error.h"
static void xfburn_transcoder_base_init (XfburnTranscoderInterface * iface);
@@ -40,7 +41,7 @@
/*************************/
//static guint signals[LAST_SIGNAL];
-GtkType
+GType
xfburn_transcoder_get_type ()
{
static GtkType type = 0;
@@ -98,10 +99,35 @@
return iface->is_audio_file (trans, fn, error);
g_warning ("Falling back to base implementation for xfburn_transcoder_is_audio_file, which always says false.");
+ g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_NOT_IMPLEMENTED, "xfburn_transcoder_is_audio_file is not implemented");
return FALSE;
}
+struct burn_track *
+xfburn_transcoder_create_burn_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error)
+{
+ XfburnTranscoderInterface *iface = XFBURN_TRANSCODER_GET_INTERFACE (trans);
+ if (iface->create_burn_track)
+ return iface->create_burn_track (trans, atrack, error);
+
+ g_warning ("Falling back to empty base implementation for xfburn_transcoder_create_burn_track.");
+ g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_NOT_IMPLEMENTED, "xfburn_transcoder_create_burn_track is not implemented");
+ return NULL;
+}
+gboolean
+xfburn_transcoder_clear (XfburnTranscoder *trans, GError **error)
+{
+ XfburnTranscoderInterface *iface = XFBURN_TRANSCODER_GET_INTERFACE (trans);
+ if (iface->clear)
+ return iface->clear (trans, error);
+
+ g_warning ("Falling back to empty base implementation for xfburn_transcoder_clear.");
+ g_set_error (error, XFBURN_ERROR, XFBURN_ERROR_NOT_IMPLEMENTED, "xfburn_transcoder_clear is not implemented");
+ return FALSE;
+}
+
+
void
xfburn_transcoder_set_global (XfburnTranscoder *trans)
{
Modified: xfburn/trunk/xfburn/xfburn-transcoder.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-transcoder.h 2008-10-12 00:53:33 UTC (rev 5576)
+++ xfburn/trunk/xfburn/xfburn-transcoder.h 2008-10-12 03:37:40 UTC (rev 5577)
@@ -24,8 +24,12 @@
#include <config.h>
#endif /* !HAVE_CONFIG_H */
-#include <gtk/gtk.h>
+#include <glib.h>
+#include <glib-object.h>
+#include <libburn.h>
+#include "xfburn-audio-composition.h"
+
G_BEGIN_DECLS
#define XFBURN_TYPE_TRANSCODER (xfburn_transcoder_get_type ())
@@ -42,15 +46,20 @@
GTypeInterface parent;
gboolean (*is_audio_file) (XfburnTranscoder *trans, const gchar *fn, GError **error);
+ struct burn_track * (*create_burn_track) (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error);
+ gboolean (*clear) (XfburnTranscoder *trans, GError **error);
} XfburnTranscoderInterface;
-GtkType xfburn_transcoder_get_type ();
-gboolean xfburn_transcoder_is_audio_file (XfburnTranscoder *trans, const gchar *fn, GError **error);
+GType xfburn_transcoder_get_type ();
void xfburn_transcoder_set_global (XfburnTranscoder *trans);
XfburnTranscoder *xfburn_transcoder_get_global ();
+gboolean xfburn_transcoder_is_audio_file (XfburnTranscoder *trans, const gchar *fn, GError **error);
+struct burn_track *xfburn_transcoder_create_burn_track (XfburnTranscoder *trans, XfburnAudioTrack *atrack, GError **error);
+gboolean xfburn_transcoder_clear (XfburnTranscoder *trans, GError **error);
+
G_END_DECLS
#endif /* __XFBURN_TRANSCODER_H__ */
More information about the Goodies-commits
mailing list