brasero r907 - in branches/video: . help/C help/es po src src/plugins src/plugins/cdrkit src/plugins/cdrtools src/plugins/dvdauthor src/plugins/growisofs src/plugins/gstreamer src/plugins/libburnia src/plugins/local-track src/plugins/vcdimager



Author: philippr
Date: Sat Jun 21 19:28:36 2008
New Revision: 907
URL: http://svn.gnome.org/viewvc/brasero?rev=907&view=rev

Log:
	Added (S)VCD types through a new plugin for vcdimager =)
	(NOTE: latter plugin doesn\'t support progress yet)
	Also ported some changes from trunk.

	* configure.in:
	* help/C/brasero.xml:
	* help/es/es.po:
	* src/brasero-audio-disc.c (brasero_audio_disc_init),
	(brasero_audio_disc_re_index_track_num):
	* src/brasero-data-project.c (brasero_data_project_file_removed):
	* src/brasero-dest-selection.c
	(brasero_dest_selection_get_default_output_format):
	* src/brasero-disc-option-dialog.c
	(brasero_disc_option_dialog_get_default_label),
	(brasero_disc_option_dialog_update_video),
	(brasero_disc_option_dialog_output_changed),
	(brasero_disc_option_dialog_AC3), (brasero_disc_option_dialog_MP2),
	(brasero_disc_option_dialog_SVCD),
	(brasero_disc_option_dialog_VCD),
	(brasero_disc_option_dialog_add_video_options),
	(brasero_disc_option_dialog_set_disc),
	(brasero_disc_option_dialog_valid_media_cb):
	* src/brasero-file-monitor.c (brasero_file_monitor_moved_to_event),
	(brasero_file_monitor_move_timeout_cb),
	(brasero_file_monitor_moved_from_event),
	(brasero_file_monitor_directory_event):
	* src/brasero-jacket-view.c
	(brasero_jacket_view_update_edit_image):
	* src/brasero-project-manager.c (brasero_project_manager_init):
	* src/brasero-project.c (brasero_project_no_song_dialog),
	(brasero_project_no_file_dialog),
	(brasero_project_check_default_burning_app),
	(brasero_project_confirm_switch), (brasero_project_add_uris_cb),
	(brasero_project_empty_cb), (brasero_project_open_project_xml),
	(brasero_project_open_audio_playlist_project),
	(brasero_project_not_saved_dialog),
	(brasero_project_save_project_dialog),
	(brasero_project_save_project_ask_for_path):
	* src/burn-basics.h:
	* src/burn-caps.c (brasero_caps_link_check_media_restrictions),
	(brasero_caps_link_find_plugin), (brasero_burn_caps_new_task),
	(brasero_caps_find_link), (brasero_caps_try_output_with_blanking),
	(brasero_caps_get_flags), (brasero_burn_caps_get_flags),
	(brasero_caps_audio_new), (brasero_caps_disc_new_status):
	* src/burn-debug.c (brasero_debug_medium_info_to_string),
	(brasero_debug_audio_format_to_string):
	* src/burn-job.c (brasero_job_check_output_volume_space):
	* src/burn-medium.h:
	* src/burn-plugin-private.h:
	* src/burn-plugin.c (brasero_plugin_check_image_flags),
	(brasero_plugin_check_media_restrictions):
	* src/burn-track.h:
	* src/plugins/Makefile.am:
	* src/plugins/cdrkit/burn-wodim.c (brasero_wodim_stdout_read),
	(brasero_wodim_export_caps):
	* src/plugins/cdrtools/burn-cdrecord.c
	(brasero_cdrecord_stdout_read), (brasero_cdrecord_export_caps):
	* src/plugins/dvdauthor/burn-dvdauthor.c
	(brasero_dvd_author_export_caps):
	* src/plugins/growisofs/burn-dvd-rw-format.c
	(brasero_dvd_rw_format_export_caps):
	* src/plugins/growisofs/burn-growisofs.c
	(brasero_growisofs_export_caps):
	* src/plugins/gstreamer/burn-transcode.c
	(brasero_transcode_create_sibling_image),
	(brasero_transcode_push_track), (brasero_transcode_export_caps):
	* src/plugins/gstreamer/burn-vob.c (brasero_vob_finished),
	(brasero_vob_build_audio_mp2), (brasero_vob_build_audio_bins),
	(brasero_vob_build_video_bin), (brasero_vob_build_pipeline),
	(brasero_vob_start), (brasero_vob_export_caps):
	* src/plugins/libburnia/burn-libburn.c
	(brasero_libburn_export_caps):
	* src/plugins/local-track/burn-local-image.c
	(brasero_local_track_export_caps):
	* src/plugins/vcdimager/Makefile.am:
	* src/plugins/vcdimager/burn-vcdimager.c
	(brasero_vcd_imager_read_stdout), (brasero_vcd_imager_read_stderr),
	(brasero_vcd_imager_generate_xml_file),
	(brasero_vcd_imager_set_argv), (brasero_vcd_imager_post),
	(brasero_vcd_imager_init), (brasero_vcd_imager_finalize),
	(brasero_vcd_imager_class_init), (brasero_vcd_imager_export_caps):
	* src/plugins/vcdimager/burn-vcdimager.h:
	* src/scsi-read-format-capacities.h:

Added:
   branches/video/src/plugins/vcdimager/
   branches/video/src/plugins/vcdimager/Makefile.am
   branches/video/src/plugins/vcdimager/burn-vcdimager.c
   branches/video/src/plugins/vcdimager/burn-vcdimager.h
Modified:
   branches/video/ChangeLog
   branches/video/configure.in
   branches/video/help/C/brasero.xml
   branches/video/help/es/es.po
   branches/video/po/ChangeLog
   branches/video/po/es.po
   branches/video/po/he.po
   branches/video/po/nb.po
   branches/video/po/th.po
   branches/video/src/brasero-audio-disc.c
   branches/video/src/brasero-data-project.c
   branches/video/src/brasero-dest-selection.c
   branches/video/src/brasero-disc-option-dialog.c
   branches/video/src/brasero-file-monitor.c
   branches/video/src/brasero-jacket-view.c
   branches/video/src/brasero-project-manager.c
   branches/video/src/brasero-project.c
   branches/video/src/burn-basics.h
   branches/video/src/burn-caps.c
   branches/video/src/burn-debug.c
   branches/video/src/burn-job.c
   branches/video/src/burn-medium.h
   branches/video/src/burn-plugin-private.h
   branches/video/src/burn-plugin.c
   branches/video/src/burn-track.h
   branches/video/src/plugins/Makefile.am
   branches/video/src/plugins/cdrkit/burn-wodim.c
   branches/video/src/plugins/cdrtools/burn-cdrecord.c
   branches/video/src/plugins/dvdauthor/burn-dvdauthor.c
   branches/video/src/plugins/growisofs/burn-dvd-rw-format.c
   branches/video/src/plugins/growisofs/burn-growisofs.c
   branches/video/src/plugins/gstreamer/burn-transcode.c
   branches/video/src/plugins/gstreamer/burn-vob.c
   branches/video/src/plugins/libburnia/burn-libburn.c
   branches/video/src/plugins/local-track/burn-local-image.c
   branches/video/src/scsi-read-format-capacities.h

Modified: branches/video/configure.in
==============================================================================
--- branches/video/configure.in	(original)
+++ branches/video/configure.in	Sat Jun 21 19:28:36 2008
@@ -93,7 +93,7 @@
 LIBGNOME_REQUIRED=2.10.0
 LIBGNOMEUI_REQUIRED=2.10.0
 GCONF_REQUIRED=2.0.0
-GSTREAMER_REQUIRED=0.10.6
+GSTREAMER_REQUIRED=0.10.15
 GSTREAMER_BASE_REQUIRED=0.10.0
 LIBXML2_REQUIRED=2.6.0
 HAL_REQUIRED=0.5
@@ -354,6 +354,7 @@
 src/plugins/dvdauthor/Makefile
 src/plugins/checksum/Makefile
 src/plugins/local-track/Makefile
+src/plugins/vcdimager/Makefile
 po/Makefile.in
 src/Makefile
 ])

Modified: branches/video/help/C/brasero.xml
==============================================================================
--- branches/video/help/C/brasero.xml	(original)
+++ branches/video/help/C/brasero.xml	Sat Jun 21 19:28:36 2008
@@ -451,13 +451,13 @@
 	  <variablelist>
 	    <varlistentry>
 	      <term>
-		Section <guilabel>Select a drive to write to</guilabel>:
+		Section <guilabel>Select a disc to write to</guilabel>:
 	      </term>
 	      <listitem>
 		<itemizedlist>
 		  <listitem>
 		    <para>
-		      Click <guibutton>Properties</guibutton> to open
+		      Click on <guibutton>Properties</guibutton> to open
 		      the properties dialog for the burning device. See <xref
 			linkend="brasero-burning-device-properties"/>
 		      for more information.
@@ -500,7 +500,8 @@
 			  <para>
 			    Select this option to create a
 			    <emphasis>multisession</emphasis> disc, so
-			    that it will be possible to add files to the disc at a later 
+			    that it will be possible to add files to
+			    the disc at a later 
 			    date (without erasing it, if it is rewritable).
 			  </para>
 			</listitem>
@@ -546,9 +547,9 @@
 	  </listitem>
 	  <listitem>
 	    <para>
-	      Select the files you want by double-clicking on them
-	      or highlighting them and clicking
-	      <guibutton>Add</guibutton> at the top left of the
+	      Select the files you want by double-clicking on them or
+	      by selecting them and clicking the
+	      <guibutton>Add</guibutton> button at the top left of the
 	      toolbar.
 	    </para>
 	  </listitem>
@@ -582,13 +583,14 @@
 	<para>
 	  <variablelist>
 	    <varlistentry>
-	      <term>Section <guilabel>Select a drive to write
-	      to</guilabel>:</term>
+	      <term>
+		Section <guilabel>Select a disc to write to</guilabel>:
+	      </term>
 	      <listitem>
 		<itemizedlist>
 		  <listitem>
 		    <para>
-		      Click <guibutton>Properties</guibutton> to open
+		      Click on <guibutton>Properties</guibutton> to open
 		      the properties dialog for the burning device. See <xref
 			linkend="brasero-burning-device-properties"/>
 		      for more information.
@@ -713,29 +715,31 @@
 	<para>
 	  <variablelist>
 	    <varlistentry>
-	      <term>Section <guilabel>Select source drive to
-	      copy</guilabel>:</term>
+	      <term>
+		Section <guilabel>Select disc to copy</guilabel>:
+	      </term>
 	      <listitem>
 		<itemizedlist>
 		  <listitem>
 		    <para>
-		      From the drop-down list, select the drive that
-		      holds the disc you want to copy. Information about 
-		      the disc in that drive will be shown below.
+		      From the drop-down list, select the disc that
+		      you want to copy. Informations about the disc
+		      will be shown below.
 		    </para>
 		  </listitem>
 		</itemizedlist>
 	      </listitem>
 	    </varlistentry>
 	    <varlistentry>
-	      <term>Section <guilabel>Select a drive to write
-	      to</guilabel>:</term>
+	      <term>
+		Section <guilabel>Select a disc to write to</guilabel>:
+	      </term>
 	      <listitem>
 		<itemizedlist>
 		  <listitem>
 		    <para>
-		      From the drop-down list, select the drive to
-		      write the disc copy to.
+		      From the drop-down list, select the disc to
+		      write to.
 		    </para>
 		    <para>
 		      From this drop-down list, select <guilabel>File
@@ -745,7 +749,7 @@
 		  </listitem>
 		  <listitem>
 		    <para>
-		      Click <guibutton>Properties</guibutton> to open
+		      Click on <guibutton>Properties</guibutton> to open
 		      the properties dialog for the burning device. See <xref
 			linkend="brasero-burning-device-properties"/>
 		      for more information.
@@ -766,10 +770,10 @@
 	<para>
 	  <note>
 	    <para>
-	      If you have more that one drive on you system, you can
+	      If you have more that one drive on your system, you can
 	      use one drive as the source drive and the other as the
 	      destination drive. If you do not, you will be prompted
-	      to remove the CD or DVD you are copying and insert your
+	      to remove the CD or DVD you are copying and insert a
 	      blank media.
 	    </para>
 	  </note>
@@ -852,8 +856,9 @@
 	<para>
 	  <variablelist>
 	    <varlistentry>
-	      <term>Section <guilabel>Select a drive to write
-	      to</guilabel>:</term>
+	      <term>
+		Section <guilabel>Select a disc to write to</guilabel>:
+	      </term>
 	      <listitem>
 		<itemizedlist>
 		  <listitem>
@@ -971,14 +976,16 @@
 		      of failure)</guilabel></term>
 		      <listitem>
 			<para>
-			  Select this option to prevent the buffer
-			  underrun effect (or buffer underflow). This is when
-			  the computer is not fast enough to deliver data to 
+			  Select this option to prevent the <emphasis>buffer
+			    underrun</emphasis> effect (or
+			    <emphasis>buffer underflow</emphasis>). This is when
+			  the computer is not fast enough delivering data to 
 			  the burning device at the selected burning speed.
 			</para>
 			<warning>
 			  <para>
-			    If a buffer underrun takes place, the
+			    If a <emphasis>buffer underrun</emphasis>
+			    takes place, the
 			    burned disc could be unreadable.
 			  </para>
 			</warning>
@@ -1077,7 +1084,7 @@
 		    <variablelist>
 		      <varlistentry>
 			<term>
-			  <guilabel>Increase the compatibility with
+			  <guilabel>Increase compatibility with
 			    Windows systems</guilabel>
 			</term>
 			<listitem>
@@ -1201,8 +1208,7 @@
 	<listitem>
 	  <para>
 	    From the drop-down list <guilabel>Select a
-	    recorder</guilabel>, select the drive that holds the disc 
-	    you want to erase.
+	    disc</guilabel>, select the disc you want to erase.
 	  </para>
 	</listitem>
 	<listitem>
@@ -1252,7 +1258,7 @@
       The integrity check is done using the <quote>MD5 digest</quote> 
       algorithm, which creates a <quote>fingerprint</quote> of the 
       data on the media. Each time you burn a CD or DVD, and the 
-      <emphasis role="strong">md5sum</emphasis> plugin is 
+      <emphasis role="strong">Image checksum</emphasis> plugin is 
       enabled (see <xref linkend="brasero-plugins" /> for more 
       information), &app; adds a MD5 file to the disc in order
       to perform integrity checks at a later date.
@@ -1330,7 +1336,7 @@
     </para>
     <para>
       The cover editor lets you select the font, the alignment and the
-      coloros for all the texts and the background properties of front
+      colors for all the texts and the background properties of front
       and the back cover.
     </para>
     <para>
@@ -1348,8 +1354,8 @@
       <itemizedlist>
 	<listitem>
 	  <para>
-	    From the <guilabel>Image path</guilabel> drop-down list
-      select the image from you hard disk.
+	    From <guilabel>Image path</guilabel> select the image from
+	    you hard disk.
 	  </para>
 	</listitem>
 	<listitem>
@@ -1378,7 +1384,7 @@
       </itemizedlist>
       <note>
 	<para>
-	  If you select a gradinet, there will be two buttons for
+	  If you select a gradient, there will be two buttons for
 	  the color chooser. The one on the left is the starting point of
 	  the gradient, the one on the right the end point.
 	</para>
@@ -1435,7 +1441,7 @@
 	    <row>
 	      <entry><guilabel>normalize</guilabel></entry>
 	      <entry>
