1
Subject: Fix #617494 - Fails to burn ANY audio project (part 1)
3
Make sure the DAO flag will be set as compulsory when the input for a recording plugin is CUE, CLONE or such
5
diff --git a/libbrasero-burn/brasero-caps-session.c b/libbrasero-burn/brasero-caps-session.c
6
index 14db2e7..5e9740c 100644
7
--- a/libbrasero-burn/brasero-caps-session.c
8
+++ b/libbrasero-burn/brasero-caps-session.c
9
@@ -565,7 +565,7 @@ brasero_caps_find_link (BraseroCaps *caps,
13
- BRASERO_BURN_LOG_WITH_TYPE (&caps->type, BRASERO_PLUGIN_IO_NONE, "(Has %i links) Found link", g_slist_length (caps->links));
14
+ BRASERO_BURN_LOG_WITH_TYPE (&caps->type, BRASERO_PLUGIN_IO_NONE, "Found link (with %i links):", g_slist_length (caps->links));
16
/* Here we only make sure we have at least one link working. For a link
17
* to be followed it must first:
18
@@ -587,17 +587,20 @@ brasero_caps_find_link (BraseroCaps *caps,
24
/* check that the link has some active plugin */
25
if (!brasero_caps_link_active (link, ctx->ignore_plugin_errors))
28
/* since this link contains recorders, check that at least one
29
* of them can handle the record flags */
30
- if (ctx->check_session_flags
31
- && brasero_track_type_get_has_medium (&caps->type)
32
- && !brasero_caps_link_check_record_flags (link, ctx->ignore_plugin_errors, ctx->session_flags, ctx->media))
34
+ if (ctx->check_session_flags && brasero_track_type_get_has_medium (&caps->type)) {
35
+ if (!brasero_caps_link_check_record_flags (link, ctx->ignore_plugin_errors, ctx->session_flags, ctx->media))
38
+ if (brasero_caps_link_check_recorder_flags_for_input (link, ctx->session_flags) != BRASERO_BURN_OK)
42
/* first see if that's the perfect fit:
43
* - it must have the same caps (type + subtype)
44
@@ -1358,6 +1361,39 @@ brasero_burn_session_get_default_output_format (BraseroBurnSession *session)
45
return BRASERO_IMAGE_FORMAT_NONE;
48
+static BraseroBurnResult
49
+brasero_caps_set_flags_from_recorder_input (BraseroTrackType *input,
50
+ BraseroBurnFlag *supported,
51
+ BraseroBurnFlag *compulsory)
53
+ if (brasero_track_type_get_has_image (input)) {
54
+ BraseroImageFormat format;
56
+ format = brasero_track_type_get_image_format (input);
57
+ if (format == BRASERO_IMAGE_FORMAT_CUE
58
+ || format == BRASERO_IMAGE_FORMAT_CDRDAO) {
59
+ if ((*supported) & BRASERO_BURN_FLAG_DAO)
60
+ (*compulsory) |= BRASERO_BURN_FLAG_DAO;
62
+ return BRASERO_BURN_NOT_SUPPORTED;
64
+ else if (format == BRASERO_IMAGE_FORMAT_CLONE) {
65
+ /* RAW write mode should (must) only be used in this case */
66
+ if ((*supported) & BRASERO_BURN_FLAG_RAW) {
67
+ (*supported) &= ~BRASERO_BURN_FLAG_DAO;
68
+ (*compulsory) &= ~BRASERO_BURN_FLAG_DAO;
69
+ (*compulsory) |= BRASERO_BURN_FLAG_RAW;
72
+ return BRASERO_BURN_NOT_SUPPORTED;
75
+ (*supported) &= ~BRASERO_BURN_FLAG_RAW;
78
+ return BRASERO_BURN_OK;
81
static BraseroPluginIOFlag
82
brasero_caps_get_flags (BraseroCaps *caps,
83
gboolean ignore_plugin_errors,
84
@@ -1392,6 +1428,7 @@ brasero_caps_get_flags (BraseroCaps *caps,
86
if (brasero_track_type_get_has_medium (&caps->type)) {
88
+ BraseroBurnResult result;
90
brasero_caps_link_get_record_flags (link,
92
@@ -1405,6 +1442,14 @@ brasero_caps_get_flags (BraseroCaps *caps,
93
tmp = session_flags & BRASERO_PLUGIN_BURN_FLAG_MASK;
94
if ((tmp & rec_supported) != tmp)
97
+ /* This is the recording plugin, check its input as
98
+ * some flags depend on it. */
99
+ result = brasero_caps_set_flags_from_recorder_input (&link->caps->type,
102
+ if (result != BRASERO_BURN_OK)
106
if (brasero_track_type_get_has_data (&link->caps->type)) {
107
@@ -1460,8 +1505,8 @@ brasero_caps_get_flags (BraseroCaps *caps,
108
if (io_flags == BRASERO_PLUGIN_IO_NONE)
111
- retval |= (io_flags & flags);
112
(*compulsory) &= rec_compulsory;
113
+ retval |= (io_flags & flags);
114
(*supported) |= data_supported|rec_supported;
117
@@ -1579,36 +1624,17 @@ brasero_caps_get_flags_for_disc (BraseroBurnCaps *self,
118
return BRASERO_BURN_NOT_SUPPORTED;
121
- if (brasero_track_type_get_has_image (input)) {
122
- BraseroImageFormat format;
123
+ /* NOTE: DO NOT TEST the input image here. What should be tested is the
124
+ * type of the input right before the burner plugin. See:
125
+ * brasero_burn_caps_set_flags_from_recorder_input())
126
+ * For example in the following situation: AUDIO => CUE => BURNER the
127
+ * DAO flag would not be set otherwise. */
129
- format = brasero_track_type_get_image_format (input);
130
- if (format == BRASERO_IMAGE_FORMAT_CUE
131
- || format == BRASERO_IMAGE_FORMAT_CDRDAO) {
132
- if (supported_flags & BRASERO_BURN_FLAG_DAO)
133
- compulsory_flags |= BRASERO_BURN_FLAG_DAO;
135
- return BRASERO_BURN_NOT_SUPPORTED;
137
- else if (format == BRASERO_IMAGE_FORMAT_CLONE) {
138
- /* RAW write mode should (must) only be used in this case */
139
- if (supported_flags & BRASERO_BURN_FLAG_RAW) {
140
- supported_flags &= ~BRASERO_BURN_FLAG_DAO;
141
- compulsory_flags &= ~BRASERO_BURN_FLAG_DAO;
142
- compulsory_flags |= BRASERO_BURN_FLAG_RAW;
145
- return BRASERO_BURN_NOT_SUPPORTED;
148
- supported_flags &= ~BRASERO_BURN_FLAG_RAW;
150
- else if (brasero_track_type_get_has_stream (input)) {
151
+ if (brasero_track_type_get_has_stream (input)) {
152
BraseroStreamFormat format;
154
format = brasero_track_type_get_stream_format (input);
155
- if (!(format & BRASERO_METADATA_INFO)
156
- && BRASERO_STREAM_FORMAT_VIDEO (format)) {
157
+ if (format & BRASERO_METADATA_INFO) {
158
/* In this case, DAO is compulsory if we want to write CD-TEXT */
159
if (supported_flags & BRASERO_BURN_FLAG_DAO)
160
compulsory_flags |= BRASERO_BURN_FLAG_DAO;
161
@@ -1622,7 +1648,7 @@ brasero_caps_get_flags_for_disc (BraseroBurnCaps *self,
162
compulsory_flags &= ~BRASERO_BURN_FLAG_RAW;
163
supported_flags &= ~BRASERO_BURN_FLAG_RAW;
167
if (io_flags & BRASERO_PLUGIN_IO_ACCEPT_PIPE) {
168
supported_flags |= BRASERO_BURN_FLAG_NO_TMP_FILES;
170
@@ -1965,7 +1991,7 @@ brasero_burn_caps_get_flags_same_src_dest (BraseroBurnCaps *self,
171
* until the disc is inserted which it is not at the
173
(*supported_ret) |= (BRASERO_BURN_FLAG_BLANK_BEFORE_WRITE|
174
- BRASERO_BURN_FLAG_FAST_BLANK);
175
+ BRASERO_BURN_FLAG_FAST_BLANK);
177
if (brasero_track_type_get_medium_type (&input) & BRASERO_MEDIUM_HAS_AUDIO) {
178
/* This is a special case for audio discs.