All pastes #281956 Raw Edit

Unnamed

public text v1 · immutable
#281956 ·published 2006-12-17 04:58 UTC
rendered paste body
? path
Index: Makefile.am
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-good/sys/osxvideo/Makefile.am,v
retrieving revision 1.3
diff -u -r1.3 Makefile.am
--- Makefile.am	23 Sep 2005 04:23:00 -0000	1.3
+++ Makefile.am	17 Dec 2006 04:57:27 -0000
@@ -5,10 +5,16 @@
 plugin_LTLIBRARIES = libgstosxvideosink.la
 
 libgstosxvideosink_la_SOURCES = osxvideosink.m cocoawindow.m 
-libgstosxvideosink_la_CFLAGS = $(GST_CFLAGS) 
+libgstosxvideosink_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
 libgstosxvideosink_la_LIBADD = \
-	$(top_builddir)/gst-libs/gst/libgstinterfaces-$(GST_MAJORMINOR).la \
-	$(GST_LIBS)
+	$(GST_PLUGINS_BASE_LIBS) \
+	-lgstvideo-0.10
+	$(GST_LIBS) \
+	$(GST_BASE_LIBS)
+
+#	-lgstinterfaces-$(GST_MAJORMINOR).la 
+#	-libgstvideo-$(GST_MAJORMINOR).la
+
 
 LIBS = -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,QuickTime -Wl,-framework -Wl,OpenGL
 libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -framework Cocoa -framework QuickTime -framework OpenGL
Index: osxvideosink.h
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-good/sys/osxvideo/osxvideosink.h,v
retrieving revision 1.4
diff -u -r1.4 osxvideosink.h
--- osxvideosink.h	1 Jun 2006 21:07:26 -0000	1.4
+++ osxvideosink.h	17 Dec 2006 04:57:27 -0000
@@ -20,7 +20,9 @@
 #ifndef __GST_OSXVIDEOSINK_H__
 #define __GST_OSXVIDEOSINK_H__
 
-#include <gst/video/videosink.h>
+
+#include <gst/gst.h>
+#include <gst/video/gstvideosink.h>
 
 #include <string.h>
 #include <math.h>
Index: osxvideosink.m
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-good/sys/osxvideo/osxvideosink.m,v
retrieving revision 1.5
diff -u -r1.5 osxvideosink.m
--- osxvideosink.m	23 Nov 2005 14:22:18 -0000	1.5
+++ osxvideosink.m	17 Dec 2006 04:57:28 -0000
@@ -27,6 +27,7 @@
 
 /* Debugging category */
 #include <gst/gstinfo.h>
+#include <gst/gstelement.h>
 GST_DEBUG_CATEGORY_STATIC (gst_debug_osxvideosink);
 #define GST_CAT_DEFAULT gst_debug_osxvideosink
 
@@ -40,7 +41,7 @@
     "Zaheer Abbas Merali <zaheerabbas at merali dot org>");
 
 /* Default template - initiated with class struct to allow gst-register to work
-   without X running */
+   without X running 
 static GstStaticPadTemplate gst_osxvideosink_sink_template_factory =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
@@ -52,6 +53,15 @@
 )
     );
 
