Created
June 6, 2014 19:20
-
-
Save ndufresne/39c48630b3c6ff653be1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From ee5933f05e160e80ccbe4b8af2bec7661d8b88cd Mon Sep 17 00:00:00 2001 | |
From: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk> | |
Date: Fri, 6 Jun 2014 15:19:58 -0400 | |
Subject: [PATCH] flvmux: Add support for compensation time | |
Add support for compensation time. It does not work yet, as | |
GStreamer don't support negative DTS. | |
--- | |
gst/flv/gstflvmux.c | 25 +++++++++++++++++++------ | |
1 file changed, 19 insertions(+), 6 deletions(-) | |
diff --git a/gst/flv/gstflvmux.c b/gst/flv/gstflvmux.c | |
index 9b11b4b..d9b24c9 100644 | |
--- a/gst/flv/gstflvmux.c | |
+++ b/gst/flv/gstflvmux.c | |
@@ -1001,7 +1001,7 @@ gst_flv_mux_buffer_to_tag_internal (GstFlvMux * mux, GstBuffer * buffer, | |
GstMapInfo map; | |
guint size; | |
guint32 timestamp = | |
- (GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) ? GST_BUFFER_TIMESTAMP (buffer) / | |
+ (GST_BUFFER_PTS_IS_VALID (buffer)) ? GST_BUFFER_PTS (buffer) / | |
GST_MSECOND : cpad->last_timestamp / GST_MSECOND; | |
guint8 *data, *bdata; | |
gsize bsize; | |
@@ -1027,7 +1027,6 @@ gst_flv_mux_buffer_to_tag_internal (GstFlvMux * mux, GstBuffer * buffer, | |
size += 4; | |
_gst_buffer_new_and_alloc (size, &tag, &data); | |
- GST_BUFFER_TIMESTAMP (tag) = timestamp * GST_MSECOND; | |
memset (data, 0, size); | |
data[0] = (cpad->video) ? 9 : 8; | |
@@ -1054,10 +1053,23 @@ gst_flv_mux_buffer_to_tag_internal (GstFlvMux * mux, GstBuffer * buffer, | |
data[11] |= cpad->video_codec & 0x0f; | |
if (cpad->video_codec == 7) { | |
+ gint64 comp_offset = 0; | |
+ | |
data[12] = is_codec_data ? 0 : 1; | |
- /* FIXME: what to do about composition time */ | |
- data[13] = data[14] = data[15] = 0; | |
+ if (GST_BUFFER_DTS_IS_VALID (buffer)) { | |
+ gint64 dts; | |
+ | |
+ dts = (GST_BUFFER_DTS (buffer)) / GST_MSECOND; | |
+ | |
+ /* FIXME GStreamer don't support negative DTS, hence shift forward the DTS | |
+ * to an unknown offset, which lead to PTS being bigger to DTS | |
+ * sometimes */ | |
+ if (timestamp >= dts) | |
+ comp_offset = timestamp - dts; | |
+ } | |
+ | |
+ GST_WRITE_UINT24_BE (data + 13, comp_offset); | |
memcpy (data + 11 + 1 + 4, bdata, bsize); | |
} else { | |
@@ -1082,8 +1094,9 @@ gst_flv_mux_buffer_to_tag_internal (GstFlvMux * mux, GstBuffer * buffer, | |
GST_WRITE_UINT32_BE (data + size - 4, size - 4); | |
- GST_BUFFER_TIMESTAMP (tag) = GST_BUFFER_TIMESTAMP (buffer); | |
- GST_BUFFER_DURATION (tag) = GST_BUFFER_DURATION (buffer); | |
+ GST_BUFFER_PTS (tag) = GST_CLOCK_TIME_NONE; | |
+ GST_BUFFER_DTS (tag) = GST_CLOCK_TIME_NONE; | |
+ GST_BUFFER_DURATION (tag) = GST_BUFFER_DTS (buffer); | |
GST_BUFFER_OFFSET (tag) = GST_BUFFER_OFFSET (buffer); | |
GST_BUFFER_OFFSET_END (tag) = GST_BUFFER_OFFSET_END (buffer); | |
-- | |
1.9.3 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment