--- a/gstreamer_core/gst/gstbuffer.c Tue Aug 31 15:30:33 2010 +0300
+++ b/gstreamer_core/gst/gstbuffer.c Wed Sep 01 12:16:41 2010 +0100
@@ -120,12 +120,16 @@
#include "gstutils.h"
#include "gstminiobject.h"
+static void gst_buffer_init (GTypeInstance * instance, gpointer g_class);
+static void gst_buffer_class_init (gpointer g_class, gpointer class_data);
static void gst_buffer_finalize (GstBuffer * buffer);
static GstBuffer *_gst_buffer_copy (GstBuffer * buffer);
static GType gst_subbuffer_get_type (void);
static GType _gst_subbuffer_type = 0;
static GType _gst_buffer_type = 0;
+
+static GstMiniObjectClass *parent_class = NULL;
#ifdef __SYMBIAN32__
EXPORT_C
#endif
@@ -140,20 +144,46 @@
g_type_class_ref (gst_buffer_get_type ());
g_type_class_ref (gst_subbuffer_get_type ());
}
+#ifdef __SYMBIAN32__
+EXPORT_C
+#endif
-#define _do_init \
-{ \
- _gst_buffer_type = g_define_type_id; \
+
+GType
+gst_buffer_get_type (void)
+{
+ if (G_UNLIKELY (_gst_buffer_type == 0)) {
+ static const GTypeInfo buffer_info = {
+ sizeof (GstBufferClass),
+ NULL,
+ NULL,
+ gst_buffer_class_init,
+ NULL,
+ NULL,
+ sizeof (GstBuffer),
+ 0,
+ gst_buffer_init,
+ NULL
+ };
+
+ _gst_buffer_type = g_type_register_static (GST_TYPE_MINI_OBJECT,
+ "GstBuffer", &buffer_info, 0);
+ }
+ return _gst_buffer_type;
}
-G_DEFINE_TYPE_WITH_CODE (GstBuffer, gst_buffer, GST_TYPE_MINI_OBJECT, _do_init);
+static void
+gst_buffer_class_init (gpointer g_class, gpointer class_data)
+{
+ GstBufferClass *buffer_class = GST_BUFFER_CLASS (g_class);
-static void
-gst_buffer_class_init (GstBufferClass * klass)
-{
- klass->mini_object_class.copy = (GstMiniObjectCopyFunction) _gst_buffer_copy;
- klass->mini_object_class.finalize =
+ parent_class = g_type_class_peek_parent (g_class);
+
+ buffer_class->mini_object_class.copy =
+ (GstMiniObjectCopyFunction) _gst_buffer_copy;
+ buffer_class->mini_object_class.finalize =
(GstMiniObjectFinalizeFunction) gst_buffer_finalize;
+
}
static void
@@ -164,13 +194,11 @@
GST_CAT_LOG (GST_CAT_BUFFER, "finalize %p", buffer);
/* free our data */
- if (G_LIKELY (buffer->malloc_data))
- buffer->free_func (buffer->malloc_data);
+ g_free (buffer->malloc_data);
gst_caps_replace (&GST_BUFFER_CAPS (buffer), NULL);
-/* ((GstMiniObjectClass *) */
-/* gst_buffer_parent_class)->finalize (GST_MINI_OBJECT_CAST (buffer)); */
+ GST_MINI_OBJECT_CLASS (parent_class)->finalize (GST_MINI_OBJECT (buffer));
}
/**
@@ -201,10 +229,6 @@
g_return_if_fail (dest != NULL);
g_return_if_fail (src != NULL);
- /* nothing to copy if the buffers are the same */
- if (G_UNLIKELY (dest == src))
- return;
-
GST_CAT_LOG (GST_CAT_BUFFER, "copy %p to %p", src, dest);
if (flags & GST_BUFFER_COPY_FLAGS) {
@@ -213,8 +237,7 @@
/* copy relevant flags */
mask = GST_BUFFER_FLAG_PREROLL | GST_BUFFER_FLAG_IN_CAPS |
GST_BUFFER_FLAG_DELTA_UNIT | GST_BUFFER_FLAG_DISCONT |
- GST_BUFFER_FLAG_GAP | GST_BUFFER_FLAG_MEDIA1 |
- GST_BUFFER_FLAG_MEDIA2 | GST_BUFFER_FLAG_MEDIA3;
+ GST_BUFFER_FLAG_GAP;
GST_MINI_OBJECT_FLAGS (dest) |= GST_MINI_OBJECT_FLAGS (src) & mask;
}
@@ -226,7 +249,10 @@
}
if (flags & GST_BUFFER_COPY_CAPS) {
- gst_caps_replace (&GST_BUFFER_CAPS (dest), GST_BUFFER_CAPS (src));
+ if (GST_BUFFER_CAPS (src))
+ GST_BUFFER_CAPS (dest) = gst_caps_ref (GST_BUFFER_CAPS (src));
+ else
+ GST_BUFFER_CAPS (dest) = NULL;
}
}
@@ -253,15 +279,18 @@
}
static void
-gst_buffer_init (GstBuffer * buffer)
+gst_buffer_init (GTypeInstance * instance, gpointer g_class)
{
+ GstBuffer *buffer;
+
+ buffer = (GstBuffer *) instance;
+
GST_CAT_LOG (GST_CAT_BUFFER, "init %p", buffer);
GST_BUFFER_TIMESTAMP (buffer) = GST_CLOCK_TIME_NONE;
GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
GST_BUFFER_OFFSET (buffer) = GST_BUFFER_OFFSET_NONE;
GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE;
- GST_BUFFER_FREE_FUNC (buffer) = g_free;
}
/**
@@ -499,59 +528,43 @@
GstBufferClass buffer_class;
};
+static GstBufferClass *sub_parent_class;
+
+static void gst_subbuffer_init (GTypeInstance * instance, gpointer g_class);
+static void gst_subbuffer_class_init (gpointer g_class, gpointer class_data);
static void gst_subbuffer_finalize (GstSubBuffer * buffer);
-#define _do_init_sub \
-{ \
- _gst_subbuffer_type = g_define_type_id; \
+static GType
+gst_subbuffer_get_type (void)
+{
+ if (G_UNLIKELY (_gst_subbuffer_type == 0)) {
+ static const GTypeInfo subbuffer_info = {
+ sizeof (GstSubBufferClass),
+ NULL,
+ NULL,
+ gst_subbuffer_class_init,
+ NULL,
+ NULL,
+ sizeof (GstSubBuffer),
+ 0,
+ gst_subbuffer_init,
+ NULL
+ };
+
+ _gst_subbuffer_type = g_type_register_static (GST_TYPE_BUFFER,
+ "GstSubBuffer", &subbuffer_info, 0);
+ }
+ return _gst_subbuffer_type;
}
-//deviation for EXPORT_C issue Start
-#ifndef __SYMBIAN32__
-
-G_DEFINE_TYPE_WITH_CODE (GstSubBuffer, gst_subbuffer, GST_TYPE_BUFFER,
- _do_init_sub);
-
-#else
-
-static void gst_subbuffer_init (GstSubBuffer *self);
-static void gst_subbuffer_class_init (GstSubBufferClass *klass);
-static gpointer gst_subbuffer_parent_class = NULL;
-static void gst_subbuffer_class_intern_init (gpointer klass)
-{
- gst_subbuffer_parent_class = g_type_class_peek_parent (klass);
- gst_subbuffer_class_init ((GstSubBufferClass*) klass);
-}
+static void
+gst_subbuffer_class_init (gpointer g_class, gpointer class_data)
+{
+ GstBufferClass *buffer_class = GST_BUFFER_CLASS (g_class);
-static GType
-gst_subbuffer_get_type (void)
-{
- static volatile gsize g_define_type_id__volatile = 0;
- if (g_once_init_enter (&g_define_type_id__volatile))
- {
- GType g_define_type_id =
- g_type_register_static_simple (GST_TYPE_BUFFER,
- g_intern_static_string ("GstSubBuffer"),
- sizeof (GstSubBufferClass),
- (GClassInitFunc) gst_subbuffer_class_intern_init,
- sizeof (GstSubBuffer),
- (GInstanceInitFunc) gst_subbuffer_init,
- (GTypeFlags) 0);
- { /* custom code follows */
- _do_init_sub;
- /* following custom code */
- }
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
- }
- return g_define_type_id__volatile;
-} /* closes type_name##_get_type() */
+ sub_parent_class = g_type_class_peek_parent (g_class);
-#endif //deviation for EXPORT_C issue end
-
-static void
-gst_subbuffer_class_init (GstSubBufferClass * klass)
-{
- klass->buffer_class.mini_object_class.finalize =
+ buffer_class->mini_object_class.finalize =
(GstMiniObjectFinalizeFunction) gst_subbuffer_finalize;
}
@@ -560,12 +573,12 @@
{
gst_buffer_unref (buffer->parent);
- ((GstMiniObjectClass *) gst_subbuffer_parent_class)->finalize
- (GST_MINI_OBJECT_CAST (buffer));
+ GST_MINI_OBJECT_CLASS (sub_parent_class)->
+ finalize (GST_MINI_OBJECT_CAST (buffer));
}
static void
-gst_subbuffer_init (GstSubBuffer * instance)
+gst_subbuffer_init (GTypeInstance * instance, gpointer g_class)
{
GST_BUFFER_FLAG_SET (GST_BUFFER_CAST (instance), GST_BUFFER_FLAG_READONLY);
}