+*/
+	static GstStaticPadTemplate gst_osxvideosink_sink_template_factory =
+	GST_STATIC_PAD_TEMPLATE ("sink",
+	    GST_PAD_SINK,
+	    GST_PAD_ALWAYS,
+	    GST_STATIC_CAPS ("video/x-raw-yuv")
+	    );
+
+
 enum
 {
   ARG_0,
@@ -232,8 +242,8 @@
     return;
 
 
-  if (GST_VIDEOSINK_WIDTH (osxvideosink) != osxvideosink->osxwindow->width ||
-      GST_VIDEOSINK_HEIGHT (osxvideosink) != osxvideosink->osxwindow->height) {
+  if (GST_VIDEO_SINK_WIDTH (osxvideosink) != osxvideosink->osxwindow->width ||
+      GST_VIDEO_SINK_HEIGHT (osxvideosink) != osxvideosink->osxwindow->height) {
     GstPadLinkReturn r;
 
     r = gst_pad_try_set_caps (GST_VIDEOSINK_PAD (osxvideosink),
@@ -244,18 +254,18 @@
             "framerate", G_TYPE_DOUBLE, osxvideosink->framerate, NULL));
 
     if ((r == GST_PAD_LINK_OK) || (r == GST_PAD_LINK_DONE)) {
-      GST_VIDEOSINK_WIDTH (osxvideosink) = osxvideosink->osxwindow->width;
-      GST_VIDEOSINK_HEIGHT (osxvideosink) = osxvideosink->osxwindow->height;
+      GST_VIDEO_SINK_WIDTH (osxvideosink) = osxvideosink->osxwindow->width;
+      GST_VIDEO_SINK_HEIGHT (osxvideosink) = osxvideosink->osxwindow->height;
 
       if ((osxvideosink->osximage) &&
-          ((GST_VIDEOSINK_WIDTH (osxvideosink) != osxvideosink->osximage->width) ||
-              (GST_VIDEOSINK_HEIGHT (osxvideosink) !=
+          ((GST_VIDEO_SINK_WIDTH (osxvideosink) != osxvideosink->osximage->width) ||
+              (GST_VIDEO_SINK_HEIGHT (osxvideosink) !=
                   osxvideosink->osximage->height))) {
         gst_osxvideosink_osximage_destroy (osxvideosink, osxvideosink->osximage);
 
         osxvideosink->osximage = gst_osxvideosink_osximage_new (osxvideosink,
-            GST_VIDEOSINK_WIDTH (osxvideosink),
-            GST_VIDEOSINK_HEIGHT (osxvideosink));
+            GST_VIDEO_SINK_WIDTH (osxvideosink),
+            GST_VIDEO_SINK_HEIGHT (osxvideosink));
       }
     } else {
       osxvideosink->sw_scaling_failed = TRUE;
@@ -282,36 +292,50 @@
 
 /* Element stuff */
 
-static GstCaps *
-gst_osxvideosink_fixate (GstPad * pad, const GstCaps * caps)
+static void
+gst_osxvideosink_fixate (GstPad * pad, GstCaps * caps)
 {
   GstStructure *structure;
   GstCaps *newcaps;
   GValue target_fps = { 0 };
 
   if (gst_caps_get_size (caps) > 1)
-    return NULL;
+    return;
 
   newcaps = gst_caps_copy (caps);
   structure = gst_caps_get_structure (newcaps, 0);
 
   if (gst_structure_fixate_field_nearest_int (structure, "width", 320)) {
-    return newcaps;
+    return;
   }
   if (gst_structure_fixate_field_nearest_int (structure, "height", 240)) {
-    return newcaps;
+    return;
   }
   g_value_init (&target_fps, GST_TYPE_FRACTION);
   gst_value_set_fraction (&target_fps, 25, 1);
-  gst_structure_fixate_field_nearest_fraction (s, "framerate", &target_fps);
+
+  /*
+  gst_structure_fixate_field_nearest_fraction (structure, "framerate", &target_fps);
 
   if (gst_structure_fixate_field_nearest_fraction (structure, "framerate",
       &target_fps)) {
     return newcaps;
   }
+  */
+	gst_structure_fixate_field_nearest_fraction (structure, 
+																							"framerate", 
+																							gst_value_get_fraction_numerator(&target_fps), 
+																							gst_value_get_fraction_denominator(&target_fps));
+
+  if (gst_structure_fixate_field_nearest_fraction (structure, "framerate",																					
+																						gst_value_get_fraction_numerator(&target_fps), 
+																						gst_value_get_fraction_denominator(&target_fps) )) {
+    return;
+  }
 
-  gst_caps_free (newcaps);
-  return NULL;
+  gst_caps_unref (newcaps);
+  
+return;
 }
 
 static GstCaps *
@@ -343,9 +367,9 @@
 
   structure = gst_caps_get_structure (caps, 0);
   ret = gst_structure_get_int (structure, "width",
-      &(GST_VIDEOSINK_WIDTH (osxvideosink)));
+      &(GST_VIDEO_SINK_WIDTH (osxvideosink)));
   ret &= gst_structure_get_int (structure, "height",
-      &(GST_VIDEOSINK_HEIGHT (osxvideosink)));
+      &(GST_VIDEO_SINK_HEIGHT (osxvideosink)));
   fps = gst_structure_get_value (structure, "framerate");
   ret &= (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps));
 
@@ -364,54 +388,55 @@
   /* Creating our window and our image */
   if (!osxvideosink->osxwindow) {
     osxvideosink->osxwindow = gst_osxvideosink_osxwindow_new (osxvideosink,
-        GST_VIDEOSINK_WIDTH (osxvideosink), GST_VIDEOSINK_HEIGHT (osxvideosink));
+        GST_VIDEO_SINK_WIDTH (osxvideosink), GST_VIDEO_SINK_HEIGHT (osxvideosink));
     gst_osxvideosink_osxwindow_clear (osxvideosink, osxvideosink->osxwindow);
   }
   else {
     if (osxvideosink->osxwindow->internal)
       gst_osxvideosink_osxwindow_resize (osxvideosink, osxvideosink->osxwindow,
-          GST_VIDEOSINK_WIDTH (osxvideosink), GST_VIDEOSINK_HEIGHT (osxvideosink));
+          GST_VIDEO_SINK_WIDTH (osxvideosink), GST_VIDEO_SINK_HEIGHT (osxvideosink));
   }
 