-		Enables &app; to set consisten sound leveles between tracks.
+		Enables &app; to set consistent sound levels between tracks.
 	      </entry>
 	    </row>
 	  </tbody>

Modified: branches/video/src/brasero-audio-disc.c
==============================================================================
--- branches/video/src/brasero-audio-disc.c	(original)
+++ branches/video/src/brasero-audio-disc.c	Sat Jun 21 19:28:36 2008
@@ -644,15 +644,19 @@
 				 GTK_TREE_MODEL (model));
 	g_object_unref (model);
 
+	/* Track num column */
+	renderer = gtk_cell_renderer_text_new ();
+	column = gtk_tree_view_column_new_with_attributes (_("Track"), renderer,
+							   "text", TRACK_NUM_COL,
+							   NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (obj->priv->tree), column);
+	gtk_tree_view_column_set_resizable (column, FALSE);
+
+	/* Other columns */
 	column = gtk_tree_view_column_new ();
 	gtk_tree_view_column_set_resizable (column, TRUE);
 	gtk_tree_view_column_set_min_width (column, 200);
 
-	renderer = gtk_cell_renderer_text_new ();
-	gtk_tree_view_column_pack_start (column, renderer, FALSE);
-	gtk_tree_view_column_add_attribute (column, renderer,
-					    "markup", TRACK_NUM_COL);
-
 	renderer = gtk_cell_renderer_pixbuf_new ();
 	gtk_tree_view_column_pack_start (column, renderer, FALSE);
 	gtk_tree_view_column_add_attribute (column, renderer,
@@ -694,8 +698,8 @@
 	renderer = gtk_cell_renderer_text_new ();
 	g_object_set_data (G_OBJECT (renderer), COL_KEY, GINT_TO_POINTER (ARTIST_COL));
 	g_object_set (G_OBJECT (renderer),
-/*		      "editable", TRUE, disable this for the time being it doesn't play well with DND and double click */
-		      /*"mode", GTK_CELL_RENDERER_MODE_EDITABLE,*/
+		      /* "editable", TRUE, disable this for the time being it doesn't play well with DND and double click */
+		      /* "mode", GTK_CELL_RENDERER_MODE_EDITABLE,*/
 		      "ellipsize-set", TRUE,
 		      "ellipsize", PANGO_ELLIPSIZE_END,
 		      NULL);
@@ -1050,7 +1054,7 @@
 			continue;
 
 		num ++;
-		text = g_strdup_printf ("<b><i>%02i -</i></b>", num);
+		text = g_strdup_printf ("%02i", num);
 
 		gtk_list_store_set (GTK_LIST_STORE (model), &iter,
 				    TRACK_NUM_COL, text,

Modified: branches/video/src/brasero-data-project.c
==============================================================================
--- branches/video/src/brasero-data-project.c	(original)
+++ branches/video/src/brasero-data-project.c	Sat Jun 21 19:28:36 2008
@@ -3310,7 +3310,7 @@
 	g_free (uri);
 
 	/* check if we can remove it (no more nodes) */
-	if (uri_node->nodes)
+	if (!uri_node || uri_node->nodes)
 		return;
 
 	g_hash_table_remove (priv->grafts, uri_node->uri);

Modified: branches/video/src/brasero-dest-selection.c
==============================================================================
--- branches/video/src/brasero-dest-selection.c	(original)
+++ branches/video/src/brasero-dest-selection.c	Sat Jun 21 19:28:36 2008
@@ -326,8 +326,24 @@
 		return;
 	}
 
-	if (source.type == BRASERO_TRACK_TYPE_AUDIO)
+	if (source.type == BRASERO_TRACK_TYPE_AUDIO) {
+		/* If that's AUDIO only without VIDEO then return */
+		if (!(source.subtype.audio_format & (BRASERO_VIDEO_FORMAT_UNDEFINED|BRASERO_VIDEO_FORMAT_VCD|BRASERO_VIDEO_FORMAT_VIDEO_DVD)))
+			return;
+
+		/* Otherwise try all possible image types */
+		output->subtype.img_format = BRASERO_IMAGE_FORMAT_CDRDAO;
+		for (; output->subtype.img_format != BRASERO_IMAGE_FORMAT_NONE;
+		       output->subtype.img_format >>= 1) {
+		
+			result = brasero_burn_caps_is_output_supported (priv->caps,
+									priv->session,
+									output);
+			if (result == BRASERO_BURN_OK)
+				return;
+		}
 		return;
+	}
 
 	if (source.type == BRASERO_TRACK_TYPE_DATA
 	||  source.subtype.media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_DVD_DL)) {

Modified: branches/video/src/brasero-disc-option-dialog.c
==============================================================================
--- branches/video/src/brasero-disc-option-dialog.c	(original)
+++ branches/video/src/brasero-disc-option-dialog.c	Sat Jun 21 19:28:36 2008
@@ -70,13 +70,18 @@
 
 	GtkWidget *button;
 
+	GtkWidget *video_options;
+	GtkWidget *dvd_audio;
+	GtkWidget *vcd_label;
+	GtkWidget *vcd_button;
+	GtkWidget *svcd_button;
+
 	guint label_modified:1;
 	guint joliet_warning:1;
 
 	guint checksum_saved:1;
 	guint joliet_saved:1;
 	guint multi_saved:1;
-	guint video_saved:1;
 };
 typedef struct _BraseroDiscOptionDialogPrivate BraseroDiscOptionDialogPrivate;
 
@@ -195,7 +200,7 @@
 		}
 	}
 	else if (source.type == BRASERO_TRACK_TYPE_AUDIO) {
-		if (source.subtype.audio_format & (BRASERO_VIDEO_FORMAT_UNDEFINED|BRASERO_VIDEO_FORMAT_MPEG2))
+		if (source.subtype.audio_format & (BRASERO_VIDEO_FORMAT_UNDEFINED|BRASERO_VIDEO_FORMAT_VCD|BRASERO_VIDEO_FORMAT_VIDEO_DVD))
 			/* NOTE to translators: the final string must not be over
 			 * 32 _bytes_ */
 			title_str = g_strdup_printf (_("Video disc (%s)"), buffer);
@@ -399,6 +404,51 @@
 }
 
 static void
+brasero_disc_option_dialog_update_video (BraseroDiscOptionDialog *dialog)
+{
+	BraseroDiscOptionDialogPrivate *priv;
+	BraseroMedia media;
+
+	priv = BRASERO_DISC_OPTION_DIALOG_PRIVATE (dialog);
+
+	media = brasero_burn_session_get_dest_media (priv->session);
+
+	if (media & BRASERO_MEDIUM_DVD) {
+		gtk_widget_show (priv->dvd_audio);
+		gtk_widget_hide (priv->vcd_label);
+		gtk_widget_hide (priv->vcd_button);
+		gtk_widget_hide (priv->svcd_button);
+	}
+	else if (media & BRASERO_MEDIUM_CD) {
+		gtk_widget_hide (priv->dvd_audio);
+		gtk_widget_show (priv->vcd_label);
+		gtk_widget_show (priv->vcd_button);
+		gtk_widget_show (priv->svcd_button);
+	}
+	else if (media & BRASERO_MEDIUM_FILE) {
+		BraseroImageFormat format;
+
+		/* if we create a CUE file then that's a SVCD */
+		format = brasero_burn_session_get_output_format (priv->session);
+		if (format == BRASERO_IMAGE_FORMAT_NONE)
+			return;
+
+		if (format == BRASERO_IMAGE_FORMAT_CUE) {
+			gtk_widget_hide (priv->dvd_audio);
+			gtk_widget_show (priv->vcd_label);
+			gtk_widget_show (priv->vcd_button);
+			gtk_widget_show (priv->svcd_button);
+		}
+		else if (format == BRASERO_IMAGE_FORMAT_BIN) {
+			gtk_widget_show (priv->dvd_audio);
+			gtk_widget_hide (priv->vcd_label);
+			gtk_widget_hide (priv->vcd_button);
+			gtk_widget_hide (priv->svcd_button);
+		}
+	}
+}
+
+static void
 brasero_disc_option_dialog_output_changed (BraseroBurnSession *session,
 					   BraseroDiscOptionDialog *dialog)
 {
@@ -409,12 +459,17 @@
 	/* update the multi button:
 	 * NOTE: order is important here multi then video */
 	brasero_disc_option_dialog_update_multi (dialog);
+
 	/* update the joliet button */
 	brasero_disc_option_dialog_update_joliet (dialog);
 
 	/* see if we need to update the label */
 	if (!priv->label_modified)
 		brasero_disc_option_dialog_update_label (dialog);
+
+	/* for video disc see what's the output : CD or DVD */
+	if (priv->dvd_audio)
+		brasero_disc_option_dialog_update_video (dialog);
 }
 
 /**
@@ -780,7 +835,7 @@
 	priv = BRASERO_DISC_OPTION_DIALOG_PRIVATE (dialog);
 
 	brasero_burn_session_tag_lookup (priv->session,
-					 BRASERO_AUDIO_VIDEO_OUTPUT_FORMAT,
+					 BRASERO_DVD_AUDIO_STREAMS,
 					 &value);
 
 	if (value)
@@ -797,7 +852,7 @@
 	g_value_init (value, G_TYPE_INT);
 	g_value_set_int (value, format);
 	brasero_burn_session_tag_add (priv->session,
-				      BRASERO_AUDIO_VIDEO_OUTPUT_FORMAT,
+				      BRASERO_DVD_AUDIO_STREAMS,
 				      value);
 }
 
@@ -812,7 +867,7 @@
 	priv = BRASERO_DISC_OPTION_DIALOG_PRIVATE (dialog);
 
 	brasero_burn_session_tag_lookup (priv->session,
-					 BRASERO_AUDIO_VIDEO_OUTPUT_FORMAT,
+					 BRASERO_DVD_AUDIO_STREAMS,
 					 &value);
 
 	if (value)
@@ -829,7 +884,7 @@
 	g_value_init (value, G_TYPE_INT);
 	g_value_set_int (value, format);
 	brasero_burn_session_tag_add (priv->session,
-				      BRASERO_AUDIO_VIDEO_OUTPUT_FORMAT,
+				      BRASERO_DVD_AUDIO_STREAMS,
 				      value);
 }
 
@@ -852,6 +907,30 @@
 }
 
 static void
+brasero_disc_option_dialog_SVCD (GtkToggleButton *button,
+				 BraseroDiscOptionDialog *dialog)
+{
+	if (!gtk_toggle_button_get_active (button))
+		return;
+
+	brasero_disc_option_dialog_set_tag (dialog,
+					    BRASERO_VCD_TYPE,
+					    BRASERO_SVCD);
+}
+
+static void
+brasero_disc_option_dialog_VCD (GtkToggleButton *button,
+				BraseroDiscOptionDialog *dialog)
+{
+	if (!gtk_toggle_button_get_active (button))
+		return;
+
+	brasero_disc_option_dialog_set_tag (dialog,
+					    BRASERO_VCD_TYPE,
+					    BRASERO_VCD_V2);
+}
+
+static void
 brasero_disc_option_dialog_NTSC (GtkToggleButton *button,
 				 BraseroDiscOptionDialog *dialog)
 {
@@ -942,17 +1021,19 @@
 	priv = BRASERO_DISC_OPTION_DIALOG_PRIVATE (dialog);
 
 	widget = gtk_vbox_new (FALSE, 0);
-	gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dialog)->vbox),
-			  widget,
-			  TRUE,
-			  FALSE,
-			  6);
-
+	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+			    widget,
+			    FALSE,
+			    FALSE,
+			    6);
 
-	table = gtk_table_new (2, 4, FALSE);
+	table = gtk_table_new (3, 4, FALSE);
+	gtk_table_set_col_spacings (GTK_TABLE (table), 8);
+	gtk_table_set_row_spacings (GTK_TABLE (table), 6);
 	gtk_widget_show (table);
 
 	label = gtk_label_new (_("Video format:"));
+	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
 	gtk_widget_show (label);
 	gtk_table_attach (GTK_TABLE (table),
 			  label,
@@ -1008,6 +1089,7 @@
 			  0, 0);
 
 	label = gtk_label_new (_("Aspect ratio:"));
+	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
 	gtk_widget_show (label);
 	gtk_table_attach (GTK_TABLE (table),
 			  label,
@@ -1060,11 +1142,56 @@
 			  GTK_FILL,
 			  0, 0);
 
+	/* Video options for (S)VCD */
+	label = gtk_label_new (_("VCD type:"));
+	priv->vcd_label = label;
+
+	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+	gtk_widget_show (label);
+	gtk_table_attach (GTK_TABLE (table),
+			  label,
+			  0, 1,
+			  2, 3,
+			  GTK_FILL,
+			  GTK_FILL,
+			  0, 0);
+
+	button1 = gtk_radio_button_new_with_mnemonic_from_widget (NULL, _("Create a SVCD"));
+	priv->svcd_button = button1;
+	gtk_table_attach (GTK_TABLE (table),
+			  button1,
+			  1, 2,
+			  2, 3,
+			  GTK_FILL,
+			  GTK_FILL,
+			  0, 0);
+
+	g_signal_connect (button1,
+			  "clicked",
+			  G_CALLBACK (brasero_disc_option_dialog_SVCD),
+			  dialog);
+
+	button2 = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (button1), _("Create a VCD"));
+	priv->vcd_button = button2;
+	gtk_table_attach (GTK_TABLE (table),
+			  button2,
+			  2, 3,
+			  2, 3,
+			  GTK_FILL,
+			  GTK_FILL,
+			  0, 0);
+
+	g_signal_connect (button2,
+			  "clicked",
+			  G_CALLBACK (brasero_disc_option_dialog_VCD),
+			  dialog);
+
 	options = brasero_utils_pack_properties (_("<b>Video Options</b>"),
 						 table,
 						 NULL);
 	gtk_box_pack_start (GTK_BOX (widget), options, FALSE, FALSE, 0);
 
+	/* Audio options for DVDs */
 	button1 = gtk_check_button_new_with_mnemonic (_("Add _AC3 audio stream"));
 	button2 = gtk_check_button_new_with_mnemonic (_("Add _MP2 audio stream"));
 	options = brasero_utils_pack_properties (_("<b>Audio Options</b>"),
@@ -1081,8 +1208,12 @@
 			  dialog);
 
 	gtk_box_pack_start (GTK_BOX (widget), options, FALSE, FALSE, 0);
+	priv->dvd_audio = options;
 
 	gtk_widget_show_all (widget);
+	brasero_disc_option_dialog_update_video (dialog);
+
+	priv->video_options = widget;
 }
 
 void
