brasero r1801 - in trunk: . src src/plugins/cdrkit
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r1801 - in trunk: . src src/plugins/cdrkit
- Date: Wed, 21 Jan 2009 14:14:27 +0000 (UTC)
Author: philippr
Date: Wed Jan 21 14:14:27 2009
New Revision: 1801
URL: http://svn.gnome.org/viewvc/brasero?rev=1801&view=rev
Log:
2009-01-21 Philippe Rouquier <ykw localhost localdomain>
Add blanking capabilities to wodim
* src/burn-job.c (brasero_job_get_medium),
(brasero_job_get_last_session_address),
(brasero_job_get_max_speed):
* src/burn-job.h:
* src/burn-process.c (brasero_process_stop):
* src/plugins/cdrkit/burn-wodim.c (brasero_wodim_compute),
(brasero_wodim_set_argv_blank), (brasero_wodim_export_caps):
Modified:
trunk/ChangeLog
trunk/src/burn-job.c
trunk/src/burn-job.h
trunk/src/burn-process.c
trunk/src/plugins/cdrkit/burn-wodim.c
Modified: trunk/src/burn-job.c
==============================================================================
--- trunk/src/burn-job.c (original)
+++ trunk/src/burn-job.c Wed Jan 21 14:14:27 2009
@@ -1543,6 +1543,29 @@
}
BraseroBurnResult
+brasero_job_get_medium (BraseroJob *job, BraseroMedium **medium)
+{
+ BraseroBurnSession *session;
+ BraseroJobPrivate *priv;
+ BraseroDrive *drive;
+
+ BRASERO_JOB_DEBUG (job);
+
+ g_return_val_if_fail (medium != NULL, BRASERO_BURN_ERR);
+
+ priv = BRASERO_JOB_PRIVATE (job);
+ session = brasero_task_ctx_get_session (priv->ctx);
+ drive = brasero_burn_session_get_burner (session);
+ *medium = brasero_drive_get_medium (drive);
+
+ if (!(*medium))
+ return BRASERO_BURN_ERR;
+
+ g_object_ref (*medium);
+ return BRASERO_BURN_OK;
+}
+
+BraseroBurnResult
brasero_job_get_last_session_address (BraseroJob *self, gint64 *address)
{
BraseroBurnSession *session;
@@ -1558,9 +1581,10 @@
session = brasero_task_ctx_get_session (priv->ctx);
drive = brasero_burn_session_get_burner (session);
medium = brasero_drive_get_medium (drive);
- brasero_medium_get_last_data_track_address (medium, NULL, address);
+ if (brasero_medium_get_last_data_track_address (medium, NULL, address))
+ return BRASERO_BURN_OK;
- return BRASERO_BURN_OK;
+ return BRASERO_BURN_ERR;
}
BraseroBurnResult
@@ -1671,11 +1695,11 @@
rate = brasero_medium_get_max_write_speed (medium);
media = brasero_medium_get_status (medium);
if (media & BRASERO_MEDIUM_DVD)
- *speed = BRASERO_RATE_TO_SPEED_DVD (rate);
+ *speed = nearbyint (BRASERO_RATE_TO_SPEED_DVD (rate));
else if (media & BRASERO_MEDIUM_BD)
- *speed = BRASERO_RATE_TO_SPEED_BD (rate);
+ *speed = nearbyint (BRASERO_RATE_TO_SPEED_BD (rate));
else
- *speed = BRASERO_RATE_TO_SPEED_CD (rate);
+ *speed = nearbyint (BRASERO_RATE_TO_SPEED_CD (rate));
return BRASERO_BURN_OK;
}
Modified: trunk/src/burn-job.h
==============================================================================
--- trunk/src/burn-job.h (original)
+++ trunk/src/burn-job.h Wed Jan 21 14:14:27 2009
@@ -147,6 +147,9 @@
*/
BraseroBurnResult
+brasero_job_get_medium (BraseroJob *job, BraseroMedium **medium);
+
+BraseroBurnResult
brasero_job_get_device (BraseroJob *job, gchar **device);
BraseroBurnResult
Modified: trunk/src/burn-process.c
==============================================================================
--- trunk/src/burn-process.c (original)
+++ trunk/src/burn-process.c Wed Jan 21 14:14:27 2009
@@ -663,11 +663,13 @@
pid = priv->pid;
priv->pid = 0;
- if (kill (pid, SIGTERM) == -1 && errno != ESRCH) {
+ /* Reminder: -1 is here to send the signal to all children of
+ * the process with pid as well */
+ if (kill ((-1) * pid, SIGTERM) == -1 && errno != ESRCH) {
BRASERO_JOB_LOG (process,
"process (%s) couldn't be killed: terminating",
g_strerror (errno));
- kill (pid, SIGKILL);
+ kill ((-1) * pid, SIGKILL);
}
else
BRASERO_JOB_LOG (process, "got killed");
Modified: trunk/src/plugins/cdrkit/burn-wodim.c
==============================================================================
--- trunk/src/plugins/cdrkit/burn-wodim.c (original)
+++ trunk/src/plugins/cdrkit/burn-wodim.c Wed Jan 21 14:14:27 2009
@@ -202,7 +202,7 @@
{
gboolean track_num_changed = FALSE;
BraseroWodimPrivate *priv;
- gchar *action_string;
+ BraseroJobAction action;
gint64 this_remain;
gint64 bytes;
gint64 total;
@@ -223,12 +223,24 @@
bytes = (total - priv->current_track_end_pos) + this_remain;
brasero_job_set_written_session (BRASERO_JOB (wodim), total - bytes);
- action_string = g_strdup_printf ("Writing track %02i", track_num);
- brasero_job_set_current_action (BRASERO_JOB (wodim),
- BRASERO_BURN_ACTION_RECORDING,
- action_string,
- track_num_changed);
- g_free (action_string);
+ brasero_job_get_action (BRASERO_JOB (wodim), &action);
+ if (action == BRASERO_JOB_ACTION_RECORD) {
+ gchar *action_string;
+
+ action_string = g_strdup_printf ("Writing track %02i", track_num);
+ brasero_job_set_current_action (BRASERO_JOB (wodim),
+ BRASERO_BURN_ACTION_RECORDING,
+ action_string,
+ track_num_changed);
+ g_free (action_string);
+ }
+ else if (action == BRASERO_JOB_ACTION_ERASE) {
+ brasero_job_set_progress (BRASERO_JOB (wodim), (gfloat) mb_written / (gfloat) mb_total);
+ brasero_job_set_current_action (BRASERO_JOB (wodim),
+ BRASERO_BURN_ACTION_BLANKING,
+ NULL,
+ FALSE);
+ }
}
static BraseroBurnResult
@@ -254,9 +266,9 @@
priv->current_track_written = mb_written * 1048576;
brasero_wodim_compute (wodim,
- mb_written,
- mb_total,
- track);
+ mb_written,
+ mb_total,
+ track);
brasero_job_start_progress (BRASERO_JOB (wodim), FALSE);
}
@@ -921,9 +933,60 @@
(flags & BRASERO_BURN_FLAG_FAST_BLANK) ? "fast" : "all");
g_ptr_array_add (argv, blank_str);
}
- else
+ else if (media & BRASERO_MEDIUM_UNFORMATTED) {
g_ptr_array_add (argv, g_strdup ("-format"));
+ /* There are many options for this given by an option that is
+ * not documented: formattype=#type where type can be:
+ * - force: to force reformatting => problem cannot/doesn't want to reformat a disc already formated
+ * - full: to do a full formatting => problem only reformats what is not done yet
+ * - background: formatting in the background => problem cannot/doesn't want to reformat a disc already formated
+ * conclusion: we can only accept unformated media.
+ * The following option allows to do it more quickly:
+ * g_ptr_array_add (argv, g_strdup ("formattype=background");
+ */
+
+ }
+ else {
+ guint speed;
+ BraseroWodimPrivate *priv;
+
+ priv = BRASERO_WODIM_PRIVATE (wodim);
+
+ /* Since we can't reformat any already formatted DVD+RW, we
+ * write 0s to it to blank. */
+ if (priv->immediate) {
+ g_ptr_array_add (argv, g_strdup ("-immed"));
+ g_ptr_array_add (argv, g_strdup_printf ("minbuf=%i", priv->minbuf));
+ }
+
+ if (brasero_job_get_speed (BRASERO_JOB (wodim), &speed) == BRASERO_BURN_OK) {
+ gchar *speed_str;
+
+ speed_str = g_strdup_printf ("speed=%d", speed);
+ g_ptr_array_add (argv, speed_str);
+ }
+
+ if (!(flags & BRASERO_BURN_FLAG_FAST_BLANK)) {
+ gint64 sectors = 0;
+ BraseroMedium *medium;
+
+ brasero_job_get_medium (BRASERO_JOB (wodim), &medium);
+ brasero_medium_get_data_size (medium, NULL, §ors);
+ if (!sectors)
+ brasero_medium_get_capacity (medium, NULL, §ors);
+
+ g_ptr_array_add (argv, g_strdup_printf ("tsize=%Lis", sectors));
+ }
+ else /* we set 512s because wodim complains otherwise */
+ g_ptr_array_add (argv, g_strdup_printf ("tsize=512s"));
+
+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
+ g_ptr_array_add (argv, g_strdup ("-data"));
+ g_ptr_array_add (argv, g_strdup ("-nopad"));
+ g_ptr_array_add (argv, g_strdup ("/dev/zero"));
+ }
+
brasero_job_set_current_action (BRASERO_JOB (wodim),
BRASERO_BURN_ACTION_BLANKING,
NULL,
@@ -1218,10 +1281,7 @@
* NOTE: restricted overwrite DVD-RW can't be formatted.
* moreover DVD+RW are formatted while DVD-RW sequential are blanked.
* NOTE: blanking DVD-RW doesn't work */
- output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
- BRASERO_MEDIUM_PLUS|
- BRASERO_MEDIUM_REWRITABLE|
- BRASERO_MEDIUM_APPENDABLE|
+ output = brasero_caps_disc_new (BRASERO_MEDIUM_DVDRW_PLUS|
BRASERO_MEDIUM_CLOSED|
BRASERO_MEDIUM_HAS_DATA|
BRASERO_MEDIUM_UNFORMATTED|
@@ -1230,14 +1290,16 @@
g_slist_free (output);
/* again DVD+RW don't support dummy */
+ /* NOTE: wodim doesn't support formating already formated DVD+RWs. That
+ * is an error for it (stupid!). So sets only unformated DVDs. */
brasero_plugin_set_blank_flags (plugin,
BRASERO_MEDIUM_DVDRW_PLUS|
- BRASERO_MEDIUM_APPENDABLE|
+ BRASERO_MEDIUM_CLOSED|
BRASERO_MEDIUM_HAS_DATA|
BRASERO_MEDIUM_UNFORMATTED|
- BRASERO_MEDIUM_BLANK|
- BRASERO_MEDIUM_CLOSED,
- BRASERO_BURN_FLAG_NOGRACE,
+ BRASERO_MEDIUM_BLANK,
+ BRASERO_BURN_FLAG_NOGRACE|
+ BRASERO_BURN_FLAG_FAST_BLANK,
BRASERO_BURN_FLAG_NONE);
/* for blanking (CDRWs) */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]