/** * gst_rtp_buffer_pad_to: * @buffer: the buffer * @len: the new amount of padding * * Set the amount of padding in the RTP packet in @buffer to * @len. If @len is 0, the padding is removed. * * NOTE: This function does not work correctly. */ void gst_rtp_buffer_pad_to (GstBuffer * buffer, guint len) { guint8 *data; data = GST_BUFFER_DATA (buffer); if (len > 0) GST_RTP_HEADER_PADDING (data) = TRUE; else GST_RTP_HEADER_PADDING (data) = FALSE; /* FIXME, set the padding byte at the end of the payload data */ }
/** * gst_rtp_buffer_allocate_data: * @buffer: a #GstBuffer * @payload_len: the length of the payload * @pad_len: the amount of padding * @csrc_count: the number of CSRC entries * * Allocate enough data in @buffer to hold an RTP packet with @csrc_count CSRCs, * a payload length of @payload_len and padding of @pad_len. * MALLOCDATA of @buffer will be overwritten and will not be freed. * All other RTP header fields will be set to 0/FALSE. */ void gst_rtp_buffer_allocate_data (GstBuffer * buffer, guint payload_len, guint8 pad_len, guint8 csrc_count) { guint len; guint8 *data; g_return_if_fail (csrc_count <= 15); g_return_if_fail (GST_IS_BUFFER (buffer)); len = GST_RTP_HEADER_LEN + csrc_count * sizeof (guint32) + payload_len + pad_len; data = g_malloc (len); GST_BUFFER_MALLOCDATA (buffer) = data; GST_BUFFER_DATA (buffer) = data; GST_BUFFER_SIZE (buffer) = len; /* fill in defaults */ GST_RTP_HEADER_VERSION (data) = GST_RTP_VERSION; GST_RTP_HEADER_PADDING (data) = FALSE; GST_RTP_HEADER_EXTENSION (data) = FALSE; GST_RTP_HEADER_CSRC_COUNT (data) = csrc_count; memset (GST_RTP_HEADER_CSRC_LIST_OFFSET (data, 0), 0, csrc_count * sizeof (guint32)); GST_RTP_HEADER_MARKER (data) = FALSE; GST_RTP_HEADER_PAYLOAD_TYPE (data) = 0; GST_RTP_HEADER_SEQ (data) = 0; GST_RTP_HEADER_TIMESTAMP (data) = 0; GST_RTP_HEADER_SSRC (data) = 0; }
EXPORT_C #endif void gst_rtp_buffer_pad_to (GstBuffer * buffer, guint len) { g_return_if_fail (GST_IS_BUFFER (buffer)); g_return_if_fail (GST_BUFFER_DATA (buffer) != NULL); if (len > 0) GST_RTP_HEADER_PADDING (buffer) = TRUE; else GST_RTP_HEADER_PADDING (buffer) = FALSE; /* FIXME, set the padding byte at the end of the payload data */ }
EXPORT_C #endif void gst_rtp_buffer_set_padding (GstBuffer * buffer, gboolean padding) { GST_RTP_HEADER_PADDING (GST_BUFFER_DATA (buffer)) = padding; }
EXPORT_C #endif gboolean gst_rtp_buffer_get_padding (GstBuffer * buffer) { return GST_RTP_HEADER_PADDING (GST_BUFFER_DATA (buffer)); }
EXPORT_C #endif void gst_rtp_buffer_set_padding (GstBuffer * buffer, gboolean padding) { g_return_if_fail (GST_IS_BUFFER (buffer)); g_return_if_fail (GST_BUFFER_DATA (buffer) != NULL); GST_RTP_HEADER_PADDING (buffer) = padding; }
EXPORT_C #endif gboolean gst_rtp_buffer_get_padding (GstBuffer * buffer) { g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE); g_return_val_if_fail (GST_BUFFER_DATA (buffer) != NULL, FALSE); return GST_RTP_HEADER_PADDING (buffer); }
/** * gst_rtp_buffer_get_payload_len: * @buffer: the buffer * * Get the length of the payload of the RTP packet in @buffer. * * Returns: The length of the payload in @buffer. */ guint gst_rtp_buffer_get_payload_len (GstBuffer * buffer) { guint len, size; guint8 *data; size = GST_BUFFER_SIZE (buffer); data = GST_BUFFER_DATA (buffer); len = size - gst_rtp_buffer_get_header_len (buffer); if (GST_RTP_HEADER_PADDING (data)) len -= data[size - 1]; return len; }
/** * gst_rtp_buffer_set_packet_len: * @buffer: the buffer * @len: the new packet length * * Set the total @buffer size to @len. The data in the buffer will be made * larger if needed. Any padding will be removed from the packet. */ void gst_rtp_buffer_set_packet_len (GstBuffer * buffer, guint len) { guint oldlen; guint8 *data; oldlen = GST_BUFFER_SIZE (buffer); data = GST_BUFFER_DATA (buffer); if (oldlen < len) { data = g_realloc (GST_BUFFER_MALLOCDATA (buffer), len); GST_BUFFER_MALLOCDATA (buffer) = data; GST_BUFFER_DATA (buffer) = data; } GST_BUFFER_SIZE (buffer) = len; /* remove any padding */ GST_RTP_HEADER_PADDING (data) = FALSE; }
EXPORT_C #endif guint gst_rtp_buffer_get_payload_len (GstBuffer * buffer) { guint len, size; g_return_val_if_fail (GST_IS_BUFFER (buffer), 0); g_return_val_if_fail (GST_BUFFER_DATA (buffer) != NULL, 0); size = GST_BUFFER_SIZE (buffer); len = size - gst_rtp_buffer_get_header_len (buffer); if (GST_RTP_HEADER_PADDING (buffer)) len -= GST_BUFFER_DATA (buffer)[size - 1]; return len; }
EXPORT_C #endif void gst_rtp_buffer_set_packet_len (GstBuffer * buffer, guint len) { guint oldlen; g_return_if_fail (GST_IS_BUFFER (buffer)); oldlen = GST_BUFFER_SIZE (buffer); if (oldlen < len) { guint8 *newdata; newdata = g_realloc (GST_BUFFER_MALLOCDATA (buffer), len); GST_BUFFER_MALLOCDATA (buffer) = newdata; GST_BUFFER_DATA (buffer) = newdata; } GST_BUFFER_SIZE (buffer) = len; /* remove any padding */ GST_RTP_HEADER_PADDING (buffer) = FALSE; }