diff options
author | David Schleef <ds@schleef.org> | 2010-11-17 17:49:17 -0800 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2011-01-02 14:52:34 -0800 |
commit | ea113a79aa6a0fc471a0f79677b354423173350f (patch) | |
tree | fc2a43741aeedc84cdc5dab3655b6e7e9a200c25 | |
parent | 73923c4a6e79a8585f8874bbb7140a410d7f64ca (diff) |
mpegtsmux: Set random_access_indicator for keyframes
-rw-r--r-- | gst/mpegtsmux/mpegtsmux.c | 2 | ||||
-rw-r--r-- | gst/mpegtsmux/tsmux/tsmuxstream.c | 13 | ||||
-rw-r--r-- | gst/mpegtsmux/tsmux/tsmuxstream.h | 3 |
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); |