[Goodies-commits] r5299 - xfburn/trunk/xfburn
David Mohr
squisher at xfce.org
Mon Aug 25 03:14:03 CEST 2008
Author: squisher
Date: 2008-08-25 01:14:03 +0000 (Mon, 25 Aug 2008)
New Revision: 5299
Added:
xfburn/trunk/xfburn/xfburn-audio-disc-usage.c
xfburn/trunk/xfburn/xfburn-audio-disc-usage.h
Modified:
xfburn/trunk/xfburn/Makefile.am
xfburn/trunk/xfburn/xfburn-audio-composition.c
xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c
xfburn/trunk/xfburn/xfburn-perform-burn.c
Log:
Adding very basic audio cd support: only pcm wav supported so far, only a rough check for compatible files
Modified: xfburn/trunk/xfburn/Makefile.am
===================================================================
--- xfburn/trunk/xfburn/Makefile.am 2008-08-24 22:59:50 UTC (rev 5298)
+++ xfburn/trunk/xfburn/Makefile.am 2008-08-25 01:14:03 UTC (rev 5299)
@@ -34,6 +34,7 @@
xfburn-audio-composition.h \
xfburn-disc-usage.h \
xfburn-data-disc-usage.h \
+ xfburn-audio-disc-usage.h \
xfburn-fs-browser.h \
xfburn-directory-browser.h \
xfburn-preferences-dialog.h \
@@ -67,6 +68,7 @@
xfburn-audio-composition.c \
xfburn-disc-usage.c \
xfburn-data-disc-usage.c \
+ xfburn-audio-disc-usage.c \
xfburn-fs-browser.c \
xfburn-directory-browser.c \
xfburn-preferences-dialog.c \
Modified: xfburn/trunk/xfburn/xfburn-audio-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-composition.c 2008-08-24 22:59:50 UTC (rev 5298)
+++ xfburn/trunk/xfburn/xfburn-audio-composition.c 2008-08-25 01:14:03 UTC (rev 5299)
@@ -50,7 +50,7 @@
#include "xfburn-adding-progress.h"
#include "xfburn-composition.h"
-#include "xfburn-disc-usage.h"
+#include "xfburn-audio-disc-usage.h"
#include "xfburn-main-window.h"
#include "xfburn-utils.h"
#include "xfburn-burn-audio-cd-composition-dialog.h"
@@ -415,7 +415,7 @@
/* FIXME: progress should have a busy cursor */
/* disc usage */
- priv->disc_usage = xfburn_disc_usage_new ();
+ priv->disc_usage = xfburn_audio_disc_usage_new ();
gtk_box_pack_start (GTK_BOX (composition), priv->disc_usage, FALSE, FALSE, 5);
gtk_widget_show (priv->disc_usage);
g_signal_connect (G_OBJECT (priv->disc_usage), "begin-burn", G_CALLBACK (cb_begin_burn), composition);
@@ -486,15 +486,17 @@
XfburnAudioTrack *track = g_new0 (XfburnAudioTrack, 1);
gtk_tree_model_get (model, &iter,
- AUDIO_COMPOSITION_COLUMN_CONTENT, &track->inputfile,
+ AUDIO_COMPOSITION_COLUMN_PATH, &track->inputfile,
AUDIO_COMPOSITION_COLUMN_POS, &track->pos,
-1);
- list = g_slist_append (list, track);
+ list = g_slist_prepend (list, track);
} while (gtk_tree_model_iter_next (model, &iter));
}
+ list = g_slist_reverse (list);
+
return list;
}
@@ -1114,7 +1116,7 @@
AUDIO_COMPOSITION_COLUMN_TYPE, AUDIO_COMPOSITION_TYPE_RAW, -1);
gdk_threads_leave ();
- //xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), s.st_size);
+ xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), s.st_size);
}
//g_free (humansize);
Copied: xfburn/trunk/xfburn/xfburn-audio-disc-usage.c (from rev 5286, xfburn/trunk/xfburn/xfburn-data-disc-usage.c)
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-disc-usage.c (rev 0)
+++ xfburn/trunk/xfburn/xfburn-audio-disc-usage.c 2008-08-25 01:14:03 UTC (rev 5299)
@@ -0,0 +1,158 @@
+/* $Id$ */
+/*
+ * Copyright (c) 2005-2006 Jean-François Wauthy (pollux at xfce.org)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* !HAVE_CONFIG_H */
+
+#include <gtk/gtk.h>
+#include <libxfce4util/libxfce4util.h>
+#include <libxfcegui4/libxfcegui4.h>
+
+#include "xfburn-disc-usage.h"
+#include "xfburn-audio-disc-usage.h"
+#include "xfburn-global.h"
+#include "xfburn-settings.h"
+#include "xfburn-utils.h"
+#include "xfburn-stock.h"
+#include "xfburn-main-window.h"
+
+/* prototypes */
+static void xfburn_audio_disc_usage_class_init (XfburnAudioDiscUsageClass *);
+static void xfburn_audio_disc_usage_init (XfburnAudioDiscUsage *);
+
+static gboolean can_burn (XfburnDiscUsage *disc_usage);
+static void xfburn_audio_disc_usage_update_size (XfburnDiscUsage * disc_usage);
+
+/* globals */
+static XfburnDiscUsageClass *parent_class = NULL;
+
+#define DEFAULT_DISK_SIZE_LABEL 2
+#define LAST_CD_LABEL 4
+#define NUM_LABELS 7
+
+XfburnDiscLabels audiodiscsizes[] = {
+ {
+ 200 *1024 * 1024, "200MB CD"},
+ {
+ 681984000, "650MB CD"},
+ {
+ 737280000, "700MB CD"},
+ {
+ 829440000, "800MB CD"},
+ {
+ 912384000, "900MB CD"},
+ {
+ G_GINT64_CONSTANT(0x1182a0000), "4.3GB DVD"}, /* 4 700 372 992 */
+ {
+ G_GINT64_CONSTANT(0x1fd3e0000), "7.9GB DVD"}, /* 8 543 666 176 */
+};
+
+/*******************************/
+/* XfburnAudioComposition class */
+/*******************************/
+GtkType
+xfburn_audio_disc_usage_get_type (void)
+{
+ static GtkType disc_usage_type = 0;
+
+ if (!disc_usage_type) {
+ static const GTypeInfo disc_usage_info = {
+ sizeof (XfburnAudioDiscUsageClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) xfburn_audio_disc_usage_class_init,
+ NULL,
+ NULL,
+ sizeof (XfburnAudioDiscUsage),
+ 0,
+ (GInstanceInitFunc) xfburn_audio_disc_usage_init
+ };
+
+ disc_usage_type = g_type_register_static (XFBURN_TYPE_DISC_USAGE, "XfburnAudioDiscUsage", &disc_usage_info, 0);
+ }
+
+ return disc_usage_type;
+}
+
+static void
+xfburn_audio_disc_usage_class_init (XfburnAudioDiscUsageClass * klass)
+{
+ GObjectClass *gobject_class;
+ XfburnDiscUsageClass *pklass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class = G_OBJECT_CLASS (klass);
+
+ /* override virtual methods */
+ pklass = XFBURN_DISC_USAGE_CLASS(klass);
+
+ pklass->labels = parent_class->labels = audiodiscsizes;
+ pklass->update_size = parent_class->update_size = xfburn_audio_disc_usage_update_size;
+ pklass->can_burn = parent_class->can_burn = can_burn;
+}
+
+static void
+xfburn_audio_disc_usage_init (XfburnAudioDiscUsage * disc_usage)
+{
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR ( XFBURN_DISC_USAGE (disc_usage)->progress_bar), "0 B");
+}
+
+/* internals */
+static void
+xfburn_audio_disc_usage_update_size (XfburnDiscUsage * disc_usage)
+{
+ gfloat fraction;
+ gchar *size;
+
+ fraction = disc_usage->size / audiodiscsizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size;
+ if (fraction > 1.0)
+ fraction = 1.0;
+ if (fraction < 0.0)
+ fraction = 0.0;
+
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (disc_usage->progress_bar), fraction > 1.0 ? 1.0 : fraction);
+
+ if (xfburn_settings_get_boolean ("human-readable-units", TRUE))
+ size = xfburn_humanreadable_filesize ((guint64) disc_usage->size);
+ else
+ size = g_strdup_printf ("%.0lf B", disc_usage->size);
+
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (disc_usage->progress_bar), size);
+
+ g_free (size);
+}
+
+static gboolean
+can_burn (XfburnDiscUsage *disc_usage)
+{
+ if (disc_usage->size == 0 ||
+ disc_usage->size > audiodiscsizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+GtkWidget *
+xfburn_audio_disc_usage_new (void)
+{
+ return g_object_new (xfburn_audio_disc_usage_get_type (), NULL);
+}
+
Property changes on: xfburn/trunk/xfburn/xfburn-audio-disc-usage.c
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:mergeinfo
+
Copied: xfburn/trunk/xfburn/xfburn-audio-disc-usage.h (from rev 5286, xfburn/trunk/xfburn/xfburn-data-disc-usage.h)
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-disc-usage.h (rev 0)
+++ xfburn/trunk/xfburn/xfburn-audio-disc-usage.h 2008-08-25 01:14:03 UTC (rev 5299)
@@ -0,0 +1,54 @@
+/* $Id$ */
+/*
+ * Copyright (c) 2005-2006 Jean-François Wauthy (pollux at xfce.org)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFBURN_AUDIO_DISC_USAGE_H__
+#define __XFBURN_AUDIO_DISC_USAGE_H__
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include "xfburn-disc-usage.h"
+
+G_BEGIN_DECLS
+
+#define XFBURN_TYPE_AUDIO_DISC_USAGE (xfburn_audio_disc_usage_get_type ())
+#define XFBURN_AUDIO_DISC_USAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFBURN_TYPE_AUDIO_DISC_USAGE, XfburnAudioDiscUsage))
+#define XFBURN_AUDIO_DISC_USAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), XFBURN_TYPE_AUDIO_DISC_USAGE, XfburnAudioDiscUsageClass))
+#define XFBURN_IS_AUDIO_DISC_USAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFBURN_TYPE_AUDIO_DISC_USAGE))
+#define XFBURN_IS_AUDIO_DISC_USAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFBURN_TYPE_AUDIO_DISC_USAGE))
+#define XFBURN_AUDIO_DISC_USAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XFBURN_TYPE_AUDIO_DISC_USAGE, XfburnAudioDiscUsageClass))
+
+typedef struct
+{
+ XfburnDiscUsage disc_usage;
+} XfburnAudioDiscUsage;
+
+typedef struct
+{
+ XfburnDiscUsageClass parent_class;
+} XfburnAudioDiscUsageClass;
+
+GtkType xfburn_audio_disc_usage_get_type (void);
+GtkWidget *xfburn_audio_disc_usage_new (void);
+
+G_END_DECLS
+
+#endif
Property changes on: xfburn/trunk/xfburn/xfburn-audio-disc-usage.h
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:mergeinfo
+
Modified: xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c 2008-08-24 22:59:50 UTC (rev 5298)
+++ xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c 2008-08-25 01:14:03 UTC (rev 5299)
@@ -41,6 +41,7 @@
#include "xfburn-burn-audio-cd-composition-dialog.h"
#include "xfburn-progress-dialog.h"
#include "xfburn-perform-burn.h"
+#include "xfburn-audio-composition.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))
@@ -60,11 +61,6 @@
GtkWidget *entry_path_iso;
GtkWidget *check_dummy;
GtkWidget *button_proceed;
- /*
- * Disabled: change button_proceed functionality
- GtkWidget *label_proceed;
- GtkWidget *image_proceed;
- */
gint response;
} XfburnBurnAudioCdCompositionDialogPrivate;
@@ -74,19 +70,6 @@
PROP_TRACK_LIST,
};
-/*
- * Disabled: change button_proceed functionality
-char *proceed_text[] = {
- "Burn Composition",
- " Blank Disc ",
-};
-
-char *proceed_image[] = {
- "xfburn-burn-cd",
- "xfburn-blank-cdrw",
-};
-*/
-
/* prototypes */
static void xfburn_burn_audio_cd_composition_dialog_class_init (XfburnBurnAudioCdCompositionDialogClass * klass);
static GObject * xfburn_burn_audio_cd_composition_dialog_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties);
@@ -95,12 +78,6 @@
static void xfburn_burn_audio_cd_composition_dialog_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec);
static void xfburn_burn_audio_cd_composition_dialog_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec);
-/*
- * Disabled: change button_proceed functionality
-GtkWidget * create_proceed_button (XfburnBurnAudioCdCompositionDialog * dialog, const gchar *stock, const gchar *text);
-void update_proceed_button (XfburnBurnAudioCdCompositionDialog * dialog);
-static void cb_proceed_clicked (GtkButton * button, XfburnBurnAudioCdCompositionDialog * dialog);
-*/
static void cb_check_only_iso_toggled (GtkToggleButton * button, XfburnBurnAudioCdCompositionDialog * dialog);
static void cb_browse_iso (GtkButton * button, XfburnBurnAudioCdCompositionDialog * dialog);
static void cb_disc_refreshed (GtkWidget *device_box, XfburnDevice *device, XfburnBurnAudioCdCompositionDialog * dialog);
@@ -278,11 +255,6 @@
gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_CANCEL);
priv->button_proceed = button = xfce_create_mixed_button ("xfburn-burn-cd", _("_Burn Composition"));
- /*
- * Disabled: change button_proceed functionality
- button = create_proceed_button (obj, "xfburn-burn-cd", "");
- g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_proceed_clicked), obj);
- */
gtk_widget_show (button);
gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_OK);
@@ -336,43 +308,6 @@
}
/* internals */
-/*
- * Disabled: change button_proceed functionality
-GtkWidget *
-create_proceed_button (XfburnBurnAudioCdCompositionDialog * dialog, const gchar *stock, const gchar *text)
-{
- XfburnBurnAudioCdCompositionDialogPrivate *priv = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_GET_PRIVATE (dialog);
- GtkWidget *button, *align, *image, *hbox, *label;
-
- priv->button_proceed = button = gtk_button_new ();
- priv->label_proceed = label = gtk_label_new_with_mnemonic (text);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), button);
-
- priv->image_proceed = image = gtk_image_new_from_stock (stock, GTK_ICON_SIZE_BUTTON);
- hbox = gtk_hbox_new (FALSE, 2);
-
- align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
-
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
- gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- gtk_container_add (GTK_CONTAINER (button), align);
- gtk_container_add (GTK_CONTAINER (align), hbox);
- gtk_widget_show_all (align);
-
- return button;
-}
-
-void
-update_proceed_button (XfburnBurnAudioCdCompositionDialog * dialog)
-{
- XfburnBurnAudioCdCompositionDialogPrivate *priv = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_GET_PRIVATE (dialog);
-
- gtk_label_set_text (GTK_LABEL (priv->label_proceed), _(proceed_text[priv->response]));
- gtk_image_set_from_stock (GTK_IMAGE (priv->image_proceed), proceed_image[priv->response], GTK_ICON_SIZE_BUTTON);
-}
-*/
-
static void
cb_check_only_iso_toggled (GtkToggleButton * button, XfburnBurnAudioCdCompositionDialog * dialog)
{
@@ -394,15 +329,7 @@
}
}
-/*
- * Disabled: change button_proceed functionality
static void
-cb_proceed_clicked (GtkButton * button, XfburnBurnAudioCdCompositionDialog * dialog)
-{
-}
-*/
-
-static void
cb_browse_iso (GtkButton * button, XfburnBurnAudioCdCompositionDialog * dialog)
{
XfburnBurnAudioCdCompositionDialogPrivate *priv = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_GET_PRIVATE (dialog);
@@ -418,16 +345,6 @@
g_object_get (G_OBJECT (priv->device_box), "valid", &valid_disc, NULL);
- /*
- * Disabled: change button_proceed functionality
- if (!valid_disc && xfburn_device_list_get_disc_status () == BURN_DISC_FULL && xfburn_device_list_disc_is_erasable ()) {
- priv->response = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_BLANK;
- valid_disc = TRUE;
- } else {
- priv->response = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_BURN;
- }
- update_proceed_button (dialog);
- */
gtk_widget_set_sensitive (priv->button_proceed, valid_disc);
}
@@ -511,8 +428,7 @@
typedef struct {
GtkWidget *dialog_progress;
XfburnDevice *device;
- struct burn_source *src;
- gboolean is_fifo;
+ GSList *tracks;
gint speed;
XfburnWriteMode write_mode;
gboolean eject;
@@ -522,12 +438,12 @@
static void
thread_burn_prep_and_burn (ThreadBurnCompositionParams * params, struct burn_drive *drive,
- struct burn_disc *disc, struct burn_session *session, struct burn_track *track)
+ struct burn_disc *disc, struct burn_session *session, int n_tracks, struct burn_track **tracks)
{
GtkWidget *dialog_progress = params->dialog_progress;
struct burn_write_opts * burn_options;
- gint ret;
+ gint ret,i;
ret = burn_disc_add_session (disc, session, BURN_POS_END);
if (ret == 0) {
@@ -535,12 +451,9 @@
return;
}
- if (burn_track_set_source (track, params->src) != BURN_SOURCE_OK) {
- xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), _("Cannot attach source object to track object"));
- return;
+ for (i=0; i<n_tracks; i++) {
+ burn_session_add_track (session, tracks[i], BURN_POS_END);
}
-
- burn_session_add_track (session, track, BURN_POS_END);
burn_options = burn_write_opts_new (drive);
burn_write_opts_set_perform_opc (burn_options, 0);
@@ -572,7 +485,7 @@
burn_drive_set_speed (drive, 0, params->speed);
burn_write_opts_set_underrun_proof (burn_options, params->burnfree ? 1 : 0);
- xfburn_perform_burn_write (dialog_progress, drive, params->write_mode, burn_options, disc, (params->is_fifo ? params->src : NULL));
+ xfburn_perform_burn_write (dialog_progress, drive, params->write_mode, burn_options, disc, NULL);
burn_write_opts_free (burn_options);
}
@@ -584,34 +497,88 @@
struct burn_disc *disc;
struct burn_session *session;
- struct burn_track *track;
+ struct burn_track **tracks;
+ struct burn_source **srcs;
+ int *fds;
+ int n_tracks;
+ int i;
+ GSList *track_list;
struct burn_drive_info *drive_info = NULL;
if (!burn_initialize ()) {
g_critical ("Unable to initialize libburn");
- burn_source_free (params->src);
+ /* FIXME: free contents of params! */
g_free (params);
return;
}
disc = burn_disc_create ();
session = burn_session_create ();
- track = burn_track_create ();
+ 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);
+
+ track_list = params->tracks;
+ for (i=0; i<n_tracks; i++) {
+ char header[44];
+ XfburnAudioTrack *atrack = track_list->data;
+
+ fds[i] = open (atrack->inputfile, 0);
+ if (fds[i] == -1)
+ g_error ("Could not open %s!", atrack->inputfile);
+
+ read (fds[i], header, 44);
+
+ srcs[i] = burn_fd_source_new (fds[i], -1 , 0);
+ if (srcs[i] == NULL)
+ g_error ("Could not create burn_source from %s!", atrack->inputfile);
+
+ tracks[i] = burn_track_create ();
+
+ if (burn_track_set_source (tracks[i], srcs[i]) != BURN_SOURCE_OK)
+ g_error ("Could not add source to track!");
+
+ /* FIXME: obviously this is a very crude check... */
+ header[4] = '\0';
+ if (strcmp (header, "RIFX") == 0)
+ burn_track_set_byte_swap (tracks[i], TRUE);
+ else if (strcmp (header, "RIFF") != 0)
+ g_error ("%s is not a wave file!", atrack->inputfile);
+
+ burn_track_define_data (tracks[i], 0, 0, 1, BURN_AUDIO);
+
+ track_list = g_slist_next (track_list);
+ }
+
+ /*
+ src_fifo = burn_fifo_source_new (src, 2048, xfburn_settings_get_int ("fifo-size", XFBURN_FIFO_DEFAULT_SIZE) / 2, 0);
+ burn_source_free (src);
+ */
+
+
if (!xfburn_device_grab (params->device, &drive_info)) {
xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), _("Unable to grab drive"));
} else {
- thread_burn_prep_and_burn (params, drive_info->drive, disc, session, track);
+ thread_burn_prep_and_burn (params, drive_info->drive, disc, session, n_tracks, tracks);
burn_drive_release (drive_info->drive, params->eject ? 1 : 0);
}
- burn_track_free (track);
+ for (i=0; i<n_tracks; i++) {
+ burn_track_free (tracks[i]);
+ burn_source_free (srcs[i]);
+ close (fds[i]);
+ }
+ g_free (srcs);
+ g_free (tracks);
+ g_free (fds);
burn_session_free (session);
burn_disc_free (disc);
burn_finish ();
- burn_source_free (params->src);
+ /* FIXME: free track_list here? */
g_free (params);
}
@@ -632,8 +599,6 @@
}
*/
- /* FIXME: create burn source from priv->track_list */
-
dialog_progress = xfburn_progress_dialog_new (GTK_WINDOW (dialog));
gtk_window_set_transient_for (GTK_WINDOW (dialog_progress), gtk_window_get_transient_for (GTK_WINDOW (dialog)));
gtk_widget_hide (GTK_WIDGET (dialog));
@@ -655,21 +620,17 @@
XfburnDevice *device;
gint speed;
XfburnWriteMode write_mode;
- struct burn_source * src_fifo = NULL;
+ //struct burn_source * src_fifo = NULL;
device = xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX (priv->device_box));
speed = xfburn_device_box_get_speed (XFBURN_DEVICE_BOX (priv->device_box));
write_mode = xfburn_device_box_get_mode (XFBURN_DEVICE_BOX (priv->device_box));
- src_fifo = burn_fifo_source_new (src, 2048, xfburn_settings_get_int ("fifo-size", XFBURN_FIFO_DEFAULT_SIZE) / 2, 0);
- burn_source_free (src);
-
/* burn composition */
params = g_new0 (ThreadBurnCompositionParams, 1);
params->dialog_progress = dialog_progress;
params->device = device;
- params->src = src_fifo;
- params->is_fifo = TRUE;
+ params->tracks = priv->track_list;
params->speed = speed;
params->write_mode = write_mode;
params->eject = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->check_eject));
Modified: xfburn/trunk/xfburn/xfburn-perform-burn.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-perform-burn.c 2008-08-24 22:59:50 UTC (rev 5298)
+++ xfburn/trunk/xfburn/xfburn-perform-burn.c 2008-08-25 01:14:03 UTC (rev 5299)
@@ -67,6 +67,7 @@
XfburnProgressDialogStatus final_status;
const char *final_message;
gdouble percent = 0.0;
+ int dbg_no;
while (burn_drive_get_status (drive, NULL) != BURN_DRIVE_IDLE)
usleep(100001);
@@ -112,9 +113,12 @@
while (burn_drive_get_status (drive, NULL) == BURN_DRIVE_SPAWNING)
usleep(1002);
+
time_start = time (NULL);
+ dbg_no = 0;
while ((status = burn_drive_get_status (drive, &progress)) != BURN_DRIVE_IDLE) {
time_t time_now = time (NULL);
+ dbg_no++;
switch (status) {
case BURN_DRIVE_WRITING:
@@ -124,6 +128,8 @@
int fifo_status, fifo_size, fifo_free;
char *fifo_text;
+ if ((dbg_no % 16) == 0)
+ DBG ("track = %d\tsector %d/%d", progress.track, progress.sector, progress.sectors);
percent = (gdouble) (progress.buffer_capacity - progress.buffer_available) / (gdouble) progress.buffer_capacity;
xfburn_progress_dialog_set_buffer_bar_fraction (XFBURN_PROGRESS_DIALOG (dialog_progress), percent);
More information about the Goodies-commits
mailing list