/* GStreamer * Copyright (C) 2006 Josep Torra * Copyright (C) 2006 Mathieu Garcia * Copyright (C) 2006 Stefan Kost * * gstregistrybinary.h: Header for registry handling * * 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. */ /* SUGGESTIONS AND TODO : ** ==================== ** - Use a compressed registry, but would induce performance loss ** - Encrypt the registry, for security purpose, but would also reduce performances */ #ifndef __GST_REGISTRYBINARY_H__ #define __GST_REGISTRYBINARY_H__ #include #include /* * GST_MAGIC_BINARY_REGISTRY_STR: * * A tag, written at the beginning of the file */ #define GST_MAGIC_BINARY_REGISTRY_STR "\xc0\xde\xf0\x0d" /* * GST_MAGIC_BINARY_REGISTRY_LEN: * * length of the header tag. */ #define GST_MAGIC_BINARY_REGISTRY_LEN (4) /* * GST_MAGIC_BINARY_VERSION_STR: * * The current version of the binary registry format. * This _must_ be updated whenever the registry format changes, * we currently use the core version where this change happened. */ #define GST_MAGIC_BINARY_VERSION_STR ("0.10.23.1") /* * GST_MAGIC_BINARY_VERSION_LEN: * * length of the version string. */ #define GST_MAGIC_BINARY_VERSION_LEN (64) typedef struct _GstBinaryRegistryMagic { gchar magic[GST_MAGIC_BINARY_REGISTRY_LEN]; gchar version[GST_MAGIC_BINARY_VERSION_LEN]; } GstBinaryRegistryMagic; /* * we reference strings directly from the plugins and in this case set CONST to * avoid freeing them */ enum { GST_BINARY_REGISTRY_FLAG_NONE = 0, GST_BINARY_REGISTRY_FLAG_CONST = 1 }; /* * GstBinaryChunk: * * Header for binary blobs */ typedef struct _GstBinaryChunk { gpointer data; guint size; guint flags; gboolean align; } GstBinaryChunk; /* * GstBinaryPluginElement: * * @nfeatures: says how many binary plugin feature structures we will have * right after the structure itself. * * A structure containing (staticely) every information needed for a plugin */ typedef struct _GstBinaryPluginElement { gulong file_size; gulong file_mtime; guint n_deps; guint nfeatures; } GstBinaryPluginElement; /* GstBinaryDep: */ typedef struct _GstBinaryDep { guint flags; guint n_env_vars; guint n_paths; guint n_names; guint env_hash; guint stat_hash; } GstBinaryDep; /* * GstBinaryPluginFeature: * @rank: rank of the feature * * A structure containing the plugin features */ typedef struct _GstBinaryPluginFeature { gulong rank; } GstBinaryPluginFeature; /* * GstBinaryElementFactory: * @npadtemplates: stores the number of GstBinaryPadTemplate structures * following the structure * @ninterfaces: stores the number of interface names following the structure * @nuriprotocols: stores the number of protocol strings following the structure * * A structure containing the element factory fields */ typedef struct _GstBinaryElementFactory { GstBinaryPluginFeature plugin_feature; guint npadtemplates; guint ninterfaces; guint nuriprotocols; } GstBinaryElementFactory; /* * GstBinaryTypeFindFactory: * @nextensions: stores the number of typefind extensions * * A structure containing the element factory fields */ typedef struct _GstBinaryTypeFindFactory { GstBinaryPluginFeature plugin_feature; guint nextensions; } GstBinaryTypeFindFactory; /* * GstBinaryPadTemplate: * * A structure containing the static pad templates of a plugin feature */ typedef struct _GstBinaryPadTemplate { guint direction; /* Either 0:"sink" or 1:"src" */ GstPadPresence presence; } GstBinaryPadTemplate; /* Function prototypes */ gboolean gst_registry_binary_write_cache(GstRegistry *registry, const char *location); gboolean gst_registry_binary_read_cache(GstRegistry *registry, const char *location); #endif /* !__GST_REGISTRYBINARY_H__ */