diff --git a/ChangeLog b/ChangeLog index ed0f9fdd8a..e7d21f9c84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-10-22 Sebastian Dröge + + * docs/libs/gstreamer-libs-sections.txt: + * libs/gst/base/gstbytereader.c: (gst_byte_reader_get_data), + (gst_byte_reader_peek_data): + * libs/gst/base/gstbytereader.h: + * win32/common/libgstbase.def: + API: Add gst_byte_reader_get_data and gst_byte_reader_peek_data + to get a pointer to the data at the current position and have + a guaranteed size. + 2008-10-22 Jan Schmidt * configure.ac: diff --git a/docs/libs/gstreamer-libs-sections.txt b/docs/libs/gstreamer-libs-sections.txt index c96925af57..b8c2e1775c 100644 --- a/docs/libs/gstreamer-libs-sections.txt +++ b/docs/libs/gstreamer-libs-sections.txt @@ -440,6 +440,9 @@ gst_byte_reader_peek_float32_le gst_byte_reader_peek_float32_be gst_byte_reader_peek_float64_le gst_byte_reader_peek_float64_be + +gst_byte_reader_get_data +gst_byte_reader_peek_data
diff --git a/libs/gst/base/gstbytereader.c b/libs/gst/base/gstbytereader.c index 8cce7b7f34..18be4a4c2f 100644 --- a/libs/gst/base/gstbytereader.c +++ b/libs/gst/base/gstbytereader.c @@ -1211,3 +1211,64 @@ gst_byte_reader_peek_float##bits##_be (GstByteReader *reader, g##type *val) \ GST_BYTE_READER_READ_FLOATS (32, float, FLOAT); GST_BYTE_READER_READ_FLOATS (64, double, DOUBLE); + +/** + * gst_byte_reader_get_data: + * @reader: a #GstByteReader instance + * @size: Size in bytes + * @val: Pointer to a #guint8 to store the result + * + * Returns a constant pointer to the current data + * position if at least @size bytes are left and + * updates the current position. + * + * + * Returns: %TRUE if successful, %FALSE otherwise. + * + * Since: 0.10.22 + */ + +/** + * gst_byte_reader_peek_data: + * @reader: a #GstByteReader instance + * @size: Size in bytes + * @val: Pointer to a #guint8 to store the result + * + * Returns a constant pointer to the current data + * position if at least @size bytes are left and + * keeps the current position. + * + * + * Returns: %TRUE if successful, %FALSE otherwise. + * + * Since: 0.10.22 + */ + +gboolean +gst_byte_reader_get_data (GstByteReader * reader, guint size, + const guint8 ** val) +{ + g_return_val_if_fail (reader != NULL, FALSE); + g_return_val_if_fail (val != NULL, FALSE); + + if (reader->byte + size > reader->size) + return FALSE; + + *val = reader->data + reader->byte; + reader->byte += size; + return TRUE; +} + +gboolean +gst_byte_reader_peek_data (GstByteReader * reader, guint size, + const guint8 ** val) +{ + g_return_val_if_fail (reader != NULL, FALSE); + g_return_val_if_fail (val != NULL, FALSE); + + if (reader->byte + size > reader->size) + return FALSE; + + *val = reader->data + reader->byte; + return TRUE; +} diff --git a/libs/gst/base/gstbytereader.h b/libs/gst/base/gstbytereader.h index 28534c0038..4c672d5c3d 100644 --- a/libs/gst/base/gstbytereader.h +++ b/libs/gst/base/gstbytereader.h @@ -102,6 +102,9 @@ gboolean gst_byte_reader_peek_float32_be (GstByteReader *reader, gfloat *val); gboolean gst_byte_reader_peek_float64_le (GstByteReader *reader, gdouble *val); gboolean gst_byte_reader_peek_float64_be (GstByteReader *reader, gdouble *val); +gboolean gst_byte_reader_get_data (GstByteReader *reader, guint size, const guint8 **val); +gboolean gst_byte_reader_peek_data (GstByteReader *reader, guint size, const guint8 **val); + /** * GST_BYTE_READER_INIT: * @data: Data from which the #GstByteReader should read diff --git a/win32/common/libgstbase.def b/win32/common/libgstbase.def index d29797f38f..a87b23bdf2 100644 --- a/win32/common/libgstbase.def +++ b/win32/common/libgstbase.def @@ -72,6 +72,7 @@ EXPORTS gst_bit_reader_skip gst_bit_reader_skip_to_byte gst_byte_reader_free + gst_byte_reader_get_data gst_byte_reader_get_float32_be gst_byte_reader_get_float32_le gst_byte_reader_get_float64_be @@ -100,6 +101,7 @@ EXPORTS gst_byte_reader_init_from_buffer gst_byte_reader_new gst_byte_reader_new_from_buffer + gst_byte_reader_peek_data gst_byte_reader_peek_float32_be gst_byte_reader_peek_float32_le gst_byte_reader_peek_float64_be