From 9ce447007ed093acf673c91293d83a95395f010e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 26 Jan 2009 20:10:36 +0100 Subject: [PATCH] Add method to get RDT flags 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 | 32 ++++++++++++++++++++++++++++++++ gst/realmedia/gstrdtbuffer.h | 2 ++ 2 files changed, 34 insertions(+) diff --git a/gst/realmedia/gstrdtbuffer.c b/gst/realmedia/gstrdtbuffer.c index 735f66b..7f09f23 100644 --- a/gst/realmedia/gstrdtbuffer.c +++ b/gst/realmedia/gstrdtbuffer.c @@ -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; +} diff --git a/gst/realmedia/gstrdtbuffer.h b/gst/realmedia/gstrdtbuffer.h index 4e659e2..b452922 100644 --- a/gst/realmedia/gstrdtbuffer.h +++ b/gst/realmedia/gstrdtbuffer.h @@ -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); -- 2.7.4