#ifndef __GST_PARSE_TYPES_H__ #define __GST_PARSE_TYPES_H__ #include #include "../gstelement.h" #include "../gstparse.h" typedef struct { GstElement *element; gchar *name; GSList *pads; } reference_t; typedef struct { reference_t src; reference_t sink; GstCaps *caps; gboolean all_pads; } link_t; typedef struct { GSList *elements; reference_t first; reference_t last; } chain_t; typedef struct _graph_t graph_t; struct _graph_t { chain_t *chain; /* links are supposed to be done now */ GSList *links; GError **error; GstParseContext *ctx; /* may be NULL */ GstParseFlags flags; }; /* * Memory checking. Should probably be done with gsttrace stuff, but that * doesn't really work. * This is not safe from reentrance issues, but that doesn't matter as long as * we lock a mutex before parsing anyway. * * FIXME: Disable this for now for the above reasons */ #if 0 #ifdef GST_DEBUG_ENABLED # define __GST_PARSE_TRACE #endif #endif #ifdef __GST_PARSE_TRACE G_GNUC_INTERNAL gchar *__gst_parse_strdup (gchar *org); G_GNUC_INTERNAL void __gst_parse_strfree (gchar *str); G_GNUC_INTERNAL link_t *__gst_parse_link_new (void); G_GNUC_INTERNAL void __gst_parse_link_free (link_t *data); G_GNUC_INTERNAL chain_t *__gst_parse_chain_new (void); G_GNUC_INTERNAL void __gst_parse_chain_free (chain_t *data); # define gst_parse_strdup __gst_parse_strdup # define gst_parse_strfree __gst_parse_strfree # define gst_parse_link_new __gst_parse_link_new # define gst_parse_link_free __gst_parse_link_free # define gst_parse_chain_new __gst_parse_chain_new # define gst_parse_chain_free __gst_parse_chain_free #else /* __GST_PARSE_TRACE */ # define gst_parse_strdup g_strdup # define gst_parse_strfree g_free # define gst_parse_link_new() g_slice_new0 (link_t) # define gst_parse_link_free(l) g_slice_free (link_t, l) # define gst_parse_chain_new() g_slice_new0 (chain_t) # define gst_parse_chain_free(c) g_slice_free (chain_t, c) #endif /* __GST_PARSE_TRACE */ static inline void gst_parse_unescape (gchar *str) { gchar *walk; gboolean in_quotes; g_return_if_fail (str != NULL); walk = str; in_quotes = FALSE; GST_DEBUG ("unescaping %s", str); while (*walk) { if (*walk == '\\' && !in_quotes) { walk++; /* make sure we don't read beyond the end of the string */ if (*walk == '\0') break; } else if (*walk == '"' && (!in_quotes || (in_quotes && (*(walk - 1) != '\\')))) { /* don't unescape inside quotes and don't switch * state with escaped quoted inside quotes */ in_quotes = !in_quotes; } *str = *walk; str++; walk++; } *str = '\0'; } G_GNUC_INTERNAL GstElement *priv_gst_parse_launch (const gchar * str, GError ** err, GstParseContext * ctx, GstParseFlags flags); #endif /* __GST_PARSE_TYPES_H__ */