-  if ((osxvideosink->osximage) && ((GST_VIDEOSINK_WIDTH (osxvideosink) != osxvideosink->osximage->width) || (GST_VIDEOSINK_HEIGHT (osxvideosink) != osxvideosink->osximage->height))) { /* We renew our ximage only if size changed */
+  if ((osxvideosink->osximage) && ((GST_VIDEO_SINK_WIDTH (osxvideosink) != osxvideosink->osximage->width) || (GST_VIDEO_SINK_HEIGHT (osxvideosink) != osxvideosink->osximage->height))) { /* We renew our ximage only if size changed */
     gst_osxvideosink_osximage_destroy (osxvideosink, osxvideosink->osximage);
 
     osxvideosink->osximage = gst_osxvideosink_osximage_new (osxvideosink,
-        GST_VIDEOSINK_WIDTH (osxvideosink), GST_VIDEOSINK_HEIGHT (osxvideosink));
+        GST_VIDEO_SINK_WIDTH (osxvideosink), GST_VIDEO_SINK_HEIGHT (osxvideosink));
   } else if (!osxvideosink->osximage)       /* If no ximage, creating one */
     osxvideosink->osximage = gst_osxvideosink_osximage_new (osxvideosink,
-        GST_VIDEOSINK_WIDTH (osxvideosink), GST_VIDEOSINK_HEIGHT (osxvideosink));
+        GST_VIDEO_SINK_WIDTH (osxvideosink), GST_VIDEO_SINK_HEIGHT (osxvideosink));
 
   return GST_PAD_LINK_OK;
 }
 
