2003-11-11 19:14:14 +00:00
|
|
|
/* GStreamer
|
2004-03-12 18:25:07 +00:00
|
|
|
* Copyright (C) 2003 David A. Schleef <ds@schleef.org>
|
2003-11-11 19:14:14 +00:00
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2003-12-22 01:39:35 +00:00
|
|
|
#ifndef __GST_CAPS_H__
|
|
|
|
#define __GST_CAPS_H__
|
2003-11-11 19:14:14 +00:00
|
|
|
|
|
|
|
#include <gst/gstconfig.h>
|
|
|
|
#include <gst/gststructure.h>
|
|
|
|
|
|
|
|
G_BEGIN_DECLS
|
2004-03-15 14:43:35 +00:00
|
|
|
|
gst/gstcaps.c: Patch from Tim-Philipp Müller to fix GST_CAPS() and GST_IS_CAPS(). (bug #141304)
Original commit message from CVS:
* gst/gstcaps.c: (gst_caps_copy), (gst_caps_free),
(gst_caps_append), (gst_caps_append_structure),
(gst_caps_get_size), (gst_caps_get_structure), (gst_caps_copy_1),
(gst_caps_set_simple), (gst_caps_set_simple_valist),
(gst_caps_is_any), (gst_caps_is_empty), (gst_caps_is_chained),
(gst_caps_is_fixed), (gst_caps_is_always_compatible),
(gst_caps_intersect), (gst_caps_normalize),
(gst_caps_transform_to_string): Patch from Tim-Philipp Müller
to fix GST_CAPS() and GST_IS_CAPS(). (bug #141304)
* gst/gstcaps.h: use GST_IS_CAPS().
2004-04-28 20:19:46 +00:00
|
|
|
#define GST_TYPE_CAPS (gst_caps_get_type())
|
2004-09-26 17:35:08 +00:00
|
|
|
#define GST_CAPS(object) ((GstCaps*)object)
|
gst/gstcaps.c: Patch from Tim-Philipp Müller to fix GST_CAPS() and GST_IS_CAPS(). (bug #141304)
Original commit message from CVS:
* gst/gstcaps.c: (gst_caps_copy), (gst_caps_free),
(gst_caps_append), (gst_caps_append_structure),
(gst_caps_get_size), (gst_caps_get_structure), (gst_caps_copy_1),
(gst_caps_set_simple), (gst_caps_set_simple_valist),
(gst_caps_is_any), (gst_caps_is_empty), (gst_caps_is_chained),
(gst_caps_is_fixed), (gst_caps_is_always_compatible),
(gst_caps_intersect), (gst_caps_normalize),
(gst_caps_transform_to_string): Patch from Tim-Philipp Müller
to fix GST_CAPS() and GST_IS_CAPS(). (bug #141304)
* gst/gstcaps.h: use GST_IS_CAPS().
2004-04-28 20:19:46 +00:00
|
|
|
#define GST_IS_CAPS(object) ((object) && (GST_CAPS(object)->type == GST_TYPE_CAPS))
|
2004-03-15 14:43:35 +00:00
|
|
|
|
2004-03-12 19:32:26 +00:00
|
|
|
#define GST_CAPS_FLAGS_ANY (1 << 0)
|
2004-03-15 14:43:35 +00:00
|
|
|
|
2004-03-12 18:25:07 +00:00
|
|
|
#define GST_CAPS_ANY gst_caps_new_any()
|
|
|
|
#define GST_CAPS_NONE gst_caps_new_empty()
|
2004-03-15 14:43:35 +00:00
|
|
|
|
2004-03-12 18:25:07 +00:00
|
|
|
#define GST_STATIC_CAPS_ANY GST_STATIC_CAPS("ANY")
|
|
|
|
#define GST_STATIC_CAPS_NONE GST_STATIC_CAPS("NONE")
|
2004-03-15 14:43:35 +00:00
|
|
|
|
2004-03-12 18:25:07 +00:00
|
|
|
#define GST_CAPS_IS_SIMPLE(caps) (gst_caps_get_size(caps) == 1)
|
2004-03-15 14:43:35 +00:00
|
|
|
|
2004-03-12 18:25:07 +00:00
|
|
|
#ifndef GST_DISABLE_DEPRECATED
|
|
|
|
#define GST_DEBUG_CAPS(string, caps) \
|
|
|
|
GST_DEBUG ( string "%s: " GST_PTR_FORMAT, caps)
|
|
|
|
#endif
|
2004-03-15 14:43:35 +00:00
|
|
|
|
2004-03-12 18:25:07 +00:00
|
|
|
#define GST_STATIC_CAPS(string) \
|
|
|
|
{ \
|
|
|
|
/* caps */ { 0 }, \
|
|
|
|
/* string */ string, \
|
|
|
|
}
|
2004-03-15 14:43:35 +00:00
|
|
|
|
2003-12-22 01:39:35 +00:00
|
|
|
typedef struct _GstCaps GstCaps;
|
|
|
|
typedef struct _GstStaticCaps GstStaticCaps;
|
2003-11-11 19:14:14 +00:00
|
|
|
|
2005-03-07 18:27:42 +00:00
|
|
|
/* refcount */
|
|
|
|
#define GST_CAPS_REFCOUNT(caps) ((GST_CAPS(caps))->refcount)
|
2005-04-24 22:49:45 +00:00
|
|
|
#define GST_CAPS_REFCOUNT_VALUE(caps) (g_atomic_int_get (&(GST_CAPS(caps))->refcount))
|
2005-03-07 18:27:42 +00:00
|
|
|
|
2004-03-15 14:43:35 +00:00
|
|
|
struct _GstCaps {
|
2003-11-11 19:14:14 +00:00
|
|
|
GType type;
|
|
|
|
|
2005-03-07 18:27:42 +00:00
|
|
|
/*< public >*/ /* with COW */
|
|
|
|
/* refcounting */
|
2005-04-24 22:49:45 +00:00
|
|
|
gint refcount;
|
2005-03-07 18:27:42 +00:00
|
|
|
|
2003-11-11 19:14:14 +00:00
|
|
|
guint16 flags;
|
|
|
|
GPtrArray *structs;
|
2004-03-15 22:42:34 +00:00
|
|
|
|
2005-03-07 18:27:42 +00:00
|
|
|
/*< private >*/
|
2004-09-26 17:35:08 +00:00
|
|
|
gpointer _gst_reserved[GST_PADDING];
|
2003-11-11 19:14:14 +00:00
|
|
|
};
|
|
|
|
|
2004-03-15 14:43:35 +00:00
|
|
|
struct _GstStaticCaps {
|
2005-03-07 18:27:42 +00:00
|
|
|
/*< public >*/
|
2003-12-22 01:39:35 +00:00
|
|
|
GstCaps caps;
|
2003-11-11 19:14:14 +00:00
|
|
|
const char *string;
|
2005-03-07 18:27:42 +00:00
|
|
|
|
|
|
|
/*< private >*/
|
2004-09-26 17:35:08 +00:00
|
|
|
gpointer _gst_reserved[GST_PADDING];
|
2003-11-11 19:14:14 +00:00
|
|
|
};
|
|
|
|
|
2005-03-21 17:34:02 +00:00
|
|
|
GType gst_caps_get_type (void);
|
2004-03-15 14:43:35 +00:00
|
|
|
GstCaps * gst_caps_new_empty (void);
|
|
|
|
GstCaps * gst_caps_new_any (void);
|
|
|
|
GstCaps * gst_caps_new_simple (const char *media_type,
|
|
|
|
const char *fieldname,
|
|
|
|
...);
|
|
|
|
GstCaps * gst_caps_new_full (GstStructure *struct1,
|
|
|
|
...);
|
|
|
|
GstCaps * gst_caps_new_full_valist (GstStructure *structure,
|
|
|
|
va_list var_args);
|
2005-03-07 18:27:42 +00:00
|
|
|
|
|
|
|
/* reference counting */
|
2005-08-23 11:38:28 +00:00
|
|
|
GstCaps * gst_caps_ref (GstCaps* caps);
|
2005-03-07 18:27:42 +00:00
|
|
|
GstCaps * gst_caps_copy (const GstCaps * caps);
|
2005-08-23 11:38:28 +00:00
|
|
|
GstCaps * gst_caps_make_writable (GstCaps *caps);
|
|
|
|
void gst_caps_unref (GstCaps* caps);
|
2005-03-07 18:27:42 +00:00
|
|
|
|
tests/network-clock.scm: Commentary update.
Original commit message from CVS:
2005-07-01 Andy Wingo <wingo@pobox.com>
* tests/network-clock.scm: Commentary update.
* gst/elements/gstidentity.c (PROP_DUPLICATE): Gone daddy gone.
Didn't really make sense, not implementable with basetransform,
etc.
(gst_identity_transform): Unref inbuf via make_writable. Feeble
attempt at implementing the sync property, needs an unlock method.
* gst/base/gstbasetransform.c (gst_base_transform_transform_caps):
New func, by default returns the same caps (the identity
transformation).
(gst_base_transform_getcaps): Uses transform_caps to return
something sensible.
(gst_base_transform_setcaps): Complicated logic to get caps on
both pads, even if they are different, and to call set_caps once
for every time both pads get their caps set.
(gst_base_transform_handle_buffer): Give the ref to the transform
function. Allows in-place modification of the buffer.
* gst/base/gstbasetransform.h (transform_caps): New class method.
Given caps on one side, what can I do on the other.
(set_caps): Take two caps, one for each side of the element.
* gst/gstpad.h:
* gst/gstpad.c (gst_pad_fixate_caps): Change prototype to modify
caps in place. This is safe because we can check the mutability of
the caps, and a good idea because fixate functions are just called
as a matter of last resort. (Not actually implemented.)
(gst_pad_set_caps): If the caps we're setting is actually the same
as the existing pad caps, just update the pointer without calling
setcaps. Assert that caps is either NULL or fixed, as per the
docs.
* gst/gstghostpad.c: Update for fixate changes.
2005-07-01 16:46:59 +00:00
|
|
|
GstCaps * gst_static_caps_get (GstStaticCaps *static_caps);
|
2003-11-11 19:14:14 +00:00
|
|
|
|
|
|
|
/* manipulation */
|
2004-03-15 14:43:35 +00:00
|
|
|
void gst_caps_append (GstCaps *caps1,
|
|
|
|
GstCaps *caps2);
|
2004-03-30 07:36:19 +00:00
|
|
|
void gst_caps_append_structure (GstCaps *caps,
|
2004-03-15 14:43:35 +00:00
|
|
|
GstStructure *structure);
|
|
|
|
int gst_caps_get_size (const GstCaps *caps);
|
|
|
|
GstStructure * gst_caps_get_structure (const GstCaps *caps,
|
|
|
|
int index);
|
2005-08-23 11:38:28 +00:00
|
|
|
GstCaps * gst_caps_copy_nth (const GstCaps * caps, gint nth);
|
2005-07-15 11:04:18 +00:00
|
|
|
void gst_caps_truncate (GstCaps * caps);
|
2004-03-15 14:43:35 +00:00
|
|
|
void gst_caps_set_simple (GstCaps *caps,
|
|
|
|
char *field, ...);
|
|
|
|
void gst_caps_set_simple_valist (GstCaps *caps,
|
|
|
|
char *field,
|
|
|
|
va_list varargs);
|
2003-11-11 19:14:14 +00:00
|
|
|
|
|
|
|
/* tests */
|
2004-03-15 14:43:35 +00:00
|
|
|
gboolean gst_caps_is_any (const GstCaps *caps);
|
|
|
|
gboolean gst_caps_is_empty (const GstCaps *caps);
|
gst/gstcaps.c: check for ANY caps before appending/unioning
Original commit message from CVS:
* gst/gstcaps.c: (gst_caps_append), (gst_caps_union):
check for ANY caps before appending/unioning
* gst/gstcaps.c: (gst_caps_is_subset),
(gst_caps_is_equal), (gst_caps_structure_subtract_field),
(gst_caps_structure_subtract), (gst_caps_subtract):
* gst/gstcaps.h:
add gst_caps_is_equal, gst_caps_is_subset and gst_caps_subtract to
the API. deprecate gst_caps_is_equal_fixed
* gst/gstpad.c: (gst_pad_try_set_caps):
* gst/gstqueue.c: (gst_queue_link):
s/gst_caps_is_equal_fixed/gst_caps_is_equal/
* gst/gststructure.c: (gst_structure_get_name_id):
* gst/gststructure.h:
add function gst_structure_get_name_id
* gst/gstvalue.c: (gst_value_subtract_int_int_range),
(gst_value_create_new_range), (gst_value_subtract_int_range_int),
(gst_value_subtract_int_range_int_range),
(gst_value_subtract_double_double_range),
(gst_value_subtract_double_range_double),
(gst_value_subtract_double_range_double_range),
(gst_value_subtract_from_list), (gst_value_subtract_list),
(gst_value_can_intersect), (gst_value_subtract),
(gst_value_can_subtract), (gst_value_register_subtract_func),
(_gst_value_initialize):
* gst/gstvalue.h:
add support for subtracting values from each other. Note that
subtracting means subtracting as in set theory. Required for caps
stuff above.
* testsuite/caps/.cvsignore:
* testsuite/caps/Makefile.am:
* testsuite/caps/erathostenes.c: (erathostenes), (main):
* testsuite/caps/sets.c: (check_caps), (main):
* testsuite/caps/subtract.c: (check_caps), (main):
add tests for subtraction and equality code.
2004-04-21 03:25:13 +00:00
|
|
|
gboolean gst_caps_is_fixed (const GstCaps *caps);
|
2004-03-15 14:43:35 +00:00
|
|
|
gboolean gst_caps_is_always_compatible (const GstCaps *caps1,
|
2005-08-23 11:38:28 +00:00
|
|
|
const GstCaps *caps2);
|
gst/gstcaps.c: check for ANY caps before appending/unioning
Original commit message from CVS:
* gst/gstcaps.c: (gst_caps_append), (gst_caps_union):
check for ANY caps before appending/unioning
* gst/gstcaps.c: (gst_caps_is_subset),
(gst_caps_is_equal), (gst_caps_structure_subtract_field),
(gst_caps_structure_subtract), (gst_caps_subtract):
* gst/gstcaps.h:
add gst_caps_is_equal, gst_caps_is_subset and gst_caps_subtract to
the API. deprecate gst_caps_is_equal_fixed
* gst/gstpad.c: (gst_pad_try_set_caps):
* gst/gstqueue.c: (gst_queue_link):
s/gst_caps_is_equal_fixed/gst_caps_is_equal/
* gst/gststructure.c: (gst_structure_get_name_id):
* gst/gststructure.h:
add function gst_structure_get_name_id
* gst/gstvalue.c: (gst_value_subtract_int_int_range),
(gst_value_create_new_range), (gst_value_subtract_int_range_int),
(gst_value_subtract_int_range_int_range),
(gst_value_subtract_double_double_range),
(gst_value_subtract_double_range_double),
(gst_value_subtract_double_range_double_range),
(gst_value_subtract_from_list), (gst_value_subtract_list),
(gst_value_can_intersect), (gst_value_subtract),
(gst_value_can_subtract), (gst_value_register_subtract_func),
(_gst_value_initialize):
* gst/gstvalue.h:
add support for subtracting values from each other. Note that
subtracting means subtracting as in set theory. Required for caps
stuff above.
* testsuite/caps/.cvsignore:
* testsuite/caps/Makefile.am:
* testsuite/caps/erathostenes.c: (erathostenes), (main):
* testsuite/caps/sets.c: (check_caps), (main):
* testsuite/caps/subtract.c: (check_caps), (main):
add tests for subtraction and equality code.
2004-04-21 03:25:13 +00:00
|
|
|
gboolean gst_caps_is_subset (const GstCaps *subset,
|
|
|
|
const GstCaps *superset);
|
|
|
|
gboolean gst_caps_is_equal (const GstCaps *caps1,
|
2005-08-23 11:38:28 +00:00
|
|
|
const GstCaps *caps2);
|
2005-08-24 16:09:50 +00:00
|
|
|
gboolean gst_caps_is_equal_fixed (const GstCaps * caps1,
|
|
|
|
const GstCaps * caps2);
|
|
|
|
|
2003-11-11 19:14:14 +00:00
|
|
|
|
|
|
|
/* operations */
|
2004-03-15 14:43:35 +00:00
|
|
|
GstCaps * gst_caps_intersect (const GstCaps *caps1,
|
|
|
|
const GstCaps *caps2);
|
gst/gstcaps.c: check for ANY caps before appending/unioning
Original commit message from CVS:
* gst/gstcaps.c: (gst_caps_append), (gst_caps_union):
check for ANY caps before appending/unioning
* gst/gstcaps.c: (gst_caps_is_subset),
(gst_caps_is_equal), (gst_caps_structure_subtract_field),
(gst_caps_structure_subtract), (gst_caps_subtract):
* gst/gstcaps.h:
add gst_caps_is_equal, gst_caps_is_subset and gst_caps_subtract to
the API. deprecate gst_caps_is_equal_fixed
* gst/gstpad.c: (gst_pad_try_set_caps):
* gst/gstqueue.c: (gst_queue_link):
s/gst_caps_is_equal_fixed/gst_caps_is_equal/
* gst/gststructure.c: (gst_structure_get_name_id):
* gst/gststructure.h:
add function gst_structure_get_name_id
* gst/gstvalue.c: (gst_value_subtract_int_int_range),
(gst_value_create_new_range), (gst_value_subtract_int_range_int),
(gst_value_subtract_int_range_int_range),
(gst_value_subtract_double_double_range),
(gst_value_subtract_double_range_double),
(gst_value_subtract_double_range_double_range),
(gst_value_subtract_from_list), (gst_value_subtract_list),
(gst_value_can_intersect), (gst_value_subtract),
(gst_value_can_subtract), (gst_value_register_subtract_func),
(_gst_value_initialize):
* gst/gstvalue.h:
add support for subtracting values from each other. Note that
subtracting means subtracting as in set theory. Required for caps
stuff above.
* testsuite/caps/.cvsignore:
* testsuite/caps/Makefile.am:
* testsuite/caps/erathostenes.c: (erathostenes), (main):
* testsuite/caps/sets.c: (check_caps), (main):
* testsuite/caps/subtract.c: (check_caps), (main):
add tests for subtraction and equality code.
2004-04-21 03:25:13 +00:00
|
|
|
GstCaps * gst_caps_subtract (const GstCaps *minuend,
|
|
|
|
const GstCaps *subtrahend);
|
2004-03-15 14:43:35 +00:00
|
|
|
GstCaps * gst_caps_union (const GstCaps *caps1,
|
|
|
|
const GstCaps *caps2);
|
|
|
|
GstCaps * gst_caps_normalize (const GstCaps *caps);
|
2004-04-22 23:50:46 +00:00
|
|
|
gboolean gst_caps_do_simplify (GstCaps *caps);
|
2003-11-11 19:14:14 +00:00
|
|
|
|
|
|
|
#ifndef GST_DISABLE_LOADSAVE
|
2004-03-15 14:43:35 +00:00
|
|
|
xmlNodePtr gst_caps_save_thyself (const GstCaps *caps,
|
|
|
|
xmlNodePtr parent);
|
|
|
|
GstCaps * gst_caps_load_thyself (xmlNodePtr parent);
|
2003-11-11 19:14:14 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* utility */
|
2004-03-15 14:43:35 +00:00
|
|
|
void gst_caps_replace (GstCaps **caps,
|
|
|
|
GstCaps *newcaps);
|
|
|
|
gchar * gst_caps_to_string (const GstCaps *caps);
|
|
|
|
GstCaps * gst_caps_from_string (const gchar *string);
|
|
|
|
|
2004-03-13 15:27:01 +00:00
|
|
|
G_END_DECLS
|
2004-03-15 14:43:35 +00:00
|
|
|
|
2003-12-22 01:39:35 +00:00
|
|
|
#endif /* __GST_CAPS_H__ */
|