summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2010-11-17 17:49:17 -0800
committerDavid Schleef <ds@schleef.org>2011-01-02 14:52:34 -0800
commitea113a79aa6a0fc471a0f79677b354423173350f (patch)
treefc2a43741aeedc84cdc5dab3655b6e7e9a200c25
parent73923c4a6e79a8585f8874bbb7140a410d7f64ca (diff)
mpegtsmux: Set random_access_indicator for keyframes
-rw-r--r--gst/mpegtsmux/mpegtsmux.c2
-rw-r--r--gst/mpegtsmux/tsmux/tsmuxstream.c13
-rw-r--r--gst/mpegtsmux/tsmux/tsmuxstream.h3
3 files changed, 15 insertions, 3 deletions
diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c
index c185039b1..55f51f6ea 100644
--- a/gst/mpegtsmux/mpegtsmux.c
+++ b/gst/mpegtsmux/mpegtsmux.c
@@ -712,7 +712,7 @@ mpegtsmux_collected (GstCollectPads * pads, MpegTsMux * mux)
}
tsmux_stream_add_data (best->stream, GST_BUFFER_DATA (buf),
- GST_BUFFER_SIZE (buf), buf, pts, -1);
+ GST_BUFFER_SIZE (buf), buf, pts, -1, !delta);
best->queued_buf = NULL;
mux->is_delta = delta;
diff --git a/gst/mpegtsmux/tsmux/tsmuxstream.c b/gst/mpegtsmux/tsmux/tsmuxstream.c
index 62c244fb2..88d533a09 100644
--- a/gst/mpegtsmux/tsmux/tsmuxstream.c
+++ b/gst/mpegtsmux/tsmux/tsmuxstream.c
@@ -100,6 +100,8 @@ struct TsMuxStreamBuffer
gint64 pts;
gint64 dts;
+ gboolean random_access;
+
void *user_data;
};
@@ -372,6 +374,13 @@ tsmux_stream_initialize_pes_packet (TsMuxStream * stream)
stream->pi.flags |= TSMUX_PACKET_FLAG_PES_WRITE_PTS;
}
+ if (stream->buffers) {
+ TsMuxStreamBuffer *buf = (TsMuxStreamBuffer *) (stream->buffers->data);
+ if (buf->random_access) {
+ stream->pi.flags |= TSMUX_PACKET_FLAG_RANDOM_ACCESS;
+ }
+ }
+
return TRUE;
}
@@ -589,6 +598,7 @@ tsmux_stream_write_pes_header (TsMuxStream * stream, guint8 * data)
* @user_data: user data to pass to release func
* @pts: PTS of access unit in @data
* @dts: DTS of access unit in @data
+ * @random_access: TRUE if random access point (keyframe)
*
* Submit @len bytes of @data into @stream. @pts and @dts can be set to the
* timestamp (against a 90Hz clock) of the first access unit in @data. A
@@ -599,7 +609,7 @@ tsmux_stream_write_pes_header (TsMuxStream * stream, guint8 * data)
*/
void
tsmux_stream_add_data (TsMuxStream * stream, guint8 * data, guint len,
- void *user_data, gint64 pts, gint64 dts)
+ void *user_data, gint64 pts, gint64 dts, gboolean random_access)
{
TsMuxStreamBuffer *packet;
@@ -609,6 +619,7 @@ tsmux_stream_add_data (TsMuxStream * stream, guint8 * data, guint len,
packet->data = data;
packet->size = len;
packet->user_data = user_data;
+ packet->random_access = random_access;
packet->pts = pts;
packet->dts = dts;
diff --git a/gst/mpegtsmux/tsmux/tsmuxstream.h b/gst/mpegtsmux/tsmux/tsmuxstream.h
index b384d39a2..47ad842e9 100644
--- a/gst/mpegtsmux/tsmux/tsmuxstream.h
+++ b/gst/mpegtsmux/tsmux/tsmuxstream.h
@@ -201,7 +201,8 @@ void tsmux_stream_set_buffer_release_func (TsMuxStream *stream,
/* Add a new buffer to the pool of available bytes. If pts or dts are not -1, they
* indicate the PTS or DTS of the first access unit within this packet */
void tsmux_stream_add_data (TsMuxStream *stream, guint8 *data, guint len,
- void *user_data, gint64 pts, gint64 dts);
+ void *user_data, gint64 pts, gint64 dts,
+ gboolean random_access);
void tsmux_stream_pcr_ref (TsMuxStream *stream);
void tsmux_stream_pcr_unref (TsMuxStream *stream);