brasero r1255 - in trunk: . src src/plugins/cdrkit src/plugins/cdrtools src/plugins/checksum
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r1255 - in trunk: . src src/plugins/cdrkit src/plugins/cdrtools src/plugins/checksum
- Date: Mon, 8 Sep 2008 18:10:30 +0000 (UTC)
Author: philippr
Date: Mon Sep 8 18:10:29 2008
New Revision: 1255
URL: http://svn.gnome.org/viewvc/brasero?rev=1255&view=rev
Log:
Fix checksums for DVD+RW with which we didn\'t start at the right address
in multisession
* src/burn-track.h:
* src/burn.c (brasero_burn_action_changed),
(brasero_burn_record_session):
* src/plugins/cdrkit/burn-readom.c
(brasero_readom_argv_set_iso_boundary), (brasero_readom_get_size):
* src/plugins/cdrtools/burn-readcd.c
(brasero_readcd_argv_set_iso_boundary), (brasero_readcd_get_size):
* src/plugins/checksum/burn-checksum-files.c
(brasero_checksum_files_end):
Modified:
trunk/ChangeLog
trunk/src/burn-track.h
trunk/src/burn.c
trunk/src/plugins/cdrkit/burn-readom.c
trunk/src/plugins/cdrtools/burn-readcd.c
trunk/src/plugins/checksum/burn-checksum-files.c
Modified: trunk/src/burn-track.h
==============================================================================
--- trunk/src/burn-track.h (original)
+++ trunk/src/burn-track.h Mon Sep 8 18:10:29 2008
@@ -323,6 +323,13 @@
const gchar *tag,
GValue **value);
+/*
+ * Commonly used Tags
+ */
+
+#define BRASERO_TRACK_MEDIUM_ADDRESS_START_TAG "track::medium::address::start"
+#define BRASERO_TRACK_MEDIUM_ADDRESS_END_TAG "track::medium::address::end"
+
G_END_DECLS
#endif /* _BURN_TRACK_H */
Modified: trunk/src/burn.c
==============================================================================
--- trunk/src/burn.c (original)
+++ trunk/src/burn.c Mon Sep 8 18:10:29 2008
@@ -70,6 +70,9 @@
gint appcookie;
+ guint64 session_start;
+ guint64 session_end;
+
guint src_locked:1;
guint dest_locked:1;
@@ -1184,7 +1187,40 @@
BraseroBurnAction action,
BraseroBurn *burn)
{
+ BraseroBurnPrivate *priv;
+ BraseroMedia media;
+
brasero_burn_action_changed_real (burn, action);
+
+ if (action != BRASERO_BURN_ACTION_START_RECORDING)
+ return;
+
+ priv = BRASERO_BURN_PRIVATE (burn);
+
+ media = brasero_burn_session_get_dest_media (priv->session);
+ if ((BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVDRW_PLUS)
+ || BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVDRW_RESTRICTED))) {
+ BraseroBurnFlag flags;
+ BraseroMedium *medium;
+ BraseroDrive *drive;
+ gint64 len = 0;
+
+ drive = brasero_burn_session_get_burner (priv->session);
+ medium = brasero_drive_get_medium (drive);
+ flags = brasero_burn_session_get_flags (priv->session);
+
+ /* we need to save some parameters for later checksuming */
+ brasero_task_ctx_get_session_output_size (BRASERO_TASK_CTX (priv->task),
+ &len,
+ NULL);
+
+ if (flags & (BRASERO_BURN_FLAG_MERGE|BRASERO_BURN_FLAG_APPEND))
+ priv->session_start = brasero_medium_get_next_writable_address (medium);
+ else
+ priv->session_start = 0;
+
+ priv->session_end = priv->session_start + len;
+ }
}
void
@@ -2085,17 +2121,47 @@
if (type == BRASERO_CHECKSUM_MD5
|| type == BRASERO_CHECKSUM_SHA1
|| type == BRASERO_CHECKSUM_SHA256) {
- guint track_num;
+ BraseroMedia media;
BraseroDrive *drive;
BraseroMedium *medium;
- /* get the last track number */
+ /* get the last written track address in case of DVD+RW/DVD-RW
+ * restricted overwrite since there is no such thing as track
+ * number for these drives. */
drive = brasero_burn_session_get_burner (priv->session);
medium = brasero_drive_get_medium (drive);
- track_num = brasero_medium_get_track_num (medium);
+ media = brasero_medium_get_status (medium);
+
+ if (!BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVDRW_PLUS)
+ && !BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVDRW_RESTRICTED)) {
+ guint track_num;
- BRASERO_BURN_LOG ("Last written track num == %i", track_num);
- brasero_track_set_drive_track (track, track_num);
+ track_num = brasero_medium_get_track_num (medium);
+
+ BRASERO_BURN_LOG ("Last written track num == %i", track_num);
+ brasero_track_set_drive_track (track, track_num);
+ }
+ else {
+ GValue *value;
+
+ value = g_new0 (GValue, 1);
+ g_value_init (value, G_TYPE_UINT64);
+
+ BRASERO_BURN_LOG ("Start of last written track address == %lli", priv->session_start);
+ g_value_set_uint64 (value, priv->session_start);
+ brasero_track_tag_add (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_START_TAG,
+ value);
+
+ value = g_new0 (GValue, 1);
+ g_value_init (value, G_TYPE_UINT64);
+
+ BRASERO_BURN_LOG ("End of last written track address == %lli", priv->session_end);
+ g_value_set_uint64 (value, priv->session_end);
+ brasero_track_tag_add (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_END_TAG,
+ value);
+ }
}
result = brasero_burn_check_real (burn, track, error);
Modified: trunk/src/plugins/cdrkit/burn-readom.c
==============================================================================
--- trunk/src/plugins/cdrkit/burn-readom.c (original)
+++ trunk/src/plugins/cdrkit/burn-readom.c Mon Sep 8 18:10:29 2008
@@ -120,13 +120,39 @@
{
gint64 nb_blocks;
BraseroTrack *track;
+ GValue *value = NULL;
BraseroTrackType output;
brasero_job_get_current_track (BRASERO_JOB (readom), &track);
brasero_job_get_output_type (BRASERO_JOB (readom), &output);
+ brasero_track_tag_lookup (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_START_TAG,
+ &value);
+ if (value) {
+ guint64 start, end;
+
+ /* we were given an address to start */
+ start = g_value_get_uint64 (value);
+
+ /* get the length now */
+ value = NULL;
+ brasero_track_tag_lookup (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_END_TAG,
+ &value);
+
+ end = g_value_get_uint64 (value);
+
+ BRASERO_JOB_LOG (readom,
+ "reading from sector %lli to %lli",
+ start,
+ end);
+ g_ptr_array_add (argv, g_strdup_printf ("-sectors=%lli-%lli",
+ start,
+ end));
+ }
/* 0 means all disc, -1 problem */
- if (brasero_track_get_drive_track (track) > 0) {
+ else if (brasero_track_get_drive_track (track) > 0) {
gint64 start;
BraseroMedium *medium;
@@ -182,13 +208,32 @@
GError **error)
{
gint64 blocks;
+ GValue *value = NULL;
BraseroTrackType output;
BraseroTrack *track = NULL;
brasero_job_get_current_track (BRASERO_JOB (self), &track);
brasero_job_get_output_type (BRASERO_JOB (self), &output);
- if (brasero_track_get_drive_track (track) > 0) {
+ brasero_track_tag_lookup (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_START_TAG,
+ &value);
+ if (value) {
+ guint64 start, end;
+
+ /* we were given an address to start */
+ start = g_value_get_uint64 (value);
+
+ /* get the length now */
+ value = NULL;
+ brasero_track_tag_lookup (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_END_TAG,
+ &value);
+
+ end = g_value_get_uint64 (value);
+ blocks = end - start;
+ }
+ else if (brasero_track_get_drive_track (track) > 0) {
BraseroMedium *medium;
medium = brasero_track_get_medium_source (track);
Modified: trunk/src/plugins/cdrtools/burn-readcd.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-readcd.c (original)
+++ trunk/src/plugins/cdrtools/burn-readcd.c Mon Sep 8 18:10:29 2008
@@ -120,13 +120,39 @@
{
gint64 nb_blocks;
BraseroTrack *track;
+ GValue *value = NULL;
BraseroTrackType output;
brasero_job_get_current_track (BRASERO_JOB (readcd), &track);
brasero_job_get_output_type (BRASERO_JOB (readcd), &output);
+ brasero_track_tag_lookup (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_START_TAG,
+ &value);
+ if (value) {
+ guint64 start, end;
+
+ /* we were given an address to start */
+ start = g_value_get_uint64 (value);
+
+ /* get the length now */
+ value = NULL;
+ brasero_track_tag_lookup (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_END_TAG,
+ &value);
+
+ end = g_value_get_uint64 (value);
+
+ BRASERO_JOB_LOG (readcd,
+ "reading from sector %lli to %lli",
+ start,
+ end);
+ g_ptr_array_add (argv, g_strdup_printf ("-sectors=%lli-%lli",
+ start,
+ end));
+ }
/* 0 means all disc, -1 problem */
- if (brasero_track_get_drive_track (track) > 0) {
+ else if (brasero_track_get_drive_track (track) > 0) {
gint64 start;
BraseroMedium *medium;
@@ -182,13 +208,32 @@
GError **error)
{
gint64 blocks;
+ GValue *value = NULL;
BraseroTrackType output;
BraseroTrack *track = NULL;
brasero_job_get_current_track (BRASERO_JOB (self), &track);
brasero_job_get_output_type (BRASERO_JOB (self), &output);
- if (brasero_track_get_drive_track (track) > 0) {
+ brasero_track_tag_lookup (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_START_TAG,
+ &value);
+ if (value) {
+ guint64 start, end;
+
+ /* we were given an address to start */
+ start = g_value_get_uint64 (value);
+
+ /* get the length now */
+ value = NULL;
+ brasero_track_tag_lookup (track,
+ BRASERO_TRACK_MEDIUM_ADDRESS_END_TAG,
+ &value);
+
+ end = g_value_get_uint64 (value);
+ blocks = end - start;
+ }
+ else if (brasero_track_get_drive_track (track) > 0) {
BraseroMedium *medium;
medium = brasero_track_get_medium_source (track);
Modified: trunk/src/plugins/checksum/burn-checksum-files.c
==============================================================================
--- trunk/src/plugins/checksum/burn-checksum-files.c (original)
+++ trunk/src/plugins/checksum/burn-checksum-files.c Mon Sep 8 18:10:29 2008
@@ -952,6 +952,11 @@
break;
}
+ BRASERO_JOB_LOG (self,
+ "Adding graft for checksum file %s %s",
+ graft->path,
+ graft->uri);
+
new_grafts = g_slist_prepend (new_grafts, graft);
excluded = brasero_track_get_data_excluded_source (track, TRUE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]