-static GstElementStateReturn
-gst_osxvideosink_change_state (GstElement * element)
+//static GstElementStateReturn
+static GstStateChangeReturn
+gst_osxvideosink_change_state (GstElement * element, GstStateChange transition)
 {
   GstOSXVideoSink *osxvideosink;
 
   osxvideosink = GST_OSXVIDEOSINK (element);
 
-  switch (GST_STATE_TRANSITION (element)) {
-    case GST_STATE_NULL_TO_READY:
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
       break;
-    case GST_STATE_READY_TO_PAUSED:
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
       if (osxvideosink->osxwindow)
         gst_osxvideosink_osxwindow_clear (osxvideosink, osxvideosink->osxwindow);
       osxvideosink->time = 0;
       break;
-    case GST_STATE_PAUSED_TO_PLAYING:
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
       break;
-    case GST_STATE_PLAYING_TO_PAUSED:
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
       break;
-    case GST_STATE_PAUSED_TO_READY:
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
       osxvideosink->fps_n = 0;
       osxvideosink->fps_d = 0;
       osxvideosink->sw_scaling_failed = FALSE;
-      GST_VIDEOSINK_WIDTH (osxvideosink) = 0;
-      GST_VIDEOSINK_HEIGHT (osxvideosink) = 0;
+      GST_VIDEO_SINK_WIDTH (osxvideosink) = 0;
+      GST_VIDEO_SINK_HEIGHT (osxvideosink) = 0;
       break;
-    case GST_STATE_READY_TO_NULL:
+    case GST_STATE_CHANGE_READY_TO_NULL:
       if (osxvideosink->osximage) {
         gst_osxvideosink_osximage_destroy (osxvideosink, osxvideosink->osximage);
         osxvideosink->osximage = NULL;
@@ -425,18 +450,93 @@
         osxvideosink->osxwindow = NULL;
       }
       break;
+
+		default: 
+			break;
+  }
+
+  if (GST_ELEMENT_CLASS (parent_class)->change_state) {
+    return GST_ELEMENT_CLASS(parent_class)->change_state(element,transition);
+	}
+	
+  return GST_STATE_CHANGE_SUCCESS;
+}
+
+static GstFlowReturn
+gst_osxvideosink_chain (GstPad * pad, GstBuffer * buffer)
+{
+	
+  /*GstBuffer *buf = GST_BUFFER(data); */
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstOSXVideoSink *osxvideosink;
+
+	if (buffer==NULL) {
+		return GST_FLOW_ERROR;
+	}
+	
+	if (GST_IS_PAD(pad)) {
+		return GST_FLOW_ERROR;
+	}
+	
+	/*
+  g_return_if_fail (GST_IS_PAD (pad));
+  g_return_if_fail (buffer != NULL);
+	*/
+  osxvideosink = GST_OSXVIDEOSINK (gst_pad_get_parent (pad));
+
+  if (GST_IS_EVENT (GST_BUFFER_DATA(buffer))) {
+    gst_pad_event_default (pad, GST_EVENT(GST_BUFFER_DATA(buffer)));
+    return GST_FLOW_ERROR;
+  }
+
+  /* update time */
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) {
+    osxvideosink->time = GST_BUFFER_TIMESTAMP (buffer);
+  }
+  GST_DEBUG ("clock wait: %" GST_TIME_FORMAT, GST_TIME_ARGS (osxvideosink->time));
+
+	/*
+  if (GST_VIDEO_SINK_CLOCK (osxvideosink)) {
+    gst_element_wait (GST_ELEMENT (osxvideosink), osxvideosink->time);
+  }
+  */
+
+  /* If this buffer has been allocated using our buffer management we simply
+     put the ximage which is in the PRIVATE pointer */
+  char* viewdata = [osxvideosink->osxwindow->gstview getTextureBuffer];
+  memcpy(viewdata, GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE(buffer));
+  [osxvideosink->osxwindow->gstview displayTexture];
+
+  /*if (GST_BUFFER_FREE_DATA_FUNC (buffer) != gst_osxvideosink_buffer_free) {
+ */
+    if (!osxvideosink->osximage) {
+		/*
+     No image available. Something went wrong during capsnego ! 
+	   */
+	
+      gst_buffer_unref (buffer);
+      GST_ELEMENT_ERROR (osxvideosink, CORE, NEGOTIATION, (NULL),
+          ("no format defined before chain function"));
+      return GST_FLOW_ERROR;
+    }
+  /*}*/
+
+  /* set correct time for next buffer */
+  if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer) && osxvideosink->fps_n > 0) {
+    osxvideosink->time += gst_util_uint64_scale_int (GST_SECOND,
+        osxvideosink->fps_d, osxvideosink->fps_n);
   }
 
-  if (GST_ELEMENT_CLASS (parent_class)->change_state)
-    return GST_ELEMENT_CLASS (parent_class)->change_state (element);
+  gst_buffer_unref (buffer);
 
-  return GST_STATE_SUCCESS;
+	return ret;
 }
 
+/*
 static void
 gst_osxvideosink_chain (GstPad * pad, GstData * data)
 {
-  GstBuffer *buf = GST_BUFFER (data);
+  GstBuffer *buf = GST_BUFFER(data);
   GstOSXVideoSink *osxvideosink;
 
   g_return_if_fail (GST_IS_PAD (pad));
@@ -450,25 +550,25 @@
   }
 
   buf = GST_BUFFER (data);
-  /* update time */
+  // update time 
   if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
     osxvideosink->time = GST_BUFFER_TIMESTAMP (buf);
   }
   GST_DEBUG ("clock wait: %" GST_TIME_FORMAT, GST_TIME_ARGS (osxvideosink->time));
 
-  if (GST_VIDEOSINK_CLOCK (osxvideosink)) {
+  if (GST_VIDEO_SINK_CLOCK (osxvideosink)) {
     gst_element_wait (GST_ELEMENT (osxvideosink), osxvideosink->time);
   }
 
-  /* If this buffer has been allocated using our buffer management we simply
-     put the ximage which is in the PRIVATE pointer */
+   If this buffer has been allocated using our buffer management we simply
+     put the ximage which is in the PRIVATE pointer 
   char* viewdata = [osxvideosink->osxwindow->gstview getTextureBuffer];
   memcpy(viewdata, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE(buf));
   [osxvideosink->osxwindow->gstview displayTexture];
   if (GST_BUFFER_FREE_DATA_FUNC (buf) != gst_osxvideosink_buffer_free) {
  
     if (!osxvideosink->osximage) {
-     /* No image available. Something went wrong during capsnego ! */
+     No image available. Something went wrong during capsnego ! 
 
       gst_buffer_unref (buf);
       GST_ELEMENT_ERROR (osxvideosink, CORE, NEGOTIATION, (NULL),
@@ -477,7 +577,7 @@
     }
   }
 
-  /* set correct time for next buffer */
+   set correct time for next buffer
   if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf) && osxvideosink->fps_n > 0) {
     osxvideosink->time += gst_util_uint64_scale_int (GST_SECOND,
         osxvideosink->fps_d, osxvideosink->fps_n);
@@ -486,6 +586,9 @@
   gst_buffer_unref (buf);
 
 }
