From: <wt...@ke...> - 2008-02-01 11:09:27
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: wtay Date: Fri Feb 01 2008 11:09:31 UTC Log message: Patch by: Thijs Vermeir <thijsvermeir at gmail dot com> * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_set_extension_data): * gst-libs/gst/rtp/gstrtpbuffer.h: * tests/check/libs/rtp.c: (GST_START_TEST), (rtp_suite): Add gst_rtp_buffer_set_extension_data() Add a unit test for this addition. Fixes #511478. API: GstRTPBuffer:gst_rtp_buffer_set_extension_data() Modified files: . : ChangeLog gst-libs/gst/rtp: gstrtpbuffer.c gstrtpbuffer.h tests/check/libs: rtp.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.3711&r2=1.3712 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/gst-libs/gst/rtp/gstrtpbuffer.c.diff?r1=1.20&r2=1.21 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/gst-libs/gst/rtp/gstrtpbuffer.h.diff?r1=1.17&r2=1.18 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/tests/check/libs/rtp.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.3711 retrieving revision 1.3712 diff -u -d -r1.3711 -r1.3712 --- ChangeLog 30 Jan 2008 14:42:10 -0000 1.3711 +++ ChangeLog 1 Feb 2008 11:09:08 -0000 1.3712 @@ -1,3 +1,15 @@ +2008-02-01 Wim Taymans <wim...@co...> + + Patch by: Thijs Vermeir <thijsvermeir at gmail dot com> + * gst-libs/gst/rtp/gstrtpbuffer.c: + (gst_rtp_buffer_set_extension_data): + * gst-libs/gst/rtp/gstrtpbuffer.h: + * tests/check/libs/rtp.c: (GST_START_TEST), (rtp_suite): + Add gst_rtp_buffer_set_extension_data() + Add a unit test for this addition. Fixes #511478. + API: GstRTPBuffer:gst_rtp_buffer_set_extension_data() 2008-01-30 Jan Schmidt <jan...@su...> * configure.ac: Index: gstrtpbuffer.c RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/rtp/gstrtpbuffer.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- gstrtpbuffer.c 22 Jan 2008 15:37:49 -0000 1.20 +++ gstrtpbuffer.c 1 Feb 2008 11:09:12 -0000 1.21 @@ -631,6 +631,51 @@ } /** + * gst_rtp_buffer_set_extension_data: + * @buffer: the buffer + * @bits: the bits specific for the extension + * @length: the length that counts the number of 32-bit words in + * the extension, excluding the extension header ( therefore zero is a valid length) + * + * Set the extension bit of the rtp buffer and fill in the @bits and @length of the + * extension header. It will refuse to set the extension data if the buffer is not + * large enough. + * Returns: True if done. + * Since : 0.10.18 + */ +gboolean +gst_rtp_buffer_set_extension_data (GstBuffer * buffer, guint16 bits, + guint16 length) +{ + guint32 min_size = 0; + guint8 *data; + g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE); + g_return_val_if_fail (GST_BUFFER_DATA (buffer) != NULL, FALSE); + gst_rtp_buffer_set_extension (buffer, TRUE); + min_size = + GST_RTP_HEADER_LEN + GST_RTP_HEADER_CSRC_SIZE (buffer) + 4 + + length * sizeof (guint32); + if (min_size > GST_BUFFER_SIZE (buffer)) { + GST_WARNING_OBJECT (buffer, + "rtp buffer too small: need more than %d bytes but only have %d bytes", + min_size, GST_BUFFER_SIZE (buffer)); + return FALSE; + } + data = + GST_BUFFER_DATA (buffer) + GST_RTP_HEADER_LEN + + GST_RTP_HEADER_CSRC_SIZE (buffer); + GST_WRITE_UINT16_BE (data, bits); + GST_WRITE_UINT16_BE (data + 2, length); + return TRUE; +} +/** * gst_rtp_buffer_get_ssrc: * @buffer: the buffer * Index: gstrtpbuffer.h RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/rtp/gstrtpbuffer.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- gstrtpbuffer.h 1 Oct 2007 13:22:13 -0000 1.17 +++ gstrtpbuffer.h 1 Feb 2008 11:09:14 -0000 1.18 @@ -68,6 +68,7 @@ void gst_rtp_buffer_set_extension (GstBuffer *buffer, gboolean extension); gboolean gst_rtp_buffer_get_extension_data (GstBuffer *buffer, guint16 *bits, gpointer *data, guint *wordlen); +gboolean gst_rtp_buffer_set_extension_data (GstBuffer *buffer, guint16 bits, guint16 length); guint32 gst_rtp_buffer_get_ssrc (GstBuffer *buffer); void gst_rtp_buffer_set_ssrc (GstBuffer *buffer, guint32 ssrc); Index: rtp.c RCS file: /cvs/gstreamer/gst-plugins-base/tests/check/libs/rtp.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- rtp.c 12 Jan 2008 23:24:02 -0000 1.3 +++ rtp.c 1 Feb 2008 11:09:16 -0000 1.4 @@ -106,6 +106,49 @@ GST_END_TEST; +GST_START_TEST (test_rtp_buffer_set_extension_data) + GstBuffer *buf; + guint16 bits; + guint size; + gpointer pointer; + /* check GstRTPHeader structure alignment and packing */ + buf = gst_rtp_buffer_new_allocate (4, 0, 0); + data = GST_BUFFER_DATA (buf); + /* should be impossible to set the extension data */ + fail_unless (gst_rtp_buffer_set_extension_data (buf, 0, 4) == FALSE); + fail_unless (gst_rtp_buffer_get_extension (buf) == TRUE); + /* should be possible to set the extension data */ + fail_unless (gst_rtp_buffer_set_extension_data (buf, 270, 0) == TRUE); + gst_rtp_buffer_get_extension_data (buf, &bits, &pointer, &size); + fail_unless (bits == 270); + fail_unless (size == 0); + fail_unless (pointer == GST_BUFFER_DATA (buf) + 16); + pointer = gst_rtp_buffer_get_payload (buf); + gst_buffer_unref (buf); + buf = gst_rtp_buffer_new_allocate (20, 0, 0); + fail_unless (gst_rtp_buffer_get_extension (buf) == FALSE); + fail_unless (gst_rtp_buffer_set_extension_data (buf, 333, 2) == TRUE); + fail_unless (bits == 333); + fail_unless (size == 2); + fail_unless (pointer == GST_BUFFER_DATA (buf) + 24); +GST_END_TEST; static Suite * rtp_suite (void) { @@ -114,6 +157,7 @@ suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_rtp_buffer); + tcase_add_test (tc_chain, test_rtp_buffer_set_extension_data); return s; |