[brasero: 17/18] 2009-05-04 Philippe Rouquier <bonfire-app wanadoo fr>
- From: Philippe Rouquier <philippr src gnome org>
- To: svn-commits-list gnome org
- Subject: [brasero: 17/18] 2009-05-04 Philippe Rouquier <bonfire-app wanadoo fr>
- Date: Mon, 4 May 2009 14:17:09 -0400 (EDT)
commit 495f8c2d757c3962233fb52daadcf41b541a76b5
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date: Mon May 4 19:59:59 2009 +0200
2009-05-04 Philippe Rouquier <bonfire-app wanadoo fr>
Added a new track type fot stream type
and slightly modify the image one by adding virtual functions
---
ChangeLog | 15 ++
libbrasero-burn/Makefile.am | 5 +-
libbrasero-burn/brasero-track-image-cfg.c | 22 ++-
libbrasero-burn/brasero-track-image.c | 70 +++++++--
libbrasero-burn/brasero-track-image.h | 10 +-
libbrasero-burn/brasero-track-stream-cfg.c | 246 ++++++++++++++++++++++++++++
libbrasero-burn/brasero-track-stream-cfg.h | 64 +++++++
libbrasero-burn/brasero-track-stream.c | 95 +++++++++--
libbrasero-burn/brasero-track-stream.h | 12 ++
9 files changed, 496 insertions(+), 43 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 5c59679..4504c5e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2009-05-04 Philippe Rouquier <bonfire-app wanadoo fr>
+
+ Added a new track type fot stream type
+ and slightly modify the image one by adding virtual functions
+
+ * libbrasero-burn/brasero-track-stream-cfg.c
+ (brasero_video_project_result_cb),
+ (brasero_track_stream_cfg_get_info),
+ (brasero_track_stream_cfg_set_source),
+ (brasero_track_stream_cfg_get_status),
+ (brasero_track_stream_cfg_init),
+ (brasero_track_stream_cfg_finalize),
+ (brasero_track_stream_cfg_class_init):
+ * libbrasero-burn/brasero-track-stream-cfg.h:
+
2009-04-23 Philippe Rouquier <bonfire-app wanadoo fr>
A few fixes for libunique recent patch (problems with building)
diff --git a/libbrasero-burn/Makefile.am b/libbrasero-burn/Makefile.am
index 32bfcfc..be7a0ba 100644
--- a/libbrasero-burn/Makefile.am
+++ b/libbrasero-burn/Makefile.am
@@ -42,6 +42,7 @@ libbraseroburninclude_HEADERS = \
brasero-track-data-cfg.h \
brasero-track-disc.h \
brasero-track-stream.h \
+ brasero-track-stream-cfg.h \
brasero-track-image.h \
brasero-track-image-cfg.h \
brasero-session.h \
@@ -187,7 +188,9 @@ libbrasero_burn_la_SOURCES = \
brasero-track-data-cfg.c \
brasero-track-data-cfg.h \
brasero-filtered-uri.c \
- brasero-filtered-uri.h
+ brasero-filtered-uri.h \
+ brasero-track-stream-cfg.c \
+ brasero-track-stream-cfg.h
if BUILD_INOTIFY
libbrasero_burn_la_SOURCES += brasero-file-monitor.c brasero-file-monitor.h
diff --git a/libbrasero-burn/brasero-track-image-cfg.c b/libbrasero-burn/brasero-track-image-cfg.c
index ae94e28..0688944 100644
--- a/libbrasero-burn/brasero-track-image-cfg.c
+++ b/libbrasero-burn/brasero-track-image-cfg.c
@@ -74,18 +74,18 @@ brasero_track_image_cfg_set_uri (BraseroTrackImageCfg *track,
switch (format) {
case BRASERO_IMAGE_FORMAT_NONE:
case BRASERO_IMAGE_FORMAT_BIN:
- brasero_track_image_set_source (BRASERO_TRACK_IMAGE (track),
- uri,
- NULL,
- format);
+ BRASERO_TRACK_IMAGE_CLASS (brasero_track_image_cfg_parent_class)->set_source (BRASERO_TRACK_IMAGE (track),
+ uri,
+ NULL,
+ format);
break;
case BRASERO_IMAGE_FORMAT_CLONE:
case BRASERO_IMAGE_FORMAT_CUE:
case BRASERO_IMAGE_FORMAT_CDRDAO:
- brasero_track_image_set_source (BRASERO_TRACK_IMAGE (track),
- NULL,
- uri,
- format);
+ BRASERO_TRACK_IMAGE_CLASS (brasero_track_image_cfg_parent_class)->set_source (BRASERO_TRACK_IMAGE (track),
+ NULL,
+ uri,
+ format);
break;
default:
@@ -124,7 +124,8 @@ brasero_track_image_cfg_get_info_cb (GObject *object,
info->uri,
info->format);
- brasero_track_image_set_block_num (BRASERO_TRACK_IMAGE (object), info->blocks);
+ BRASERO_TRACK_IMAGE_CLASS (brasero_track_image_cfg_parent_class)->set_block_num (BRASERO_TRACK_IMAGE (object), info->blocks);
+ brasero_track_changed (BRASERO_TRACK (object));
}
static void
@@ -288,8 +289,9 @@ brasero_track_image_cfg_set_source (BraseroTrackImageCfg *track,
/* Update the image info container values. If it was invalid then */
/* NOTE: this resets the size as well */
- brasero_track_image_set_block_num (BRASERO_TRACK_IMAGE (track), 0);
+ BRASERO_TRACK_IMAGE_CLASS (brasero_track_image_cfg_parent_class)->set_block_num (BRASERO_TRACK_IMAGE (track), 0);
brasero_track_image_cfg_set_uri (track, uri, priv->format);
+ brasero_track_changed (BRASERO_TRACK (track));
return BRASERO_BURN_OK;
}
diff --git a/libbrasero-burn/brasero-track-image.c b/libbrasero-burn/brasero-track-image.c
index 5608aad..0d2182d 100644
--- a/libbrasero-burn/brasero-track-image.c
+++ b/libbrasero-burn/brasero-track-image.c
@@ -57,16 +57,14 @@ struct _BraseroTrackImagePrivate
G_DEFINE_TYPE (BraseroTrackImage, brasero_track_image, BRASERO_TYPE_TRACK);
-BraseroBurnResult
-brasero_track_image_set_source (BraseroTrackImage *track,
- const gchar *image,
- const gchar *toc,
- BraseroImageFormat format)
+static BraseroBurnResult
+brasero_track_image_set_source_real (BraseroTrackImage *track,
+ const gchar *image,
+ const gchar *toc,
+ BraseroImageFormat format)
{
BraseroTrackImagePrivate *priv;
- g_return_val_if_fail (BRASERO_IS_TRACK_IMAGE (track), BRASERO_BURN_ERR);
-
priv = BRASERO_TRACK_IMAGE_PRIVATE (track);
priv->format = format;
@@ -80,26 +78,71 @@ brasero_track_image_set_source (BraseroTrackImage *track,
priv->image = g_strdup (image);
priv->toc = g_strdup (toc);
+ return BRASERO_BURN_OK;
+}
+
+BraseroBurnResult
+brasero_track_image_set_source (BraseroTrackImage *track,
+ const gchar *image,
+ const gchar *toc,
+ BraseroImageFormat format)
+{
+ BraseroTrackImagePrivate *priv;
+ BraseroTrackImageClass *klass;
+ BraseroBurnResult res;
+
+ g_return_val_if_fail (BRASERO_IS_TRACK_IMAGE (track), BRASERO_BURN_ERR);
+
+ /* See if it has changed */
+ priv = BRASERO_TRACK_IMAGE_PRIVATE (track);
+
+ klass = BRASERO_TRACK_IMAGE_GET_CLASS (track);
+ if (!klass->set_source)
+ return BRASERO_BURN_ERR;
+
+ res = klass->set_source (track, image, toc, format);
+ if (res != BRASERO_BURN_OK)
+ return res;
+
brasero_track_changed (BRASERO_TRACK (track));
+ return BRASERO_BURN_OK;
+}
+
+static BraseroBurnResult
+brasero_track_image_set_block_num_real (BraseroTrackImage *track,
+ goffset blocks)
+{
+ BraseroTrackImagePrivate *priv;
+ priv = BRASERO_TRACK_IMAGE_PRIVATE (track);
+ priv->blocks = blocks;
return BRASERO_BURN_OK;
}
-void
+BraseroBurnResult
brasero_track_image_set_block_num (BraseroTrackImage *track,
goffset blocks)
{
BraseroTrackImagePrivate *priv;
+ BraseroTrackImageClass *klass;
+ BraseroBurnResult res;
- g_return_if_fail (BRASERO_IS_TRACK_IMAGE (track));
+ g_return_val_if_fail (BRASERO_IS_TRACK_IMAGE (track), BRASERO_BURN_ERR);
priv = BRASERO_TRACK_IMAGE_PRIVATE (track);
-
if (priv->blocks == blocks)
- return;
+ return BRASERO_BURN_OK;
+
+ klass = BRASERO_TRACK_IMAGE_GET_CLASS (track);
+ if (!klass->set_block_num)
+ return BRASERO_BURN_ERR;
+
+ res = klass->set_block_num (track, blocks);
+ if (res != BRASERO_BURN_OK)
+ return res;
- priv->blocks = blocks;
brasero_track_changed (BRASERO_TRACK (track));
+ return BRASERO_BURN_OK;
}
gchar *
@@ -261,6 +304,9 @@ brasero_track_image_class_init (BraseroTrackImageClass *klass)
track_class->get_size = brasero_track_image_get_size;
track_class->get_type = brasero_track_image_get_track_type;
+
+ klass->set_source = brasero_track_image_set_source_real;
+ klass->set_block_num = brasero_track_image_set_block_num_real;
}
BraseroTrackImage *
diff --git a/libbrasero-burn/brasero-track-image.h b/libbrasero-burn/brasero-track-image.h
index cc85acf..b24bc27 100644
--- a/libbrasero-burn/brasero-track-image.h
+++ b/libbrasero-burn/brasero-track-image.h
@@ -51,6 +51,14 @@ typedef struct _BraseroTrackImage BraseroTrackImage;
struct _BraseroTrackImageClass
{
BraseroTrackClass parent_class;
+
+ BraseroBurnResult (*set_source) (BraseroTrackImage *track,
+ const gchar *image,
+ const gchar *toc,
+ BraseroImageFormat format);
+
+ BraseroBurnResult (*set_block_num) (BraseroTrackImage *track,
+ goffset blocks);
};
struct _BraseroTrackImage
@@ -69,7 +77,7 @@ brasero_track_image_set_source (BraseroTrackImage *track,
const gchar *toc,
BraseroImageFormat format);
-void
+BraseroBurnResult
brasero_track_image_set_block_num (BraseroTrackImage *track,
goffset blocks);
diff --git a/libbrasero-burn/brasero-track-stream-cfg.c b/libbrasero-burn/brasero-track-stream-cfg.c
new file mode 100644
index 0000000..fab7516
--- /dev/null
+++ b/libbrasero-burn/brasero-track-stream-cfg.c
@@ -0,0 +1,246 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * Libbrasero-burn
+ * Copyright (C) Philippe Rouquier 2005-2009 <bonfire-app wanadoo fr>
+ *
+ * Libbrasero-burn 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The Libbrasero-burn authors hereby grant permission for non-GPL compatible
+ * GStreamer plugins to be used and distributed together with GStreamer
+ * and Libbrasero-burn. This permission is above and beyond the permissions granted
+ * by the GPL license by which Libbrasero-burn is covered. If you modify this code
+ * you may extend this exception to your version of the code, but you are not
+ * obligated to do so. If you do not wish to do so, delete this exception
+ * statement from your version.
+ *
+ * Libbrasero-burn 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to:
+ * The Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+#include <glib-object.h>
+
+#include "brasero-track-stream-cfg.h"
+#include "brasero-io.h"
+#include "brasero-tags.h"
+
+typedef struct _BraseroTrackStreamCfgPrivate BraseroTrackStreamCfgPrivate;
+struct _BraseroTrackStreamCfgPrivate
+{
+ BraseroIO *io;
+ BraseroIOJobBase *load_uri;
+
+ GError *error;
+
+ guint loading:1;
+};
+
+#define BRASERO_TRACK_STREAM_CFG_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_TRACK_STREAM_CFG, BraseroTrackStreamCfgPrivate))
+
+G_DEFINE_TYPE (BraseroTrackStreamCfg, brasero_track_stream_cfg, BRASERO_TYPE_TRACK_STREAM);
+
+
+static void
+brasero_video_project_result_cb (GObject *obj,
+ GError *error,
+ const gchar *uri,
+ GFileInfo *info,
+ gpointer user_data)
+{
+ guint64 len;
+ BraseroTrackStreamCfgPrivate *priv;
+
+ priv = BRASERO_TRACK_STREAM_CFG_PRIVATE (obj);
+ priv->loading = FALSE;
+
+ /* Check the return status for this file */
+ if (error) {
+ priv->error = g_error_copy (error);
+ brasero_track_changed (BRASERO_TRACK (obj));
+ return;
+ }
+
+ if (g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR
+ || !g_file_info_get_attribute_boolean (info, BRASERO_IO_HAS_VIDEO)) {
+ priv->error = g_error_new (BRASERO_BURN_ERROR,
+ BRASERO_BURN_ERR,
+ _(" "));
+
+ brasero_track_changed (BRASERO_TRACK (obj));
+ return;
+ }
+
+ if (g_file_info_get_is_symlink (info)) {
+ gchar *sym_uri;
+
+ sym_uri = g_strconcat ("file://", g_file_info_get_symlink_target (info), NULL);
+ if (BRASERO_TRACK_STREAM_CLASS (brasero_track_stream_cfg_parent_class)->set_source)
+ BRASERO_TRACK_STREAM_CLASS (brasero_track_stream_cfg_parent_class)->set_source (BRASERO_TRACK_STREAM (obj), sym_uri);
+
+ g_free (sym_uri);
+ }
+
+ if (BRASERO_TRACK_STREAM_CLASS (brasero_track_stream_cfg_parent_class)->set_format)
+ BRASERO_TRACK_STREAM_CLASS (brasero_track_stream_cfg_parent_class)->set_format (BRASERO_TRACK_STREAM (obj),
+ (g_file_info_get_attribute_boolean (info, BRASERO_IO_HAS_VIDEO)?
+ BRASERO_VIDEO_FORMAT_UNDEFINED:BRASERO_AUDIO_FORMAT_NONE)|
+ (g_file_info_get_attribute_boolean (info, BRASERO_IO_HAS_AUDIO)?
+ BRASERO_AUDIO_FORMAT_UNDEFINED:BRASERO_AUDIO_FORMAT_NONE)|
+ BRASERO_METADATA_INFO);
+
+ /* size */
+ len = g_file_info_get_attribute_uint64 (info, BRASERO_IO_LEN);
+ if (BRASERO_TRACK_STREAM_CLASS (brasero_track_stream_cfg_parent_class)->set_boundaries)
+ BRASERO_TRACK_STREAM_CLASS (brasero_track_stream_cfg_parent_class)->set_boundaries (BRASERO_TRACK_STREAM (obj),
+ 0,
+ len,
+ 0);
+
+ /* Get the song info */
+ if (g_file_info_get_attribute_string (info, BRASERO_IO_TITLE))
+ brasero_track_tag_add_string (BRASERO_TRACK (obj),
+ BRASERO_TRACK_STREAM_TITLE_TAG,
+ g_file_info_get_attribute_string (info, BRASERO_IO_TITLE));
+ if (g_file_info_get_attribute_string (info, BRASERO_IO_ARTIST))
+ brasero_track_tag_add_string (BRASERO_TRACK (obj),
+ BRASERO_TRACK_STREAM_ARTIST_TAG,
+ g_file_info_get_attribute_string (info, BRASERO_IO_ARTIST));
+ if (g_file_info_get_attribute_string (info, BRASERO_IO_COMPOSER))
+ brasero_track_tag_add_string (BRASERO_TRACK (obj),
+ BRASERO_TRACK_STREAM_COMPOSER_TAG,
+ g_file_info_get_attribute_string (info, BRASERO_IO_COMPOSER));
+ if (g_file_info_get_attribute_int32 (info, BRASERO_IO_ISRC))
+ brasero_track_tag_add_int (BRASERO_TRACK (obj),
+ BRASERO_TRACK_STREAM_ISRC_TAG,
+ g_file_info_get_attribute_int32 (info, BRASERO_IO_ISRC));
+
+ brasero_track_changed (BRASERO_TRACK (obj));
+}
+
+static void
+brasero_track_stream_cfg_get_info (BraseroTrackStreamCfg *track)
+{
+ BraseroTrackStreamCfgPrivate *priv;
+ gchar *uri;
+
+ priv = BRASERO_TRACK_STREAM_CFG_PRIVATE (track);
+
+ if (priv->error) {
+ g_error_free (priv->error);
+ priv->error = NULL;
+ }
+
+ /* get info async for the file */
+ if (!priv->io)
+ priv->io = brasero_io_get_default ();
+
+ if (!priv->load_uri)
+ priv->load_uri = brasero_io_register (G_OBJECT (track),
+ brasero_video_project_result_cb,
+ NULL,
+ NULL);
+
+ priv->loading = TRUE;
+ uri = brasero_track_stream_get_source (BRASERO_TRACK_STREAM (track), TRUE);
+ brasero_io_get_file_info (priv->io,
+ uri,
+ priv->load_uri,
+ BRASERO_IO_INFO_PERM|
+ BRASERO_IO_INFO_MIME|
+ BRASERO_IO_INFO_URGENT|
+ BRASERO_IO_INFO_METADATA|
+ BRASERO_IO_INFO_METADATA_MISSING_CODEC|
+ BRASERO_IO_INFO_METADATA_THUMBNAIL,
+ track);
+}
+
+static BraseroBurnResult
+brasero_track_stream_cfg_set_source (BraseroTrackStream *track,
+ const gchar *uri)
+{
+ if (BRASERO_TRACK_STREAM_CLASS (brasero_track_stream_cfg_parent_class)->set_source)
+ BRASERO_TRACK_STREAM_CLASS (brasero_track_stream_cfg_parent_class)->set_source (track, uri);
+
+ brasero_track_stream_cfg_get_info (BRASERO_TRACK_STREAM_CFG (track));
+ brasero_track_changed (BRASERO_TRACK (track));
+ return BRASERO_BURN_OK;
+}
+
+static BraseroBurnResult
+brasero_track_stream_cfg_get_status (BraseroTrack *track,
+ BraseroStatus *status)
+{
+ BraseroTrackStreamCfgPrivate *priv;
+
+ priv = BRASERO_TRACK_STREAM_CFG_PRIVATE (track);
+
+ if (priv->error) {
+ brasero_status_set_error (status, g_error_copy (priv->error));
+ return BRASERO_BURN_ERR;
+ }
+
+ if (priv->loading) {
+ if (status)
+ brasero_status_set_not_ready (status,
+ -1.0,
+ _("Analysing video files"));
+
+ return BRASERO_BURN_NOT_READY;
+ }
+
+ if (status)
+ brasero_status_set_completed (status);
+
+ return BRASERO_BURN_OK;
+}
+
+static void
+brasero_track_stream_cfg_init (BraseroTrackStreamCfg *object)
+{ }
+
+static void
+brasero_track_stream_cfg_finalize (GObject *object)
+{
+ BraseroTrackStreamCfgPrivate *priv;
+
+ priv = BRASERO_TRACK_STREAM_CFG_PRIVATE (object);
+ if (priv->error) {
+ g_error_free (priv->error);
+ priv->error = NULL;
+ }
+
+ G_OBJECT_CLASS (brasero_track_stream_cfg_parent_class)->finalize (object);
+}
+
+static void
+brasero_track_stream_cfg_class_init (BraseroTrackStreamCfgClass *klass)
+{
+ GObjectClass* object_class = G_OBJECT_CLASS (klass);
+ BraseroTrackClass* track_class = BRASERO_TRACK_CLASS (klass);
+ BraseroTrackStreamClass *parent_class = BRASERO_TRACK_STREAM_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (BraseroTrackStreamCfgPrivate));
+
+ object_class->finalize = brasero_track_stream_cfg_finalize;
+
+ track_class->get_status = brasero_track_stream_cfg_get_status;
+
+ parent_class->set_source = brasero_track_stream_cfg_set_source;
+}
+
diff --git a/libbrasero-burn/brasero-track-stream-cfg.h b/libbrasero-burn/brasero-track-stream-cfg.h
new file mode 100644
index 0000000..12f8dbb
--- /dev/null
+++ b/libbrasero-burn/brasero-track-stream-cfg.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * Libbrasero-burn
+ * Copyright (C) Philippe Rouquier 2005-2009 <bonfire-app wanadoo fr>
+ *
+ * Libbrasero-burn 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The Libbrasero-burn authors hereby grant permission for non-GPL compatible
+ * GStreamer plugins to be used and distributed together with GStreamer
+ * and Libbrasero-burn. This permission is above and beyond the permissions granted
+ * by the GPL license by which Libbrasero-burn is covered. If you modify this code
+ * you may extend this exception to your version of the code, but you are not
+ * obligated to do so. If you do not wish to do so, delete this exception
+ * statement from your version.
+ *
+ * Libbrasero-burn 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to:
+ * The Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _BRASERO_TRACK_STREAM_CFG_H_
+#define _BRASERO_TRACK_STREAM_CFG_H_
+
+#include <glib-object.h>
+
+#include <brasero-track-stream.h>
+
+G_BEGIN_DECLS
+
+#define BRASERO_TYPE_TRACK_STREAM_CFG (brasero_track_stream_cfg_get_type ())
+#define BRASERO_TRACK_STREAM_CFG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_TRACK_STREAM_CFG, BraseroTrackStreamCfg))
+#define BRASERO_TRACK_STREAM_CFG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BRASERO_TYPE_TRACK_STREAM_CFG, BraseroTrackStreamCfgClass))
+#define BRASERO_IS_TRACK_STREAM_CFG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BRASERO_TYPE_TRACK_STREAM_CFG))
+#define BRASERO_IS_TRACK_STREAM_CFG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BRASERO_TYPE_TRACK_STREAM_CFG))
+#define BRASERO_TRACK_STREAM_CFG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BRASERO_TYPE_TRACK_STREAM_CFG, BraseroTrackStreamCfgClass))
+
+typedef struct _BraseroTrackStreamCfgClass BraseroTrackStreamCfgClass;
+typedef struct _BraseroTrackStreamCfg BraseroTrackStreamCfg;
+
+struct _BraseroTrackStreamCfgClass
+{
+ BraseroTrackStreamClass parent_class;
+};
+
+struct _BraseroTrackStreamCfg
+{
+ BraseroTrackStream parent_instance;
+};
+
+GType brasero_track_stream_cfg_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* _BRASERO_TRACK_STREAM_CFG_H_ */
diff --git a/libbrasero-burn/brasero-track-stream.c b/libbrasero-burn/brasero-track-stream.c
index edf429d..4e3238d 100644
--- a/libbrasero-burn/brasero-track-stream.c
+++ b/libbrasero-burn/brasero-track-stream.c
@@ -56,22 +56,39 @@ struct _BraseroTrackStreamPrivate
G_DEFINE_TYPE (BraseroTrackStream, brasero_track_stream, BRASERO_TYPE_TRACK);
-BraseroBurnResult
-brasero_track_stream_set_source (BraseroTrackStream *track,
- const gchar *uri)
+static BraseroBurnResult
+brasero_track_stream_set_source_real (BraseroTrackStream *track,
+ const gchar *uri)
{
BraseroTrackStreamPrivate *priv;
- g_return_val_if_fail (BRASERO_IS_TRACK_STREAM (track), BRASERO_BURN_ERR);
-
priv = BRASERO_TRACK_STREAM_PRIVATE (track);
if (priv->uri)
g_free (priv->uri);
priv->uri = g_strdup (uri);
- brasero_track_changed (BRASERO_TRACK (track));
+ return BRASERO_BURN_OK;
+}
+
+BraseroBurnResult
+brasero_track_stream_set_source (BraseroTrackStream *track,
+ const gchar *uri)
+{
+ BraseroTrackStreamClass *klass;
+ BraseroBurnResult res;
+
+ g_return_val_if_fail (BRASERO_IS_TRACK_STREAM (track), BRASERO_BURN_ERR);
+ klass = BRASERO_TRACK_STREAM_GET_CLASS (track);
+ if (!klass->set_source)
+ return BRASERO_BURN_ERR;
+
+ res = klass->set_source (track, uri);
+ if (res != BRASERO_BURN_OK)
+ return res;
+
+ brasero_track_changed (BRASERO_TRACK (track));
return BRASERO_BURN_OK;
}
@@ -87,35 +104,50 @@ brasero_track_stream_get_format (BraseroTrackStream *track)
return priv->format;
}
-BraseroBurnResult
-brasero_track_stream_set_format (BraseroTrackStream *track,
- BraseroStreamFormat format)
+static BraseroBurnResult
+brasero_track_stream_set_format_real (BraseroTrackStream *track,
+ BraseroStreamFormat format)
{
BraseroTrackStreamPrivate *priv;
- g_return_val_if_fail (BRASERO_IS_TRACK_STREAM (track), BRASERO_BURN_ERR);
-
priv = BRASERO_TRACK_STREAM_PRIVATE (track);
if (format == BRASERO_AUDIO_FORMAT_NONE)
BRASERO_BURN_LOG ("Setting a NONE audio format with a valid uri");
priv->format = format;
- brasero_track_changed (BRASERO_TRACK (track));
-
return BRASERO_BURN_OK;
}
BraseroBurnResult
-brasero_track_stream_set_boundaries (BraseroTrackStream *track,
- guint64 start,
- guint64 end,
- guint64 gap)
+brasero_track_stream_set_format (BraseroTrackStream *track,
+ BraseroStreamFormat format)
{
- BraseroTrackStreamPrivate *priv;
+ BraseroTrackStreamClass *klass;
+ BraseroBurnResult res;
g_return_val_if_fail (BRASERO_IS_TRACK_STREAM (track), BRASERO_BURN_ERR);
+ klass = BRASERO_TRACK_STREAM_GET_CLASS (track);
+ if (!klass->set_format)
+ return BRASERO_BURN_ERR;
+
+ res = klass->set_format (track, format);
+ if (res != BRASERO_BURN_OK)
+ return res;
+
+ brasero_track_changed (BRASERO_TRACK (track));
+ return BRASERO_BURN_OK;
+}
+
+static BraseroBurnResult
+brasero_track_stream_set_boundaries_real (BraseroTrackStream *track,
+ guint64 start,
+ guint64 end,
+ guint64 gap)
+{
+ BraseroTrackStreamPrivate *priv;
+
priv = BRASERO_TRACK_STREAM_PRIVATE (track);
if (gap >= 0)
@@ -127,8 +159,29 @@ brasero_track_stream_set_boundaries (BraseroTrackStream *track,
if (start >= 0)
priv->start = start;
- brasero_track_changed (BRASERO_TRACK (track));
+ return BRASERO_BURN_OK;
+}
+
+BraseroBurnResult
+brasero_track_stream_set_boundaries (BraseroTrackStream *track,
+ guint64 start,
+ guint64 end,
+ guint64 gap)
+{
+ BraseroTrackStreamClass *klass;
+ BraseroBurnResult res;
+ g_return_val_if_fail (BRASERO_IS_TRACK_STREAM (track), BRASERO_BURN_ERR);
+
+ klass = BRASERO_TRACK_STREAM_GET_CLASS (track);
+ if (!klass->set_boundaries)
+ return BRASERO_BURN_ERR;
+
+ res = klass->set_boundaries (track, start, end, gap);
+ if (res != BRASERO_BURN_OK)
+ return res;
+
+ brasero_track_changed (BRASERO_TRACK (track));
return BRASERO_BURN_OK;
}
@@ -288,6 +341,10 @@ brasero_track_stream_class_init (BraseroTrackStreamClass *klass)
track_class->get_size = brasero_track_stream_get_size;
track_class->get_status = brasero_track_stream_get_status;
track_class->get_type = brasero_track_stream_get_track_type;
+
+ klass->set_source = brasero_track_stream_set_source_real;
+ klass->set_format = brasero_track_stream_set_format_real;
+ klass->set_boundaries = brasero_track_stream_set_boundaries_real;
}
BraseroTrackStream *
diff --git a/libbrasero-burn/brasero-track-stream.h b/libbrasero-burn/brasero-track-stream.h
index 1a5a60c..e588737 100644
--- a/libbrasero-burn/brasero-track-stream.h
+++ b/libbrasero-burn/brasero-track-stream.h
@@ -51,6 +51,18 @@ typedef struct _BraseroTrackStream BraseroTrackStream;
struct _BraseroTrackStreamClass
{
BraseroTrackClass parent_class;
+
+ /* Virtual functions */
+ BraseroBurnResult (*set_source) (BraseroTrackStream *track,
+ const gchar *uri);
+
+ BraseroBurnResult (*set_format) (BraseroTrackStream *track,
+ BraseroStreamFormat format);
+
+ BraseroBurnResult (*set_boundaries) (BraseroTrackStream *track,
+ guint64 start,
+ guint64 end,
+ guint64 gap);
};
struct _BraseroTrackStream
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]