[brasero] When in we are in the case of a drive used as source and destination during a copy, also search STRE
- From: Philippe Rouquier <philippr src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [brasero] When in we are in the case of a drive used as source and destination during a copy, also search STRE
- Date: Sun, 11 Oct 2009 18:45:39 +0000 (UTC)
commit 20ef625d88bddd80146e4ac1b23749b54e44a1df
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date: Sun Oct 11 13:43:24 2009 +0200
When in we are in the case of a drive used as source and destination during a copy, also search STREAM type when getting supported flags
libbrasero-burn/brasero-caps-session.c | 182 +++++++++++++++++++++-----------
1 files changed, 119 insertions(+), 63 deletions(-)
---
diff --git a/libbrasero-burn/brasero-caps-session.c b/libbrasero-burn/brasero-caps-session.c
index a81fc23..233f7e6 100644
--- a/libbrasero-burn/brasero-caps-session.c
+++ b/libbrasero-burn/brasero-caps-session.c
@@ -1677,15 +1677,103 @@ brasero_burn_caps_get_flags_for_medium (BraseroBurnCaps *self,
}
static BraseroBurnResult
+brasero_burn_caps_get_flags_same_src_dest_for_types (BraseroBurnCaps *self,
+ BraseroBurnSession *session,
+ BraseroTrackType *input,
+ BraseroTrackType *output,
+ BraseroBurnFlag *supported_ret,
+ BraseroBurnFlag *compulsory_ret)
+{
+ GSList *iter;
+ gboolean type_supported;
+ BraseroBurnFlag session_flags;
+ BraseroBurnFlag supported_final = BRASERO_BURN_FLAG_NONE;
+ BraseroBurnFlag compulsory_final = BRASERO_BURN_FLAG_ALL;
+
+ /* NOTE: there is no need to get the flags here since there are
+ * no specific DISC => IMAGE flags. We just want to know if that
+ * is possible. */
+ BRASERO_BURN_LOG_TYPE (output, "Testing temporary image format");
+ type_supported = brasero_caps_try_output_with_blanking (self,
+ session,
+ output,
+ input,
+ BRASERO_PLUGIN_IO_ACCEPT_FILE,
+ FALSE);
+ if (!type_supported) {
+ BRASERO_BURN_LOG_TYPE (output, "Format not supported");
+ return FALSE;
+ }
+
+ session_flags = brasero_burn_session_get_flags (session);
+
+ /* This format can be used to create an image. Check if can be
+ * burnt now. Just find at least one medium. */
+ type_supported = FALSE;
+ for (iter = self->priv->caps_list; iter; iter = iter->next) {
+ BraseroBurnFlag compulsory;
+ BraseroBurnFlag supported;
+ BraseroBurnResult result;
+ BraseroCaps *caps;
+
+ caps = iter->data;
+ if (caps->type.type != BRASERO_TRACK_TYPE_DISC)
+ continue;
+
+ /* This type of disc cannot be burnt; skip them */
+ if (caps->type.subtype.media & BRASERO_MEDIUM_ROM)
+ continue;
+
+ if ((caps->type.subtype.media & BRASERO_MEDIUM_CD) == 0) {
+ if (brasero_track_type_get_has_image (output)) {
+ BraseroImageFormat format;
+
+ format = brasero_track_type_get_image_format (output);
+ /* These three types only work with CDs. */
+ if (format == BRASERO_IMAGE_FORMAT_CDRDAO
+ || format == BRASERO_IMAGE_FORMAT_CLONE
+ || format == BRASERO_IMAGE_FORMAT_CUE)
+ continue;
+ }
+ else if (brasero_track_type_get_has_stream (output))
+ continue;
+ }
+
+ /* Merge all available flags for each possible medium type */
+ supported = BRASERO_BURN_FLAG_NONE;
+ compulsory = BRASERO_BURN_FLAG_NONE;
+ result = brasero_burn_caps_get_flags_for_medium (self,
+ caps->type.subtype.media,
+ session_flags,
+ output,
+ &supported,
+ &compulsory);
+ if (result != BRASERO_BURN_OK)
+ continue;
+
+ type_supported = TRUE;
+ supported_final |= supported;
+ compulsory_final &= compulsory;
+ }
+
+ BRASERO_BURN_LOG_TYPE (output, "Format supported %i", type_supported);
+ if (!type_supported)
+ return FALSE;
+
+ *supported_ret = supported_final;
+ *compulsory_ret = compulsory_final;
+ return type_supported;
+}
+
+static BraseroBurnResult
brasero_burn_caps_get_flags_same_src_dest (BraseroBurnCaps *self,
BraseroBurnSession *session,
BraseroBurnFlag *supported_ret,
BraseroBurnFlag *compulsory_ret)
{
- GSList *iter;
- gboolean copy_supported;
BraseroTrackType input;
BraseroTrackType output;
+ gboolean copy_supported;
BraseroImageFormat format;
BraseroBurnFlag session_flags;
BraseroBurnFlag supported_final = BRASERO_BURN_FLAG_NONE;
@@ -1707,80 +1795,48 @@ brasero_burn_caps_get_flags_same_src_dest (BraseroBurnCaps *self,
if (session_flags & (BRASERO_BURN_FLAG_MERGE|BRASERO_BURN_FLAG_NO_TMP_FILES))
return BRASERO_BURN_NOT_SUPPORTED;
+ /* Check for stream type */
+ brasero_track_type_set_has_stream (&output);
+ /* FIXME! */
+ brasero_track_type_set_stream_format (&output,
+ BRASERO_AUDIO_FORMAT_RAW|
+ BRASERO_METADATA_INFO);
+ copy_supported = brasero_burn_caps_get_flags_same_src_dest_for_types (self,
+ session,
+ &input,
+ &output,
+ &supported_final,
+ &compulsory_final);
+
/* Check flags for all available format */
format = BRASERO_IMAGE_FORMAT_CDRDAO;
- output.type = BRASERO_TRACK_TYPE_IMAGE;
-
- copy_supported = FALSE;
+ brasero_track_type_set_has_image (&output);
for (; format > BRASERO_IMAGE_FORMAT_NONE; format >>= 1) {
- BraseroBurnResult result;
gboolean format_supported;
+ BraseroBurnFlag supported;
+ BraseroBurnFlag compulsory;
/* check if this image type is possible given the current flags */
if (format != BRASERO_IMAGE_FORMAT_CLONE
&& (session_flags & BRASERO_BURN_FLAG_RAW))
continue;
- output.subtype.img_format = format;
+ brasero_track_type_set_image_format (&output, format);
- /* NOTE: there is no need to get the flags here since there are
- * no specific DISC => IMAGE flags. We just want to know if that
- * is possible. */
- BRASERO_BURN_LOG_TYPE (&output, "Testing temporary image format");
- format_supported = brasero_caps_try_output_with_blanking (self,
- session,
- &output,
- &input,
- BRASERO_PLUGIN_IO_ACCEPT_FILE,
- FALSE);
- if (!format_supported) {
- BRASERO_BURN_LOG_TYPE (&output, "Format not supported");
+ supported = BRASERO_BURN_FLAG_NONE;
+ compulsory = BRASERO_BURN_FLAG_NONE;
+ format_supported = brasero_burn_caps_get_flags_same_src_dest_for_types (self,
+ session,
+ &input,
+ &output,
+ &supported,
+ &compulsory);
+ if (!format_supported)
continue;
- }
-
- /* This format can be used to create an image. Check if can be
- * burnt now. Just find at least one medium. */
- format_supported = FALSE;
- for (iter = self->priv->caps_list; iter; iter = iter->next) {
- BraseroBurnFlag compulsory;
- BraseroBurnFlag supported;
- BraseroCaps *caps;
-
- caps = iter->data;
- if (caps->type.type != BRASERO_TRACK_TYPE_DISC)
- continue;
-
- /* This type of disc cannot be burnt; skip them */
- if (caps->type.subtype.media & BRASERO_MEDIUM_ROM)
- continue;
-
- /* These three types only work with CDs. Skip the rest. */
- if ((output.subtype.img_format == BRASERO_IMAGE_FORMAT_CDRDAO
- || output.subtype.img_format == BRASERO_IMAGE_FORMAT_CLONE
- || output.subtype.img_format == BRASERO_IMAGE_FORMAT_CUE)
- && (caps->type.subtype.media & BRASERO_MEDIUM_CD) == 0)
- continue;
-
- /* Merge all available flags for each possible medium type */
- supported = BRASERO_BURN_FLAG_NONE;
- compulsory = BRASERO_BURN_FLAG_NONE;
- result = brasero_burn_caps_get_flags_for_medium (self,
- caps->type.subtype.media,
- session_flags,
- &output,
- &supported,
- &compulsory);
- if (result != BRASERO_BURN_OK)
- continue;
-
- format_supported = TRUE;
- supported_final |= supported;
- compulsory_final &= compulsory;
- }
- BRASERO_BURN_LOG_TYPE (&output, "Format supported %i", format_supported);
- if (format_supported)
- copy_supported = TRUE;
+ copy_supported = TRUE;
+ supported_final |= supported;
+ compulsory_final &= compulsory;
}
if (!copy_supported)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]