Add method to get RDT flags
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 26 Jan 2009 19:10:36 +0000 (20:10 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 26 Jan 2009 19:10:36 +0000 (20:10 +0100)
Add a method to get the RDT flags. We need these flags to mark keyframes to
reset the descrambing queue. See #556714.

gst/realmedia/gstrdtbuffer.c
gst/realmedia/gstrdtbuffer.h

index 735f66bf9e7a3499a4ac2368003458bb25837976..7f09f2331cf6d51cfcc3a2915a5641625e177f22 100644 (file)
@@ -423,3 +423,35 @@ gst_rdt_packet_data_get_timestamp (GstRDTPacket * packet)
 
   return result;
 }
+
+guint8
+gst_rdt_packet_data_get_flags (GstRDTPacket * packet)
+{
+  guint8 result;
+  guint header;
+  gboolean length_included_flag;
+  guint8 *bufdata;
+  guint bufsize;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
+
+  bufdata = GST_BUFFER_DATA (packet->buffer);
+  bufsize = GST_BUFFER_SIZE (packet->buffer);
+
+  header = packet->offset;
+
+  length_included_flag = (bufdata[header] & 0x80) == 0x80;
+
+  /* skip seq_no and header bits */
+  header += 3;
+
+  if (length_included_flag) {
+    /* skip length */
+    header += 2;
+  }
+  /* get flags */
+  result = bufdata[header];
+
+  return result;
+}
index 4e659e25713325c874523a0f0827cf1244b44fac..b452922e70a28c5251f2e4e002cf4cd4cc34d221 100644 (file)
@@ -109,6 +109,8 @@ gboolean        gst_rdt_packet_data_peek_data     (GstRDTPacket *packet, guint8
 guint16         gst_rdt_packet_data_get_stream_id (GstRDTPacket *packet);
 guint32         gst_rdt_packet_data_get_timestamp (GstRDTPacket *packet);
 
+guint8          gst_rdt_packet_data_get_flags     (GstRDTPacket * packet);
+
 /* utils */
 gint            gst_rdt_buffer_compare_seqnum     (guint16 seqnum1, guint16 seqnum2);