void test_registry() { GList *g; GstRegistry *registry; //xmlfile = "test_registry"; std_log(LOG_FILENAME_LINE, "Test Started test_registry"); registry = gst_registry_get_default (); for (g = registry->plugins; g; g = g->next) { GstPlugin *plugin = GST_PLUGIN (g->data); ASSERT_OBJECT_REFCOUNT (plugin, "plugin in registry", 1); GST_DEBUG ("refcount %d %s", GST_OBJECT_REFCOUNT_VALUE (plugin), plugin->desc.name); } for (g = registry->features; g; g = g->next) { GstPluginFeature *feature = GST_PLUGIN_FEATURE (g->data); fail_if (GST_OBJECT_REFCOUNT_VALUE (feature) != 1, "Feature in registry should have refcount of 1"); GST_DEBUG ("refcount %d %s", GST_OBJECT_REFCOUNT_VALUE (feature), feature->name); } std_log(LOG_FILENAME_LINE, "Test Successful"); create_xml(0); }
/** * gst_registry_binary_write_cache: * @registry: a #GstRegistry * @location: a filename * * Write the @registry to a cache to file at given @location. * * Returns: %TRUE on success. */ gboolean priv_gst_registry_binary_write_cache (GstRegistry * registry, GList * plugins, const char *location) { GList *walk; GstBinaryRegistryMagic magic; GList *to_write = NULL; unsigned long file_position = 0; BinaryRegistryCache *cache; GST_INFO ("Building binary registry cache image"); g_return_val_if_fail (GST_IS_REGISTRY (registry), FALSE); if (!gst_registry_binary_initialize_magic (&magic)) goto fail; /* iterate trough the list of plugins and fit them into binary structures */ for (walk = plugins; walk != NULL; walk = walk->next) { GstPlugin *plugin = GST_PLUGIN (walk->data); if (!plugin->filename) continue; if (GST_OBJECT_FLAG_IS_SET (plugin, GST_PLUGIN_FLAG_CACHED)) { GStatBuf statbuf; if (g_stat (plugin->filename, &statbuf) < 0 || plugin->file_mtime != statbuf.st_mtime || plugin->file_size != statbuf.st_size) continue; } if (!_priv_gst_registry_chunks_save_plugin (&to_write, registry, plugin)) { GST_ERROR ("Can't write binary plugin information for \"%s\"", plugin->filename); } } _priv_gst_registry_chunks_save_global_header (&to_write, registry, priv_gst_plugin_loading_get_whitelist_hash ()); GST_INFO ("Writing binary registry cache"); cache = gst_registry_binary_cache_init (registry, location); if (!cache) goto fail_free_list; /* write magic */ if (gst_registry_binary_cache_write (cache, file_position, &magic, sizeof (GstBinaryRegistryMagic)) != sizeof (GstBinaryRegistryMagic)) { GST_ERROR ("Failed to write binary registry magic"); goto fail_free_list; } file_position += sizeof (GstBinaryRegistryMagic); /* write out data chunks */ for (walk = to_write; walk; walk = g_list_next (walk)) { GstRegistryChunk *cur = walk->data; gboolean res; res = gst_registry_binary_write_chunk (cache, cur, &file_position); _priv_gst_registry_chunk_free (cur); walk->data = NULL; if (!res) goto fail_free_list; } g_list_free (to_write); if (!gst_registry_binary_cache_finish (cache, TRUE)) return FALSE; return TRUE; /* Errors */ fail_free_list: { for (walk = to_write; walk; walk = g_list_next (walk)) { GstRegistryChunk *cur = walk->data; if (cur) _priv_gst_registry_chunk_free (cur); } g_list_free (to_write); if (cache) (void) gst_registry_binary_cache_finish (cache, FALSE); /* fall through */ } fail: { return FALSE; } }