/* GStreamer * Copyright (C) <2003> David A. Schleef * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * 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. */ #ifndef __GST_VALUE_H__ #define __GST_VALUE_H__ #include #include G_BEGIN_DECLS #define GST_MAKE_FOURCC(a,b,c,d) (guint32)((a)|(b)<<8|(c)<<16|(d)<<24) #define GST_STR_FOURCC(f) (guint32)(((f)[0])|((f)[1]<<8)|((f)[2]<<16)|((f)[3]<<24)) #define GST_FOURCC_FORMAT "%c%c%c%c" #define GST_FOURCC_ARGS(fourcc) \ ((gchar) ((fourcc) &0xff)), \ ((gchar) (((fourcc)>>8 )&0xff)), \ ((gchar) (((fourcc)>>16)&0xff)), \ ((gchar) (((fourcc)>>24)&0xff)) #define GST_VALUE_HOLDS_FOURCC(x) (G_VALUE_HOLDS(x, gst_type_fourcc)) #define GST_VALUE_HOLDS_INT_RANGE(x) (G_VALUE_HOLDS(x, gst_type_int_range)) #define GST_VALUE_HOLDS_DOUBLE_RANGE(x) (G_VALUE_HOLDS(x, gst_type_double_range)) #define GST_VALUE_HOLDS_LIST(x) (G_VALUE_HOLDS(x, gst_type_list)) #define GST_VALUE_HOLDS_FIXED_LIST(x) (G_VALUE_HOLDS(x, gst_type_fixed_list)) #define GST_VALUE_HOLDS_CAPS(x) (G_VALUE_HOLDS(x, GST_TYPE_CAPS)) #define GST_VALUE_HOLDS_FRACTION(x) (G_VALUE_HOLDS(x, gst_type_fraction)) #define GST_TYPE_FOURCC gst_type_fourcc #define GST_TYPE_INT_RANGE gst_type_int_range #define GST_TYPE_DOUBLE_RANGE gst_type_double_range #define GST_TYPE_LIST gst_type_list #define GST_TYPE_FIXED_LIST gst_type_fixed_list #define GST_TYPE_FRACTION gst_type_fraction #define GST_VALUE_LESS_THAN (-1) #define GST_VALUE_EQUAL 0 #define GST_VALUE_GREATER_THAN 1 #define GST_VALUE_UNORDERED 2 typedef int (* GstValueCompareFunc) (const GValue *value1, const GValue *value2); typedef char * (* GstValueSerializeFunc) (const GValue *value1); typedef gboolean (* GstValueDeserializeFunc) (GValue *dest, const char *s); typedef int (* GstValueUnionFunc) (GValue *dest, const GValue *value1, const GValue *value2); typedef int (* GstValueIntersectFunc) (GValue *dest, const GValue *value1, const GValue *value2); typedef int (* GstValueSubtractFunc) (GValue *dest, const GValue *minuend, const GValue *subtrahend); typedef struct _GstValueTable GstValueTable; struct _GstValueTable { GType type; GstValueCompareFunc compare; GstValueSerializeFunc serialize; GstValueDeserializeFunc deserialize; /*< private >*/ void *_gst_reserved [GST_PADDING]; }; GST_EXPORT GType gst_type_fourcc; GST_EXPORT GType gst_type_int_range; GST_EXPORT GType gst_type_double_range; GST_EXPORT GType gst_type_list; GST_EXPORT GType gst_type_fixed_list; GST_EXPORT GType gst_type_fraction; void gst_value_register (const GstValueTable *table); void gst_value_init_and_copy (GValue *dest, const GValue *src); gchar * gst_value_serialize (const GValue *value); gboolean gst_value_deserialize (GValue *dest, const gchar *src); /* list */ void gst_value_list_append_value (GValue *value, const GValue *append_value); void gst_value_list_prepend_value (GValue *value, const GValue *prepend_value); void gst_value_list_concat (GValue *dest, const GValue *value1, const GValue *value2); guint gst_value_list_get_size (const GValue *value); G_CONST_RETURN GValue * gst_value_list_get_value (const GValue *value, guint index); /* fourcc */ void gst_value_set_fourcc (GValue *value, guint32 fourcc); guint32 gst_value_get_fourcc (const GValue *value); /* int range */ void gst_value_set_int_range (GValue *value, int start, int end); int gst_value_get_int_range_min (const GValue *value); int gst_value_get_int_range_max (const GValue *value); /* double range */ void gst_value_set_double_range (GValue *value, double start, double end); double gst_value_get_double_range_min (const GValue *value); double gst_value_get_double_range_max (const GValue *value); /* caps */ G_CONST_RETURN GstCaps * gst_value_get_caps (const GValue *value); void gst_value_set_caps (GValue *value, const GstCaps *caps); /* fraction */ void gst_value_set_fraction (GValue *value, int numerator, int denominator); int gst_value_get_fraction_numerator (const GValue *value); int gst_value_get_fraction_denominator(const GValue *value); gboolean gst_value_fraction_multiply (GValue *product, const GValue *factor1, const GValue *factor2); /* compare */ int gst_value_compare (const GValue *value1, const GValue *value2); gboolean gst_value_can_compare (const GValue *value1, const GValue *value2); /* union */ gboolean gst_value_union (GValue *dest, const GValue *value1, const GValue *value2); gboolean gst_value_can_union (const GValue *value1, const GValue *value2); void gst_value_register_union_func (GType type1, GType type2, GstValueUnionFunc func); /* intersection */ gboolean gst_value_intersect (GValue *dest, const GValue *value1, const GValue *value2); gboolean gst_value_can_intersect (const GValue *value1, const GValue *value2); void gst_value_register_intersect_func (GType type1, GType type2, GstValueIntersectFunc func); /* subtraction */ gboolean gst_value_subtract (GValue *dest, const GValue *minuend, const GValue *subtrahend); gboolean gst_value_can_subtract (const GValue *minuend, const GValue *subtrahend); void gst_value_register_subtract_func (GType minuend_type, GType subtrahend_type, GstValueSubtractFunc func); /* fixation */ gboolean gst_type_is_fixed (GType type); gboolean gst_value_is_fixed (const GValue *value); /* private */ void _gst_value_initialize (void); G_END_DECLS #endif