/* GStreamer * Copyright (C) 2006 Josep Torra * 2006 Mathieu Garcia * 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 ** - Also have a non-mmap based cache reading (work with file descriptors) */ #ifndef __GST_REGISTRYBINARY_H__ #define __GST_REGISTRYBINARY_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include #include #include #include #include #include #include "glib-compat-private.h" #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_LEN: * * length of the version string. */ #define GST_MAGIC_BINARY_VERSION_LEN (64) typedef struct _GstBinaryRegistryMagic { char magic[GST_MAGIC_BINARY_REGISTRY_LEN]; char 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 { void *data; unsigned int size; unsigned int flags; gboolean align; } GstBinaryChunk; /* A structure containing (staticely) every information needed for a plugin ** ** Notes : ** "nfeatures" is used to say how many GstBinaryPluginFeature structures we will have ** right after the structure itself. */ typedef struct _GstBinaryPluginElement { unsigned long file_size; unsigned long file_mtime; unsigned int nfeatures; } GstBinaryPluginElement; /* A structure containing the plugin features ** ** Note : ** "npadtemplates" is used to store the number of GstBinaryPadTemplate structures following the structure itself. ** "ninterfaces" is used to store the number of GstBinaryInterface structures following the structure itself. ** "nuritypes" is used to store the number of GstBinaryUriType structures following the structure itself. */ typedef struct _GstBinaryPluginFeature { unsigned long rank; unsigned int npadtemplates; unsigned int ninterfaces; unsigned int nuritypes; } GstBinaryPluginFeature; /* ** A structure containing the static pad templates of a plugin feature */ typedef struct _GstBinaryPadTemplate { int direction; /* Either 0:"sink" or 1:"src" */ GstPadPresence presence; } GstBinaryPadTemplate; /* ** A very simple structure defining the plugin feature interface string */ //#define GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN (512) typedef struct _GstBinaryInterface { //char interface[GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN]; unsigned long size; } GstBinaryInterface; /* Uri Type */ typedef struct _GstBinaryUriType { GstURIType type; /* GST_URI_SINK / GST_URI_SRC */ unsigned long nuriprotocols; } GstBinaryUriType; /* 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__ */