ext/audiofile/gstafsrc.c: Remove old debug output
authorJan Schmidt <thaytan@mad.scientist.com>
Wed, 12 May 2004 14:53:58 +0000 (14:53 +0000)
committerJan Schmidt <thaytan@mad.scientist.com>
Wed, 12 May 2004 14:53:58 +0000 (14:53 +0000)
Original commit message from CVS:
* ext/audiofile/gstafsrc.c: (gst_afsrc_get):
Remove old debug output
* ext/dv/gstdvdec.c: (gst_dvdec_quality_get_type),
(gst_dvdec_class_init), (gst_dvdec_loop), (gst_dvdec_change_state),
(gst_dvdec_set_property), (gst_dvdec_get_property):
Change the quality setting to an enum, so it works from gst-launch
Don't renegotiate a non-linked pad. Allows audio only decoding.
* gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_getcaps),
(gst_deinterlace_link), (gst_deinterlace_init):
* gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
(gst_videodrop_link):
Some caps negotiation fixes

ChangeLog
ext/audiofile/gstafsrc.c
gst/deinterlace/gstdeinterlace.c
gst/videodrop/gstvideodrop.c

index 176a03b..9bf044d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2004-05-13  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/audiofile/gstafsrc.c: (gst_afsrc_get):
+       Remove old debug output
+       * ext/dv/gstdvdec.c: (gst_dvdec_quality_get_type),
+       (gst_dvdec_class_init), (gst_dvdec_loop), (gst_dvdec_change_state),
+       (gst_dvdec_set_property), (gst_dvdec_get_property):
+       Change the quality setting to an enum, so it works from gst-launch
+       Don't renegotiate a non-linked pad. Allows audio only decoding.
+       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_getcaps),
+       (gst_deinterlace_link), (gst_deinterlace_init):
+       * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
+       (gst_videodrop_link):
+       Some caps negotiation fixes
+
 2004-05-12  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
 
        * ext/tarkin/gsttarkin.c :
index d0ce73f..82f3a6b 100644 (file)
@@ -240,8 +240,8 @@ gst_afsrc_get (GstPad * pad)
   src->framestamp += gst_audio_frame_length (src->srcpad, buf);
   GST_BUFFER_TIMESTAMP (buf) = src->framestamp * 1E9
       / gst_audio_frame_rate (src->srcpad);
-  printf ("DEBUG: afsrc: timestamp set on output buffer: %f sec\n",
-      GST_BUFFER_TIMESTAMP (buf) / 1E9);
+  /* printf ("DEBUG: afsrc: timestamp set on output buffer: %f sec\n", 
+     GST_BUFFER_TIMESTAMP (buf) / 1E9); */
 
 /*  g_print("DEBUG: gstafsrc: pushed buffer of %ld bytes\n", readbytes); */
   return GST_DATA (buf);
index 93a2bdb..3c2941b 100644 (file)
@@ -139,6 +139,18 @@ gst_deinterlace_class_init (GstDeInterlaceClass * klass)
   gobject_class->set_property = gst_deinterlace_set_property;
   gobject_class->get_property = gst_deinterlace_get_property;
 }
+static GstCaps *
+gst_deinterlace_getcaps (GstPad * pad)
+{
+  GstDeInterlace *filter;
+  GstPad *otherpad;
+
+  filter = GST_DEINTERLACE (gst_pad_get_parent (pad));
+
+  otherpad = (pad == filter->srcpad) ? filter->sinkpad : filter->srcpad;
+
+  return gst_pad_get_allowed_caps (otherpad);
+}
 
 static GstPadLinkReturn
 gst_deinterlace_link (GstPad * pad, const GstCaps * caps)
@@ -146,10 +158,13 @@ gst_deinterlace_link (GstPad * pad, const GstCaps * caps)
   GstDeInterlace *filter;
   GstStructure *structure;
   GstPadLinkReturn ret;
+  GstPad *otherpad;
 
   filter = GST_DEINTERLACE (gst_pad_get_parent (pad));
 
-  ret = gst_pad_try_set_caps (filter->srcpad, caps);
+  otherpad = (pad == filter->srcpad) ? filter->sinkpad : filter->srcpad;
+
+  ret = gst_pad_try_set_caps (otherpad, caps);
   if (GST_PAD_LINK_FAILED (ret)) {
     return ret;
   }
@@ -176,12 +191,14 @@ gst_deinterlace_init (GstDeInterlace * filter)
       (&deinterlace_sink_factory), "sink");
   gst_pad_set_chain_function (filter->sinkpad, gst_deinterlace_chain);
   gst_pad_set_link_function (filter->sinkpad, gst_deinterlace_link);
+  gst_pad_set_getcaps_function (filter->sinkpad, gst_deinterlace_getcaps);
   gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
 
   filter->srcpad =
       gst_pad_new_from_template (gst_static_pad_template_get
       (&deinterlace_src_factory), "src");
   gst_pad_set_link_function (filter->srcpad, gst_deinterlace_link);
+  gst_pad_set_getcaps_function (filter->srcpad, gst_deinterlace_getcaps);
   gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
 
   filter->show_deinterlaced_area_only = FALSE;
index e4f2e4e..447a1bc 100644 (file)
@@ -162,9 +162,9 @@ gst_videodrop_getcaps (GstPad * pad)
     gst_structure_set (structure,
         "framerate", GST_TYPE_DOUBLE_RANGE, 0.0, G_MAXDOUBLE, NULL);
   }
-  if (negotiated) {
-    for (i = 0; i < gst_caps_get_size (caps); i++) {
-      structure = gst_caps_get_structure (caps, i);
+  if ((negotiated) && (videodrop->speed != 1.0)) {
+    for (i = 0; i < gst_caps_get_size (copy2); i++) {
+      structure = gst_caps_get_structure (copy2, i);
 
       gst_structure_set (structure,
           "framerate", G_TYPE_DOUBLE, otherfps * videodrop->speed, NULL);
@@ -195,14 +195,30 @@ gst_videodrop_link (GstPad * pad, const GstCaps * caps)
   ret = gst_structure_get_double (structure, "framerate", &fps);
   if (!ret)
     return GST_PAD_LINK_REFUSED;
+
   if (pad == videodrop->srcpad) {
-    videodrop->from_fps = fps;
-  } else {
     videodrop->to_fps = fps;
+  } else {
+    videodrop->from_fps = fps;
   }
 
   if (gst_pad_is_negotiated (otherpad)) {
-    gst_pad_renegotiate (otherpad);
+    /* 
+     * Ensure that the other side talks the format we're trying to set
+     */
+    GstCaps *newcaps = gst_caps_copy (caps);
+
+    if (pad == videodrop->srcpad) {
+      gst_caps_set_simple (newcaps,
+          "framerate", G_TYPE_DOUBLE, videodrop->from_fps, NULL);
+    } else {
+      gst_caps_set_simple (newcaps,
+          "framerate", G_TYPE_DOUBLE, videodrop->to_fps, NULL);
+    }
+    ret = gst_pad_try_set_caps (otherpad, newcaps);
+    if (GST_PAD_LINK_FAILED (ret)) {
+      return GST_PAD_LINK_REFUSED;
+    }
   }
 
   return GST_PAD_LINK_OK;