COTHREAD_STACKSIZE #define COTHREAD_STACKSIZE 8192 COTHREAD_MAXTHREADS #define COTHREAD_MAXTHREADS 16 STACK_SIZE #define STACK_SIZE 0x200000 CURRENT_STACK_FRAME #define CURRENT_STACK_FRAME ({ char __csf; &__csf; }) cothread_state cothread_context cothread_func int int argc,char **argv COTHREAD_STARTED #define COTHREAD_STARTED 0x01 cothread_state struct cothread_state { cothread_context *ctx; int threadnum; cothread_func func; int argc; char **argv; int flags; int *sp; int *pc; jmp_buf jmp; }; cothread_context struct cothread_context { cothread_state *threads[COTHREAD_MAXTHREADS]; int nthreads; int current; }; cothread_init cothread_context * cothread_create cothread_state * cothread_context *ctx cothread_setfunc void cothread_state *thread,cothread_func func,int argc,char **argv cothread_switch void cothread_state *thread cothread_main cothread_state * cothread_context *ctx gst_init void int *argc,char **argv[] DEBUG #define DEBUG(format,args...) g_print("DEBUG: " format, ##args) DEBUG #define DEBUG(format,args...) GST_TYPE_BIN #define GST_TYPE_BIN \ (gst_bin_get_type()) GST_BIN #define GST_BIN(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_BIN,GstBin)) GST_BIN_CLASS #define GST_BIN_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_BIN,GstBinClass)) GST_IS_BIN #define GST_IS_BIN(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_BIN)) GST_IS_BIN_CLASS #define GST_IS_BIN_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_BIN))) GstBin GstBinClass GstBin struct GstBin { GstElement element; gint numchildren; GList *children; GList *entries; gint numentries; cothread_context *threadcontext; }; GstBinClass struct GstBinClass { GstElementClass parent_class; void (*object_added) (GstObject *object,GstObject *child); /* change the state of elements of the given type */ gboolean (*change_state_type) (GstBin *bin, GstElementState state, GtkType type); /* create a plan for the execution of the bin */ void (*create_plan) (GstBin *bin); /* run a full iteration of operation */ void (*iterate) (GstBin *bin); }; gst_bin_get_type GtkType void gst_bin_new GstElement * gchar *name gst_bin_add void GstBin *bin,GstElement *element gst_bin_remove void GstBin *bin,GstElement *element gst_bin_get_by_name GstElement * GstBin *bin,gchar *name gst_bin_get_list GList * GstBin *bin gst_bin_set_state_type gboolean GstBin *bin,GstElementState state,GtkType type gst_bin_iterate void GstBin *bin gst_bin_create_plan void GstBin *bin GST_BUFFER #define GST_BUFFER(buf) \ ((GstBuffer *)(buf)) GST_BUFFER_FLAGS #define GST_BUFFER_FLAGS(buf) \ (GST_BUFFER(buf)->flags) GST_BUFFER_FLAG_IS_SET #define GST_BUFFER_FLAG_IS_SET(buf,flag) \ (GST_BUFFER_FLAGS(buf) & (flag)) GST_BUFFER_FLAG_SET #define GST_BUFFER_FLAG_SET(buf,flag) \ G_STMT_START{ (GST_BUFFER_FLAGS(buf) |= (flag)); }G_STMT_END GST_BUFFER_FLAG_UNSET #define GST_BUFFER_FLAG_UNSET(buf,flag) \ G_STMT_START{ (GST_BUFFER_FLAGS(buf) &= ~(flag)); }G_STMT_END GST_BUFFER_TYPE #define GST_BUFFER_TYPE(buf) (GST_BUFFER(buf)->type) GST_BUFFER_DATA #define GST_BUFFER_DATA(buf) (GST_BUFFER(buf)->data) GST_BUFFER_SIZE #define GST_BUFFER_SIZE(buf) (GST_BUFFER(buf)->size) GST_BUFFER_OFFSET #define GST_BUFFER_OFFSET(buf) (GST_BUFFER(buf)->offset) GST_BUFFER_MAXSIZE #define GST_BUFFER_MAXSIZE(buf) (GST_BUFFER(buf)->maxsize) GST_BUFFER_TIMESTAMP #define GST_BUFFER_TIMESTAMP(buf) (GST_BUFFER(buf)->timestamp) GST_BUFFER_LOCK #define GST_BUFFER_LOCK(buf) (g_mutex_lock(GST_BUFFER(buf)->lock)) GST_BUFFER_TRYLOCK #define GST_BUFFER_TRYLOCK(buf) (g_mutex_trylock(GST_BUFFER(buf)->lock)) GST_BUFFER_UNLOCK #define GST_BUFFER_UNLOCK(buf) (g_mutex_unlock(GST_BUFFER(buf)->lock)) GstBufferFlags typedef enum { GST_BUFFER_READONLY = (1 << 0), GST_BUFFER_EOS = (1 << 1), GST_BUFFER_ORIGINAL = (1 << 2), GST_BUFFER_DONTFREE = (1 << 3), } GstBufferFlags; GstBuffer GstBuffer struct GstBuffer { /* locking */ GMutex *lock; /* refcounting */ #ifdef HAVE_ATOMIC_H atomic_t refcount; #else int refcount; #endif /* data type of this buffer */ guint16 type; /* flags */ guint16 flags; /* pointer to data, its size, and offset in original source if known */ guchar *data; guint32 size; guint32 maxsize; guint32 offset; /* timestamp */ guint64 timestamp; /* max age */ guint64 maxage; /* pointer to metadata, is really lame right now */ GSList *metas; /* subbuffer support, who's my parent? */ GstBuffer *parent; }; gst_buffer_new GstBuffer * gst_buffer_create_sub GstBuffer * GstBuffer *parent,guint32 offset,guint32 size gst_buffer_ref void GstBuffer *buffer gst_buffer_ref_by_count void GstBuffer *buffer,int count gst_buffer_unref void GstBuffer *buffer gst_buffer_destroy void GstBuffer *buffer gst_buffer_add_meta void GstBuffer *buffer,GstMeta *meta gst_buffer_get_first_meta GstMeta * GstBuffer *buffer gst_buffer_get_metas GSList * GstBuffer *buffer gst_buffer_remove_meta void GstBuffer *buffer,GstMeta *meta GST_TYPE_CONNECTION #define GST_TYPE_CONNECTION \ (gst_connection_get_type()) GST_CONNECTION #define GST_CONNECTION(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_CONNECTION,GstConnection)) GST_CONNECTION_CLASS #define GST_CONNECTION_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_CONNECTION,GstConnectionClass)) GST_IS_CONNECTION #define GST_IS_CONNECTION(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_CONNECTION)) GST_IS_CONNECTION_CLASS #define GST_IS_CONNECTION_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_CONNECTION))) GstConnection GstConnectionClass GstConnection struct GstConnection { GstElement element; }; GstConnectionClass struct GstConnectionClass { GstElementClass parent_class; /* push function */ void (*push) (GstConnection *connection); }; gst_connection_get_type GtkType void gst_connection_new GstElement * gchar *name gst_connection_push void GstConnection *connection GstElementState typedef enum { GST_STATE_COMPLETE = (1 << 0), GST_STATE_RUNNING = (1 << 1), GST_STATE_DISCOVERY = (1 << 2), GST_STATE_PREROLL = (1 << 3), GST_STATE_PLAYING = (1 << 4), GST_STATE_PAUSED = (1 << 5), GST_STATE_MAX = (1 << 15), } GstElementState; GST_STATE #define GST_STATE(obj) (GST_ELEMENT(obj)->state) GST_STATE_IS_SET #define GST_STATE_IS_SET(obj,flag) (GST_STATE (obj) & (flag)) GST_STATE_SET #define GST_STATE_SET(obj,flag) \ G_STMT_START{ (GST_STATE (obj) |= (flag)); \ gst_info("set '%s' state %d\n",gst_element_get_name(obj),flag); \ }G_STMT_END GST_STATE_UNSET #define GST_STATE_UNSET(obj,flag) \ G_STMT_START{ (GST_STATE (obj) &= ~(flag)); \ gst_info("unset '%s' state %d\n",gst_element_get_name(obj),flag); \ }G_STMT_END GST_TYPE_ELEMENT #define GST_TYPE_ELEMENT \ (gst_element_get_type()) GST_ELEMENT #define GST_ELEMENT(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_ELEMENT,GstElement)) GST_ELEMENT_CLASS #define GST_ELEMENT_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_ELEMENT,GstElementClass)) GST_IS_ELEMENT #define GST_IS_ELEMENT(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_ELEMENT)) GST_IS_ELEMENT_CLASS #define GST_IS_ELEMENT_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT)) GstElement GstElementClass GstElementDetails GstElementFactory GstElementLoopFunction void GstElement *element GstElement struct GstElement { GstObject object; gchar *name; guint16 state; GstElementLoopFunction loopfunc; cothread_state *threadstate; guint16 numpads; GList *pads; GstElement *manager; }; GstElementClass struct GstElementClass { GstObjectClass parent_class; /* the elementfactory that created us */ GstElementFactory *elementfactory; /* signal callbacks */ void (*state_change) (GstElement *element,GstElementState state); void (*new_pad) (GstElement *element,GstPad *pad); void (*new_ghost_pad) (GstElement *element,GstPad *pad); void (*error) (GstElement *element,gchar *error); /* events */ gboolean (*start) (GstElement *element,GstElementState state); gboolean (*stop) (GstElement *element); /* change the element state */ gboolean (*change_state) (GstElement *element,GstElementState state); /* create or read XML representation of self */ xmlNodePtr (*save_thyself)(GstElement *element,xmlNodePtr parent); void (*restore_thyself)(GstElement *element,xmlNodePtr *self); }; GstElementDetails struct GstElementDetails { gchar *longname; /* long, english name */ gchar *class; /* type of element, kinda */ gchar *description; /* insights of one form or another */ gchar *version; /* version of the element */ gchar *author; /* who wrote this thing? */ gchar *copyright; /* copyright details (year, etc.) */ }; GstElementFactory struct GstElementFactory { gchar *name; /* name of element */ GtkType type; /* unique GtkType of element */ GstElementDetails *details; /* pointer to details struct */ }; gst_element_get_type GtkType void gst_element_new GstElement * void gst_element_set_loop_function void GstElement *element,GstElementLoopFunction loop gst_element_set_name void GstElement *element,gchar *name gst_element_get_name gchar * GstElement *element gst_element_set_manager void GstElement *element,GstElement *manager gst_element_get_manager GstElement * GstElement *element gst_element_add_pad void GstElement *element,GstPad *pad gst_element_add_ghost_pad void GstElement *element,GstPad *pad gst_element_get_pad GstPad * GstElement *element,gchar *name gst_element_get_pad_list GList * GstElement *element gst_element_connect void GstElement *src,gchar *srcpadname,GstElement *dest,gchar *destpadname gst_element_set_state gboolean GstElement *element,GstElementState state gst_element_error void GstElement *element,gchar *error gst_element_change_state gboolean GstElement *element,GstElementState state gst_element_destroy #define gst_element_destroy(element) gst_object_destroy(GST_OBJECT(element)) gst_element_save_thyself xmlNodePtr GstElement *element,xmlNodePtr parent gst_elementfactory_new GstElementFactory * gchar *name,GtkType type,GstElementDetails *details gst_elementfactory_register void GstElementFactory *elementfactory gst_elementfactory_find GstElementFactory * gchar *name gst_elementfactory_get_list GList * gst_elementfactory_create GstElement * GstElementFactory *factory,gchar *name gst_elementfactory_make GstElement * gchar *factoryname,gchar *name gst_element_loopfunc_wrapper int int argc,char **argv GST_TYPE_FILTER #define GST_TYPE_FILTER \ (gst_filter_get_type()) GST_FILTER #define GST_FILTER(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_FILTER,GstFilter)) GST_FILTER_CLASS #define GST_FILTER_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FILTER,GstFilterClass)) GST_IS_FILTER #define GST_IS_FILTER(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_FILTER)) GST_IS_FILTER_CLASS #define GST_IS_FILTER_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FILTER)) GstFilter GstFilterClass GstFilter struct GstFilter { GstElement element; }; GstFilterClass struct GstFilterClass { GstElementClass parent_class; }; gst_filter_get_type GtkType void gst_filter_new GstElement * gchar *name GST_SHOW_INFO #define GST_SHOW_INFO gst_info #define gst_info(format,args...) fprintf(stderr,format,##args) gst_info #define gst_info(format,args...) GST_META #define GST_META(meta) ((GstMeta *)(meta)) GST_META_FLAGS #define GST_META_FLAGS(buf) \ (GST_META(buf)->flags) GST_META_FLAG_IS_SET #define GST_META_FLAG_IS_SET(meta,flag) \ (GST_META_FLAGS(meta) & (flag)) GST_META_FLAG_SET #define GST_META_FLAG_SET(meta,flag) \ G_STMT_START{ (GST_META_FLAGS(meta) |= (flag)); }G_STMT_END GST_META_FLAG_UNSET #define GST_META_FLAG_UNSET(meta,flag) \ G_STMT_START{ (GST_META_FLAGS(meta) &= ~(flag)); }G_STMT_END GstMetaFlags typedef enum { GST_META_FREEABLE = 1 << 0, } GstMetaFlags; GstMeta GstMeta struct GstMeta { /* locking */ GMutex *lock; /* refcounting */ #ifdef HAVE_ATOMIC_H atomic_t refcount; #else int refcount; #endif guint16 type; guint16 flags; void *data; guint16 size; }; gst_meta_new_size GstMeta * gint size gst_meta_new #define gst_meta_new(type) (type *)gst_meta_new_size(sizeof(type)) gst_meta_ref void GstMeta *meta gst_meta_unref void GstMeta *meta GST_TYPE_OBJECT #define GST_TYPE_OBJECT \ (gst_object_get_type()) GST_OBJECT #define GST_OBJECT(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_OBJECT,GstObject)) GST_OBJECT_CLASS #define GST_OBJECT_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_OBJECT,GstObjectClass)) GST_IS_OBJECT #define GST_IS_OBJECT(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_OBJECT)) GST_IS_OBJECT_CLASS #define GST_IS_OBJECT_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_OBJECT)) GstObject GstObjectClass GstObject struct GstObject { GtkObject object; /* have to have a refcount for the object */ #ifdef HAVE_ATOMIC_H atomic_t refcount; #else int refcount; #endif /* locking for all sorts of things (like the refcount) */ GMutex *lock; /* this objects parent */ GstObject *parent; }; GstObjectClass struct GstObjectClass { GtkObjectClass parent_class; /* signals */ void (*parent_set) (GstObject *object,GstObject *parent); /* functions go here */ }; GST_FLAGS #define GST_FLAGS(obj) GTK_OBJECT_FLAGS(obj) GST_FLAG_IS_SET #define GST_FLAG_IS_SET(obj,flag) (GST_FLAGS (obj) & (flag)) GST_FLAG_SET #define GST_FLAG_SET(obj,flag) G_STMT_START{ (GST_FLAGS (obj) |= (flag)); }G_STMT_END GST_FLAG_UNSET #define GST_FLAG_UNSET(obj,flag) G_STMT_START{ (GST_FLAGS (obj) &= ~(flag)); }G_STMT_END GST_LOCK #define GST_LOCK(obj) (g_mutex_lock(GST_OBJECT(obj)->lock)) GST_TRYLOCK #define GST_TRYLOCK(obj) (g_mutex_trylock(GST_OBJECT(obj)->lock)) GST_UNLOCK #define GST_UNLOCK(obj) (g_mutex_unlock(GST_OBJECT(obj)->lock)) gst_object_get_type GtkType void gst_object_new GstObject * void gst_object_set_parent void GstObject *object,GstObject *parent gst_object_get_parent GstObject * GstObject *object gst_object_unparent void GstObject *object gst_object_ref #define gst_object_ref(object) gtk_object_ref(GTK_OBJECT(object)); gst_object_unref #define gst_object_unref(object) gtk_object_unref(GTK_OBJECT(object)); gst_object_sink #define gst_object_sink(object) gtk_object_sink(GTK_OBJECT(object)); gst_object_destroy #define gst_object_destroy(object) gtk_object_destroy(GTK_OBJECT(object)) GST_TYPE_PAD #define GST_TYPE_PAD (gst_pad_get_type()) GST_PAD #define GST_PAD(obj) (GTK_CHECK_CAST((obj),GST_TYPE_PAD,GstPad)) GST_PAD_CLASS #define GST_PAD_CLASS(klass) (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_PAD,GstPadClass)) GST_IS_PAD #define GST_IS_PAD(obj) (GTK_CHECK_TYPE((obj),GST_TYPE_PAD)) GST_IS_PAD_CLASS #define GST_IS_PAD_CLASS(obj) (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_PAD)) GST_PAD_CONNECTED #define GST_PAD_CONNECTED(pad) \ ((pad)->peer != NULL) GST_PAD_CAN_PULL #define GST_PAD_CAN_PULL(pad) \ ((pad)->pull != NULL) GstPad GstPadClass GstPadChainFunction void GstPad *pad,GstBuffer *buf GstPadPullFunction GstBuffer * GstPad *pad GstPadPushFunction void GstPad *pad GstPadDirection typedef enum { GST_PAD_UNKNOWN, GST_PAD_SRC, GST_PAD_SINK, } GstPadDirection; GstPad struct GstPad { GstObject object; gchar *name; guint16 type; GstPadDirection direction; GstPad *peer; GstBuffer *bufpen; GstPadChainFunction chain; GstPadPullFunction pull; GstObject *parent; GList *ghostparents; }; GstPadClass struct GstPadClass { GstObjectClass parent_class; }; gst_pad_get_type GtkType void gst_pad_new GstPad * gchar *name,GstPadDirection direction gst_pad_destroy void GstPad *pad gst_pad_get_direction GstPadDirection GstPad *pad gst_pad_set_chain_function void GstPad *pad,GstPadChainFunction chain gst_pad_set_pull_function void GstPad *pad, GstPadPullFunction pull gst_pad_get_type_id guint16 GstPad *pad gst_pad_set_type_id void GstPad *pad,guint16 id gst_pad_set_name void GstPad *pad,gchar *name gst_pad_get_name gchar * GstPad *pad gst_pad_destroy #define gst_pad_destroy(pad) gst_object_destroy(GST_OBJECT(pad)) gst_pad_set_parent void GstPad *pad,GstObject *parent gst_pad_add_ghost_parent void GstPad *pad,GstObject *parent gst_pad_remove_ghost_parent void GstPad *pad,GstObject *parent gst_pad_get_parent GstObject * GstPad *pad gst_pad_get_ghost_parents GList * GstPad *pad gst_pad_get_peer GstPad * GstPad *pad gst_pad_connect void GstPad *srcpad,GstPad *sinkpad gst_pad_push void GstPad *pad,GstBuffer *buffer gst_pad_pull GstBuffer * GstPad *pad gst_pad_save_thyself xmlNodePtr GstPad *pad,xmlNodePtr parent GST_TYPE_PIPELINE #define GST_TYPE_PIPELINE \ (gst_pipeline_get_type()) GST_PIPELINE #define GST_PIPELINE(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_PIPELINE,GstPipeline)) GST_PIPELINE_CLASS #define GST_PIPELINE_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_PIPELINE,GstPipelineClass)) GST_IS_PIPELINE #define GST_IS_PIPELINE(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_PIPELINE)) GST_IS_PIPELINE_CLASS #define GST_IS_PIPELINE_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPELINE))) GstPipeline GstPipelineClass GstPipeline struct GstPipeline { GstBin bin; }; GstPipelineClass struct GstPipelineClass { GstBinClass parent_class; }; gst_pipeline_get_type GtkType void gst_pipeline_new GstPipeline * guchar *name gst_pipeline_destroy #define gst_pipeline_destroy(pipeline) gst_object_destroy(GST_OBJECT(pipeline)) gst_pipeline_iterate void GstPipeline *pipeline GstPlugin GstPluginElement GstPlugin struct GstPlugin { gchar *name; /* name of the plugin */ gchar *longname; /* long name of plugin */ gchar *filename; /* filename it came from */ GList *types; /* list of types provided */ GList *elements; /* list of elements provided */ GList *identifiers; /* list of identifiers */ }; GstPluginInitFunc GstPlugin * GModule *module gst_plugin_new GstPlugin * gchar *name gst_plugin_set_longname void GstPlugin *plugin,gchar *longname gst_plugin_load_all void gst_plugin_load gboolean gchar *name gst_library_load gboolean gchar *name gst_plugin_load_absolute gboolean gchar *name gst_plugin_add_factory void GstPlugin *plugin,GstElementFactory *factory gst_plugin_find GstPlugin * gchar *name gst_plugin_get_list GList * gst_plugin_find_elementfactory GstElementFactory * gchar *name GST_TYPE_SINK #define GST_TYPE_SINK \ (gst_sink_get_type()) GST_SINK #define GST_SINK(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_SINK,GstSink)) GST_SINK_CLASS #define GST_SINK_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_SINK,GstSinkClass)) GST_IS_SINK #define GST_IS_SINK(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_SINK)) GST_IS_SINK_CLASS #define GST_IS_SINK_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_SINK)) GstSink GstSinkClass GstSink struct GstSink { GstElement element; }; GstSinkClass struct GstSinkClass { GstElementClass parent_class; }; gst_sink_get_type GtkType void gst_sink_new GstObject * gchar *name GST_TYPE_SRC #define GST_TYPE_SRC \ (gst_src_get_type()) GST_SRC #define GST_SRC(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_SRC,GstSrc)) GST_SRC_CLASS #define GST_SRC_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_SRC,GstSrcClass)) GST_IS_SRC #define GST_IS_SRC(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_SRC)) GST_IS_SRC_CLASS #define GST_IS_SRC_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_SRC)) GstSrcFlags typedef enum { GST_SRC_ASYNC = 1 << 0, } GstSrcFlags; GST_SRC_FLAGS #define GST_SRC_FLAGS(obj) \ (GST_SRC(obj)->flags) GST_SRC_ASYNC #define GST_SRC_ASYNC(obj) \ ((GST_SRC_FLAGS(obj) & GST_SRC_ASYNC)) GstSrc GstSrcClass GstSrc struct GstSrc { GstElement element; gint32 flags; }; GstSrcClass struct GstSrcClass { GstElementClass parent_class; /* subclass functions */ void (*push) (GstSrc *src); void (*push_region) (GstSrc *src,gulong offset,gulong size); /* signals */ void (*eos) (GstSrc *src); }; GST_SRC_SET_FLAGS #define GST_SRC_SET_FLAGS(src,flag) \ G_STMT_START{ (GST_SRC_FLAGS (src) |= (flag)); }G_STMT_END GST_SRC_UNSET_FLAGS #define GST_SRC_UNSET_FLAGS(src,flag) \ G_STMT_START{ (GST_SRC_FLAGS (src) &= ~(flag)); }G_STMT_END gst_src_get_type GtkType void gst_src_signal_eos void GstSrc *src gst_src_push void GstSrc *src gst_src_push_region void GstSrc *src,gulong offset,gulong size GST_TYPE_TEE #define GST_TYPE_TEE \ (gst_tee_get_type()) GST_TEE #define GST_TEE(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_TEE,GstTee)) GST_TEE_CLASS #define GST_TEE_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_TEE,GstTeeClass)) GST_IS_TEE #define GST_IS_TEE(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_TEE)) GST_IS_TEE_CLASS #define GST_IS_TEE_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_TEE))) GstTee GstTeeClass GstTee struct GstTee { GstFilter filter; GstPad *sinkpad; gint numsrcpads; GSList *srcpads; }; GstTeeClass struct GstTeeClass { GstFilterClass parent_class; }; gst_tee_get_type GtkType void gst_tee_new GstElement * gchar *name gst_tee_chain void GstPad *pad,GstBuffer *buf gst_tee_new_pad gchar * GstTee *tee GstThreadState typedef enum { GST_THREAD_CREATE = (1 << 16), GST_THREAD_STATE_SPINNING = (1 << 17), GST_THREAD_STATE_REAPING = (1 << 18), } GstThreadState; GST_TYPE_THREAD #define GST_TYPE_THREAD \ (gst_thread_get_type()) GST_THREAD #define GST_THREAD(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_THREAD,GstThread)) GST_THREAD_CLASS #define GST_THREAD_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_THREAD,GstThreadClass)) GST_IS_THREAD #define GST_IS_THREAD(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_THREAD)) GST_IS_THREAD_CLASS #define GST_IS_THREAD_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_THREAD))) GstThread GstThreadClass GstThread struct GstThread { GstBin bin; GList *entries; /* used to determine iterate behavior */ gint numentries; /* number of above entry points */ pthread_t thread_id; /* id of the thread, if any */ GMutex *lock; /* thread lock/condititon pair... */ GCond *cond; /* used to control the thread */ }; GstThreadClass struct GstThreadClass { GstBinClass parent_class; }; gst_thread_get_type GtkType void gst_thread_new GstElement * guchar *name gst_thread_main_loop void * void *arg gst_thread_iterate void GstThread *thread gst_trace_read_tsc void guint64 *dst GstTrace GstTraceEntry GstTrace struct GstTrace { /* where this trace is going */ gchar *filename; int fd; /* current buffer, size, head offset */ GstTraceEntry *buf; gint bufsize; gint bufoffset; }; GstTraceEntry struct GstTraceEntry { guint64 timestamp; guint32 sequence; guint32 data; gchar message[112]; }; gst_trace_new GstTrace * guchar *filename,gint size gst_trace_destroy void GstTrace *trace gst_trace_flush void GstTrace *trace gst_trace_get_size #define gst_trace_get_size(trace) ((trace)->bufsize) gst_trace_get_offset #define gst_trace_get_offset(trace) ((trace)->bufoffset) gst_trace_get_remaining #define gst_trace_get_remaining(trace) ((trace)->bufsize - (trace)->bufoffset) gst_trace_set_default void GstTrace *trace TRACE_ENABLE #define TRACE_ENABLE gst_trace_add_entry #define gst_trace_add_entry(trace,seq,data,msg) \ if (_gst_trace_on) { \ _gst_trace_add_entry(trace,(guint32)seq,(guint32)data,msg); \ } gst_trace_add_entry #define gst_trace_add_entry(trace,seq,data,msg) GstTypeFindFunc gboolean GstBuffer *buf,gpointer *private GstType GstTypeFactory GstType struct GstType { guint16 id; /* type id (assigned) */ gchar *mime; /* MIME type */ gchar *exts; /* space-delimited list of extensions */ GstTypeFindFunc typefindfunc; /* typefind function */ GList *srcs; /* list of src objects for this type */ GList *sinks; /* list of sink objects for type */ }; GstTypeFactory struct GstTypeFactory { gchar *mime; gchar *exts; GstTypeFindFunc typefindfunc; }; gst_type_register guint16 GstTypeFactory *factory gst_type_find_by_mime guint16 gchar *mime gst_type_find_by_ext guint16 gchar *ext gst_type_add_src void guint16 id,GstElementFactory *src gst_type_add_sink void guint16 id,GstElementFactory *sink gst_type_get_srcs GList * guint16 id gst_type_get_sinks GList * guint16 id gst_type_find_by_id GstType * guint16 id gst_type_get_list GList * gst_util_get_int_arg gint GtkObject *object,guchar *argname gst_util_get_long_arg glong GtkObject *object,guchar *argname gst_util_get_float_arg gfloat GtkObject *object,guchar *argname gst_util_get_double_arg gdouble GtkObject *object,guchar *argname gst_util_get_string_arg guchar * GtkObject *object,guchar *argname gst_util_get_pointer_arg gpointer GtkObject *object,guchar *argname gst_util_get_widget_arg GtkWidget * GtkObject *object,guchar *argname gst_xml_write xmlDocPtr GstElement *element GstClockTime typedef guint64 GstClockTime; GstClockTimeDiff typedef gint64 GstClockTimeDiff; GST_CLOCK_DIFF #define GST_CLOCK_DIFF(s, e) (GstClockTimeDiff)((s)-(e)) GstClock GstClock struct GstClock { gchar *name; GstClockTime start_time; GstClockTime current_time; GstClockTimeDiff adjust; gboolean locking; GList *sinkobjects; GMutex *sinkmutex; GMutex *lock; }; gst_clock_new GstClock * gchar *name gst_clock_get_system GstClock * void gst_clock_register void GstClock *clock, GstObject *obj gst_clock_set void GstClock *clock, GstClockTime time gst_clock_reset void GstClock *clock gst_clock_wait void GstClock *clock, GstClockTime time, GstObject *obj GST_TYPE_ASYNCDISKSRC #define GST_TYPE_ASYNCDISKSRC \ (gst_asyncdisksrc_get_type()) GST_ASYNCDISKSRC #define GST_ASYNCDISKSRC(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_ASYNCDISKSRC,GstAsyncDiskSrc)) GST_ASYNCDISKSRC_CLASS #define GST_ASYNCDISKSRC_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_ASYNCDISKSRC,GstAsyncDiskSrcClass)) GST_IS_ASYNCDISKSRC #define GST_IS_ASYNCDISKSRC(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_ASYNCDISKSRC)) GST_IS_ASYNCDISKSRC_CLASS #define GST_IS_ASYNCDISKSRC_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_ASYNCDISKSRC)) GstAsyncDiskSrcFlags typedef enum { GST_ASYNCDISKSRC_OPEN = (1 << 16), } GstAsyncDiskSrcFlags; GstAsyncDiskSrc GstAsyncDiskSrcClass GstAsyncDiskSrc struct GstAsyncDiskSrc { GstSrc src; /* pads */ GstPad *srcpad; /* filename */ gchar *filename; /* fd */ gint fd; /* mapping parameters */ gulong size; /* how long is the file? */ guchar *map; /* where the file is mapped to */ /* details for fallback synchronous read */ gulong curoffset; /* current offset in file */ gulong bytes_per_read; /* bytes per read */ gulong seq; /* buffer sequence number */ }; GstAsyncDiskSrcClass struct GstAsyncDiskSrcClass { GstSrcClass parent_class; }; gst_asyncdisksrc_get_type GtkType void GST_TYPE_AUDIOSINK #define GST_TYPE_AUDIOSINK \ (gst_audiosink_get_type()) GST_AUDIOSINK #define GST_AUDIOSINK(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_AUDIOSINK,GstAudioSink)) GST_AUDIOSINK_CLASS #define GST_AUDIOSINK_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIOSINK,GstAudioSinkClass)) GST_IS_AUDIOSINK #define GST_IS_AUDIOSINK(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_AUDIOSINK)) GST_IS_AUDIOSINK_CLASS #define GST_IS_AUDIOSINK_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIOSINK))) GstAudioSink GstAudioSinkClass GstAudioSink struct GstAudioSink { GstSink sink; GstPad *sinkpad; GstClockTime clocktime; GstClock *clock; /* soundcard state */ int fd; int caps; /* the capabilities */ gint format; gint channels; gint frequency; }; GstAudioSinkClass struct GstAudioSinkClass { GstSinkClass parent_class; /* signals */ void (*handoff) (GstElement *element,GstPad *pad); }; gst_audiosink_get_type GtkType void GST_TYPE_AUDIOSRC #define GST_TYPE_AUDIOSRC \ (gst_audiosrc_get_type()) GST_AUDIOSRC #define GST_AUDIOSRC(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_AUDIOSRC,GstAudioSrc)) GST_AUDIOSRC_CLASS #define GST_AUDIOSRC_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIOSRC,GstAudioSrcClass)) GST_IS_AUDIOSRC #define GST_IS_AUDIOSRC(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_AUDIOSRC)) GST_IS_AUDIOSRC_CLASS #define GST_IS_AUDIOSRC_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIOSRC))) GstAudioSrc GstAudioSrcClass GstAudioSrc struct GstAudioSrc { GstSrc src; /* pads */ GstPad *srcpad; /* sound card */ gint fd; /* audio parameters */ gint format; gint channels; gint frequency; /* blocking */ gulong curoffset; gulong bytes_per_read; gulong seq; MetaAudioRaw *meta; }; GstAudioSrcClass struct GstAudioSrcClass { GstSrcClass parent_class; }; gst_audiosrc_get_type GtkType void GST_TYPE_DISKSRC #define GST_TYPE_DISKSRC \ (gst_disksrc_get_type()) GST_DISKSRC #define GST_DISKSRC(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_DISKSRC,GstDiskSrc)) GST_DISKSRC_CLASS #define GST_DISKSRC_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_DISKSRC,GstDiskSrcClass)) GST_IS_DISKSRC #define GST_IS_DISKSRC(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_DISKSRC)) GST_IS_DISKSRC_CLASS #define GST_IS_DISKSRC_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_DISKSRC))) GstDiskSrcFlags typedef enum { GST_DISKSRC_OPEN = (1 << 16), } GstDiskSrcFlags; GstDiskSrc GstDiskSrcClass GstDiskSrc struct GstDiskSrc { GstSrc src; /* pads */ GstPad *srcpad; /* filename */ gchar *filename; /* fd */ gint fd; gulong curoffset; /* current offset in file */ gulong bytes_per_read; /* bytes per read */ gulong seq; /* buffer sequence number */ }; GstDiskSrcClass struct GstDiskSrcClass { GstSrcClass parent_class; }; gst_disksrc_get_type GtkType void GST_TYPE_ESDSINK #define GST_TYPE_ESDSINK \ (gst_esdsink_get_type()) GST_ESDSINK #define GST_ESDSINK(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_ESDSINK,GstEsdSink)) GST_ESDSINK_CLASS #define GST_ESDSINK_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_ESDSINK,GstEsdSinkClass)) GST_IS_ESDSINK #define GST_IS_ESDSINK(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_ESDSINK)) GST_IS_ESDSINK_CLASS #define GST_IS_ESDSINK_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_ESDSINK))) GstEsdSink GstEsdSinkClass GstEsdSink struct GstEsdSink { GstFilter filter; GstPad *sinkpad; /* soundcard state */ int fd; gint format; gint channels; gint frequency; }; GstEsdSinkClass struct GstEsdSinkClass { GstFilterClass parent_class; /* signals */ void (*handoff) (GstElement *element,GstPad *pad); }; gst_esdsink_get_type GtkType void GST_TYPE_FAKESINK #define GST_TYPE_FAKESINK \ (gst_fakesink_get_type()) GST_FAKESINK #define GST_FAKESINK(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_FAKESINK,GstFakeSink)) GST_FAKESINK_CLASS #define GST_FAKESINK_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESINK,GstFakeSinkClass)) GST_IS_FAKESINK #define GST_IS_FAKESINK(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_FAKESINK)) GST_IS_FAKESINK_CLASS #define GST_IS_FAKESINK_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESINK))) GstFakeSink GstFakeSinkClass GstFakeSink struct GstFakeSink { GstSink sink; GstPad *sinkpad; }; GstFakeSinkClass struct GstFakeSinkClass { GstSinkClass parent_class; }; gst_fakesink_get_type GtkType void GST_TYPE_FAKESRC #define GST_TYPE_FAKESRC \ (gst_fakesrc_get_type()) GST_FAKESRC #define GST_FAKESRC(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_FAKESRC,GstFakeSrc)) GST_FAKESRC_CLASS #define GST_FAKESRC_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FAKESRC,GstFakeSrcClass)) GST_IS_FAKESRC #define GST_IS_FAKESRC(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_FAKESRC)) GST_IS_FAKESRC_CLASS #define GST_IS_FAKESRC_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FAKESRC))) GstFakeSrc GstFakeSrcClass GstFakeSrc struct GstFakeSrc { GstSrc src; GstPad *srcpad; }; GstFakeSrcClass struct GstFakeSrcClass { GstSrcClass parent_class; }; gst_fakesrc_get_type GtkType void GST_TYPE_FDSINK #define GST_TYPE_FDSINK \ (gst_fdsink_get_type()) GST_FDSINK #define GST_FDSINK(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_FDSINK,GstFdSink)) GST_FDSINK_CLASS #define GST_FDSINK_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FDSINK,GstFdSinkClass)) GST_IS_FDSINK #define GST_IS_FDSINK(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_FDSINK)) GST_IS_FDSINK_CLASS #define GST_IS_FDSINK_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSINK))) GstFdSink GstFdSinkClass GstFdSink struct GstFdSink { GstSink sink; GstPad *sinkpad; int fd; }; GstFdSinkClass struct GstFdSinkClass { GstSinkClass parent_class; }; gst_fdsink_get_type GtkType void GST_TYPE_FDSRC #define GST_TYPE_FDSRC \ (gst_fdsrc_get_type()) GST_FDSRC #define GST_FDSRC(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_FDSRC,GstFdSrc)) GST_FDSRC_CLASS #define GST_FDSRC_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_FDSRC,GstFdSrcClass)) GST_IS_FDSRC #define GST_IS_FDSRC(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_FDSRC)) GST_IS_FDSRC_CLASS #define GST_IS_FDSRC_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_FDSRC))) GstFdSrc GstFdSrcClass GstFdSrc struct GstFdSrc { GstSrc src; /* pads */ GstPad *srcpad; /* fd */ gint fd; gulong curoffset; /* current offset in file */ gulong bytes_per_read; /* bytes per read */ gulong seq; /* buffer sequence number */ }; GstFdSrcClass struct GstFdSrcClass { GstSrcClass parent_class; }; gst_fdsrc_get_type GtkType void GST_TYPE_HTTPSRC #define GST_TYPE_HTTPSRC \ (gst_httpsrc_get_type()) GST_HTTPSRC #define GST_HTTPSRC(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_HTTPSRC,GstHttpSrc)) GST_HTTPSRC_CLASS #define GST_HTTPSRC_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_HTTPSRC,GstHttpSrcClass)) GST_IS_HTTPSRC #define GST_IS_HTTPSRC(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_HTTPSRC)) GST_IS_HTTPSRC_CLASS #define GST_IS_HTTPSRC_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_HTTPSRC))) GstHttpSrc GstHttpSrcClass GstHttpSrc struct GstHttpSrc { GstSrc src; /* pads */ GstPad *srcpad; gchar *url; ghttp_request *request; int fd; gulong curoffset; /* current offset in file */ gulong bytes_per_read; /* bytes per read */ }; GstHttpSrcClass struct GstHttpSrcClass { GstSrcClass parent_class; }; gst_httpsrc_get_type GtkType void GST_TYPE_IDENTITY #define GST_TYPE_IDENTITY \ (gst_identity_get_type()) GST_IDENTITY #define GST_IDENTITY(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_IDENTITY,GstIdentity)) GST_IDENTITY_CLASS #define GST_IDENTITY_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_IDENTITY,GstIdentityClass)) GST_IS_IDENTITY #define GST_IS_IDENTITY(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_IDENTITY)) GST_IS_IDENTITY_CLASS #define GST_IS_IDENTITY_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_IDENTITY))) GstIdentity GstIdentityClass GstIdentity struct GstIdentity { GstFilter filter; GstPad *sinkpad; GstPad *srcpad; gint control; }; GstIdentityClass struct GstIdentityClass { GstFilterClass parent_class; }; gst_identity_get_type GtkType void GST_TYPE_QUEUE #define GST_TYPE_QUEUE \ (gst_queue_get_type()) GST_QUEUE #define GST_QUEUE(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_QUEUE,GstQueue)) GST_QUEUE_CLASS #define GST_QUEUE_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass)) GST_IS_QUEUE #define GST_IS_QUEUE(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_QUEUE)) GST_IS_QUEUE_CLASS #define GST_IS_QUEUE_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))) GstQueue GstQueueClass GstQueue struct GstQueue { GstConnection Connection; GstPad *sinkpad; GstPad *srcpad; /* the queue of buffers we're keeping our grubby hands on */ GList *queue; GList *tail; /* have to keep track of this myself */ gint level_buffers; /* number of buffers queued here */ gint max_buffers; /* maximum number of buffers queued here */ gint level_bytes; /* number of bytes queued here */ gint size_buffers; /* size of queue in buffers */ gint size_bytes; /* size of queue in bytes */ GMutex *emptylock; /* used when the queue is empty */ GCond *emptycond; GMutex *fulllock; /* used when the queue is full */ GCond *fullcond; }; GstQueueClass struct GstQueueClass { GstConnectionClass parent_class; }; gst_queue_get_type GtkType void GST_TYPE_SINESRC #define GST_TYPE_SINESRC \ (gst_sinesrc_get_type()) GST_SINESRC #define GST_SINESRC(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_SINESRC,GstSineSrc)) GST_SINESRC_CLASS #define GST_SINESRC_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_SINESRC,GstSineSrcClass)) GST_IS_SINESRC #define GST_IS_SINESRC(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_SINESRC)) GST_IS_SINESRC_CLASS #define GST_IS_SINESRC_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_SINESRC))) GstSineSrc GstSineSrcClass GstSineSrc struct GstSineSrc { GstSrc src; /* pads */ GstPad *srcpad; /* parameters */ gdouble volume; gint freq; /* audio parameters */ gint format; gint channels; gint frequency; gulong seq; MetaAudioRaw meta; gboolean sentmeta; }; GstSineSrcClass struct GstSineSrcClass { GstSrcClass parent_class; }; gst_sinesrc_get_type GtkType void MetaAudioRaw MetaAudioRaw struct MetaAudioRaw { GstMeta meta; /* formatting information */ gint format; gint channels; gint frequency; gint bps; }; MetaAudioSpectrum MetaAudioSpectrum struct MetaAudioSpectrum { GstMeta meta; /* data representation */ gint16 bands; /* how many bands are represented */ gint8 channels; /* how many audio channels are there? */ gboolean interleaved; /* are the channels interleaved? */ /* spectrum details */ gint16 lowfreq; gint16 highfreq; gint16 steps; }; MetaVideoRaw MetaDGA MetaOverlay OverlayClip OverlayClip struct OverlayClip { int x1, x2, y1, y2; }; MetaDGA struct MetaDGA { // the base address of the screen void *base; // the dimensions of the screen int swidth, sheight; // the number of bytes in a line int bytes_per_line; }; MetaOverlay struct MetaOverlay { // the position of the window int wx, wy; // a reference to the object sending overlay change events GtkWidget *overlay_element; // the number of overlay regions int clip_count; // the overlay regions of the display window struct _OverlayClip overlay_clip[32]; gint width; gint height; gboolean did_overlay; gboolean fully_obscured; }; MetaVideoRaw struct MetaVideoRaw { GstMeta meta; /* formatting information */ gint format; GdkVisual *visual; // dimensions of the video buffer gint width; gint height; // a pointer to the overlay info if the sink supports this MetaOverlay *overlay_info; // a pointer to the DGA info if the sink supports this MetaDGA *dga_info; };