@@ -1123,13 +1254,13 @@
 
 	brasero_burn_session_get_input_type (priv->session, &type);
 	if (type.type == BRASERO_TRACK_TYPE_DATA) {
-	brasero_drive_selection_set_type_shown (BRASERO_DRIVE_SELECTION (priv->selection),
-						BRASERO_MEDIA_TYPE_WRITABLE|
-						BRASERO_MEDIA_TYPE_FILE);
+		brasero_drive_selection_set_type_shown (BRASERO_DRIVE_SELECTION (priv->selection),
+							BRASERO_MEDIA_TYPE_WRITABLE|
+							BRASERO_MEDIA_TYPE_FILE);
 		brasero_disc_option_dialog_add_data_options (dialog);
 	}
 	else if (type.type == BRASERO_TRACK_TYPE_AUDIO) {
-		if (type.subtype.audio_format & (BRASERO_VIDEO_FORMAT_UNDEFINED|BRASERO_VIDEO_FORMAT_MPEG2)) {
+		if (type.subtype.audio_format & (BRASERO_VIDEO_FORMAT_UNDEFINED|BRASERO_VIDEO_FORMAT_VCD|BRASERO_VIDEO_FORMAT_VIDEO_DVD)) {
 			brasero_drive_selection_set_type_shown (BRASERO_DRIVE_SELECTION (priv->selection),
 								BRASERO_MEDIA_TYPE_WRITABLE|
 								BRASERO_MEDIA_TYPE_FILE);
@@ -1152,6 +1283,9 @@
 
 	priv = BRASERO_DISC_OPTION_DIALOG_PRIVATE (self);
 	gtk_widget_set_sensitive (priv->button, valid);
+
+	if (priv->video_options)
+		gtk_widget_set_sensitive (priv->video_options, valid);
 }
 
 BraseroBurnSession *

Modified: branches/video/src/brasero-file-monitor.c
==============================================================================
--- branches/video/src/brasero-file-monitor.c	(original)
+++ branches/video/src/brasero-file-monitor.c	Sat Jun 21 19:28:36 2008
@@ -109,6 +109,8 @@
 	priv = BRASERO_FILE_MONITOR_PRIVATE (self);
 	klass = BRASERO_FILE_MONITOR_GET_CLASS (self);
 
+	BRASERO_BURN_LOG ("File Monitoring (move to for %s)", name);
+
 	if (!cookie) {
 		if (klass->file_added)
 			klass->file_added (self, callback_data, name);
@@ -181,6 +183,8 @@
 	data = priv->moved_list->data;
 	priv->moved_list = g_slist_remove (priv->moved_list, data);
 
+	BRASERO_BURN_LOG ("File Monitoring (move timeout for %s)", data->name);
+
 	if (klass->file_removed)
 		klass->file_removed (self,
 				     data->type,
@@ -205,6 +209,8 @@
 
 	priv = BRASERO_FILE_MONITOR_PRIVATE (self);
 
+	BRASERO_BURN_LOG ("File Monitoring (moved from event for %s)", name);
+
 	if (!cookie) {
 		BraseroFileMonitorClass *klass;
 
@@ -250,20 +256,25 @@
 	 * This is done to avoid treating events twice.
 	 * IN_DELETE_SELF or IN_MOVE_SELF are therefore not possible here. */
 	if (event->mask & IN_ATTRIB) {
+		BRASERO_BURN_LOG ("File Monitoring (attributes changed for %s)", name);
 		if (klass->file_modified)
 			klass->file_modified (self, callback_data, name);
 	}
 	else if (event->mask & IN_MODIFY) {
+		BRASERO_BURN_LOG ("File Monitoring (modified for %s)", name);
 		if (klass->file_modified)
 			klass->file_modified (self, callback_data, name);
 	}
 	else if (event->mask & IN_MOVED_FROM) {
+		BRASERO_BURN_LOG ("File Monitoring (moved from for %s)", name);
 		brasero_file_monitor_moved_from_event (self, type, callback_data, name, event->cookie);
 	}
 	else if (event->mask & IN_MOVED_TO) {
+		BRASERO_BURN_LOG ("File Monitoring (moved to for %s)", name);
 		brasero_file_monitor_moved_to_event (self, callback_data, name, event->cookie);
 	}
 	else if (event->mask & (IN_DELETE|IN_UNMOUNT)) {
+		BRASERO_BURN_LOG ("File Monitoring (delete/unmount for %s)", name);
 		if (klass->file_removed)
 			klass->file_removed (self,
 					     type,
@@ -271,6 +282,7 @@
 					     name);
 	}
 	else if (event->mask & IN_CREATE) {
+		BRASERO_BURN_LOG ("File Monitoring (create for %s)", name);
 		if (klass->file_added)
 			klass->file_added (self, callback_data, name);
 	}

Modified: branches/video/src/brasero-jacket-view.c
==============================================================================
--- branches/video/src/brasero-jacket-view.c	(original)
+++ branches/video/src/brasero-jacket-view.c	Sat Jun 21 19:28:36 2008
@@ -869,7 +869,7 @@
 				gdk_draw_pixbuf (GDK_DRAWABLE (pixmap),
 						 NULL,
 						 priv->scaled,
-						(gdk_pixbuf_get_width (priv->scaled) - width)/ 2,
+						(gdk_pixbuf_get_width (priv->scaled) - width) / 2,
 						(gdk_pixbuf_get_height (priv->scaled) - height) / 2,
 						 0, 0,
 						 width,
@@ -882,8 +882,8 @@
 						 NULL,
 						 priv->scaled,
 						 0, 0,
-						 width - gdk_pixbuf_get_width (priv->scaled) / 2,
-						 height - gdk_pixbuf_get_height (priv->scaled) / 2,
+						 (width - gdk_pixbuf_get_width (priv->scaled)) / 2,
+						 (height - gdk_pixbuf_get_height (priv->scaled)) / 2,
 						 -1,
 						 -1,
 						 GDK_RGB_DITHER_NORMAL,

Modified: branches/video/src/brasero-project-manager.c
==============================================================================
--- branches/video/src/brasero-project-manager.c	(original)
+++ branches/video/src/brasero-project-manager.c	Sat Jun 21 19:28:36 2008
@@ -107,7 +107,7 @@
 
 /* menus */
 static GtkActionEntry entries [] = {
-	{"Cover", NULL, N_("_Cover editor"), NULL,
+	{"Cover", NULL, N_("_Cover Editor"), NULL,
 	 N_("Design and print covers for CDs"), G_CALLBACK (brasero_project_manager_new_cover_cb)},
 	 {"New", GTK_STOCK_NEW, N_("_New Project"), NULL,
 	 N_("Create a new project"), NULL },
@@ -985,7 +985,7 @@
 				   chooser,
 				   "Chooser",
 				   _("Browse the file system"),
-				   _("Display file browser"),
+				   _("Display File Browser"),
 				   GTK_STOCK_DIRECTORY,
 				   BRASERO_LAYOUT_AUDIO|BRASERO_LAYOUT_DATA|BRASERO_LAYOUT_VIDEO);
 
@@ -1009,7 +1009,7 @@
 				   search,
 				   "Search",
 				   _("Search files using keywords"),
-				   _("Display search"),
+				   _("Display Search"),
 				   GTK_STOCK_FIND,
 				   BRASERO_LAYOUT_AUDIO|BRASERO_LAYOUT_DATA|BRASERO_LAYOUT_VIDEO);
 
@@ -1030,7 +1030,7 @@
 				   playlist,
 				   "Playlist",
 				   _("Display playlists and their contents"),
-				   _("Display playlists"),
+				   _("Display Playlists"),
 				   "audio-x-generic", 
 				   BRASERO_LAYOUT_AUDIO);
 

Modified: branches/video/src/brasero-project.c
==============================================================================
--- branches/video/src/brasero-project.c	(original)
+++ branches/video/src/brasero-project.c	Sat Jun 21 19:28:36 2008
@@ -864,7 +864,7 @@
 					  GTK_BUTTONS_CLOSE,
 					  _("Please add songs to the project."));
 
-	gtk_window_set_title (GTK_WINDOW (message), _("Empty project"));
+	gtk_window_set_title (GTK_WINDOW (message), _("Empty Project"));
 
 	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message),
 						  _("The project is empty."));
@@ -887,7 +887,7 @@
 					  GTK_BUTTONS_CLOSE,
 					  _("Please add files to the project."));
 
-	gtk_window_set_title (GTK_WINDOW (message), _("Empty project"));
+	gtk_window_set_title (GTK_WINDOW (message), _("Empty Project"));
 
 	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message),
 						  _("The project is empty."));
@@ -939,7 +939,7 @@
 					  GTK_BUTTONS_NONE,
 					  primary);
 
-	gtk_window_set_title (GTK_WINDOW (message), _("Default burning application"));
+	gtk_window_set_title (GTK_WINDOW (message), _("Default Burning Application"));
 	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message),
 						  _("This is a first time running dialog that won't be shown again. If you change your mind, you can change your choice later in the Removable Drives and Media Preferences whether or not you chose brasero."));
 
@@ -1226,7 +1226,7 @@
 						 _("Do you really want to create a new project and discard the changes to current one?"));
 
 		
-		gtk_window_set_title (GTK_WINDOW (dialog), _("Unsaved project"));
+		gtk_window_set_title (GTK_WINDOW (dialog), _("Unsaved Project"));
 
 		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
 							  _("If you choose to create a new project, all changes made will be lost."));
@@ -1247,7 +1247,7 @@
 						 _("Do you really want to create a new project and discard the current one?"));
 
 		
-		gtk_window_set_title (GTK_WINDOW (dialog), _("New project"));
+		gtk_window_set_title (GTK_WINDOW (dialog), _("New Project"));
 
 		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
 							  _("If you choose to create a new project, "
@@ -1500,7 +1500,7 @@
 	}
 
 	toplevel = gtk_widget_get_toplevel (GTK_WIDGET (project));
-	project->priv->chooser = gtk_file_chooser_dialog_new (_("Select files"),
+	project->priv->chooser = gtk_file_chooser_dialog_new (_("Select Files"),
 							      GTK_WINDOW (toplevel),
 							      GTK_FILE_CHOOSER_ACTION_OPEN,
 							      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -1608,7 +1608,7 @@
 						 _("Do you really want to empty the current project?"));
 
 		
-		gtk_window_set_title (GTK_WINDOW (dialog), _("Empty project"));
+		gtk_window_set_title (GTK_WINDOW (dialog), _("Empty Project"));
 
 		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
 							  _("Emptying a project will remove all files already added. "
@@ -2099,7 +2099,7 @@
 	xmlFreeDoc (project);
 
 	if (!retval && warn_user)
-		brasero_project_invalid_project_dialog (proj, _("it doesn't seem to be a valid brasero project."));
+		brasero_project_invalid_project_dialog (proj, _("it doesn't seem to be a valid Brasero project."));
 
 	return retval;
 
@@ -2107,7 +2107,7 @@
 
 	xmlFreeDoc (project);
     	if (warn_user)
-		brasero_project_invalid_project_dialog (proj, _("it doesn't seem to be a valid brasero project."));
+		brasero_project_invalid_project_dialog (proj, _("it doesn't seem to be a valid Brasero project."));
 
 	return FALSE;
 }
@@ -2198,7 +2198,7 @@
 	result = totem_pl_parser_parse (parser, uri, FALSE);
 	if (result != TOTEM_PL_PARSER_RESULT_SUCCESS) {
 		if (warn_user)
-			brasero_project_invalid_project_dialog (proj, _("it doesn't seem to be a valid brasero project."));
+			brasero_project_invalid_project_dialog (proj, _("it doesn't seem to be a valid Brasero project."));
 
 		brasero_track_free (new_track);
 	}
@@ -2284,7 +2284,7 @@
 					 GTK_BUTTONS_CLOSE,
 					 _("Your project has not been saved:"));
 
-	gtk_window_set_title (GTK_WINDOW (dialog), _("Unsaved project"));
+	gtk_window_set_title (GTK_WINDOW (dialog), _("Unsaved Project"));
 
 	error = xmlGetLastError ();
 	if (error)
@@ -2315,7 +2315,7 @@
 					 GTK_BUTTONS_NONE,
 					 _("Save the changes of current project before closing?"));
 
-	gtk_window_set_title (GTK_WINDOW (dialog), _("Modified project"));
+	gtk_window_set_title (GTK_WINDOW (dialog), _("Modified Project"));
 
 	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
 						  _("If you don't save, changes will be permanently lost."));
@@ -2854,7 +2854,7 @@
 		combo = gtk_combo_box_new_text ();
 		gtk_widget_show (combo);
 
-		gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Save project as brasero audio project"));
+		gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Save project as Brasero audio project"));
 		gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Save project as a plain text list"));
 
 #ifdef BUILD_PLAYLIST

Modified: branches/video/src/burn-basics.h
==============================================================================
--- branches/video/src/burn-basics.h	(original)
+++ branches/video/src/burn-basics.h	Sat Jun 21 19:28:36 2008
@@ -155,7 +155,7 @@
 	BRASERO_BURN_FLAG_LAST
 } BraseroBurnFlag;
 
-#define BRASERO_BURN_FLAG_ALL			0x7FFF
+#define BRASERO_BURN_FLAG_ALL			0xFFFF
 
 #define BRASERO_PLUGIN_KEY		"/apps/brasero/config/plugins"
 
@@ -184,21 +184,42 @@
  * Some defined and usable tags for a session
  */
 
-#define BRASERO_AUDIO_VIDEO_OUTPUT_FORMAT	"audio-video-format"
-#define BRASERO_VIDEO_OUTPUT_FRAMERATE		"video-framerate"
-#define BRASERO_VIDEO_OUTPUT_ASPECT		"video-aspect"
+/**
+ * Define the audio streams for a DVD
+ */
+#define BRASERO_DVD_AUDIO_STREAMS		"DVD-audio-format"
+
+/**
+ * Define the format: whether VCD or SVCD
+ */
+enum {
+	BRASERO_VCD_NONE,
+	BRASERO_VCD_V1,
+	BRASERO_VCD_V2,
+	BRASERO_SVCD
+};
+#define BRASERO_VCD_TYPE			"VCD-format"
 
+/**
+ * This is the video format that should be used.
+ */
 enum {
 	BRASERO_VIDEO_FRAMERATE_NATIVE,
 	BRASERO_VIDEO_FRAMERATE_NTSC,
 	BRASERO_VIDEO_FRAMERATE_PAL_SECAM
 };
+#define BRASERO_VIDEO_OUTPUT_FRAMERATE		"video-framerate"
 
+/**
+ * Aspect ratio
+ */
 enum {
 	BRASERO_VIDEO_ASPECT_NATIVE,
 	BRASERO_VIDEO_ASPECT_4_3,
 	BRASERO_VIDEO_ASPECT_16_9
 };
+#define BRASERO_VIDEO_OUTPUT_ASPECT		"video-aspect"
+
 
 G_END_DECLS
 

Modified: branches/video/src/burn-caps.c
==============================================================================
--- branches/video/src/burn-caps.c	(original)
+++ branches/video/src/burn-caps.c	Sat Jun 21 19:28:36 2008
@@ -794,6 +794,29 @@
 	return FALSE;
 }
 
+static gboolean
+brasero_caps_link_check_media_restrictions (BraseroCapsLink *link,
+					    BraseroMedia media)
+{
+	GSList *iter;
+
+	/* Go through all plugins: at least one must support record flags */
+	for (iter = link->plugins; iter; iter = iter->next) {
+		gboolean result;
+		BraseroPlugin *plugin;
+
+		plugin = iter->data;
+		if (!brasero_plugin_get_active (plugin))
+			continue;
+
+		result = brasero_plugin_check_media_restrictions (plugin, media);
+		if (result)
+			return TRUE;
+	}
+
+	return FALSE;
+}
+
 static BraseroPlugin *
 brasero_caps_link_find_plugin (BraseroCapsLink *link,
 			       gint group_id,
@@ -837,6 +860,8 @@
 			if (!result)
 				continue;
 		}