+*/
+
+
 
 /* Buffer management */
 
@@ -501,8 +604,8 @@
   osxvideosink = osximage->osxvideosink;
 
   /* If our geometry changed we can't reuse that image. */
-  if ((osximage->width != GST_VIDEOSINK_WIDTH (osxvideosink)) ||
-      (osximage->height != GST_VIDEOSINK_HEIGHT (osxvideosink)))
+  if ((osximage->width != GST_VIDEO_SINK_WIDTH (osxvideosink)) ||
+      (osximage->height != GST_VIDEO_SINK_HEIGHT (osxvideosink)))
     gst_osxvideosink_osximage_destroy (osxvideosink, osximage);
   else {                        /* In that case we can reuse the image and add it to our image pool. */
 
@@ -511,20 +614,34 @@
     g_mutex_unlock (osxvideosink->pool_lock);
   }
 }
-
+/* 
+	change signature to include reverse negotiation see ximagesink in base , gstpad.h
+  add rev neg. with caps/buffer size
+  add dynamic destruction
+  return proper values
+*/
+/*
 static GstBuffer *
 gst_osxvideosink_buffer_alloc (GstPad * pad, guint64 offset, guint size)
+*/
+static GstFlowReturn
+gst_osxvideosink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size,
+    GstCaps * caps, GstBuffer ** buf)
 {
   GstOSXVideoSink *osxvideosink;
   GstBuffer *buffer;
   GstOSXImage *osximage = NULL;
   gboolean not_found = TRUE;
+	GstCaps *alloc_caps;
+	gboolean alloc_unref = FALSE;
+  GstFlowReturn ret = GST_FLOW_OK;
 
-  osxvideosink = GST_OSXVIDEOSINK (gst_pad_get_parent (pad));
+  /* get this sink */
+  osxvideosink = GST_OSXVIDEOSINK (bsink);
 
   g_mutex_lock (osxvideosink->pool_lock);
 
-  /* Walking through the pool cleaning unsuable images and searching for a
+  /* Walking through the pool cleaning unusable images and searching for a
      suitable one */
   while (not_found && osxvideosink->image_pool) {
     osximage = osxvideosink->image_pool->data;
@@ -534,7 +651,7 @@
       osxvideosink->image_pool = g_slist_delete_link (osxvideosink->image_pool,
           osxvideosink->image_pool);
 
-      if ((osximage->width != GST_VIDEOSINK_WIDTH (osxvideosink)) || (osximage->height != GST_VIDEOSINK_HEIGHT (osxvideosink))) {       /* This image is unusable. Destroying... */
+      if ((osximage->width != GST_VIDEO_SINK_WIDTH (osxvideosink)) || (osximage->height != GST_VIDEO_SINK_HEIGHT (osxvideosink))) {       /* This image is unusable. Destroying... */
         gst_osxvideosink_osximage_destroy (osxvideosink, osximage);
         osximage = NULL;
       } else {                  /* We found a suitable image */
@@ -548,21 +665,27 @@
 
   if (!osximage) {                /* We found no suitable image in the pool. Creating... */
     osximage = gst_osxvideosink_osximage_new (osxvideosink,
-        GST_VIDEOSINK_WIDTH (osxvideosink), GST_VIDEOSINK_HEIGHT (osxvideosink));
+        GST_VIDEO_SINK_WIDTH (osxvideosink), GST_VIDEO_SINK_HEIGHT (osxvideosink));
   }
 
   if (osximage) {
     buffer = gst_buffer_new ();
 
-    /* Storing some pointers in the buffer */
+    /* Storing some pointers in the buffer 
     GST_BUFFER_PRIVATE (buffer) = osximage;
-
+*/
     GST_BUFFER_DATA (buffer) = osximage->data;
+/*
     GST_BUFFER_FREE_DATA_FUNC (buffer) = gst_osxvideosink_buffer_free;
+*/
     GST_BUFFER_SIZE (buffer) = osximage->size;
-    return buffer;
-  } else
-    return NULL;
+
+		*buf = GST_BUFFER_CAST (osximage);
+    return ret;
+
+  } else {
+    return GST_FLOW_ERROR;
+	}
 }
 
 /* =========================================== */
@@ -632,22 +755,25 @@
 static void
 gst_osxvideosink_init (GstOSXVideoSink * osxvideosink)
 {
-  GST_VIDEOSINK_PAD (osxvideosink) =
+	/*
+  GST_VIDEO_SINK_PAD (osxvideosink) =
       gst_pad_new_from_template (gst_static_pad_template_get
       (&gst_osxvideosink_sink_template_factory), "sink");
-
+ 
+		
   gst_element_add_pad (GST_ELEMENT (osxvideosink),
-      GST_VIDEOSINK_PAD (osxvideosink));
+      GST_VIDEO_SINK_PAD (osxvideosink));
+	*/
 
-  gst_pad_set_chain_function (GST_VIDEOSINK_PAD (osxvideosink),
+  gst_pad_set_chain_function (GST_VIDEO_SINK_PAD (osxvideosink),
       gst_osxvideosink_chain);
-  gst_pad_set_link_function (GST_VIDEOSINK_PAD (osxvideosink),
+  gst_pad_set_link_function (GST_VIDEO_SINK_PAD (osxvideosink),
       gst_osxvideosink_sink_link);
-  gst_pad_set_getcaps_function (GST_VIDEOSINK_PAD (osxvideosink),
+  gst_pad_set_getcaps_function (GST_VIDEO_SINK_PAD (osxvideosink),
       gst_osxvideosink_getcaps);
-  gst_pad_set_fixate_function (GST_VIDEOSINK_PAD (osxvideosink),
-      gst_osxvideosink_fixate);
-  gst_pad_set_bufferalloc_function (GST_VIDEOSINK_PAD (osxvideosink),
+		gst_pad_set_fixatecaps_function(GST_VIDEO_SINK_PAD(osxvideosink),
+			gst_osxvideosink_fixate);
+  gst_pad_set_bufferalloc_function (GST_VIDEO_SINK_PAD (osxvideosink),
       gst_osxvideosink_buffer_alloc);
 
   osxvideosink->osxwindow = NULL;
@@ -664,8 +790,6 @@
   osxvideosink->sw_scaling_failed = FALSE;
   osxvideosink->embed = FALSE;
   osxvideosink->fullscreen = FALSE;
-  GST_FLAG_SET (osxvideosink, GST_ELEMENT_THREAD_SUGGESTED);
-  GST_FLAG_SET (osxvideosink, GST_ELEMENT_EVENT_AWARE);
 
 }
 
@@ -689,7 +813,7 @@
   gobject_class = (GObjectClass *) klass;
   gstelement_class = (GstElementClass *) klass;
 
-  parent_class = g_type_class_ref (GST_TYPE_VIDEOSINK);
+  parent_class = g_type_class_ref (GST_TYPE_VIDEO_SINK);
 
   gobject_class->dispose = gst_osxvideosink_dispose;
   gobject_class->set_property = gst_osxvideosink_set_property;
@@ -739,7 +863,7 @@
       (GInstanceInitFunc) gst_osxvideosink_init,
     };
 
-    osxvideosink_type = g_type_register_static (GST_TYPE_VIDEOSINK,
+    osxvideosink_type = g_type_register_static (GST_TYPE_VIDEO_SINK,
         "GstOSXVideoSink", &osxvideosink_info, 0);
 
   }
@@ -750,9 +874,11 @@
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
-  /* Loading the library containing GstVideoSink, our parent object */
+	
+  /* Loading the library containing GstVideoSink, our parent object 
   if (!gst_library_load ("gstvideo"))
     return FALSE;
+*/
 
   if (!gst_element_register (plugin, "osxvideosink",
           GST_RANK_PRIMARY, GST_TYPE_OSXVIDEOSINK))
@@ -768,4 +894,4 @@
     GST_VERSION_MINOR,
     "osxvideo",
     "OSX native video output plugin",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN)
+    plugin_init, VERSION, GST_LICENSE, "GStreamer", "http://gstreamer.freedesktop.org/")