diff -r 567bb019e3e3 -r 7e817e7e631c gstreamer_core/gst/gstbuffer.c --- 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); }