+		else if (!brasero_plugin_check_media_restrictions (plugin, media))
+			continue;
 
 		if (group_id > 0 && candidate) {
 			/* the candidate must be in the favourite group as much as possible */
@@ -1250,6 +1275,7 @@
 		/* retry with the same disc type but blank this time */
 		media &= ~(BRASERO_MEDIUM_CLOSED|
 			   BRASERO_MEDIUM_APPENDABLE|
+	   		   BRASERO_MEDIUM_UNFORMATTED|
 			   BRASERO_MEDIUM_HAS_DATA|
 			   BRASERO_MEDIUM_HAS_AUDIO);
 		media |= BRASERO_MEDIUM_BLANK;
@@ -1671,8 +1697,11 @@
 		/* first see if that's the perfect fit:
 		 * - it must have the same caps (type + subtype)
 		 * - it must have the proper IO */
-		if (link->caps->type.type == BRASERO_TRACK_TYPE_DATA
-		&& !brasero_caps_link_check_data_flags (link, session_flags, media))
+		if (link->caps->type.type == BRASERO_TRACK_TYPE_DATA) {
+			if (!brasero_caps_link_check_data_flags (link, session_flags, media))
+				continue;
+		}
+		else if (!brasero_caps_link_check_media_restrictions (link, media))
 			continue;
 
 		if ((link->caps->flags & BRASERO_PLUGIN_IO_ACCEPT_FILE)
@@ -1776,6 +1805,7 @@
 	media = output->subtype.media;
 	media &= ~(BRASERO_MEDIUM_CLOSED|
 		   BRASERO_MEDIUM_APPENDABLE|
+		   BRASERO_MEDIUM_UNFORMATTED|
 		   BRASERO_MEDIUM_HAS_DATA|
 		   BRASERO_MEDIUM_HAS_AUDIO);
 	media |= BRASERO_MEDIUM_BLANK;
@@ -2059,6 +2089,8 @@
 			if ((tmp & data_supported) != tmp)
 				continue;
 		}
+		else if (!brasero_caps_link_check_media_restrictions (link, media))
+			continue;
 
 		/* see if that's the perfect fit */
 		if ((link->caps->flags & BRASERO_PLUGIN_IO_ACCEPT_FILE)
@@ -2311,7 +2343,7 @@
 		 * then write on its own. Basically that works only with
 		 * overwrite formatted discs, DVD+RW, ...) */
 
-		if (!(media & (BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA))) {
+		if (!(media & (BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA|BRASERO_MEDIUM_UNFORMATTED))) {
 			/* media must have data/audio */
 			return BRASERO_BURN_NOT_SUPPORTED;
 		}
@@ -2327,11 +2359,12 @@
 		supported_flags |= BRASERO_BURN_FLAG_BLANK_BEFORE_WRITE;
 		compulsory_flags |= BRASERO_BURN_FLAG_BLANK_BEFORE_WRITE;
 
-		/* pretends it is blank and see if it would work. If it works
-		 * then that means that the BLANK_BEFORE_WRITE flag is
-		 * compulsory. */
+		/* pretends it is blank and formatted to see if it would work.
+		 * If it works then that means that the BLANK_BEFORE_WRITE flag
+		 * is compulsory. */
 		media &= ~(BRASERO_MEDIUM_CLOSED|
 			   BRASERO_MEDIUM_APPENDABLE|
+			   BRASERO_MEDIUM_UNFORMATTED|
 			   BRASERO_MEDIUM_HAS_DATA|
 			   BRASERO_MEDIUM_HAS_AUDIO);
 		media |= BRASERO_MEDIUM_BLANK;
@@ -2766,6 +2799,8 @@
 		BraseroCaps *caps;
 		BraseroAudioFormat common;
 		BraseroPluginIOFlag common_io;
+		BraseroAudioFormat common_audio;
+		BraseroAudioFormat common_video;
 
 		caps = iter->data;
 
@@ -2783,11 +2818,21 @@
 			continue;
 		}
 
-		/* search caps strictly encompassed or encompassing our format */
-		common = caps->type.subtype.audio_format & format;
-		if (common == BRASERO_AUDIO_FORMAT_NONE)
+		/* Search caps strictly encompassed or encompassing our format
+		 * NOTE: make sure that if there is a VIDEO stream in one of
+		 * them, the other does have a VIDEO stream too. */
+		common_audio = BRASERO_AUDIO_CAPS_AUDIO (caps->type.subtype.audio_format) & 
+			       BRASERO_AUDIO_CAPS_AUDIO (format);
+		if (common_audio == BRASERO_AUDIO_FORMAT_NONE)
+			continue;
+
+		common_video = BRASERO_AUDIO_CAPS_VIDEO (caps->type.subtype.audio_format) & 
+			       BRASERO_AUDIO_CAPS_VIDEO (format);
+		if (common_video == BRASERO_AUDIO_FORMAT_NONE)
 			continue;
 
+		common = common_audio|common_video;
+
 		/* encompassed caps just add it to retval */
 		if (caps->type.subtype.audio_format == common)
 			retval = g_slist_prepend (retval, caps);
@@ -2945,7 +2990,19 @@
 	if ((type & BRASERO_MEDIUM_BLANK)
 	&& !(media & BRASERO_MEDIUM_ROM)) {
 		/* if media is blank there is no other possible property */
-		retval = brasero_caps_disc_lookup_or_create (retval, media|BRASERO_MEDIUM_BLANK);
+		if (BRASERO_MEDIUM_IS (type, BRASERO_MEDIUM_DVDRW_PLUS)
+		||  BRASERO_MEDIUM_IS (type, BRASERO_MEDIUM_DVDRW_RESTRICTED)
+		||  BRASERO_MEDIUM_IS (type, BRASERO_MEDIUM_DVDRW_PLUS_DL)) {
+			/* This is only for above types */
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_BLANK|
+								     (type & BRASERO_MEDIUM_UNFORMATTED));
+		}
+		else
+			retval = brasero_caps_disc_lookup_or_create (retval,
+								     media|
+								     BRASERO_MEDIUM_BLANK);
 	}
 
 	if (type & BRASERO_MEDIUM_CLOSED) {

Modified: branches/video/src/burn-debug.c
==============================================================================
--- branches/video/src/burn-debug.c	(original)
+++ branches/video/src/burn-debug.c	Sat Jun 21 19:28:36 2008
@@ -225,6 +225,9 @@
 
 	if (media & BRASERO_MEDIUM_HAS_AUDIO)
 		strcat (buffer, "with audio ");
+
+	if (media & BRASERO_MEDIUM_UNFORMATTED)
+		strcat (buffer, "Unformatted ");
 }
 
 static void
@@ -276,11 +279,20 @@
 	if (format & BRASERO_AUDIO_FORMAT_AC3)
 		strcat (buffer, "AC3 ");
 
+	if (format & BRASERO_AUDIO_FORMAT_44100)
+		strcat (buffer, "44100 ");
+
+	if (format & BRASERO_AUDIO_FORMAT_48000)
+		strcat (buffer, "48000 ");
+
 	if (format & BRASERO_VIDEO_FORMAT_UNDEFINED)
 		strcat (buffer, "VIDEO UNDEFINED ");
 
-	if (format & BRASERO_VIDEO_FORMAT_MPEG2)
-		strcat (buffer, "MPEG2 ");
+	if (format & BRASERO_VIDEO_FORMAT_VCD)
+		strcat (buffer, "VCD ");
+
+	if (format & BRASERO_VIDEO_FORMAT_VCD)
+		strcat (buffer, "Video DVD ");
 }
 
 void

Modified: branches/video/src/burn-job.c
==============================================================================
--- branches/video/src/burn-job.c	(original)
+++ branches/video/src/burn-job.c	Sat Jun 21 19:28:36 2008
@@ -453,6 +453,9 @@
 
 	/* it's fine here to check size in bytes */
 	if (output_size > vol_size) {
+		/* FIXME: This string should mention that the location is on the
+		 * hard drive and not the medium itself to prevent any confusion
+		 * as seen in #533149 */
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_DISK_SPACE,

Modified: branches/video/src/burn-medium.h
==============================================================================
--- branches/video/src/burn-medium.h	(original)
+++ branches/video/src/burn-medium.h	Sat Jun 21 19:28:36 2008
@@ -107,9 +107,12 @@
 	BRASERO_MEDIUM_CLOSED			= 1 << 18,
 	BRASERO_MEDIUM_APPENDABLE		= 1 << 19,
 
-	BRASERO_MEDIUM_PROTECTED		= 1 << 20,
-	BRASERO_MEDIUM_HAS_DATA			= 1 << 21,
-	BRASERO_MEDIUM_HAS_AUDIO		= 1 << 22,
+	/* Only used for DVD+RW, DVD-RW restricted */
+	BRASERO_MEDIUM_UNFORMATTED		= 1 << 20,
+
+	BRASERO_MEDIUM_PROTECTED		= 1 << 21,
+	BRASERO_MEDIUM_HAS_DATA			= 1 << 22,
+	BRASERO_MEDIUM_HAS_AUDIO		= 1 << 23,
 } BraseroMedia;
 
 #define BRASERO_MEDIUM_CDROM		(BRASERO_MEDIUM_CD|		\
@@ -174,7 +177,7 @@
 #define BRASERO_MEDIUM_ATTR(media)	((media) & 0x1C000)
 #define BRASERO_MEDIUM_STATUS(media)	((media) & 0xE0000)
 #define BRASERO_MEDIUM_SUBTYPE(media)	((media) & 0x1FC0)
-#define BRASERO_MEDIUM_INFO(media)	((media) & 0x700000)
+#define BRASERO_MEDIUM_INFO(media)	((media) & 0xFE0000)
 
 #define BRASERO_MEDIUM_IS(media, type)	(((media)&(type))==(type))
 

Modified: branches/video/src/burn-plugin-private.h
==============================================================================
--- branches/video/src/burn-plugin-private.h	(original)
+++ branches/video/src/burn-plugin-private.h	Sat Jun 21 19:28:36 2008
@@ -91,6 +91,9 @@
 brasero_plugin_check_record_flags (BraseroPlugin *plugin,
 				   BraseroMedia media,
 				   BraseroBurnFlag current);
+gboolean
+brasero_plugin_check_media_restrictions (BraseroPlugin *plugin,
+					 BraseroMedia media);
 
 gboolean
 brasero_plugin_get_image_flags (BraseroPlugin *plugin,

Modified: branches/video/src/burn-plugin.c
==============================================================================
--- branches/video/src/burn-plugin.c	(original)
+++ branches/video/src/burn-plugin.c	Sat Jun 21 19:28:36 2008
@@ -605,6 +605,7 @@
 	BraseroPluginPrivate *priv;
 
 	priv = BRASERO_PLUGIN_PRIVATE (self);
+
 	current &= BRASERO_PLUGIN_IMAGE_FLAG_MASK;
 
 	/* If there is no flag that's no use checking anything. If there is no
@@ -623,6 +624,21 @@
 }
 
 gboolean
+brasero_plugin_check_media_restrictions (BraseroPlugin *self,
+					 BraseroMedia media)
+{
+	BraseroPluginPrivate *priv;
+
+	priv = BRASERO_PLUGIN_PRIVATE (self);
+
+	/* no restrictions */
+	if (!priv->flags)
+		return TRUE;
+
+	return (brasero_plugin_get_flags (priv->flags, media) != NULL);
+}
+
+gboolean
 brasero_plugin_get_record_flags (BraseroPlugin *self,
 				 BraseroMedia media,
 				 BraseroBurnFlag current,

Modified: branches/video/src/burn-track.h
==============================================================================
--- branches/video/src/burn-track.h	(original)
+++ branches/video/src/burn-track.h	Sat Jun 21 19:28:36 2008
@@ -66,10 +66,16 @@
 	BRASERO_AUDIO_FORMAT_RAW		= 1 << 2,
 	BRASERO_AUDIO_FORMAT_AC3		= 1 << 3,
 	BRASERO_AUDIO_FORMAT_MP2		= 1 << 4,
-	BRASERO_VIDEO_FORMAT_UNDEFINED		= 1 << 5,
-	BRASERO_VIDEO_FORMAT_MPEG2		= 1 << 6
+	BRASERO_AUDIO_FORMAT_44100		= 1 << 5,
+	BRASERO_AUDIO_FORMAT_48000		= 1 << 6,
+	BRASERO_VIDEO_FORMAT_UNDEFINED		= 1 << 7,
+	BRASERO_VIDEO_FORMAT_VCD		= 1 << 8,
+	BRASERO_VIDEO_FORMAT_VIDEO_DVD		= 1 << 9
 } BraseroAudioFormat;
 
+#define BRASERO_AUDIO_CAPS_AUDIO(caps_FORMAT)	((caps_FORMAT) & 0x007F)
+#define BRASERO_AUDIO_CAPS_VIDEO(caps_FORMAT)	((caps_FORMAT) & 0x0180)
+
 typedef enum {
 	BRASERO_CHECKSUM_NONE			= 0,
 	BRASERO_CHECKSUM_MD5			= 1,

Modified: branches/video/src/plugins/Makefile.am
==============================================================================
--- branches/video/src/plugins/Makefile.am	(original)
+++ branches/video/src/plugins/Makefile.am	Sat Jun 21 19:28:36 2008
@@ -1,4 +1,4 @@
-SUBDIRS = cdrdao gstreamer dvdcss growisofs checksum local-track dvdauthor
+SUBDIRS = cdrdao gstreamer dvdcss growisofs checksum local-track dvdauthor vcdimager
 
 if BUILD_LIBBURNIA
 SUBDIRS += libburnia

Modified: branches/video/src/plugins/cdrkit/burn-wodim.c
==============================================================================
--- branches/video/src/plugins/cdrkit/burn-wodim.c	(original)
+++ branches/video/src/plugins/cdrkit/burn-wodim.c	Sat Jun 21 19:28:36 2008
@@ -297,6 +297,11 @@
 
 		brasero_job_start_progress (BRASERO_JOB (wodim), FALSE);
 	}
+	else if (sscanf (line, "Formating in progress: %d.%d %% done", &mb_written, &mb_total) == 2) {
+		brasero_job_start_progress (BRASERO_JOB (wodim), FALSE);
+		brasero_job_set_progress (BRASERO_JOB (wodim),
+					  (gdouble) ((gdouble) mb_written + ((gdouble) mb_total) / 10.0));
+	}
 	else if (sscanf (line, "Track %*d: %*s %d MB ", &mb_total) == 1) {
 /*		if (mb_total > 0)
 			priv->tracks_total_bytes += mb_total * 1048576;
@@ -1052,7 +1057,7 @@
 			       "wodim",
 			       _("use wodim to burn CDs"),
 			       "Philippe Rouquier",
-			       1);
+			       0);
 
 	/* First see if this plugin can be used */
 	result = brasero_process_check_path ("wodim", error);
@@ -1082,7 +1087,8 @@
 
 	input = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_PIPE|
 					BRASERO_PLUGIN_IO_ACCEPT_FILE,
-					BRASERO_AUDIO_FORMAT_RAW);
+					BRASERO_AUDIO_FORMAT_RAW|
+					BRASERO_AUDIO_FORMAT_44100);
 
 	brasero_plugin_link_caps (plugin, output, input);
 	g_slist_free (output);
@@ -1093,20 +1099,6 @@
 	 * used to start a multisession DVD-RW or even continue one.
 	 * I didn't try with DVD-W since I didn't want to waste one for nothing.
 	 */
