diff --git a/gst/mpegpsmux/mpegpsmux.c b/gst/mpegpsmux/mpegpsmux.c index be8e3da77a..d0e31bb863 100644 --- a/gst/mpegpsmux/mpegpsmux.c +++ b/gst/mpegpsmux/mpegpsmux.c @@ -454,6 +454,7 @@ mpegpsmux_collected (GstCollectPads * pads, MpegPsMux * mux) GstFlowReturn ret = GST_FLOW_OK; MpegPsPadData *best = NULL; + gboolean keyunit; GST_DEBUG_OBJECT (mux, "Pads collected"); @@ -496,9 +497,12 @@ mpegpsmux_collected (GstCollectPads * pads, MpegPsMux * mux) G_GINT64_FORMAT, GST_TIME_ARGS (best->cur_ts), pts); } + keyunit = !GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT); + /* give the buffer to libpsmux for processing */ psmux_stream_add_data (best->stream, GST_BUFFER_DATA (buf), - GST_BUFFER_SIZE (buf), buf, pts, -1); + GST_BUFFER_SIZE (buf), buf, pts, -1, keyunit); + best->queued_buf = NULL; /* write the data from libpsmux to stream */ diff --git a/gst/mpegpsmux/psmuxstream.c b/gst/mpegpsmux/psmuxstream.c index e91cc006b6..a0bd38ee6f 100644 --- a/gst/mpegpsmux/psmuxstream.c +++ b/gst/mpegpsmux/psmuxstream.c @@ -513,7 +513,7 @@ psmux_stream_write_pes_header (PsMuxStream * stream, guint8 * data) */ void psmux_stream_add_data (PsMuxStream * stream, guint8 * data, guint len, - void *user_data, gint64 pts, gint64 dts) + void *user_data, gint64 pts, gint64 dts, gboolean keyunit) { PsMuxStreamBuffer *packet; @@ -524,6 +524,7 @@ psmux_stream_add_data (PsMuxStream * stream, guint8 * data, guint len, packet->size = len; packet->user_data = user_data; + packet->keyunit = keyunit; packet->pts = pts; packet->dts = dts; diff --git a/gst/mpegpsmux/psmuxstream.h b/gst/mpegpsmux/psmuxstream.h index 9860e62302..ff4c2892bf 100644 --- a/gst/mpegpsmux/psmuxstream.h +++ b/gst/mpegpsmux/psmuxstream.h @@ -86,6 +86,8 @@ struct PsMuxStreamBuffer guint8 *data; guint32 size; + gboolean keyunit; + /* PTS & DTS associated with the contents of this buffer */ GstClockTime pts; GstClockTime dts; @@ -146,7 +148,8 @@ void psmux_stream_set_buffer_release_func (PsMuxStream *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 psmux_stream_add_data (PsMuxStream *stream, guint8 *data, guint len, - void *user_data, gint64 pts, gint64 dts); + void *user_data, gint64 pts, gint64 dts, + gboolean keyunit); /* total bytes in buffer */ gint psmux_stream_bytes_in_buffer (PsMuxStream *stream);