X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libs%2Fgst%2Fbase%2Fgstbytereader.h;h=b988739a697971380624fcbff7908a5959dfce8a;hb=a569347789a64adc2ccf20c2fbaf94f89ee7a399;hp=66ef46c715f4b4ab91be65814fc0e4d4c9f5933c;hpb=f1b07c580ebec40d7f3028337bdabeaecb331c6f;p=platform%2Fupstream%2Fgstreamer.git diff --git a/libs/gst/base/gstbytereader.h b/libs/gst/base/gstbytereader.h index 66ef46c..b988739 100644 --- a/libs/gst/base/gstbytereader.h +++ b/libs/gst/base/gstbytereader.h @@ -15,14 +15,15 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef __GST_BYTE_READER_H__ #define __GST_BYTE_READER_H__ #include +#include G_BEGIN_DECLS @@ -30,7 +31,8 @@ G_BEGIN_DECLS /** * GstByteReader: - * @data: Data from which the bit reader will read + * @data: (array length=size): Data from which the bit reader will + * read * @size: Size of @data in bytes * @byte: Current byte position * @@ -46,85 +48,202 @@ typedef struct { gpointer _gst_reserved[GST_PADDING]; } GstByteReader; -GstByteReader * gst_byte_reader_new (const guint8 *data, guint size); -void gst_byte_reader_free (GstByteReader *reader); - -void gst_byte_reader_init (GstByteReader *reader, const guint8 *data, guint size); - -gboolean gst_byte_reader_set_pos (GstByteReader *reader, guint pos); - -guint gst_byte_reader_get_pos (const GstByteReader *reader); -guint gst_byte_reader_get_remaining (const GstByteReader *reader); - -guint gst_byte_reader_get_size (const GstByteReader *reader); - -gboolean gst_byte_reader_skip (GstByteReader *reader, guint nbytes); - -gboolean gst_byte_reader_get_uint8 (GstByteReader *reader, guint8 *val); -gboolean gst_byte_reader_get_int8 (GstByteReader *reader, gint8 *val); -gboolean gst_byte_reader_get_uint16_le (GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_get_int16_le (GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_get_uint16_be (GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_get_int16_be (GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_get_uint24_le (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int24_le (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint24_be (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int24_be (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint32_le (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int32_le (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint32_be (GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_get_int32_be (GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_get_uint64_le (GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_get_int64_le (GstByteReader *reader, gint64 *val); -gboolean gst_byte_reader_get_uint64_be (GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_get_int64_be (GstByteReader *reader, gint64 *val); - -gboolean gst_byte_reader_peek_uint8 (const GstByteReader *reader, guint8 *val); -gboolean gst_byte_reader_peek_int8 (const GstByteReader *reader, gint8 *val); -gboolean gst_byte_reader_peek_uint16_le (const GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_peek_int16_le (const GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_peek_uint16_be (const GstByteReader *reader, guint16 *val); -gboolean gst_byte_reader_peek_int16_be (const GstByteReader *reader, gint16 *val); -gboolean gst_byte_reader_peek_uint24_le (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int24_le (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint24_be (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int24_be (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint32_le (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int32_le (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint32_be (const GstByteReader *reader, guint32 *val); -gboolean gst_byte_reader_peek_int32_be (const GstByteReader *reader, gint32 *val); -gboolean gst_byte_reader_peek_uint64_le (const GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_peek_int64_le (const GstByteReader *reader, gint64 *val); -gboolean gst_byte_reader_peek_uint64_be (const GstByteReader *reader, guint64 *val); -gboolean gst_byte_reader_peek_int64_be (const GstByteReader *reader, gint64 *val); - -gboolean gst_byte_reader_get_float32_le (GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_get_float32_be (GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_get_float64_le (GstByteReader *reader, gdouble *val); -gboolean gst_byte_reader_get_float64_be (GstByteReader *reader, gdouble *val); - -gboolean gst_byte_reader_peek_float32_le (const GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_peek_float32_be (const GstByteReader *reader, gfloat *val); -gboolean gst_byte_reader_peek_float64_le (const GstByteReader *reader, gdouble *val); -gboolean gst_byte_reader_peek_float64_be (const GstByteReader *reader, gdouble *val); - -gboolean gst_byte_reader_dup_data (GstByteReader * reader, guint size, guint8 ** val); -gboolean gst_byte_reader_get_data (GstByteReader * reader, guint size, const guint8 ** val); -gboolean gst_byte_reader_peek_data (const GstByteReader * reader, guint size, const guint8 ** val); +GST_BASE_API +GstByteReader * gst_byte_reader_new (const guint8 *data, guint size) G_GNUC_MALLOC; + +GST_BASE_API +void gst_byte_reader_free (GstByteReader *reader); + +GST_BASE_API +void gst_byte_reader_init (GstByteReader *reader, const guint8 *data, guint size); + +GST_BASE_API +gboolean gst_byte_reader_peek_sub_reader (GstByteReader * reader, + GstByteReader * sub_reader, + guint size); +GST_BASE_API +gboolean gst_byte_reader_get_sub_reader (GstByteReader * reader, + GstByteReader * sub_reader, + guint size); +GST_BASE_API +gboolean gst_byte_reader_set_pos (GstByteReader *reader, guint pos); + +GST_BASE_API +guint gst_byte_reader_get_pos (const GstByteReader *reader); + +GST_BASE_API +guint gst_byte_reader_get_remaining (const GstByteReader *reader); + +GST_BASE_API +guint gst_byte_reader_get_size (const GstByteReader *reader); + +GST_BASE_API +gboolean gst_byte_reader_skip (GstByteReader *reader, guint nbytes); + +GST_BASE_API +gboolean gst_byte_reader_get_uint8 (GstByteReader *reader, guint8 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int8 (GstByteReader *reader, gint8 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_uint16_le (GstByteReader *reader, guint16 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int16_le (GstByteReader *reader, gint16 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_uint16_be (GstByteReader *reader, guint16 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int16_be (GstByteReader *reader, gint16 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_uint24_le (GstByteReader *reader, guint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int24_le (GstByteReader *reader, gint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_uint24_be (GstByteReader *reader, guint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int24_be (GstByteReader *reader, gint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_uint32_le (GstByteReader *reader, guint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int32_le (GstByteReader *reader, gint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_uint32_be (GstByteReader *reader, guint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int32_be (GstByteReader *reader, gint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_uint64_le (GstByteReader *reader, guint64 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int64_le (GstByteReader *reader, gint64 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_uint64_be (GstByteReader *reader, guint64 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_int64_be (GstByteReader *reader, gint64 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint8 (const GstByteReader *reader, guint8 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int8 (const GstByteReader *reader, gint8 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint16_le (const GstByteReader *reader, guint16 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int16_le (const GstByteReader *reader, gint16 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint16_be (const GstByteReader *reader, guint16 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int16_be (const GstByteReader *reader, gint16 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint24_le (const GstByteReader *reader, guint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int24_le (const GstByteReader *reader, gint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint24_be (const GstByteReader *reader, guint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int24_be (const GstByteReader *reader, gint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint32_le (const GstByteReader *reader, guint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int32_le (const GstByteReader *reader, gint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint32_be (const GstByteReader *reader, guint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int32_be (const GstByteReader *reader, gint32 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint64_le (const GstByteReader *reader, guint64 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int64_le (const GstByteReader *reader, gint64 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_uint64_be (const GstByteReader *reader, guint64 *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_int64_be (const GstByteReader *reader, gint64 *val); + +GST_BASE_API +gboolean gst_byte_reader_get_float32_le (GstByteReader *reader, gfloat *val); + +GST_BASE_API +gboolean gst_byte_reader_get_float32_be (GstByteReader *reader, gfloat *val); + +GST_BASE_API +gboolean gst_byte_reader_get_float64_le (GstByteReader *reader, gdouble *val); + +GST_BASE_API +gboolean gst_byte_reader_get_float64_be (GstByteReader *reader, gdouble *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_float32_le (const GstByteReader *reader, gfloat *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_float32_be (const GstByteReader *reader, gfloat *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_float64_le (const GstByteReader *reader, gdouble *val); + +GST_BASE_API +gboolean gst_byte_reader_peek_float64_be (const GstByteReader *reader, gdouble *val); + +GST_BASE_API +gboolean gst_byte_reader_dup_data (GstByteReader * reader, guint size, guint8 ** val); + +GST_BASE_API +gboolean gst_byte_reader_get_data (GstByteReader * reader, guint size, const guint8 ** val); + +GST_BASE_API +gboolean gst_byte_reader_peek_data (const GstByteReader * reader, guint size, const guint8 ** val); #define gst_byte_reader_dup_string(reader,str) \ gst_byte_reader_dup_string_utf8(reader,str) -gboolean gst_byte_reader_dup_string_utf8 (GstByteReader * reader, gchar ** str); -gboolean gst_byte_reader_dup_string_utf16 (GstByteReader * reader, guint16 ** str); -gboolean gst_byte_reader_dup_string_utf32 (GstByteReader * reader, guint32 ** str); +GST_BASE_API +gboolean gst_byte_reader_dup_string_utf8 (GstByteReader * reader, gchar ** str); + +GST_BASE_API +gboolean gst_byte_reader_dup_string_utf16 (GstByteReader * reader, guint16 ** str); + +GST_BASE_API +gboolean gst_byte_reader_dup_string_utf32 (GstByteReader * reader, guint32 ** str); #define gst_byte_reader_skip_string(reader) \ gst_byte_reader_skip_string_utf8(reader) -gboolean gst_byte_reader_skip_string_utf8 (GstByteReader * reader); -gboolean gst_byte_reader_skip_string_utf16 (GstByteReader * reader); -gboolean gst_byte_reader_skip_string_utf32 (GstByteReader * reader); +GST_BASE_API +gboolean gst_byte_reader_skip_string_utf8 (GstByteReader * reader); + +GST_BASE_API +gboolean gst_byte_reader_skip_string_utf16 (GstByteReader * reader); + +GST_BASE_API +gboolean gst_byte_reader_skip_string_utf32 (GstByteReader * reader); #define gst_byte_reader_get_string(reader,str) \ gst_byte_reader_get_string_utf8(reader,str) @@ -132,14 +251,25 @@ gboolean gst_byte_reader_skip_string_utf32 (GstByteReader * reader); #define gst_byte_reader_peek_string(reader,str) \ gst_byte_reader_peek_string_utf8(reader,str) -gboolean gst_byte_reader_get_string_utf8 (GstByteReader * reader, const gchar ** str); -gboolean gst_byte_reader_peek_string_utf8 (const GstByteReader * reader, const gchar ** str); - -guint gst_byte_reader_masked_scan_uint32 (const GstByteReader * reader, - guint32 mask, - guint32 pattern, - guint offset, - guint size); +GST_BASE_API +gboolean gst_byte_reader_get_string_utf8 (GstByteReader * reader, const gchar ** str); + +GST_BASE_API +gboolean gst_byte_reader_peek_string_utf8 (const GstByteReader * reader, const gchar ** str); + +GST_BASE_API +guint gst_byte_reader_masked_scan_uint32 (const GstByteReader * reader, + guint32 mask, + guint32 pattern, + guint offset, + guint size); +GST_BASE_API +guint gst_byte_reader_masked_scan_uint32_peek (const GstByteReader * reader, + guint32 mask, + guint32 pattern, + guint offset, + guint size, + guint32 * value); /** * GST_BYTE_READER_INIT: @@ -150,8 +280,6 @@ guint gst_byte_reader_masked_scan_uint32 (const GstByteReader * reader, * used. This macro can used be to initialize a variable, but it cannot * be assigned to a variable. In that case you have to use * gst_byte_reader_init(). - * - * Since: 0.10.22 */ #define GST_BYTE_READER_INIT(data, size) {data, size, 0} @@ -334,6 +462,9 @@ __GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gdouble,float64_be) #ifndef GST_BYTE_READER_DISABLE_INLINES +#define gst_byte_reader_init(reader,data,size) \ + _gst_byte_reader_init_inline(reader,data,size) + #define gst_byte_reader_get_remaining(reader) \ _gst_byte_reader_get_remaining_inline(reader) @@ -437,13 +568,49 @@ __GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gdouble,float64_be) #endif /* GST_BYTE_READER_DISABLE_INLINES */ +static inline void +_gst_byte_reader_init_inline (GstByteReader * reader, const guint8 * data, guint size) +{ + g_return_if_fail (reader != NULL); + + reader->data = data; + reader->size = size; + reader->byte = 0; +} + +static inline gboolean +_gst_byte_reader_peek_sub_reader_inline (GstByteReader * reader, + GstByteReader * sub_reader, guint size) +{ + g_return_val_if_fail (reader != NULL, FALSE); + g_return_val_if_fail (sub_reader != NULL, FALSE); + + if (_gst_byte_reader_get_remaining_unchecked (reader) < size) + return FALSE; + + sub_reader->data = reader->data + reader->byte; + sub_reader->byte = 0; + sub_reader->size = size; + return TRUE; +} + +static inline gboolean +_gst_byte_reader_get_sub_reader_inline (GstByteReader * reader, + GstByteReader * sub_reader, guint size) +{ + if (!_gst_byte_reader_peek_sub_reader_inline (reader, sub_reader, size)) + return FALSE; + gst_byte_reader_skip_unchecked (reader, size); + return TRUE; +} + static inline gboolean _gst_byte_reader_dup_data_inline (GstByteReader * reader, guint size, guint8 ** val) { g_return_val_if_fail (reader != NULL, FALSE); g_return_val_if_fail (val != NULL, FALSE); - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) + if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_unchecked (reader) < size)) return FALSE; *val = gst_byte_reader_dup_data_unchecked (reader, size); @@ -456,7 +623,7 @@ _gst_byte_reader_get_data_inline (GstByteReader * reader, guint size, const guin g_return_val_if_fail (reader != NULL, FALSE); g_return_val_if_fail (val != NULL, FALSE); - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) + if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_unchecked (reader) < size)) return FALSE; *val = gst_byte_reader_get_data_unchecked (reader, size); @@ -469,7 +636,7 @@ _gst_byte_reader_peek_data_inline (const GstByteReader * reader, guint size, con g_return_val_if_fail (reader != NULL, FALSE); g_return_val_if_fail (val != NULL, FALSE); - if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size)) + if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_unchecked (reader) < size)) return FALSE; *val = gst_byte_reader_peek_data_unchecked (reader);