-
-/*	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVD|
-				  BRASERO_MEDIUM_SEQUENTIAL|
-				  BRASERO_MEDIUM_WRITABLE|
-				  BRASERO_MEDIUM_REWRITABLE|
-				  BRASERO_MEDIUM_BLANK,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_DUMMY|
-				  BRASERO_BURN_FLAG_NOGRACE,
-				  BRASERO_BURN_FLAG_NONE);
-*/
-
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVD|
 				  BRASERO_MEDIUM_SEQUENTIAL|
@@ -1120,33 +1112,6 @@
 				  BRASERO_BURN_FLAG_NOGRACE,
 				  BRASERO_BURN_FLAG_NONE);
 
-/*	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVD|
-				  BRASERO_MEDIUM_SEQUENTIAL|
-				  BRASERO_MEDIUM_WRITABLE|
-				  BRASERO_MEDIUM_REWRITABLE|
-				  BRASERO_MEDIUM_APPENDABLE|
-				  BRASERO_MEDIUM_HAS_DATA,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_DUMMY|
-				  BRASERO_BURN_FLAG_NOGRACE|
-				  BRASERO_BURN_FLAG_APPEND|
-				  BRASERO_BURN_FLAG_MERGE,
-				  BRASERO_BURN_FLAG_NONE); */
-
-	/* DVD+ R/RW don't support dummy mode 
-	 * NOTE: don't mix dao and multisession */
-/*	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVDR_PLUS|
-				  BRASERO_MEDIUM_BLANK,
-				  BRASERO_BURN_FLAG_DAO|
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_NOGRACE,
-				  BRASERO_BURN_FLAG_NONE);
-*/
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDR_PLUS|
 				  BRASERO_MEDIUM_BLANK,
@@ -1156,20 +1121,8 @@
 				  BRASERO_BURN_FLAG_NOGRACE,
 				  BRASERO_BURN_FLAG_NONE);
 
-/*
-	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVDR_PLUS|
-				  BRASERO_MEDIUM_APPENDABLE|
-				  BRASERO_MEDIUM_HAS_DATA,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_NOGRACE|
-				  BRASERO_BURN_FLAG_APPEND|
-				  BRASERO_BURN_FLAG_MERGE,
-				  BRASERO_BURN_FLAG_NONE);
-*/
-	/* for DVD+RW */
+	/* for DVD+RW 
+	 * NOTE: we don't accept unformatted media here */
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDRW_PLUS|
 				  BRASERO_MEDIUM_BLANK,
@@ -1224,40 +1177,24 @@
 	/* blanking/formatting caps and flags for +/sequential RW
 	 * 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 */
+	 * NOTE: blanking DVD-RW doesn't work */
 	output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
 					BRASERO_MEDIUM_PLUS|
-//					BRASERO_MEDIUM_SEQUENTIAL|
 					BRASERO_MEDIUM_REWRITABLE|
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_CLOSED|
 					BRASERO_MEDIUM_HAS_DATA|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_BLANK);
 	brasero_plugin_blank_caps (plugin, output);
 	g_slist_free (output);
 
-	/* This media can be blanked fast or full like any CDRW.
-	 * From the tests, it appears that the way wodim formats the DVDRW makes
-	 * it unable to support multisession. dvd+rw-format is needed to format
-	 * it correctly after a fast blanking. 
-	brasero_plugin_set_blank_flags (plugin,
-					BRASERO_MEDIUM_DVD|
-					BRASERO_MEDIUM_SEQUENTIAL|
-					BRASERO_MEDIUM_REWRITABLE|
-					BRASERO_MEDIUM_APPENDABLE|
-					BRASERO_MEDIUM_HAS_DATA|
-					BRASERO_MEDIUM_BLANK|
-					BRASERO_MEDIUM_CLOSED,
-					BRASERO_BURN_FLAG_FAST_BLANK|
-					BRASERO_BURN_FLAG_NOGRACE,
-					BRASERO_BURN_FLAG_NONE);
-	*/
-
 	/* again DVD+RW don't support dummy */
 	brasero_plugin_set_blank_flags (plugin,
 					BRASERO_MEDIUM_DVDRW_PLUS|
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_HAS_DATA|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_BLANK|
 					BRASERO_MEDIUM_CLOSED,
 					BRASERO_BURN_FLAG_NOGRACE,

Modified: branches/video/src/plugins/cdrtools/burn-cdrecord.c
==============================================================================
--- branches/video/src/plugins/cdrtools/burn-cdrecord.c	(original)
+++ branches/video/src/plugins/cdrtools/burn-cdrecord.c	Sat Jun 21 19:28:36 2008
@@ -302,6 +302,12 @@
 /*		if (mb_total > 0)
 			priv->tracks_total_bytes += mb_total * 1048576;
 */	}
+	else if (strstr (line, "Formatting media")) {
+		brasero_job_set_current_action (BRASERO_JOB (process),
+						BRASERO_BURN_ACTION_BLANKING,
+						_("Formatting media"),
+						FALSE);
+	}
 	else if (strstr (line, "Sending CUE sheet")) {
 		BraseroTrackType type;
 
@@ -1022,10 +1028,10 @@
 	const BraseroMedia dvd_media = BRASERO_MEDIUM_DVD|
 				       BRASERO_MEDIUM_PLUS|
 				       BRASERO_MEDIUM_SEQUENTIAL|
-//				       BRASERO_MEDIUM_RESTRICTED|
 				       BRASERO_MEDIUM_WRITABLE|
 				       BRASERO_MEDIUM_REWRITABLE|
 				       BRASERO_MEDIUM_BLANK|
+				       BRASERO_MEDIUM_UNFORMATTED|
 				       BRASERO_MEDIUM_APPENDABLE|
 				       BRASERO_MEDIUM_HAS_DATA;
 	const BraseroMedia media_rw = BRASERO_MEDIUM_CD|
@@ -1044,7 +1050,7 @@
 			       "cdrecord",
 			       _("use cdrecord to burn CDs"),
 			       "Philippe Rouquier",
-			       0);
+			       1);
 
 	/* First see if this plugin can be used */
 	result = brasero_process_check_path ("cdrecord", error);
@@ -1074,27 +1080,13 @@
 
 	input = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_PIPE|
 					BRASERO_PLUGIN_IO_ACCEPT_FILE,
-					BRASERO_AUDIO_FORMAT_RAW);
+					BRASERO_AUDIO_FORMAT_RAW|
+					BRASERO_AUDIO_FORMAT_44100);
 
 	brasero_plugin_link_caps (plugin, output, input);
 	g_slist_free (output);
 	g_slist_free (input);
 
-	/* For DVD-W and DVD-RW sequential
-	 * NOTE: DAO et MULTI are exclusive. */
-/*	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVD|
-				  BRASERO_MEDIUM_SEQUENTIAL|
-				  BRASERO_MEDIUM_WRITABLE|
-				  BRASERO_MEDIUM_REWRITABLE|
-				  BRASERO_MEDIUM_BLANK,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_DUMMY|
-				  BRASERO_BURN_FLAG_NOGRACE,
-				  BRASERO_BURN_FLAG_NONE);
-*/
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVD|
 				  BRASERO_MEDIUM_SEQUENTIAL|
@@ -1107,68 +1099,7 @@
 				  BRASERO_BURN_FLAG_DUMMY|
 				  BRASERO_BURN_FLAG_NOGRACE,
 				  BRASERO_BURN_FLAG_NONE);
-/*
-	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVD|
-				  BRASERO_MEDIUM_SEQUENTIAL|
-				  BRASERO_MEDIUM_WRITABLE|
-				  BRASERO_MEDIUM_REWRITABLE|
-				  BRASERO_MEDIUM_APPENDABLE|
-				  BRASERO_MEDIUM_HAS_DATA,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_DUMMY|
-				  BRASERO_BURN_FLAG_NOGRACE|
-				  BRASERO_BURN_FLAG_APPEND|
-				  BRASERO_BURN_FLAG_MERGE,
-				  BRASERO_BURN_FLAG_NONE);
-*/
-	/* see NOTE for DVD-RW restricted overwrite below */
-/*	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVD|
-				  BRASERO_MEDIUM_RESTRICTED|
-				  BRASERO_MEDIUM_REWRITABLE|
-				  BRASERO_MEDIUM_BLANK,
-				  BRASERO_BURN_FLAG_DAO|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_DUMMY|
-				  BRASERO_BURN_FLAG_NOGRACE|
-				  BRASERO_BURN_FLAG_BLANK_BEFORE_WRITE,
-				  BRASERO_BURN_FLAG_MULTI);
 
-	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVD|
-				  BRASERO_MEDIUM_RESTRICTED|
-				  BRASERO_MEDIUM_REWRITABLE|
-				  BRASERO_MEDIUM_APPENDABLE|
-				  BRASERO_MEDIUM_CLOSED|
-				  BRASERO_MEDIUM_HAS_DATA,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_DUMMY|
-				  BRASERO_BURN_FLAG_NOGRACE|
-				  BRASERO_BURN_FLAG_BLANK_BEFORE_WRITE,
-				  BRASERO_BURN_FLAG_MULTI);
-
-	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVD|
-				  BRASERO_MEDIUM_RESTRICTED|
-				  BRASERO_MEDIUM_REWRITABLE|
-				  BRASERO_MEDIUM_APPENDABLE|
-				  BRASERO_MEDIUM_CLOSED|
-				  BRASERO_MEDIUM_HAS_DATA,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_DUMMY|
-				  BRASERO_BURN_FLAG_NOGRACE|
-				  BRASERO_BURN_FLAG_MERGE,
-				  BRASERO_BURN_FLAG_MULTI);
-*/
 	/* DVD+ R/RW don't support dummy mode 
 	 * NOTE: don't mix dao and multisession */
 	brasero_plugin_set_flags (plugin,
@@ -1180,31 +1111,10 @@
 				  BRASERO_BURN_FLAG_NOGRACE,
 				  BRASERO_BURN_FLAG_NONE);
 
-/*	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVDR_PLUS|
-				  BRASERO_MEDIUM_BLANK,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_NOGRACE,
-				  BRASERO_BURN_FLAG_NONE);
-*/
-/*
-	brasero_plugin_set_flags (plugin,
-				  BRASERO_MEDIUM_DVDR_PLUS|
-				  BRASERO_MEDIUM_APPENDABLE|
-				  BRASERO_MEDIUM_HAS_DATA,
-				  BRASERO_BURN_FLAG_BURNPROOF|
-				  BRASERO_BURN_FLAG_OVERBURN|
-				  BRASERO_BURN_FLAG_MULTI|
-				  BRASERO_BURN_FLAG_NOGRACE|
-				  BRASERO_BURN_FLAG_APPEND|
-				  BRASERO_BURN_FLAG_MERGE,
-				  BRASERO_BURN_FLAG_NONE);
-*/
 	/* for DVD+RW */
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDRW_PLUS|
+				  BRASERO_MEDIUM_UNFORMATTED|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_DAO|
 				  BRASERO_BURN_FLAG_BURNPROOF|
@@ -1271,46 +1181,21 @@
 	  * NOTE: blanking DVD-RW doesn't work */
 	output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
 					BRASERO_MEDIUM_PLUS|
-//					BRASERO_MEDIUM_SEQUENTIAL|
-//					BRASERO_MEDIUM_RESTRICTED|
 					BRASERO_MEDIUM_REWRITABLE|
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_CLOSED|
 					BRASERO_MEDIUM_HAS_DATA|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_BLANK);
 	brasero_plugin_blank_caps (plugin, output);
 	g_slist_free (output);
 
-	/* This media can be blanked fast or full like any CDRW. */
-/*	brasero_plugin_set_blank_flags (plugin,
-					BRASERO_MEDIUM_DVD|
-					BRASERO_MEDIUM_SEQUENTIAL|
-					BRASERO_MEDIUM_REWRITABLE|
-					BRASERO_MEDIUM_APPENDABLE|
-					BRASERO_MEDIUM_HAS_DATA|
-					BRASERO_MEDIUM_BLANK|
-					BRASERO_MEDIUM_CLOSED,
-//					BRASERO_BURN_FLAG_FAST_BLANK|
-					BRASERO_BURN_FLAG_NOGRACE,
-					BRASERO_BURN_FLAG_NONE);
-*/
-	/* For DVD-RW restricted overwrite */
-/*	brasero_plugin_set_blank_flags (plugin,
-					BRASERO_MEDIUM_DVD|
-					BRASERO_MEDIUM_RESTRICTED|
-					BRASERO_MEDIUM_REWRITABLE|
-					BRASERO_MEDIUM_APPENDABLE|
-					BRASERO_MEDIUM_HAS_DATA|
-					BRASERO_MEDIUM_BLANK|
-					BRASERO_MEDIUM_CLOSED,
-					BRASERO_BURN_FLAG_NOGRACE,
-					BRASERO_BURN_FLAG_NONE);
-*/
 	/* again DVD+RW don't support dummy */
 	brasero_plugin_set_blank_flags (plugin,
 					BRASERO_MEDIUM_DVDRW_PLUS|
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_HAS_DATA|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_BLANK|
 					BRASERO_MEDIUM_CLOSED,
 					BRASERO_BURN_FLAG_NOGRACE,

Modified: branches/video/src/plugins/dvdauthor/burn-dvdauthor.c
==============================================================================
--- branches/video/src/plugins/dvdauthor/burn-dvdauthor.c	(original)
+++ branches/video/src/plugins/dvdauthor/burn-dvdauthor.c	Sat Jun 21 19:28:36 2008
@@ -365,7 +365,9 @@
 					BRASERO_AUDIO_FORMAT_AC3|
 					BRASERO_AUDIO_FORMAT_MP2|
 					BRASERO_AUDIO_FORMAT_RAW|
-					BRASERO_VIDEO_FORMAT_MPEG2);
+					BRASERO_AUDIO_FORMAT_44100|
+					BRASERO_AUDIO_FORMAT_48000|
+					BRASERO_VIDEO_FORMAT_VIDEO_DVD);
 	output = brasero_caps_data_new (BRASERO_IMAGE_FS_ISO|
 					BRASERO_IMAGE_FS_UDF|
 					BRASERO_IMAGE_FS_VIDEO);
@@ -376,12 +378,25 @@
 
 	/* we only support DVDs */
 	brasero_plugin_set_flags (plugin,
+  				  BRASERO_MEDIUM_FILE|
 				  BRASERO_MEDIUM_DVDR|
-				  BRASERO_MEDIUM_DVDRW|
-				  BRASERO_MEDIUM_DVDRW_RESTRICTED|
 				  BRASERO_MEDIUM_DVDR_PLUS|
+				  BRASERO_MEDIUM_DVD_DL|
+				  BRASERO_MEDIUM_BLANK|
+				  BRASERO_MEDIUM_APPENDABLE|
+				  BRASERO_MEDIUM_HAS_DATA,
+				  BRASERO_BURN_FLAG_NONE,
+				  BRASERO_BURN_FLAG_NONE);
+
+	brasero_plugin_set_flags (plugin,
+				  BRASERO_MEDIUM_DVDRW|
 				  BRASERO_MEDIUM_DVDRW_PLUS|
-				  BRASERO_MEDIUM_DVD_DL,
+				  BRASERO_MEDIUM_DVDRW_RESTRICTED|
+				  BRASERO_MEDIUM_DVD_DL|
+				  BRASERO_MEDIUM_BLANK|
+				  BRASERO_MEDIUM_CLOSED|
+				  BRASERO_MEDIUM_APPENDABLE|
+				  BRASERO_MEDIUM_HAS_DATA,
 				  BRASERO_BURN_FLAG_NONE,
 				  BRASERO_BURN_FLAG_NONE);
 

