flvdemux: parse and use cts
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 23 Sep 2010 14:46:31 +0000 (16:46 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 23 Sep 2010 14:46:31 +0000 (16:46 +0200)
For H264, there is an extra header containing the CTS, which is a timestamp
offset that should be applied to the PTS. Parse this value and use it to adjust
the pts.

Fixes #630088

gst/flv/gstflvdemux.c

index 4049939..e22eca7 100644 (file)
@@ -1084,7 +1084,16 @@ gst_flv_demux_parse_tag_video (GstFlvDemux * demux, GstBuffer * buffer)
   if (codec_tag == 4 || codec_tag == 5) {
     codec_data = 2;
   } else if (codec_tag == 7) {
+    gint32 cts;
+
     codec_data = 5;
+
+    cts = GST_READ_UINT24_BE (data + 9);
+    cts = (cts + 0xff800000) ^ 0xff800000;
+
+    GST_LOG_OBJECT (demux, "got cts %d", cts);
+
+    pts = pts + cts;
   }
 
   GST_LOG_OBJECT (demux, "video tag with codec tag %u, keyframe (%d) "