[gst-plugins-farsight/master] Fix conflicts

Olivier Crete olivier.crete at collabora.co.uk
Tue Mar 3 10:53:11 PST 2009


20080704202941-3e2dc-7f5a38845b797e12d672551466e635d484cb6763.gz
---
 ext/mimic/gstmimdec.c |   25 +++++++++++++++++++++----
 ext/mimic/gstmimdec.h |    3 +++
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/ext/mimic/gstmimdec.c b/ext/mimic/gstmimdec.c
index 3568f9b..b2f15ec 100644
--- a/ext/mimic/gstmimdec.c
+++ b/ext/mimic/gstmimdec.c
@@ -50,7 +50,7 @@ GST_STATIC_PAD_TEMPLATE (
         "bpp = (int) 24, "
         "depth = (int) 24, "
         "endianness = (int) 4321, "
-        "framerate = (double) [1.0, 30.0], "
+        "framerate = (fraction) [ 0/1, 30/1 ], "
         "red_mask = (int) 16711680, "
         "green_mask = (int) 65280, "
         "blue_mask = (int) 255, "
@@ -233,6 +233,9 @@ gst_mimdec_chain (GstPad *pad, GstBuffer *in)
           }
 
           mimdec->payload_size = GUINT32_FROM_LE (*((guint32 *) (header + 8)));
+
+          mimdec->current_ts = GUINT32_FROM_LE (*((guint32 *) (header + 20)));
+
           GST_DEBUG ("Got packet, payload size %d", mimdec->payload_size);
 
           gst_adapter_flush (mimdec->adapter, 24);
@@ -299,7 +302,7 @@ gst_mimdec_chain (GstPad *pad, GstBuffer *in)
       }
 
       out_buf = gst_buffer_new_and_alloc (mimdec->buffer_size);
-      GST_BUFFER_TIMESTAMP(out_buf) = GST_BUFFER_TIMESTAMP(buf);
+
       if (!mimic_decode_frame (mimdec->dec, frame_body, GST_BUFFER_DATA (out_buf))) {
           GST_WARNING_OBJECT (mimdec, "mimic_decode_frame error\n");
 
@@ -310,7 +313,18 @@ gst_mimdec_chain (GstPad *pad, GstBuffer *in)
           res = GST_FLOW_ERROR;
           goto out;
       }
-      
+
+      if (mimdec->last_ts != -1) {
+        int diff = mimdec->current_ts - mimdec->last_ts;
+        if (diff < 0 || diff > 5000) {
+          diff = 1000;
+        }
+        mimdec->gst_timestamp += diff * GST_MSECOND;
+      }
+      GST_BUFFER_TIMESTAMP(out_buf) = mimdec->gst_timestamp;
+      mimdec->last_ts = mimdec->current_ts;
+
+
       mimic_get_property(mimdec->dec, "width", &width);
       mimic_get_property(mimdec->dec, "height", &height);
       GST_DEBUG_OBJECT (mimdec, 
@@ -320,7 +334,7 @@ gst_mimdec_chain (GstPad *pad, GstBuffer *in)
               "bpp", G_TYPE_INT, 24,
               "depth", G_TYPE_INT, 24,
               "endianness", G_TYPE_INT, 4321,
-              "framerate", G_TYPE_DOUBLE, 30.0,
+              "framerate", GST_TYPE_FRACTION, 7, 1,
               "red_mask", G_TYPE_INT, 16711680,
               "green_mask", G_TYPE_INT, 65280,
               "blue_mask", G_TYPE_INT, 255,
@@ -354,6 +368,9 @@ gst_mimdec_change_state (GstElement *element, GstStateChange transition)
         mimdec->buffer_size = -1;
         mimdec->have_header = FALSE;
         mimdec->payload_size = -1;
+        mimdec->gst_timestamp = -1;
+        mimdec->current_ts = -1;
+        mimdec->last_ts = -1;
       }
       break;
     default:
diff --git a/ext/mimic/gstmimdec.h b/ext/mimic/gstmimdec.h
index 7f93052..ddbde8d 100644
--- a/ext/mimic/gstmimdec.h
+++ b/ext/mimic/gstmimdec.h
@@ -55,6 +55,9 @@ struct _GstMimDec
   gint buffer_size;
   gboolean have_header;
   guint32 payload_size;
+  guint32 last_ts;
+  guint32 current_ts;
+  GstClockTime gst_timestamp;
 };
 
 struct _GstMimDecClass 
-- 
1.5.6.5




More information about the farsight-commits mailing list