Modified: branches/video/src/plugins/growisofs/burn-dvd-rw-format.c
==============================================================================
--- branches/video/src/plugins/growisofs/burn-dvd-rw-format.c	(original)
+++ branches/video/src/plugins/growisofs/burn-dvd-rw-format.c	Sat Jun 21 19:28:36 2008
@@ -159,6 +159,7 @@
 				   BRASERO_MEDIUM_APPENDABLE|
 				   BRASERO_MEDIUM_CLOSED|
 				   BRASERO_MEDIUM_HAS_DATA|
+				   BRASERO_MEDIUM_UNFORMATTED|
 				   BRASERO_MEDIUM_BLANK;
 	gchar *prog_name;
 	GSList *output;

Modified: branches/video/src/plugins/growisofs/burn-growisofs.c
==============================================================================
--- branches/video/src/plugins/growisofs/burn-growisofs.c	(original)
+++ branches/video/src/plugins/growisofs/burn-growisofs.c	Sat Jun 21 19:28:36 2008
@@ -662,7 +662,7 @@
 			       "growisofs",
 			       _("growisofs burns DVDs"),
 			       "Philippe Rouquier",
-			       0);
+			       7);
 
 	/* First see if this plugin can be used, i.e. if growisofs is in
 	 * the path */
@@ -692,6 +692,7 @@
 	output = brasero_caps_disc_new (BRASERO_MEDIUM_DVD|
 					BRASERO_MEDIUM_SEQUENTIAL|
 					BRASERO_MEDIUM_REWRITABLE|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_BLANK);
 
 	brasero_plugin_link_caps (plugin, output, input);
@@ -703,6 +704,7 @@
 					BRASERO_MEDIUM_PLUS|
 					BRASERO_MEDIUM_RESTRICTED|
 					BRASERO_MEDIUM_REWRITABLE|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_BLANK|
 					BRASERO_MEDIUM_CLOSED|
 					BRASERO_MEDIUM_APPENDABLE|
@@ -720,6 +722,7 @@
 					BRASERO_MEDIUM_JUMP|
 					BRASERO_MEDIUM_WRITABLE|
 					BRASERO_MEDIUM_REWRITABLE|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_BLANK|
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_HAS_DATA);
@@ -755,6 +758,7 @@
 				  BRASERO_MEDIUM_JUMP|
 				  BRASERO_MEDIUM_WRITABLE|
 				  BRASERO_MEDIUM_REWRITABLE|
+				  BRASERO_MEDIUM_UNFORMATTED|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_BURNPROOF|
 				  BRASERO_BURN_FLAG_OVERBURN|
@@ -770,6 +774,7 @@
 				  BRASERO_MEDIUM_JUMP|
 				  BRASERO_MEDIUM_WRITABLE|
 				  BRASERO_MEDIUM_REWRITABLE|
+				  BRASERO_MEDIUM_UNFORMATTED|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_DAO|
 				  BRASERO_BURN_FLAG_BURNPROOF|
@@ -801,6 +806,7 @@
 				  BRASERO_MEDIUM_DVD|
 				  BRASERO_MEDIUM_RESTRICTED|
 				  BRASERO_MEDIUM_REWRITABLE|
+				  BRASERO_MEDIUM_UNFORMATTED|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_DAO|
 				  BRASERO_BURN_FLAG_MULTI|
@@ -884,6 +890,7 @@
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDRW_PLUS|
 				  BRASERO_MEDIUM_DVD_DL|
+				  BRASERO_MEDIUM_UNFORMATTED|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_MULTI|
 				  BRASERO_BURN_FLAG_DAO|
@@ -927,6 +934,7 @@
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_CLOSED|
 					BRASERO_MEDIUM_HAS_DATA|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_BLANK);
 	brasero_plugin_blank_caps (plugin, output);
 	g_slist_free (output);
@@ -938,6 +946,7 @@
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_HAS_DATA|
 					BRASERO_MEDIUM_BLANK|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_CLOSED,
 					BRASERO_BURN_FLAG_NOGRACE|
 					BRASERO_BURN_FLAG_FAST_BLANK,
@@ -950,6 +959,7 @@
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_HAS_DATA|
 					BRASERO_MEDIUM_BLANK|
+					BRASERO_MEDIUM_UNFORMATTED|
 					BRASERO_MEDIUM_CLOSED,
 					BRASERO_BURN_FLAG_NOGRACE|
 					BRASERO_BURN_FLAG_FAST_BLANK,

Modified: branches/video/src/plugins/gstreamer/burn-transcode.c
==============================================================================
--- branches/video/src/plugins/gstreamer/burn-transcode.c	(original)
+++ branches/video/src/plugins/gstreamer/burn-transcode.c	Sat Jun 21 19:28:36 2008
@@ -585,7 +585,10 @@
 	}
 
 	dest = brasero_track_new (BRASERO_TRACK_TYPE_AUDIO);
-	brasero_track_set_audio_source (dest, path_dest, BRASERO_AUDIO_FORMAT_RAW);
+	brasero_track_set_audio_source (dest,
+					path_dest,
+					BRASERO_AUDIO_FORMAT_RAW|
+					BRASERO_AUDIO_FORMAT_44100);
 
 	/* NOTE: there is no gap and start = 0 since these tracks are the result
 	 * of the transformation of previous ones */
@@ -860,7 +863,10 @@
 	brasero_job_get_output_type (BRASERO_JOB (transcode), &type);
 	track = brasero_track_new (BRASERO_TRACK_TYPE_AUDIO);
 
-	brasero_track_set_audio_source (track, output, BRASERO_AUDIO_FORMAT_RAW);
+	brasero_track_set_audio_source (track,
+					output,
+					BRASERO_AUDIO_FORMAT_RAW|
+					BRASERO_AUDIO_FORMAT_44100);
 	brasero_track_set_audio_boundaries (track, 0, length, 0);
 	brasero_track_set_audio_info (track, info);
 
@@ -1438,7 +1444,8 @@
 
 	output = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_FILE|
 					 BRASERO_PLUGIN_IO_ACCEPT_PIPE,
-					 BRASERO_AUDIO_FORMAT_RAW);
+					 BRASERO_AUDIO_FORMAT_RAW|
+					 BRASERO_AUDIO_FORMAT_44100);
 
 	input = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_FILE,
 					BRASERO_AUDIO_FORMAT_UNDEFINED);

Modified: branches/video/src/plugins/gstreamer/burn-vob.c
==============================================================================
--- branches/video/src/plugins/gstreamer/burn-vob.c	(original)
+++ branches/video/src/plugins/gstreamer/burn-vob.c	Sat Jun 21 19:28:36 2008
@@ -50,6 +50,9 @@
 	GstElement *video;
 
 	BraseroAudioFormat format;
+
+	guint svcd:1;
+	guint is_video_dvd:1;
 };
 
 #define BRASERO_VOB_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_VOB, BraseroVobPrivate))
@@ -87,19 +90,20 @@
 brasero_vob_finished (BraseroVob *vob)
 {
 	BraseroVobPrivate *priv;
+	BraseroTrackType type;
 	gchar *output = NULL;
 	BraseroTrack *track;
 
 	priv = BRASERO_VOB_PRIVATE (vob);
 
+	memset (&type, 0, sizeof (BraseroTrackType));
+	brasero_job_get_output_type (BRASERO_JOB (vob), &type);
 	brasero_job_get_audio_output (BRASERO_JOB (vob), &output);
 
 	track = brasero_track_new (BRASERO_TRACK_TYPE_AUDIO);
 	brasero_track_set_audio_source (track,
 					output,
-					priv->format|
-					BRASERO_AUDIO_FORMAT_RAW|
-					BRASERO_VIDEO_FORMAT_MPEG2);
+					type.subtype.audio_format);
 
 	brasero_job_add_track (BRASERO_JOB (vob), track);
 	brasero_track_unref (track);
@@ -289,6 +293,7 @@
 			     GError **error)
 {
 	GstElement *queue;
+	GstElement *queue1;
 	GstElement *encode;
 	GstElement *convert;
 	GstElement *resample;
@@ -344,9 +349,60 @@
 	}
 	gst_bin_add (GST_BIN (priv->pipeline), encode);
 
-	gst_element_link_many (queue, convert, resample, encode, NULL);
-	brasero_vob_link_audio (vob, queue, encode, tee, muxer);
+	/* another queue */
+	queue1 = gst_element_factory_make ("queue", NULL);
+	if (queue1 == NULL) {
+		g_set_error (error,
+			     BRASERO_BURN_ERROR,
+			     BRASERO_BURN_ERROR_GENERAL,
+			     _("queue1 element can't be created"));
+		goto error;
+	}
+	gst_bin_add (GST_BIN (priv->pipeline), queue1);
+	g_object_set (queue1,
+		      "max-size-bytes", 0,
+		      "max-size-buffers", 0,
+		      "max-size-time", (gint64) 0,
+		      NULL);
+
+	if (!priv->is_video_dvd) {
+		GstElement *filter;
+		GstCaps *filtercaps;
+
+		/* This is for (S)VCD which need to have audio at 44100 khz */
+
+		/* create a filter */
+		filter = gst_element_factory_make ("capsfilter", NULL);
+		if (filter == NULL) {
+			g_set_error (error,
+				     BRASERO_BURN_ERROR,
+				     BRASERO_BURN_ERROR_GENERAL,
+				     _("filter can't be created"));
+			goto error;
+		}
+		gst_bin_add (GST_BIN (priv->pipeline), filter);
+
+		BRASERO_JOB_LOG (vob, "Setting rate to 44100");
+
+		filtercaps = gst_caps_new_full (gst_structure_new ("audio/x-raw-int",
+								   "channels", G_TYPE_INT, 2,
+								   "width", G_TYPE_INT, 16,
+								   "depth", G_TYPE_INT, 16,
+								   "endianness", G_TYPE_INT, 1234,
+								   "rate", G_TYPE_INT, 44100,
+								   "signed", G_TYPE_BOOLEAN, TRUE,
+								   NULL),
+						NULL);
 
+		g_object_set (GST_OBJECT (filter), "caps", filtercaps, NULL);
+		gst_caps_unref (filtercaps);
+
+		gst_element_link_many (queue, convert, resample, filter, encode, queue1, NULL);
+	}
+	else
+		gst_element_link_many (queue, convert, resample, encode, queue1, NULL);
+
+	brasero_vob_link_audio (vob, queue, queue1, tee, muxer);
 	return TRUE;
 
 error:
@@ -448,32 +504,42 @@
 	}
 	gst_bin_add (GST_BIN (priv->pipeline), tee);
 
-	/* PCM : always */
-	if (!brasero_vob_build_audio_pcm (vob, tee, muxer, error))
-		goto error;
-
-	/* Get output format */
-	value = NULL;
-	brasero_job_tag_lookup (BRASERO_JOB (vob),
-				BRASERO_AUDIO_VIDEO_OUTPUT_FORMAT,
-				&value);
-
-	if (value)
-		priv->format = g_value_get_int (value);
-	else
-		priv->format = BRASERO_AUDIO_FORMAT_NONE;
+	if (priv->is_video_dvd) {
+		/* Get output format */
+		value = NULL;
+		brasero_job_tag_lookup (BRASERO_JOB (vob),
+					BRASERO_DVD_AUDIO_STREAMS,
+					&value);
+
+		if (value)
+			priv->format = g_value_get_int (value);
+
+		if (priv->format == BRASERO_AUDIO_FORMAT_NONE)
+			priv->format = BRASERO_AUDIO_FORMAT_RAW;
+
+		if (priv->format & BRASERO_AUDIO_FORMAT_RAW) {
+			/* PCM : on demand */
+			BRASERO_JOB_LOG (vob, "Adding PCM audio stream");
+			if (!brasero_vob_build_audio_pcm (vob, tee, muxer, error))
+				goto error;
+		}
 
-	if (priv->format & BRASERO_AUDIO_FORMAT_AC3) {
-		/* AC3 : on demand */
-		if (!brasero_vob_build_audio_ac3 (vob, tee, muxer, error))
-			goto error;
-	}
+		if (priv->format & BRASERO_AUDIO_FORMAT_AC3) {
+			/* AC3 : on demand */
+			BRASERO_JOB_LOG (vob, "Adding AC3 audio stream");
+			if (!brasero_vob_build_audio_ac3 (vob, tee, muxer, error))
+				goto error;
+		}
 
-	if (priv->format & BRASERO_AUDIO_FORMAT_MP2) {
-		/* MP2 : on demand */
-		if (!brasero_vob_build_audio_mp2 (vob, tee, muxer, error))
-			goto error;
+		if (priv->format & BRASERO_AUDIO_FORMAT_MP2) {
+			/* MP2 : on demand */
+			BRASERO_JOB_LOG (vob, "Adding MP2 audio stream");
+			if (!brasero_vob_build_audio_mp2 (vob, tee, muxer, error))
+				goto error;
+		}
 	}
+	else if (!brasero_vob_build_audio_mp2 (vob, tee, muxer, error))
+		goto error;
 
 	return tee;
 
@@ -572,9 +638,20 @@
 	}
 	gst_bin_add (GST_BIN (priv->pipeline), encode);
 
-	g_object_set (encode,
-		      "format", 8,
-		      NULL);
+	if (priv->is_video_dvd)
+		g_object_set (encode,
+			      "format", 8,
+			      NULL);
+	/* NOTE: there is another option to improve compatibility with vcdimager
+	 * but that would mean be sure that it's the next. */
+	else if (priv->svcd)
+		g_object_set (encode,
+			      "format", 4,
+			      NULL);
+	else
+		g_object_set (encode,
+			      "format", 1,
+			      NULL);
 
 	/* settings */
 	value = NULL;
@@ -593,34 +670,86 @@
 				      "norm", 110,
 				      "framerate", 4,
 				      NULL);
