mpegtsmux: Set random_access_indicator for keyframes
authorDavid Schleef <ds@schleef.org>
Thu, 18 Nov 2010 01:49:17 +0000 (17:49 -0800)
committerDavid Schleef <ds@schleef.org>
Sun, 2 Jan 2011 22:52:34 +0000 (14:52 -0800)
gst/mpegtsmux/mpegtsmux.c
gst/mpegtsmux/tsmux/tsmuxstream.c
gst/mpegtsmux/tsmux/tsmuxstream.h

index c185039..55f51f6 100644 (file)
@@ -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;
index 62c244f..88d533a 100644 (file)
@@ -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;
index b384d39..47ad842 100644 (file)
@@ -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);