-			filtercaps = gst_caps_new_full (gst_structure_new ("video/x-raw-yuv",
-									   "framerate", GST_TYPE_FRACTION, 30000, 1001,
-									   "width", G_TYPE_INT, 720,
-									   "height", G_TYPE_INT, 480,
-									   NULL),
-							gst_structure_new ("video/x-raw-rgb",
-									   "framerate", GST_TYPE_FRACTION, 30000, 1001,
-									   "width", G_TYPE_INT, 720,
-									   "height", G_TYPE_INT, 480,
-									   NULL),
-							NULL);
+
+			if (priv->is_video_dvd)
+				filtercaps = gst_caps_new_full (gst_structure_new ("video/x-raw-yuv",
+										   "framerate", GST_TYPE_FRACTION, 30000, 1001,
+										   "width", G_TYPE_INT, 720,
+										   "height", G_TYPE_INT, 480,
+										   NULL),
+								gst_structure_new ("video/x-raw-rgb",
+										   "framerate", GST_TYPE_FRACTION, 30000, 1001,
+										   "width", G_TYPE_INT, 720,
+										   "height", G_TYPE_INT, 480,
+										   NULL),
+								NULL);
+			else if (priv->svcd)
+				filtercaps = gst_caps_new_full (gst_structure_new ("video/x-raw-yuv",
+										   "framerate", GST_TYPE_FRACTION, 30000, 1001,
+										   "width", G_TYPE_INT, 480,
+										   "height", G_TYPE_INT, 480,
+										   NULL),
+								gst_structure_new ("video/x-raw-rgb",
+										   "framerate", GST_TYPE_FRACTION, 30000, 1001,
+										   "width", G_TYPE_INT, 480,
+										   "height", G_TYPE_INT, 480,
+										   NULL),
+								NULL);
+			else
+				filtercaps = gst_caps_new_full (gst_structure_new ("video/x-raw-yuv",
+										   "framerate", GST_TYPE_FRACTION, 30000, 1001,
+										   "width", G_TYPE_INT, 352,
+										   "height", G_TYPE_INT, 240,
+										   NULL),
+								gst_structure_new ("video/x-raw-rgb",
+										   "framerate", GST_TYPE_FRACTION, 30000, 1001,
+										   "width", G_TYPE_INT, 352,
+										   "height", G_TYPE_INT, 240,
+										   NULL),
+								NULL);
 		}
 		else if (rate == BRASERO_VIDEO_FRAMERATE_PAL_SECAM) {
 			g_object_set (encode,
 				      "norm", 112,
 				      "framerate", 3,
 				      NULL);
-			filtercaps = gst_caps_new_full (gst_structure_new ("video/x-raw-yuv",
-									   "framerate", GST_TYPE_FRACTION, 25, 1,
-									   "width", G_TYPE_INT, 720,
-									   "height", G_TYPE_INT, 576,
-									   NULL),
-							gst_structure_new ("video/x-raw-rgb",
-									   "framerate", GST_TYPE_FRACTION, 25, 1,
-									   "width", G_TYPE_INT, 720,
-									   "height", G_TYPE_INT, 576,
-									   NULL),
-							NULL);
+
+			if (priv->is_video_dvd)
+				filtercaps = gst_caps_new_full (gst_structure_new ("video/x-raw-yuv",
+										   "framerate", GST_TYPE_FRACTION, 25, 1,
+										   "width", G_TYPE_INT, 720,
+										   "height", G_TYPE_INT, 576,
+										   NULL),
+								gst_structure_new ("video/x-raw-rgb",
+										   "framerate", GST_TYPE_FRACTION, 25, 1,
+										   "width", G_TYPE_INT, 720,
+										   "height", G_TYPE_INT, 576,
+										   NULL),
+								NULL);
+			else if (priv->svcd)
+				filtercaps = gst_caps_new_full (gst_structure_new ("video/x-raw-yuv",
+										   "framerate", GST_TYPE_FRACTION, 25, 1,
+										   "width", G_TYPE_INT, 480,
+										   "height", G_TYPE_INT, 576,
+										   NULL),
+								gst_structure_new ("video/x-raw-rgb",
+										   "framerate", GST_TYPE_FRACTION, 25, 1,
+										   "width", G_TYPE_INT, 480,
+										   "height", G_TYPE_INT, 576,
+										   NULL),
+								NULL);
+			else
+				filtercaps = gst_caps_new_full (gst_structure_new ("video/x-raw-yuv",
+										   "framerate", GST_TYPE_FRACTION, 25, 1,
+										   "width", G_TYPE_INT, 352,
+										   "height", G_TYPE_INT, 288,
+										   NULL),
+								gst_structure_new ("video/x-raw-rgb",
+										   "framerate", GST_TYPE_FRACTION, 25, 1,
+										   "width", G_TYPE_INT, 352,
+										   "height", G_TYPE_INT, 288,
+										   NULL),
+								NULL);
 		}
 
 		if (filtercaps) {
@@ -721,13 +850,23 @@
 		g_set_error (error,
 			     BRASERO_BURN_ERROR,
 			     BRASERO_BURN_ERROR_GENERAL,
-			     _("ffmux_mpeg can't be created"));
+			     _("mplex can't be created"));
 		goto error;
 	}
 	gst_bin_add (GST_BIN (pipeline), muxer);
-	g_object_set (muxer,
-		      "format", 8,
-		      NULL);
+
+	if (priv->is_video_dvd)
+		g_object_set (muxer,
+			      "format", 8,
+			      NULL);
+	else if (priv->svcd)
+		g_object_set (muxer,
+			      "format", 4,
+			      NULL);
+	else
+		g_object_set (muxer,
+			      "format", 1,
+			      NULL);
 
 	/* create sink */
 	output = NULL;
@@ -789,7 +928,7 @@
 {
 	BraseroVobPrivate *priv;
 	BraseroJobAction action;
-	BraseroTrack *track;
+	BraseroTrackType output;
 
 	brasero_job_get_action (job, &action);
 	if (action != BRASERO_JOB_ACTION_IMAGE)
@@ -797,10 +936,26 @@
 
 	priv = BRASERO_VOB_PRIVATE (job);
 
-	/* get tracks */
-	brasero_job_get_current_track (job, &track);
-	if (!track)
-		return BRASERO_BURN_ERR;
+	/* get destination medium type */
+	memset (&output, 0, sizeof (BraseroTrackType));
+	brasero_job_get_output_type (job, &output);
+	if (output.subtype.audio_format & BRASERO_VIDEO_FORMAT_VCD) {
+		GValue *value = NULL;
+
+		priv->is_video_dvd = FALSE;
+		brasero_job_tag_lookup (job,
+					BRASERO_VCD_TYPE,
+					&value);
+		if (value)
+			priv->svcd = (g_value_get_int (value) == BRASERO_SVCD);
+	}
+	else
+		priv->is_video_dvd = TRUE;
+
+	BRASERO_JOB_LOG (job,
+			 "Got output type (is DVD %i, is SVCD %i",
+			 priv->is_video_dvd,
+			 priv->svcd);
 
 	if (!brasero_vob_build_pipeline (BRASERO_VOB (job), error))
 		return BRASERO_BURN_ERR;
@@ -908,11 +1063,19 @@
 					BRASERO_AUDIO_FORMAT_UNDEFINED|
 					BRASERO_VIDEO_FORMAT_UNDEFINED);
 	output = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_FILE,
+					 BRASERO_AUDIO_FORMAT_MP2|
+					 BRASERO_AUDIO_FORMAT_44100|
+					 BRASERO_VIDEO_FORMAT_VCD);
+	brasero_plugin_link_caps (plugin, output, input);
+	g_slist_free (output);
+
+	output = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_FILE,
 					 BRASERO_AUDIO_FORMAT_AC3|
 					 BRASERO_AUDIO_FORMAT_MP2|
 					 BRASERO_AUDIO_FORMAT_RAW|
-					 BRASERO_VIDEO_FORMAT_MPEG2);
-
+					 BRASERO_AUDIO_FORMAT_44100|
+					 BRASERO_AUDIO_FORMAT_48000|
+					 BRASERO_VIDEO_FORMAT_VIDEO_DVD);
 	brasero_plugin_link_caps (plugin, output, input);
 	g_slist_free (output);
 	g_slist_free (input);

Modified: branches/video/src/plugins/libburnia/burn-libburn.c
==============================================================================
--- branches/video/src/plugins/libburnia/burn-libburn.c	(original)
+++ branches/video/src/plugins/libburnia/burn-libburn.c	Sat Jun 21 19:28:36 2008
@@ -832,6 +832,7 @@
 					       BRASERO_MEDIUM_PLUS|
 					       BRASERO_MEDIUM_RESTRICTED|
 					       BRASERO_MEDIUM_REWRITABLE|
+					       BRASERO_MEDIUM_UNFORMATTED|
 					       BRASERO_MEDIUM_BLANK|
 					       BRASERO_MEDIUM_APPENDABLE|
 					       BRASERO_MEDIUM_CLOSED|
@@ -874,10 +875,11 @@
 				  BRASERO_BURN_FLAG_NOGRACE,
 				  BRASERO_BURN_FLAG_NONE);
 
-	/* audio support for CDs only*/
+	/* audio support for CDs only */
 	input = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_PIPE|
 					BRASERO_PLUGIN_IO_ACCEPT_FILE,
-					BRASERO_AUDIO_FORMAT_RAW);
+					BRASERO_AUDIO_FORMAT_RAW|
+					BRASERO_AUDIO_FORMAT_44100);
 	
 	output = brasero_caps_disc_new (media_cd);
 	brasero_plugin_link_caps (plugin, output, input);
@@ -964,6 +966,7 @@
 	/* ... and DVDs-RW (sequential) */
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDRW|
+				  BRASERO_MEDIUM_UNFORMATTED|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_DAO|
 				  BRASERO_BURN_FLAG_BURNPROOF|
@@ -1010,6 +1013,7 @@
 				  BRASERO_MEDIUM_DVD|
 				  BRASERO_MEDIUM_RESTRICTED|
 				  BRASERO_MEDIUM_REWRITABLE|
+				  BRASERO_MEDIUM_UNFORMATTED|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_DAO|
 				  BRASERO_BURN_FLAG_MULTI|
@@ -1054,6 +1058,7 @@
 	brasero_plugin_set_flags (plugin,
 				  BRASERO_MEDIUM_DVDRW_PLUS|
 				  BRASERO_MEDIUM_DVD_DL|
+				  BRASERO_MEDIUM_UNFORMATTED|
 				  BRASERO_MEDIUM_BLANK,
 				  BRASERO_BURN_FLAG_MULTI|
 				  BRASERO_BURN_FLAG_DAO|
@@ -1107,6 +1112,7 @@
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_CLOSED|
 					BRASERO_MEDIUM_HAS_DATA|
+					BRASERO_MEDIUM_UNFORMATTED|
 				        BRASERO_MEDIUM_BLANK);
 	brasero_plugin_blank_caps (plugin, output);
 	g_slist_free (output);
@@ -1121,6 +1127,7 @@
 					BRASERO_MEDIUM_CLOSED|
 					BRASERO_MEDIUM_HAS_DATA|
 					BRASERO_MEDIUM_HAS_AUDIO|
+					BRASERO_MEDIUM_UNFORMATTED|
 				        BRASERO_MEDIUM_BLANK,
 					BRASERO_BURN_FLAG_NOGRACE|
 					BRASERO_BURN_FLAG_FAST_BLANK,
@@ -1132,6 +1139,7 @@
 					BRASERO_MEDIUM_APPENDABLE|
 					BRASERO_MEDIUM_CLOSED|
 					BRASERO_MEDIUM_HAS_DATA|
+					BRASERO_MEDIUM_UNFORMATTED|
 				        BRASERO_MEDIUM_BLANK,
 					BRASERO_BURN_FLAG_NOGRACE|
 					BRASERO_BURN_FLAG_FAST_BLANK,

Modified: branches/video/src/plugins/local-track/burn-local-image.c
==============================================================================
--- branches/video/src/plugins/local-track/burn-local-image.c	(original)
+++ branches/video/src/plugins/local-track/burn-local-image.c	Sat Jun 21 19:28:36 2008
@@ -965,7 +965,14 @@
 	caps = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_FILE,
 				       BRASERO_AUDIO_FORMAT_UNDEFINED|
 				       BRASERO_AUDIO_FORMAT_4_CHANNEL|
-				       BRASERO_AUDIO_FORMAT_RAW);
+				       BRASERO_AUDIO_FORMAT_RAW|
+				       BRASERO_VIDEO_FORMAT_UNDEFINED|
+				       BRASERO_VIDEO_FORMAT_VCD|
+				       BRASERO_VIDEO_FORMAT_VIDEO_DVD|
+				       BRASERO_AUDIO_FORMAT_AC3|
+				       BRASERO_AUDIO_FORMAT_MP2|
+				       BRASERO_AUDIO_FORMAT_44100|
+				       BRASERO_AUDIO_FORMAT_48000);
 	brasero_plugin_process_caps (plugin, caps);
 	g_slist_free (caps);
 

Added: branches/video/src/plugins/vcdimager/Makefile.am
==============================================================================
--- (empty file)
+++ branches/video/src/plugins/vcdimager/Makefile.am	Sat Jun 21 19:28:36 2008
@@ -0,0 +1,24 @@
+DISABLE_DEPRECATED = -DG_DISABLE_DEPRECATED
+
+INCLUDES = \
+	-I$(top_srcdir)					\
+	-I$(top_builddir)				\
+	-I$(top_srcdir)/src				\
+	-DBRASERO_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" 	\
+	-DBRASERO_PREFIX=\"$(prefix)\"           		\
+	-DBRASERO_SYSCONFDIR=\"$(sysconfdir)\"   		\
+	-DBRASERO_DATADIR=\"$(datadir)/brasero\"     	    	\
+	-DBRASERO_LIBDIR=\"$(libdir)\"  	         	\
+	$(DISABLE_DEPRECATED)				\
+	$(BRASERO_BASE_CFLAGS)				\
+	$(BRASERO_LIBXML_CFLAGS)
+
+AM_CFLAGS = -g
+
+vcdimagerdir = $(libdir)/brasero/plugins
+vcdimager_LTLIBRARIES = libbrasero-vcdimager.la
+
+libbrasero_vcdimager_la_SOURCES = burn-vcdimager.c burn-vcdimager.h
+libbrasero_vcdimager_la_LIBADD = $(BRASERO_BASE_LIBS) $(BRASERO_LIBXML_LIBS)
+libbrasero_vcdimager_la_LDFLAGS = -module -avoid-version
+

Added: branches/video/src/plugins/vcdimager/burn-vcdimager.c
==============================================================================
--- (empty file)
+++ branches/video/src/plugins/vcdimager/burn-vcdimager.c	Sat Jun 21 19:28:36 2008
@@ -0,0 +1,482 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * brasero
+ * Copyright (C) Philippe Rouquier 2008 <bonfire-app wanadoo fr>
+ * 
+ * brasero 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 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * brasero 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 General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <string.h>
+
+#include <glib.h>
+#include <glib-object.h>
+#include <glib/gi18n-lib.h>
+#include <glib/gstdio.h>
+#include <gmodule.h>
+
+#include <libxml/xmlerror.h>
+#include <libxml/xmlwriter.h>
+#include <libxml/parser.h>
+#include <libxml/xmlstring.h>
+#include <libxml/uri.h>
+
+#include "burn-basics.h"
+#include "burn-plugin.h"
+#include "burn-job.h"
+#include "burn-process.h"
+#include "burn-vcdimager.h"
+
+BRASERO_PLUGIN_BOILERPLATE (BraseroVcdImager, brasero_vcd_imager, BRASERO_TYPE_PROCESS, BraseroProcess);
+
+typedef struct _BraseroVcdImagerPrivate BraseroVcdImagerPrivate;
+struct _BraseroVcdImagerPrivate
+{
+	guint svcd:1;
+};
+
+#define BRASERO_VCD_IMAGER_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_VCD_IMAGER, BraseroVcdImagerPrivate))
+
+static BraseroProcessClass *parent_class = NULL;
+
+static BraseroBurnResult
+brasero_vcd_imager_read_stdout (BraseroProcess *process,
+				const gchar *line)
+{
+	return BRASERO_BURN_OK;
+}
+
+static BraseroBurnResult
+brasero_vcd_imager_read_stderr (BraseroProcess *process,
+				const gchar *line)
+{
+	if (!strstr (line, ""))
+		return BRASERO_BURN_OK;
+
+	return BRASERO_BURN_OK;
+}
+
+static BraseroBurnResult
+brasero_vcd_imager_generate_xml_file (BraseroProcess *process,
+				      const gchar *path,
+				      GError **error)
+{
+	BraseroVcdImagerPrivate *priv;
+	GSList *tracks = NULL;
+	xmlTextWriter *xml;
+	gchar buffer [64];
+	gint success;
+	GSList *iter;
+	gchar *name;
+	gint i;
+
+	BRASERO_JOB_LOG (process, "Creating DVD layout xml file(%s)", path);
+
+	xml = xmlNewTextWriterFilename (path, 0);
+	if (!xml)
+		return BRASERO_BURN_ERR;
+
+	priv = BRASERO_VCD_IMAGER_PRIVATE (process);
+
+	xmlTextWriterSetIndent (xml, 1);
+	xmlTextWriterSetIndentString (xml, (xmlChar *) "\t");
+
+	success = xmlTextWriterStartDocument (xml,
+					      NULL,
+					      "UTF8",
+					      NULL);
+	if (success < 0)
+		goto error;
+
+	success = xmlTextWriterWriteDTD (xml,
+					(xmlChar *) "videocd",
+					(xmlChar *) "-//GNU//DTD VideoCD//EN",
+					(xmlChar *) "http://www.gnu.org/software/vcdimager/videocd.dtd";,
+					(xmlChar *) NULL);
+	if (success < 0)
+		goto error;
+
+	/* let's start */
+	success = xmlTextWriterStartElement (xml, (xmlChar *) "videocd");
+	if (success < 0)
+		goto error;
+
+	success = xmlTextWriterWriteAttribute (xml,
+					       (xmlChar *) "xmlns",
+					       (xmlChar *) "http://www.gnu.org/software/vcdimager/1.0/";);
+	if (success < 0)
+		goto error;
+
+	if (priv->svcd)
+		success = xmlTextWriterWriteAttribute (xml,
+						       (xmlChar *) "class",
+						       (xmlChar *) "svcd");
+	else
+		success = xmlTextWriterWriteAttribute (xml,
+						       (xmlChar *) "class",
+						       (xmlChar *) "vcd");
+
+	if (success < 0)
+		goto error;
+
+	if (priv->svcd)
+		success = xmlTextWriterWriteAttribute (xml,
+						       (xmlChar *) "version",
+						       (xmlChar *) "1.0");
+	else
+		success = xmlTextWriterWriteAttribute (xml,
+						       (xmlChar *) "version",
+						       (xmlChar *) "2.0");
+	if (success < 0)
+		goto error;
+
+	/* info part */
+	success = xmlTextWriterStartElement (xml, (xmlChar *) "info");
+	if (success < 0)
+		goto error;
+
+	/* name of the volume */
+	name = NULL;
+	brasero_job_get_audio_title (BRASERO_JOB (process), &name);
+	success = xmlTextWriterWriteElement (xml,
+					     (xmlChar *) "album-id",
+					     (xmlChar *) name);
+	g_free (name);
+	if (success < 0)
+		goto error;
+
+	/* number of CDs */
+	success = xmlTextWriterWriteElement (xml,
+					     (xmlChar *) "volume-count",
+					     (xmlChar *) "1");
+	if (success < 0)
+		goto error;
+
+	/* CD number */
+	success = xmlTextWriterWriteElement (xml,
+					     (xmlChar *) "volume-number",
+					     (xmlChar *) "1");
+	if (success < 0)
+		goto error;
+
+	/* close info part */
+	success = xmlTextWriterEndElement (xml);
+	if (success < 0)
+		goto error;
+
+	/* Primary Volume descriptor */
+	success = xmlTextWriterStartElement (xml, (xmlChar *) "pvd");
+	if (success < 0)
+		goto error;
+
+	name = NULL;
+	brasero_job_get_audio_title (BRASERO_JOB (process), &name);
+	success = xmlTextWriterWriteElement (xml,
+					     (xmlChar *) "volume-id",
+					     (xmlChar *) name);
+	g_free (name);
+	if (success < 0)
+		goto error;
+
+	/* Makes it CD-i compatible */
+	success = xmlTextWriterWriteElement (xml,
+					     (xmlChar *) "system-id",
+					     (xmlChar *) "CD-RTOS CD-BRIDGE");
+	if (success < 0)
+		goto error;
+
+	/* Close Primary Volume descriptor */
+	success = xmlTextWriterEndElement (xml);
+	if (success < 0)
+		goto error;
+
+	/* the tracks */
+	success = xmlTextWriterStartElement (xml, (xmlChar *) "sequence-items");
+	if (success < 0)
+		goto error;
+
+	/* get all tracks */
+	brasero_job_get_tracks (BRASERO_JOB (process), &tracks);
+	for (i = 0, iter = tracks; iter; iter = iter->next, i++) {
+		BraseroTrack *track;
+		gchar *video;
+
+		track = iter->data;
+		success = xmlTextWriterStartElement (xml, (xmlChar *) "sequence-item");
+		if (success < 0)
+			goto error;
+
+		video = brasero_track_get_audio_source (track, FALSE);
+		success = xmlTextWriterWriteAttribute (xml,
+						       (xmlChar *) "src",
+						       (xmlChar *) video);
+		g_free (video);
+
+		if (success < 0)
+			goto error;
+
+		sprintf (buffer, "track-%i", i);
+		success = xmlTextWriterWriteAttribute (xml,
+						       (xmlChar *) "id",
+						       (xmlChar *) buffer);
+		if (success < 0)
+			goto error;
+
+		/* close sequence-item */
+		success = xmlTextWriterEndElement (xml);
+		if (success < 0)
+			goto error;
+	}
+
+	/* sequence-items */
+	success = xmlTextWriterEndElement (xml);
+	if (success < 0)
+		goto error;
+
+	/* the navigation */
+	success = xmlTextWriterStartElement (xml, (xmlChar *) "pbc");
+	if (success < 0)
+		goto error;
+
+	/* get all tracks */
+	brasero_job_get_tracks (BRASERO_JOB (process), &tracks);
+	for (i = 0, iter = tracks; iter; iter = iter->next, i++) {
+		BraseroTrack *track;
+
+		track = iter->data;
+
+		sprintf (buffer, "playlist-%i", i);
+		success = xmlTextWriterStartElement (xml, (xmlChar *) "playlist");
+		if (success < 0)
+			goto error;
+
+		success = xmlTextWriterWriteAttribute (xml,
+						       (xmlChar *) "id",
+						       (xmlChar *) buffer);
+		if (success < 0)
+			goto error;
+
+		success = xmlTextWriterWriteElement (xml,
+						     (xmlChar *) "wait",
+						     (xmlChar *) "0");
+		if (success < 0)
+			goto error;
+
+		success = xmlTextWriterStartElement (xml, (xmlChar *) "play-item");
+		if (success < 0)
+			goto error;
+
+		sprintf (buffer, "track-%i", i);
+		success = xmlTextWriterWriteAttribute (xml,
+						       (xmlChar *) "ref",
+						       (xmlChar *) buffer);
+		if (success < 0)
+			goto error;
+
+		/* play-item */
+		success = xmlTextWriterEndElement (xml);
+		if (success < 0)
+			goto error;
+
+		/* playlist */
+		success = xmlTextWriterEndElement (xml);
+		if (success < 0)
+			goto error;
+	}
+
+	/* pbc */
+	success = xmlTextWriterEndElement (xml);
+	if (success < 0)
+		goto error;
+
+	/* close videocd */
+	success = xmlTextWriterEndElement (xml);
+	if (success < 0)
+		goto error;
+
+	xmlTextWriterEndDocument (xml);
+	xmlFreeTextWriter (xml);
+
+	return BRASERO_BURN_OK;
+
+error:
+
+	BRASERO_JOB_LOG (process, "Error");
+
+	/* close everything */
+	xmlTextWriterEndDocument (xml);
+	xmlFreeTextWriter (xml);
+
+	/* FIXME: get the error */
+
+	return BRASERO_BURN_ERR;
+}
+
+static BraseroBurnResult
+brasero_vcd_imager_set_argv (BraseroProcess *process,
+			     GPtrArray *argv,
+			     GError **error)
+{
+	BraseroVcdImagerPrivate *priv;
+	BraseroBurnResult result;
+	BraseroJobAction action;
+	BraseroMedia medium;
+	gchar *output;
+	gchar *image;
+	gchar *toc;
+
+	priv = BRASERO_VCD_IMAGER_PRIVATE (process);
+
+	brasero_job_get_action (BRASERO_JOB (process), &action);
+	if (action != BRASERO_JOB_ACTION_IMAGE)
+		BRASERO_JOB_NOT_SUPPORTED (process);
+
+	g_ptr_array_add (argv, g_strdup ("vcdxbuild"));
+
+	g_ptr_array_add (argv, g_strdup ("--progress"));
+	g_ptr_array_add (argv, g_strdup ("-v"));
+
+	/* specifies output */
+	image = toc = NULL;
+	brasero_job_get_image_output (BRASERO_JOB (process),
+				      &image,
+				      &toc);
+
+	g_ptr_array_add (argv, g_strdup ("-c"));
+	g_ptr_array_add (argv, toc);
+	g_ptr_array_add (argv, g_strdup ("-b"));
+	g_ptr_array_add (argv, image);
+
+	/* get temporary file to write XML */
+	result = brasero_job_get_tmp_file (BRASERO_JOB (process),
+					   NULL,
+					   &output,
+					   error);
+	if (result != BRASERO_BURN_OK)
+		return result;
+
+	g_ptr_array_add (argv, output);
+
+	brasero_job_get_media (BRASERO_JOB (process), &medium);
+	if (medium & BRASERO_MEDIUM_CD) {
+		GValue *value = NULL;
+
+		brasero_job_tag_lookup (BRASERO_JOB (process),
+					BRASERO_VCD_TYPE,
+					&value);
+		if (value)
+			priv->svcd = (g_value_get_int (value) == BRASERO_SVCD);
+	}
+
+	result = brasero_vcd_imager_generate_xml_file (process, output, error);
+	if (result != BRASERO_BURN_OK)
+		return result;
+	
+	brasero_job_set_current_action (BRASERO_JOB (process),
+					BRASERO_BURN_ACTION_CREATING_IMAGE,
+					_("Creating file layout"),
+					FALSE);
+	return BRASERO_BURN_OK;
+}
+
+static BraseroBurnResult
+brasero_vcd_imager_post (BraseroJob *job)
+{
+	BraseroVcdImagerPrivate *priv;
+
+	priv = BRASERO_VCD_IMAGER_PRIVATE (job);
+	return brasero_job_finished_session (job);
+}
+
+static void
+brasero_vcd_imager_init (BraseroVcdImager *object)
+{}
+
+static void
+brasero_vcd_imager_finalize (GObject *object)
+{
+	G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+brasero_vcd_imager_class_init (BraseroVcdImagerClass *klass)
+{
+	GObjectClass* object_class = G_OBJECT_CLASS (klass);
+	BraseroProcessClass* process_class = BRASERO_PROCESS_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (BraseroVcdImagerPrivate));
+
+	object_class->finalize = brasero_vcd_imager_finalize;
+	process_class->stdout_func = brasero_vcd_imager_read_stdout;
+	process_class->stderr_func = brasero_vcd_imager_read_stderr;
+	process_class->set_argv = brasero_vcd_imager_set_argv;
+	process_class->post = brasero_vcd_imager_post;
+}
+
+static BraseroBurnResult
+brasero_vcd_imager_export_caps (BraseroPlugin *plugin, gchar **error)
+{
+	BraseroBurnResult result;
+	GSList *output;
+	GSList *input;
+
+	/* NOTE: it seems that cdrecord can burn cue files on the fly */
+	brasero_plugin_define (plugin,
+			       "vcdimager",
+			       _("use vcdimager to convert a set of files to burn to SVCDs"),
+			       "Philippe Rouquier",
+			       1);
+
+	/* First see if this plugin can be used */
+	result = brasero_process_check_path ("vcdimager", error);
+	if (result != BRASERO_BURN_OK)
+		return result;
+
+	input = brasero_caps_audio_new (BRASERO_PLUGIN_IO_ACCEPT_FILE,
+					BRASERO_AUDIO_FORMAT_MP2|
+					BRASERO_AUDIO_FORMAT_44100|
+					BRASERO_VIDEO_FORMAT_VCD);
+	output = brasero_caps_image_new (BRASERO_PLUGIN_IO_ACCEPT_FILE,
+					 BRASERO_IMAGE_FORMAT_CUE);
+
+	brasero_plugin_link_caps (plugin, output, input);
+	g_slist_free (output);
+	g_slist_free (input);
+
+	/* we only support CDs they must be blank */
+	brasero_plugin_set_flags (plugin,
+				  BRASERO_MEDIUM_CDRW|
+				  BRASERO_MEDIUM_BLANK|
+				  BRASERO_MEDIUM_CLOSED|
+				  BRASERO_MEDIUM_APPENDABLE|
+				  BRASERO_MEDIUM_HAS_DATA|
+				  BRASERO_MEDIUM_HAS_AUDIO,
+				  BRASERO_BURN_FLAG_NONE,
+				  BRASERO_BURN_FLAG_NONE);
+
+	brasero_plugin_set_flags (plugin,
+				  BRASERO_MEDIUM_FILE|
+				  BRASERO_MEDIUM_CDR|
+				  BRASERO_MEDIUM_BLANK|
+				  BRASERO_MEDIUM_APPENDABLE|
+				  BRASERO_MEDIUM_HAS_DATA|
+				  BRASERO_MEDIUM_HAS_AUDIO,
+				  BRASERO_BURN_FLAG_NONE,
+				  BRASERO_BURN_FLAG_NONE);
+	return BRASERO_BURN_OK;
+}
+

Added: branches/video/src/plugins/vcdimager/burn-vcdimager.h
==============================================================================
--- (empty file)
+++ branches/video/src/plugins/vcdimager/burn-vcdimager.h	Sat Jun 21 19:28:36 2008
@@ -0,0 +1,36 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * brasero
+ * Copyright (C) Philippe Rouquier 2008 <bonfire-app wanadoo fr>
+ * 
+ * brasero 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 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * brasero 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 General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _BRASERO_VCD_IMAGER_H_
+#define _BRASERO_VCD_IMAGER_H_
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define BRASERO_TYPE_VCD_IMAGER             (brasero_vcd_imager_get_type ())
+#define BRASERO_VCD_IMAGER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_VCD_IMAGER, BraseroVcdImager))
+#define BRASERO_VCD_IMAGER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), BRASERO_TYPE_VCD_IMAGER, BraseroVcdImagerClass))
+#define BRASERO_IS_VCD_IMAGER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BRASERO_TYPE_VCD_IMAGER))
+#define BRASERO_IS_VCD_IMAGER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), BRASERO_TYPE_VCD_IMAGER))
+#define BRASERO_VCD_IMAGER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), BRASERO_TYPE_VCD_IMAGER, BraseroVcdImagerClass))
+
+G_END_DECLS
+
+#endif /* _BRASERO_VCD_IMAGER_H_ */

Modified: branches/video/src/scsi-read-format-capacities.h
==============================================================================
--- branches/video/src/scsi-read-format-capacities.h	(original)
+++ branches/video/src/scsi-read-format-capacities.h	Sat Jun 21 19:28:36 2008
@@ -29,10 +29,7 @@
 #ifndef _SCSI_READ_FORMAT_CAPACITIES_H
 #define _SCSI_READ_FORMAT_CAPACITIES_H
 
-#ifdef __cplusplus
-extern "C"
-{
-#endif
+G_BEGIN_DECLS
 
 typedef enum {
 BRASERO_SCSI_DESC_UNFORMATTED		= 0x01,
@@ -115,9 +112,7 @@
 };
 typedef struct _BraseroScsiFormatCapacitiesHdr BraseroScsiFormatCapacitiesHdr;
 
-#ifdef __cplusplus
-}
-#endif
+G_END_DECLS
 
 #endif /* _SCSI_READ_FORMAT_CAPACITIES_H */
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]