Port to hotdoc

This commit is contained in:
Thibault Saunier 2018-10-22 03:14:11 -03:00
parent 781ad55f68
commit a0c65067e0
54 changed files with 5149 additions and 3409 deletions

View file

@ -0,0 +1,763 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <glib/gprintf.h>
#include <gst/gst.h>
#include "gst/gst-i18n-app.h"
static GRegex *cleanup_caps_field = NULL;
static gboolean
has_sometimes_template (GstElement * element)
{
GstElementClass *klass = GST_ELEMENT_GET_CLASS (element);
GList *l;
for (l = klass->padtemplates; l != NULL; l = l->next) {
if (GST_PAD_TEMPLATE (l->data)->presence == GST_PAD_SOMETIMES)
return TRUE;
}
return FALSE;
}
static gchar *
json_strescape (const gchar * str)
{
const gchar *p;
const gchar *end;
GString *output;
gsize len;
if (!str)
return g_strdup ("NULL");
len = strlen (str);
end = str + len;
output = g_string_sized_new (len);
for (p = str; p < end; p++) {
if (*p == '\\' || *p == '"') {
g_string_append_c (output, '\\');
g_string_append_c (output, *p);
} else if (*p == '%') {
g_string_append_c (output, '%');
g_string_append_c (output, *p);
} else if ((*p > 0 && *p < 0x1f) || *p == 0x7f) {
switch (*p) {
case '\b':
g_string_append (output, "\\b");
break;
case '\f':
g_string_append (output, "\\f");
break;
case '\n':
g_string_append (output, "\\n");
break;
case '\r':
g_string_append (output, "\\r");
break;
case '\t':
g_string_append (output, "\\t");
break;
default:
g_string_append_printf (output, "\\u00%02x", (guint) * p);
break;
}
} else {
g_string_append_c (output, *p);
}
}
return g_string_free (output, FALSE);
}
static gchar *
flags_to_string (GFlagsValue * values, guint flags)
{
GString *s = NULL;
guint flags_left, i;
/* first look for an exact match and count the number of values */
for (i = 0; values[i].value_name != NULL; ++i) {
if (values[i].value == flags)
return g_strdup (values[i].value_nick);
}
s = g_string_new (NULL);
/* we assume the values are sorted from lowest to highest value */
flags_left = flags;
while (i > 0) {
--i;
if (values[i].value != 0
&& (flags_left & values[i].value) == values[i].value) {
if (s->len > 0)
g_string_append_c (s, '+');
g_string_append (s, values[i].value_nick);
flags_left -= values[i].value;
if (flags_left == 0)
break;
}
}
if (s->len == 0)
g_string_assign (s, "(none)");
return g_string_free (s, FALSE);
}
static void
_serialize_flags (GString * json, const gchar * key_name, GType gtype,
GValue * value)
{
GFlagsValue *values = G_FLAGS_CLASS (g_type_class_ref (gtype))->values;
if (value) {
gchar *cur;
cur = flags_to_string (values, g_value_get_flags (value));
g_string_append_printf (json, ",\"default\": \"%s\",", cur);
g_free (cur);
}
g_string_append_printf (json, "\"%s\": [", key_name);
while (values[0].value_name) {
gchar *value_name = json_strescape (values[0].value_name);
g_string_append_printf (json, "{\"name\": \"%s\","
"\"value\": \"0x%08x\","
"\"desc\": \"%s\"}", values[0].value_nick, values[0].value, value_name);
++values;
if (values[0].value_name)
g_string_append_c (json, ',');
}
g_string_append_c (json, ']');
}
static void
_serialize_enum (GString * json, const gchar * key_name, GType gtype,
GValue * value)
{
GEnumValue *values;
guint j = 0;
gint enum_value;
const gchar *value_nick = "";
values = G_ENUM_CLASS (g_type_class_ref (gtype))->values;
if (value) {
enum_value = g_value_get_enum (value);
while (values[j].value_name) {
if (values[j].value == enum_value)
value_nick = values[j].value_nick;
j++;
}
g_string_append_printf (json, ",\"default\": \"%s (%d)\","
"\"enum\": true,", value_nick, enum_value);;
}
g_string_append_printf (json, "\"%s\": [", key_name);
j = 0;
while (values[j].value_name) {
gchar *value_name = json_strescape (values[j].value_name);
g_string_append_printf (json, "{\"name\": \"%s\","
"\"value\": \"%d\","
"\"desc\": \"%s\"}", values[j].value_nick, values[j].value, value_name);
j++;
if (values[j].value_name)
g_string_append_c (json, ',');
}
g_string_append_c (json, ']');
}
static void
_add_element_signals (GString * json, GstElement * element)
{
gboolean opened = FALSE;
guint *signals;
guint nsignals;
gint i = 0, j, k;
GSignalQuery *query = NULL;
GType type;
GSList *found_signals, *l;
for (k = 0; k < 2; k++) {
found_signals = NULL;
/* For elements that have sometimes pads, also list a few useful GstElement
* signals. Put these first, so element-specific ones come later. */
if (k == 0 && has_sometimes_template (element)) {
query = g_new0 (GSignalQuery, 1);
g_signal_query (g_signal_lookup ("pad-added", GST_TYPE_ELEMENT), query);
found_signals = g_slist_append (found_signals, query);
query = g_new0 (GSignalQuery, 1);
g_signal_query (g_signal_lookup ("pad-removed", GST_TYPE_ELEMENT), query);
found_signals = g_slist_append (found_signals, query);
query = g_new0 (GSignalQuery, 1);
g_signal_query (g_signal_lookup ("no-more-pads", GST_TYPE_ELEMENT),
query);
found_signals = g_slist_append (found_signals, query);
}
for (type = G_OBJECT_TYPE (element); type; type = g_type_parent (type)) {
if (type == GST_TYPE_ELEMENT || type == GST_TYPE_OBJECT)
break;
if (type == GST_TYPE_BIN && G_OBJECT_TYPE (element) != GST_TYPE_BIN)
continue;
signals = g_signal_list_ids (type, &nsignals);
for (i = 0; i < nsignals; i++) {
query = g_new0 (GSignalQuery, 1);
g_signal_query (signals[i], query);
if ((k == 0 && !(query->signal_flags & G_SIGNAL_ACTION)) ||
(k == 1 && (query->signal_flags & G_SIGNAL_ACTION)))
found_signals = g_slist_append (found_signals, query);
else
g_free (query);
}
g_free (signals);
signals = NULL;
}
if (!found_signals)
continue;
for (l = found_signals; l; l = l->next) {
query = (GSignalQuery *) l->data;
g_string_append_printf (json,
"%s\"%s\" : {"
"\"retval\": \"%s\","
"\"args\": [",
opened ? "," : ",\"signals\": {",
query->signal_name, g_type_name (query->return_type));
opened = TRUE;
for (j = 0; j < query->n_params; j++) {
g_string_append_printf (json, "%s\"%s\"",
j ? "," : "", g_type_name (query->param_types[j]));
}
g_string_append_c (json, ']');
if (g_type_is_a (query->return_type, G_TYPE_ENUM)) {
g_string_append_c (json, ',');
_serialize_enum (json, "return-values", query->return_type, NULL);
} else if (g_type_is_a (query->return_type, G_TYPE_FLAGS)) {
g_string_append_c (json, ',');
_serialize_flags (json, "return-values", query->return_type, NULL);
}
g_string_append_c (json, '}');
}
g_slist_foreach (found_signals, (GFunc) g_free, NULL);
g_slist_free (found_signals);
opened = TRUE;
}
if (opened)
g_string_append (json, "}");
}
static void
_add_element_properties (GString * json, GstElement * element)
{
gchar *tmpstr;
guint i, n_props;
gboolean opened = FALSE;
GParamSpec **specs, *spec;
GObjectClass *klass = G_OBJECT_GET_CLASS (element);
specs = g_object_class_list_properties (klass, &n_props);
for (i = 0; i < n_props; i++) {
GValue value = { 0, };
spec = specs[i];
g_value_init (&value, spec->value_type);
if (element && ! !(spec->flags & G_PARAM_READABLE) &&
!(spec->flags & GST_PARAM_DOC_SHOW_DEFAULT)) {
g_object_get_property (G_OBJECT (element), spec->name, &value);
} else {
/* if we can't read the property value, assume it's set to the default
* (which might not be entirely true for sub-classes, but that's an
* unlikely corner-case anyway) */
g_param_value_set_default (spec, &value);
}
if (!opened)
g_string_append (json, ",\"properties\": {");
tmpstr = json_strescape (g_param_spec_get_blurb (spec));
g_string_append_printf (json,
"%s"
"\"%s\": {"
"\"construct-only\": %s,"
"\"construct\": %s,"
"\"writable\": %s,"
"\"blurb\": \"%s\","
"\"type-name\": \"%s\"",
opened ? "," : "",
spec->name,
spec->flags & G_PARAM_CONSTRUCT_ONLY ? "true" : "false",
spec->flags & G_PARAM_CONSTRUCT ? "true" : "false",
spec->flags & G_PARAM_WRITABLE ? "true" : "false",
tmpstr, g_type_name (G_PARAM_SPEC_VALUE_TYPE (spec)));
g_free (tmpstr);
switch (G_VALUE_TYPE (&value)) {
case G_TYPE_STRING:
{
const char *string_val = g_value_get_string (&value);
gchar *tmpstr = json_strescape (string_val);
g_string_append_printf (json, ",\"default\": \"%s\"", tmpstr);;
g_free (tmpstr);
break;
}
case G_TYPE_BOOLEAN:
{
gboolean bool_val = g_value_get_boolean (&value);
g_string_append_printf (json, ",\"default\": \"%s\"",
bool_val ? "true" : "false");
break;
}
case G_TYPE_ULONG:
{
GParamSpecULong *pulong = G_PARAM_SPEC_ULONG (spec);
g_string_append_printf (json,
",\"default\": \"%lu\""
",\"min\": \"%lu\""
",\"max\": \"%lu\"",
g_value_get_ulong (&value), pulong->minimum, pulong->maximum);
GST_ERROR ("%s: property '%s' of type ulong: consider changing to "
"uint/uint64", GST_OBJECT_NAME (element),
g_param_spec_get_name (spec));
break;
}
case G_TYPE_LONG:
{
GParamSpecLong *plong = G_PARAM_SPEC_LONG (spec);
g_string_append_printf (json,
",\"default\": \"%ld\""
",\"min\": \"%ld\""
",\"max\": \"%ld\"",
g_value_get_long (&value), plong->minimum, plong->maximum);
GST_ERROR ("%s: property '%s' of type long: consider changing to "
"int/int64", GST_OBJECT_NAME (element),
g_param_spec_get_name (spec));
break;
}
case G_TYPE_UINT:
{
GParamSpecUInt *puint = G_PARAM_SPEC_UINT (spec);
g_string_append_printf (json,
",\"default\": \"%d\""
",\"min\": \"%d\""
",\"max\": \"%d\"",
g_value_get_uint (&value), puint->minimum, puint->maximum);
break;
}
case G_TYPE_INT:
{
GParamSpecInt *pint = G_PARAM_SPEC_INT (spec);
g_string_append_printf (json,
",\"default\": \"%d\""
",\"min\": \"%d\""
",\"max\": \"%d\"",
g_value_get_int (&value), pint->minimum, pint->maximum);
break;
}
case G_TYPE_UINT64:
{
GParamSpecUInt64 *puint64 = G_PARAM_SPEC_UINT64 (spec);
g_string_append_printf (json,
",\"default\": \"%" G_GUINT64_FORMAT
"\",\"min\": \"%" G_GUINT64_FORMAT
"\",\"max\": \"%" G_GUINT64_FORMAT "\"",
g_value_get_uint64 (&value), puint64->minimum, puint64->maximum);
break;
}
case G_TYPE_INT64:
{
GParamSpecInt64 *pint64 = G_PARAM_SPEC_INT64 (spec);
g_string_append_printf (json,
",\"default\": \"%" G_GUINT64_FORMAT
"\",\"min\": \"%" G_GINT64_FORMAT
"\",\"max\": \"%" G_GINT64_FORMAT "\"",
g_value_get_int64 (&value), pint64->minimum, pint64->maximum);
break;
}
case G_TYPE_FLOAT:
{
GParamSpecFloat *pfloat = G_PARAM_SPEC_FLOAT (spec);
g_string_append_printf (json,
",\"default\": \"%g\""
",\"min\": \"%g\""
",\"max\": \"%g\"",
g_value_get_float (&value), pfloat->minimum, pfloat->maximum);
break;
}
case G_TYPE_DOUBLE:
{
GParamSpecDouble *pdouble = G_PARAM_SPEC_DOUBLE (spec);
g_string_append_printf (json,
",\"default\": \"%g\""
",\"min\": \"%g\""
",\"max\": \"%g\"",
g_value_get_double (&value), pdouble->minimum, pdouble->maximum);
break;
}
case G_TYPE_CHAR:
case G_TYPE_UCHAR:
GST_ERROR ("%s: property '%s' of type char: consider changing to "
"int/string", GST_OBJECT_NAME (element),
g_param_spec_get_name (spec));
/* fall through */
default:
if (spec->value_type == GST_TYPE_CAPS) {
const GstCaps *caps = gst_value_get_caps (&value);
if (caps) {
gchar *capsstr = gst_caps_to_string (caps);
gchar *tmpcapsstr = json_strescape (capsstr);
g_string_append_printf (json, ",\"default\": \"%s\"", tmpcapsstr);
g_free (capsstr);
g_free (tmpcapsstr);
}
} else if (G_IS_PARAM_SPEC_ENUM (spec)) {
_serialize_enum (json, "values", spec->value_type, &value);
} else if (G_IS_PARAM_SPEC_FLAGS (spec)) {
_serialize_flags (json, "values", spec->value_type, &value);
} else if (G_IS_PARAM_SPEC_BOXED (spec)) {
if (spec->value_type == GST_TYPE_STRUCTURE) {
const GstStructure *s = gst_value_get_structure (&value);
if (s) {
gchar *str = gst_structure_to_string (s);
gchar *tmpstr = json_strescape (str);
g_string_append_printf (json, ",\"default\": \"%s\"", tmpstr);
g_free (str);
g_free (tmpstr);
}
}
} else if (GST_IS_PARAM_SPEC_FRACTION (spec)) {
GstParamSpecFraction *pfraction = GST_PARAM_SPEC_FRACTION (spec);
g_string_append_printf (json,
",\"default\": \"%d/%d\""
",\"min\": \"%d/%d\""
",\"max\": \"%d/%d\"",
gst_value_get_fraction_numerator (&value),
gst_value_get_fraction_denominator (&value),
pfraction->min_num, pfraction->min_den,
pfraction->max_num, pfraction->max_den);
}
break;
}
g_string_append_c (json, '}');
opened = TRUE;
}
if (opened)
g_string_append (json, "}");
}
static gboolean
print_field (GQuark field, const GValue * value, GString * jcaps)
{
gchar *tmp, *str = gst_value_serialize (value);
if (!g_strcmp0 (g_quark_to_string (field), "format") ||
!g_strcmp0 (g_quark_to_string (field), "rate")) {
if (!cleanup_caps_field)
cleanup_caps_field = g_regex_new ("\\(string\\)|\\(rate\\)", 0, 0, NULL);
tmp = str;
str = g_regex_replace (cleanup_caps_field, str, -1, 0, "", 0, NULL);;
g_free (tmp);
}
g_string_append_printf (jcaps, "%15s: %s\n", g_quark_to_string (field), str);
g_free (str);
return TRUE;
}
static gchar *
_build_caps (const GstCaps * caps)
{
guint i;
gchar *res;
GString *jcaps = g_string_new (NULL);
if (gst_caps_is_any (caps)) {
g_string_append (jcaps, "ANY");
return g_string_free (jcaps, FALSE);
}
if (gst_caps_is_empty (caps)) {
g_string_append (jcaps, "EMPTY");
return g_string_free (jcaps, FALSE);
}
for (i = 0; i < gst_caps_get_size (caps); i++) {
GstStructure *structure = gst_caps_get_structure (caps, i);
GstCapsFeatures *features = gst_caps_get_features (caps, i);
if (features && (gst_caps_features_is_any (features) ||
!gst_caps_features_is_equal (features,
GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY))) {
gchar *features_string = gst_caps_features_to_string (features);
g_string_append_printf (jcaps, "%s%s(%s):\n",
i ? "\n" : "", gst_structure_get_name (structure), features_string);
g_free (features_string);
} else {
g_string_append_printf (jcaps, "%s:\n",
gst_structure_get_name (structure));
}
gst_structure_foreach (structure, (GstStructureForeachFunc) print_field,
jcaps);
}
res = json_strescape (jcaps->str);
g_string_free (jcaps, TRUE);
return res;
}
static void
_add_element_pad_templates (GString * json, GstElementFactory * factory)
{
gboolean opened = FALSE;
const GList *pads;
GstStaticPadTemplate *padtemplate;
GRegex *re = g_regex_new ("%", 0, 0, NULL);
pads = gst_element_factory_get_static_pad_templates (factory);
while (pads) {
gchar *name, *caps;
padtemplate = (GstStaticPadTemplate *) (pads->data);
pads = g_list_next (pads);
name = g_regex_replace (re, padtemplate->name_template,
-1, 0, "%%", 0, NULL);;
caps = _build_caps (gst_static_caps_get (&padtemplate->static_caps));
g_string_append_printf (json, "%s"
"\"%s\": {"
"\"caps\": \"%s\","
"\"direction\": \"%s\","
"\"presence\": \"%s\"}",
opened ? "," : ",\"pad-templates\": {",
name, caps,
padtemplate->direction ==
GST_PAD_SRC ? "src" : padtemplate->direction ==
GST_PAD_SINK ? "sink" : "unknown",
padtemplate->presence ==
GST_PAD_ALWAYS ? "always" : padtemplate->presence ==
GST_PAD_SOMETIMES ? "sometimes" : padtemplate->presence ==
GST_PAD_REQUEST ? "request" : "unknown");
opened = TRUE;
g_free (name);
}
if (opened)
g_string_append (json, "}");
g_regex_unref (re);
}
static const char *
get_rank_name (char *s, gint rank)
{
static const int ranks[4] = {
GST_RANK_NONE, GST_RANK_MARGINAL, GST_RANK_SECONDARY, GST_RANK_PRIMARY
};
static const char *rank_names[4] = { "none", "marginal", "secondary",
"primary"
};
int i;
int best_i;
best_i = 0;
for (i = 0; i < 4; i++) {
if (rank == ranks[i])
return rank_names[i];
if (abs (rank - ranks[i]) < abs (rank - ranks[best_i])) {
best_i = i;
}
}
sprintf (s, "%s %c %d", rank_names[best_i],
(rank - ranks[best_i] > 0) ? '+' : '-', abs (ranks[best_i] - rank));
return s;
}
static void
_add_factory_details (GString * json, GstElementFactory * factory)
{
gchar **keys, **k;
gboolean f = TRUE;
keys = gst_element_factory_get_metadata_keys (factory);
if (keys != NULL) {
for (k = keys; *k != NULL; ++k) {
gchar *val;
gchar *key = *k;
val = json_strescape (gst_element_factory_get_metadata (factory, key));
g_string_append_printf (json, "%s\"%s\": \"%s\"", f ? "" : ",", key, val);
f = FALSE;
g_free (val);
}
g_strfreev (keys);
g_string_append (json, ",");
}
}
static void
_add_element_details (GString * json, GstPluginFeature * feature)
{
GType type;
GstElement *element =
gst_element_factory_create (GST_ELEMENT_FACTORY (feature), NULL);
char s[20];
g_assert (element);
g_string_append_printf (json,
"\"%s\": {"
"\"rank\":\"%s\",",
GST_OBJECT_NAME (feature),
get_rank_name (s, gst_plugin_feature_get_rank (feature)));
_add_factory_details (json, GST_ELEMENT_FACTORY (feature));
g_string_append (json, "\"hierarchy\": [");
for (type = G_OBJECT_TYPE (element);; type = g_type_parent (type)) {
g_string_append_printf (json, "\"%s\"%c", g_type_name (type),
type == G_TYPE_OBJECT ? ' ' : ',');
if (type == G_TYPE_OBJECT)
break;
}
g_string_append (json, "]");
_add_element_properties (json, element);
_add_element_signals (json, element);
_add_element_pad_templates (json, GST_ELEMENT_FACTORY (feature));
g_string_append (json, "}");
}
int
main (int argc, char *argv[])
{
gchar *libfile;
GError *error = NULL;
GString *json;
GstPlugin *plugin;
gboolean f = TRUE;
GList *features, *tmp;
gint i;
gboolean first = TRUE;
g_assert (argc >= 2);
setlocale (LC_ALL, "");
setlocale (LC_NUMERIC, "C");
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
#endif
g_setenv ("GST_REGISTRY_FORK", "no", TRUE);
gst_init (NULL, NULL);
json = g_string_new ("{");
for (i = 1; i < argc; i++) {
gchar *basename;
libfile = argv[i];
plugin = gst_plugin_load_file (libfile, &error);
if (!plugin) {
g_printerr ("%s could not be loaded as a GstPlugin: %s", libfile,
error->message ? error->message : "no known reasons");
g_clear_error (&error);
continue;
}
basename = g_filename_display_basename (libfile);
g_string_append_printf (json,
"%s\"%s\": {"
"\"description\":\"%s\","
"\"filename\":\"%s\","
"\"source\":\"%s\","
"\"package\":\"%s\","
"\"license\":\"%s\","
"\"url\":\"%s\","
"\"elements\":{",
first ? "" : ",",
gst_plugin_get_name (plugin),
gst_plugin_get_description (plugin),
basename,
gst_plugin_get_source (plugin),
gst_plugin_get_package (plugin),
gst_plugin_get_license (plugin), gst_plugin_get_origin (plugin));
g_free (basename);
first = FALSE;
features =
gst_registry_get_feature_list_by_plugin (gst_registry_get (),
gst_plugin_get_name (plugin));
f = TRUE;
for (tmp = features; tmp; tmp = tmp->next) {
GstPluginFeature *feature = tmp->data;
if (GST_IS_ELEMENT_FACTORY (feature)) {
if (!f)
g_string_append_printf (json, ",");
f = FALSE;
_add_element_details (json, feature);
}
}
g_string_append (json, "}}");
}
g_string_append_c (json, '}');
g_print ("%s", json->str);
return 0;
}

View file

@ -0,0 +1,103 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright © 2018 Thibault Saunier <tsaunier@igalia.com>
#
# This library is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 2.1 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 Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library. If not, see <http://www.gnu.org/licenses/>.
import argparse
import json
import os
import sys
import subprocess
from collections import OrderedDict
try:
from collections.abc import Mapping
except ImportError: # python <3.3
from collections import Mapping
# Marks values in the json file as "unstable" so that they are
# not updated automatically, this aims at making the cache file
# stable and handle corner cases were we can't automatically
# make it happen. For properties, the best way is to use th
# GST_PARAM_DOC_SHOW_DEFAULT flag.
UNSTABLE_VALUE = "unstable-values"
def dict_recursive_update(d, u):
unstable_values = d.get(UNSTABLE_VALUE, [])
if not isinstance(unstable_values, list):
unstable_values = [unstable_values]
for k, v in u.items():
if isinstance(v, Mapping):
r = dict_recursive_update(d.get(k, {}), v)
d[k] = r
elif k not in unstable_values:
d[k] = u[k]
return d
def test_unstable_values():
current_cache = { "v1": "yes", "unstable-values": "v1"}
new_cache = { "v1": "no" }
assert(dict_recursive_update(current_cache, new_cache) == current_cache)
new_cache = { "v1": "no", "unstable-values": "v2" }
assert(dict_recursive_update(current_cache, new_cache) == new_cache)
current_cache = { "v1": "yes", "v2": "yay", "unstable-values": "v1",}
new_cache = { "v1": "no" }
assert(dict_recursive_update(current_cache, new_cache) == current_cache)
current_cache = { "v1": "yes", "v2": "yay", "unstable-values": "v2"}
new_cache = { "v1": "no", "v2": "unstable" }
assert(dict_recursive_update(current_cache, new_cache) == { "v1": "no", "v2": "yay", "unstable-values": "v2" })
if __name__ == "__main__":
cache_filename = sys.argv[1]
output_filename = sys.argv[2]
subenv = os.environ.copy()
cache = {}
try:
with open(cache_filename) as f:
cache = json.load(f)
except FileNotFoundError:
pass
cmd = [os.path.join(os.path.dirname(os.path.realpath(__file__)), 'gst-hotdoc-plugins-scanner')]
gst_plugins_paths = []
for plugin_path in sys.argv[3:]:
cmd.append(plugin_path)
gst_plugins_paths.append(os.path.dirname(plugin_path))
if subenv.get('GST_REGISTRY_UPDATE') != 'no' and len(cmd) >= 2:
data = subprocess.check_output(cmd, env=subenv)
try:
plugins = json.loads(data.decode(), object_pairs_hook=OrderedDict)
except json.decoder.JSONDecodeError:
print("Could not decode:\n%s" % data.decode(), file=sys.stderr)
raise
new_cache = dict_recursive_update(cache, plugins)
with open(output_filename, 'w') as f:
json.dump(cache, f, indent=4, sort_keys=True)
if new_cache != cache:
with open(cache_filename, 'w') as f:
json.dump(cache, f, indent=4, sort_keys=True)

44
docs/gst/building.md Normal file
View file

@ -0,0 +1,44 @@
---
title: Building GStreamer and GStreamer Applications
short-description: How to build the GStreamer framework and applications using it.
...
# Building GStreamer on UNIX
On UNIX, GStreamer uses the standard GNU build system, using autoconf
for package configuration and resolving portability issues, automake for
building makefiles that comply with the GNU Coding Standards, and
libtool for building shared libraries on multiple platforms. The normal
sequence for compiling and installing the GStreamer library is thus:
`./configure` `make` `make install`
The standard options provided by GNU autoconf may be passed to the
`configure` script. Please see the autoconf documentation or run
`./configure --help` for information about the standard options.
In addition there are several options to activate or deactivate
features. E.g. passing `--disable-gst-debug` to `configure` will turn
the debugging subsystem into a non-functional stub and remove all macro
based invocations from within the library (and anything compiled against
the library afterwards.)
If library size matters and one builds in a controlled environment, it
is also possible to totally remove subsystem code. This is intentionally
not offered as a configure option as it causes an ABI break. Code built
against a version of GStreamer without these modifications needs to be
recompiled.
`make CFLAGS="-DGST_REMOVE_DEPRECATED -DGST_REMOVE_DISABLED"`
- `GST_REMOVE_DEPRECATED` - Omit deprecated functions from the
library.
- `GST_REMOVE_DISABLED` - Omit stubs for disabled subsystems from the
library.
# Building GStreamer Applications
Applications and libraries can use `pkg-config` to get all the needed
compiler and linker flags to build against GStreamer. Please note that
GStreamer is split into several libraries itself.
`pkg-config --list-all | grep gstreamer` will list the available
libraries.

6
docs/gst/gi-index.md Normal file
View file

@ -0,0 +1,6 @@
# Core Library
libgstreamer-{{ gst_api_version.md }}.so provides all the core GStreamer
services, including initialization, plugin management and types, as well
as the object hierarchy that defines elements and bins, along with some
more specialized elements.

6
docs/gst/index.md Normal file
View file

@ -0,0 +1,6 @@
# Core Library
libgstreamer-{{ gst_api_version.md }}.so provides all the core GStreamer
services, including initialization, plugin management and types, as well
as the object hierarchy that defines elements and bins, along with some
more specialized elements.

14
docs/gst/overview.md Normal file
View file

@ -0,0 +1,14 @@
---
title: GStreamer Overview
short-description: A simple overview of the GStreamer framework
...
# GStreamer Overview
GStreamer is a streaming media framework. It uses graphs of elements which operate on data. The functionality to process media is provided by plug-ins which provide features like elements, typefinding, and so on. This allows new functionality to be added simply by installing new plug-ins.
GStreamer is cross-platform and works on most UNIX-like platforms as well as Windows. It is released under the GNU Library General Public License (GNU LGPL).
Relation between gstreamer core objects:
![GStreamer universe](images/gst-universe.svg)

314
docs/gst/running.md Normal file
View file

@ -0,0 +1,314 @@
---
title: Running GStreamer Applications
short-description: How to run and debug your GStreamer application
...
# Running and debugging GStreamer Applications
## Environment variables
GStreamer inspects a few of environment variables in addition to
standard variables like LANG, PATH or HOME.
**`GST_PLUGIN_SYSTEM_PATH`, `GST_PLUGIN_SYSTEM_PATH_1_0`.**
This environment variable can be set to a colon-separated list of paths
(or semicolon-separated list on Windows). If this variable is not set,
GStreamer will fill in this list for you with
- plug-ins in the user's home directory, or rather the user's "data
home" directory according to the xdg base dir specification.
Usually this will be a directory called `plugins` inside the
`.local/share/gstreamer-GST_API_VERSION` directory in the user's
home directory by default, though this search path may change if the
XDG_DATA_HOME environment variable is set.
- plug-ins installed system-wide. On this system, they are stored in
``.
GStreamer will scan these paths for GStreamer plug-ins. These plug-ins
will be loaded after the plug-ins in the GST_PLUGIN_PATH variable
below. The paths are scanned in the given order. This allows a user to
override system-installed plug-ins with his own versions.
The GST_PLUGIN_SYSTEM_PATH_1_0 variant is useful if both the old
GStreamer 0.10 version and the new GStreamer 1.0 version need to be
pointed to new plugin paths. The latter will use the _1_0 variant over
the non-versioned one if it is set.
Setting this variable to an empty string will cause GStreamer not to
scan any system paths at all for plug-ins. This can be useful if you're
running uninstalled (for development purposes) or while running
testsuites.
**`GST_PLUGIN_PATH`, `GST_PLUGIN_PATH_1_0`.**
This environment variable can be set to a colon-separated list of paths
(or a semicolon-separated list on Windows). GStreamer will scan these
paths for GStreamer plug-ins. These plug-ins will be loaded in addition
to, and before, the plug-ins in the system paths.
The GST_PLUGIN_PATH_1_0 variant is useful if both the old GStreamer
0.10 version and the new GStreamer 1.0 version need to be pointed to new
plugin paths. The latter will use the `_1_0` variant over the
non-versioned one if it is set.
**`GST_DEBUG.`**
If GStreamer has been configured with `--enable-gst-debug=yes`, this
variable can be set to a list of debug options, which cause GStreamer to
print out different types of debugging information to stderr.
The variable takes a comma-separated list of `category_name:level`
pairs to set specific levels for the individual categories. The level
value ranges from 0 (nothing) to 9 (MEMDUMP).
1 - `ERROR`
: Logs all fatal errors. These are errors that do not allow the core
or elements to perform the requested action. The application can
still recover if programmed to handle the conditions that triggered
the error.
2 - `WARNING`
: Logs all warnings. Typically these are non-fatal, but user-visible
problems are expected to happen.
3 - `FIXME`
: Logs all fixme messages. Fixme messages are messages that indicate
that something in the executed code path is not fully implemented or
handled yet. The purpose of this message is to make it easier to
spot incomplete/unfinished pieces of code when reading the debug
log.
4 - `INFO`
: Logs all informational messages. These are typically used for events
in the system that only happen once, or are important and rare
enough to be logged at this level.
5 - `DEBUG`
: Logs all debug messages. These are general debug messages for events
that happen only a limited number of times during an object's
lifetime; these include setup, teardown, change of parameters, ...
6 - `LOG`
: Logs all log messages. These are messages for events that happen
repeatedly during an object's lifetime; these include streaming and
steady-state conditions.
7 - `TRACE`
: Logs all trace messages. These messages for events that happen
repeatedly during an object's lifetime such as the ref/unref
cycles.
9 - `MEMDUMP`
: Log all memory dump messages. Memory dump messages are used to log
(small) chunks of data as memory dumps in the log. They will be
displayed as hexdump with ASCII characters.
The category_name can contain "`*"` as a wildcard.
For example, setting `GST_DEBUG` to `GST_AUTOPLUG:6,GST_ELEMENT_*:4`,
will cause the `GST_AUTOPLUG` category to be logged at full `LOG` level,
while all categories starting with `GST_ELEMENT_` will be logged at
`INFO` level.
To get all possible debug output, set `GST_DEBUG` to `*:9`. For debugging
purposes a `*:6` debug log is usually the most useful, as it contains
all important information, but hides a lot of noise such as refs/unrefs.
For bug reporting purposes, a `*:6` log is also what will be requested
usually. It's often also worth running with `*:3` to see if there are
any non-fatal errors or warnings that might be related to the problem at
hand.
Since GStreamer 1.2 it is also possible to specify debug levels by name,
e.g. `GST_DEBUG=*:WARNING,*audio*:LOG`
**`GST_DEBUG_NO_COLOR.*`*
Set this environment variable to any value ("1" typically) to switch
off colouring in `GST_DEBUG` output. This has the same effect as
specifying the `--gst-debug-no-color` or `--gst-debug-color-mode`=off
command line option to well-behaved GStreamer applications (ie. those
that pass command-line options correctly to GStreamer). This is
particularly useful to reduce the size of debug output and also allows
for the output to be compressed much better than with colours turned on.
Has the same effect as setting `GST_DEBUG_COLOR_MODE` environment
variable to "off".
**`GST_DEBUG_COLOR_MODE.`**
Set this environment variable to change log colouring in `GST_DEBUG` output.
Possible values:
`on`: Enables debug log output coloring. Uses default coloring method for
current platform. This is the default.
`off`: Disables debug log output coloring. This has the same effect as
specifying the `--gst-debug-color-mode=off` command line option to well-behaved
GStreamer applications (ie. those that pass command-line options correctly to
GStreamer). This is particularly useful to reduce the size of debug output and
also allows for the output to be compressed much better than with colours turned
on. Has the same effect as setting `GST_DEBUG_NO_COLOR` environment variable to
any value.
`auto`: Same as `on`.
`disable`: Same as `off`.
`unix`: Enables debug log output coloring and forces the use of UNIX termial
codes for coloring, even if this method is not normally used on current
platform. This has the same effect as specifying the
`--gst-debug-color-mode=unix` command line option to well-behaved GStreamer
applications (ie. those that pass command-line options correctly to GStreamer).
This is particularly useful to dump debug output into a file on non-UNIX
platforms to be sent to developers who have viewers that support UNIX terminal
codes.
**`GST_DEBUG_OPTIONS.`**
This environment variable can be used to tweak the behaviour of the
debugging system. Currently the only options supported are
"pretty-tags" and "full-tags". In "pretty-tags" mode (the
default), taglists in the debug log will be serialized so that only the
first few and last few bytes of a buffer-type tag will be serialized
into the log, to avoid dumping hundreds of lines of useless output into
the log in case of large image tags and the like.
**`GST_DEBUG_DUMP_DOT_DIR.`**
Set this environment variable to a path to turn on all
`GST_DEBUG_BIN_TO_DOT_FILE` or `GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS` calls and
have the dot files in that location.
This will only work if the application in question makes these calls in
strategic places (like when the pipeline state changes or an error
occurs). `gst-launch-1,0` is one such application.
When `gst-launch-1.0` changes state through NULL to PLAYING
and back to NULL, a dot file is generated on each state change. To have
`gst-launch-1.0` write a snapshot of the pipeline state,
send a SIGHUP to the `gst-launch-1.0` process.
These .dot files can then be turned into images using the 'dot'
utility from the graphviz set of tools, like this:
`dot foo.dot -Tsvg -o foo.svg` or `dot foo.dot -Tpng -o foo.png` or
`dot foo.dot -Tjpg -o foo.jpg`.
There is also a utility called `xdot` which allows you to view the dot
file directly without converting it first.
**`GST_REGISTRY`, `GST_REGISTRY_1_0`.**
Set this environment variable to make GStreamer use a different file for
the plugin cache / registry than the default one. This is useful when
operating in a separate environment which should not affect the default
cache in the user's home directory.
**`GST_REGISTRY_FORK`.**
Set this environment variable to "no" to prevent GStreamer from
forking on startup in order to update the plugin registry. This is
useful for debugging purposes, but should not be used under normal
circumstances, since it means that plugins may be loaded into memory
even if they are not needed by the application.
**`GST_REGISTRY_UPDATE`.**
Set this environment variable to "no" to prevent GStreamer from
updating the plugin registry. This is useful for embedded device which
is not updating the plugins frequently, it will save time when doing
`gst_init()`.
**GST_TRACE.**
Enable memory allocation tracing. Most GStreamer objects have support
for tracing the number of unfreed objects and their memory pointers.
The variable takes a comma-separated list of tracing options to enable.
live
: Counts all live objects and dumps an overview of the number of
unfreed objects at program exit.
mem-live
: Keep track of the unfreed memory pointers and dump an overview of
all unfreed memory at program exit. Together with a level 9 debug
log this can be used to follow the lifecycle of leaked objects in
order to track down where they are leaked. This can be useful for
debugging memory leaks in situations where tools such as valgrind
are not available, or not an option.
Use `all` to enable all tracing flags.
**`GST_DEBUG_FILE`.**
Set this variable to a file path to redirect all GStreamer debug
messages to this file. If left unset, debug messages with be output unto
the standard error.
**`ORC_CODE`.**
Useful Orc environment variable. Set `ORC_CODE=debug` to enable debuggers
such as gdb to create useful backtraces from Orc-generated code. Set
`ORC_CODE=backup` or `ORC_CODE=emulate` if you suspect Orc's SIMD code
generator is producing incorrect code (Quite a few important GStreamer
plugins like videotestsrc, audioconvert or audioresample use Orc). One
can also combine flags like `ORC_CODE=backup,debug`.
**`G_DEBUG`.**
Useful GLib environment variable. Set `G_DEBUG=fatal_warnings` to make
GStreamer programs abort when a critical warning such as an assertion
failure occurs. This is useful if you want to find out which part of the
code caused that warning to be triggered and under what circumstances.
Simply set `G_DEBUG` as mentioned above and run the program in gdb (or
let it core dump). Then get a stack trace in the usual way.
**`G_SLICE`.**
Useful GLib environment variable. Set `G_SLICE=always-malloc` when
running GStreamer programs in valgrind, or debugging memory leaks with
other tools. See the GLib API reference for more details.
**`GST_TAG_ENCODING`.**
Try this character encoding first for tag-related strings where the
encoding is not defined and which are not UTF-8 already. By default the
current locale will be tried (if not UTF-8).
**`GST_TAG_ID3_ENCODING`.**
Try this character encoding first for ID3 tag-related strings where the
encoding is not defined and which are not UTF-8 already. By default the
current locale will be tried (if not UTF-8).
**`GST_TAG_ID3V1_ENCODING`.**
Try this character encoding first for ID3v1 tag-related strings where
the encoding does not look like UTF-8.
**`GST_GL_WINDOW`.**
Influences the window system to use by the GStreamer OpenGL library.
Common values are 'x11', 'wayland', 'win32' or 'cocoa'.
**`GST_GL_PLATFORM`.**
Influences the OpenGL platform to use by the GStreamer OpenGL library.
Common values are 'egl', 'glx', 'wgl' or 'cgl'.
**`GST_GL_API`.**
Influences the OpenGL API requested by the OpenGL platform. Common
values are 'opengl' or 'gles2'.

3
docs/gst/sitemap.txt Normal file
View file

@ -0,0 +1,3 @@
gi-index
running.md
gst.h

BIN
docs/images/gdp-header.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -1,906 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="640px"
height="480px"
id="svg1307"
sodipodi:version="0.32"
inkscape:version="0.43"
sodipodi:docbase="/home/thomas"
sodipodi:docname="gdp.svg">
<defs
id="defs1309" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="262.80469"
inkscape:cy="202.78641"
inkscape:current-layer="layer1"
inkscape:document-units="px"
showgrid="true"
showguides="false"
inkscape:grid-points="true"
fill="#eeeeec"
inkscape:window-width="1024"
inkscape:window-height="697"
inkscape:window-x="0"
inkscape:window-y="25" />
<metadata
id="metadata1312">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g4859">
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="1"
x="1"
height="58.000019"
width="158"
id="rect3104"
style="opacity:1;color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect3979"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<text
sodipodi:linespacing="100%"
id="text4855"
y="14.473633"
x="8.8222656"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="14.473633"
x="8.8222656"
id="tspan4857"
sodipodi:role="line">Version</tspan></text>
</g>
<g
id="g4865"
transform="translate(160,0)">
<rect
style="opacity:1;color:#000000;fill:#edd400;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000048;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4867"
width="78.000015"
height="58.000019"
x="1"
y="1"
rx="2.109425e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4869"
width="80"
height="20"
x="10"
y="0"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="8.8222656"
y="14.473633"
id="text4871"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan4873"
x="8.8222656"
y="14.473633">Flags</tspan></text>
</g>
<g
transform="translate(240,0)"
id="g4885">
<rect
ry="2.1094244e-15"
rx="2.109425e-15"
y="1"
x="1"
height="58.000019"
width="78.000015"
id="rect4887"
style="opacity:1;color:#000000;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000048;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect4889"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<g
id="g4905"
transform="translate(320,0)">
<rect
style="opacity:1;color:#000000;fill:#c4a000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4907"
width="158"
height="58.000019"
x="1"
y="1"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4909"
width="80"
height="20"
x="10"
y="0"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="8.8222656"
y="14.473633"
id="text4911"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan4913"
x="8.8222656"
y="14.473633">Payload type</tspan></text>
</g>
<g
id="g4915"
transform="translate(480,0)">
<rect
style="opacity:1;color:#000000;fill:#cee14b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4917"
width="158"
height="58.000019"
x="1"
y="1"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4919"
width="80"
height="20"
x="10"
y="0"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="8.8222656"
y="14.473633"
id="text4921"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan4923"
x="8.8222656"
y="14.473633">Payload length</tspan></text>
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="421"
x="1"
height="58.000019"
width="158"
id="rect5196"
style="opacity:1;color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<g
id="g4942"
transform="translate(0,60)">
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="1"
x="1"
height="58.000019"
width="158"
id="rect4944"
style="opacity:1;color:#000000;fill:#cee14b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect4946"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<g
transform="translate(160,60)"
id="g4952">
<rect
style="opacity:1;color:#000000;fill:#9db029;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000048;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4954"
width="478.00006"
height="58.000019"
x="1"
y="1"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4956"
width="80"
height="20"
x="10"
y="0"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="8.8222656"
y="14.473633"
id="text4958"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan4960"
x="8.8222656"
y="14.473633">Timestamp</tspan></text>
</g>
<g
transform="translate(160,120)"
id="g4962">
<rect
ry="2.1094244e-15"
rx="2.1094244e-15"
y="1"
x="1"
height="58.000019"
width="477.99994"
id="rect4964"
style="opacity:1;color:#000000;fill:#fcaf3e;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect4966"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<text
sodipodi:linespacing="100%"
id="text4968"
y="14.473633"
x="8.8222656"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="14.473633"
x="8.8222656"
id="tspan4970"
sodipodi:role="line">Duration</tspan></text>
</g>
<g
id="g4972"
transform="translate(0,180)">
<rect
style="opacity:1;color:#000000;fill:#fcaf3e;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4974"
width="158"
height="58.000019"
x="1"
y="1"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4976"
width="80"
height="20"
x="10"
y="0"
rx="2.1094246e-15"
ry="2.1094244e-15" />
</g>
<g
id="g4982"
transform="translate(160,180)">
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="1"
x="1"
height="58.000019"
width="478.00006"
id="rect4984"
style="opacity:1;color:#000000;fill:#f57900;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000048;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect4986"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<text
sodipodi:linespacing="100%"
id="text4988"
y="14.473633"
x="8.8222656"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="14.473633"
x="8.8222656"
id="tspan4990"
sodipodi:role="line">Offset</tspan></text>
</g>
<g
id="g4992"
transform="translate(160,240)">
<rect
style="opacity:1;color:#000000;fill:#ce5c00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4994"
width="477.99994"
height="58.000019"
x="1"
y="1"
rx="2.1094244e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4996"
width="80"
height="20"
x="10"
y="0"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="8.8222656"
y="14.473633"
id="text4998"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan5000"
x="8.8222656"
y="14.473633">Offset end</tspan></text>
</g>
<g
id="g5002"
transform="matrix(0.333333,0,0,1,0,120)">
<rect
ry="2.1094244e-15"
rx="6.3282746e-15"
y="1"
x="1"
height="58.000019"
width="478.00006"
id="rect5004"
style="opacity:1;color:#000000;fill:#9db029;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.46410275;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="6.3282746e-15"
y="0"
x="10"
height="20"
width="80"
id="rect5006"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<g
transform="matrix(0.333333,0,0,1,0,240)"
id="g5012">
<rect
style="opacity:1;color:#000000;fill:#f57900;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.46410275;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect5014"
width="478.00006"
height="58.000019"
x="1"
y="1"
rx="6.3282746e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect5016"
width="80"
height="20"
x="10"
y="0"
rx="6.3282746e-15"
ry="2.1094244e-15" />
</g>
<g
transform="matrix(0.333333,0,0,1,0,300)"
id="g5022">
<rect
ry="2.1094244e-15"
rx="6.3282725e-15"
y="1"
x="1"
height="58.000019"
width="477.99994"
id="rect5024"
style="opacity:1;color:#000000;fill:#ce5c00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.46410179;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="6.3282729e-15"
y="0"
x="10"
height="20"
width="80"
id="rect5026"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<g
transform="translate(160,300)"
id="g5032">
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="1"
x="1"
height="58.000019"
width="158"
id="rect5034"
style="opacity:1;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect5036"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<text
sodipodi:linespacing="100%"
id="text5038"
y="14.473633"
x="8.8222656"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="14.473633"
x="8.8222656"
id="tspan5040"
sodipodi:role="line">Buffer flags</tspan></text>
</g>
<g
id="g5048"
transform="translate(320,300)">
<rect
style="opacity:1;color:#000000;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect5050"
width="317.99997"
height="58.000019"
x="1"
y="1"
rx="2.1094244e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect5052"
width="80"
height="20"
x="10"
y="0"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="8.8222656"
y="14.473633"
id="text5054"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan5056"
x="8.8222656"
y="14.473633">ABI</tspan></text>
</g>
<g
transform="translate(0,360)"
id="g5058">
<rect
ry="2.1094244e-15"
rx="2.109424e-15"
y="1"
x="1"
height="58.000019"
width="637.99982"
id="rect5060"
style="opacity:1;color:#000000;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect5062"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<text
sodipodi:linespacing="100%"
id="text5064"
y="14.473633"
x="8.8222656"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="14.473633"
x="8.8222656"
id="tspan5066"
sodipodi:role="line">ABI</tspan></text>
</g>
<g
transform="translate(0,420)"
id="g5068">
<rect
ry="2.1094244e-15"
rx="2.1094227e-15"
y="1"
x="1"
height="58.000019"
width="157.99988"
id="rect5070"
style="opacity:1;color:#000000;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999952;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect5072"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<text
sodipodi:linespacing="100%"
id="text5074"
y="14.473633"
x="8.8222656"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="14.473633"
x="8.8222656"
id="tspan5076"
sodipodi:role="line">ABI</tspan></text>
</g>
<g
id="g5080"
transform="translate(160,420)">
<rect
style="opacity:1;color:#000000;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect5082"
width="158"
height="58.000019"
x="1"
y="1"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect5084"
width="80"
height="20"
x="10"
y="0"
rx="2.1094246e-15"
ry="2.1094244e-15" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="8.8222656"
y="14.473633"
id="text5086"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan5088"
x="8.8222656"
y="14.473633">CRC header</tspan></text>
</g>
<g
transform="translate(320,420)"
id="g5090">
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="1"
x="1"
height="58.000019"
width="158"
id="rect5092"
style="opacity:1;color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
ry="2.1094244e-15"
rx="2.1094246e-15"
y="0"
x="10"
height="20"
width="80"
id="rect5094"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<text
sodipodi:linespacing="100%"
id="text5096"
y="14.473633"
x="8.8222656"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="14.473633"
x="8.8222656"
id="tspan5098"
sodipodi:role="line">CRC payload</tspan></text>
</g>
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 81,0.5 L 81,479.5"
id="path5104" />
<use
x="0"
y="0"
xlink:href="#path5104"
id="use5106"
transform="translate(-0.5,0)"
width="640"
height="480" />
<use
x="0"
y="0"
xlink:href="#use5106"
id="use5108"
transform="translate(80,0)"
width="640"
height="480" />
<use
x="0"
y="0"
xlink:href="#use5106"
id="use5112" />
<use
x="0"
y="0"
xlink:href="#use5112"
id="use5114"
transform="translate(400,0)"
width="640"
height="480" />
<use
x="0"
y="0"
xlink:href="#use5114"
id="use5116"
width="640"
height="480"
transform="translate(-80,0)" />
<use
x="0"
y="0"
xlink:href="#use5116"
id="use5118"
width="640"
height="480"
transform="translate(-80,0)" />
<use
x="0"
y="0"
xlink:href="#use5118"
id="use5120"
width="640"
height="480"
transform="translate(-80,0)" />
<use
id="use5126"
xlink:href="#use5106"
y="0"
x="0"
transform="matrix(1,0,0,0.87474,480,6.248e-2)"
width="640"
height="480" />
<g
id="g5145">
<path
id="path5128"
d="M 170.5,42.5 L 170.5,59.5"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<use
transform="translate(10,0)"
height="480"
width="640"
id="use5130"
xlink:href="#path5128"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5132"
xlink:href="#use5130"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5134"
xlink:href="#use5132"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5136"
xlink:href="#use5134"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5138"
xlink:href="#use5136"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5140"
xlink:href="#use5138"
y="0"
x="0" />
</g>
<g
id="g5154"
transform="translate(0,300)">
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 170.5,42.5 L 170.5,59.5"
id="path5156" />
<use
x="0"
y="0"
xlink:href="#path5128"
id="use5158"
width="640"
height="480"
transform="translate(10,0)" />
<use
x="0"
y="0"
xlink:href="#use5130"
id="use5160"
transform="translate(10,0)"
width="640"
height="480" />
<use
x="0"
y="0"
xlink:href="#use5132"
id="use5162"
transform="translate(10,0)"
width="640"
height="480" />
<use
x="0"
y="0"
xlink:href="#use5134"
id="use5164"
transform="translate(10,0)"
width="640"
height="480" />
<use
x="0"
y="0"
xlink:href="#use5136"
id="use5166"
transform="translate(10,0)"
width="640"
height="480" />
<use
x="0"
y="0"
xlink:href="#use5138"
id="use5168"
transform="translate(10,0)"
width="640"
height="480" />
</g>
<g
transform="translate(80,300)"
id="g5170">
<path
id="path5172"
d="M 170.5,42.5 L 170.5,59.5"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<use
transform="translate(10,0)"
height="480"
width="640"
id="use5174"
xlink:href="#path5128"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5176"
xlink:href="#use5130"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5178"
xlink:href="#use5132"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5180"
xlink:href="#use5134"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5182"
xlink:href="#use5136"
y="0"
x="0" />
<use
height="480"
width="640"
transform="translate(10,0)"
id="use5184"
xlink:href="#use5138"
y="0"
x="0" />
</g>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="501"
y="451"
id="text5186"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan5188"
x="501"
y="451">GStreamer</tspan><tspan
sodipodi:role="line"
x="501"
y="471"
id="tspan5192">Data Protocol</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 38 KiB

View file

@ -0,0 +1,354 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: pipeline Pages: 1 -->
<svg width="707pt" height="632pt"
viewBox="0.00 0.00 707.00 632.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 628)">
<title>pipeline</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-628 703,-628 703,4 -4,4"/>
<!-- application -->
<g id="node1" class="node">
<title>application</title>
<polygon fill="#ffdddd" stroke="#000000" points="577,-624 511,-624 511,-588 577,-588 577,-624"/>
<text text-anchor="middle" x="544" y="-603.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">application</text>
</g>
<!-- bus -->
<g id="node3" class="node">
<title>bus</title>
<g id="a_node3"><a xlink:href="GstBus.html" xlink:title="bus" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="122,-464 68,-464 68,-428 122,-428 122,-464"/>
<text text-anchor="middle" x="95" y="-443.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">bus</text>
</a>
</g>
</g>
<!-- application&#45;&gt;bus -->
<g id="edge24" class="edge">
<title>application&#45;&gt;bus</title>
<path fill="none" stroke="#000000" d="M510.9115,-603.0792C430.1757,-595.561 225.2233,-574.007 164,-544 132.3738,-528.4992 123.8974,-520.3344 106,-490 103.0991,-485.0833 100.9591,-479.4225 99.3816,-473.8334"/>
<polygon fill="#000000" stroke="#000000" points="102.776,-472.9771 97.1069,-464.0266 95.957,-474.5588 102.776,-472.9771"/>
<text text-anchor="middle" x="180" y="-524.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">listen on</text>
</g>
<!-- event -->
<g id="node9" class="node">
<title>event</title>
<g id="a_node9"><a xlink:href="gstreamer-GstEvent.html" xlink:title="event" target="_top">
<polygon fill="#ddffdd" stroke="#000000" points="585,-304 531,-304 531,-268 585,-268 585,-304"/>
<text text-anchor="middle" x="558" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">event</text>
</a>
</g>
</g>
<!-- application&#45;&gt;event -->
<g id="edge26" class="edge">
<title>application&#45;&gt;event</title>
<path fill="none" stroke="#000000" d="M577.281,-590.2893C600.3723,-576.8307 627,-555.0196 627,-526 627,-526 627,-526 627,-366 627,-345.4784 625.4135,-338.3413 613,-322 607.7902,-315.1417 600.8722,-309.1985 593.7059,-304.2267"/>
<polygon fill="#000000" stroke="#000000" points="595.5792,-301.2702 585.2668,-298.84 591.8129,-307.1707 595.5792,-301.2702"/>
<text text-anchor="middle" x="636" y="-444.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">send</text>
</g>
<!-- pipeline -->
<g id="node13" class="node">
<title>pipeline</title>
<g id="a_node13"><a xlink:href="GstPipeline.html" xlink:title="pipeline" target="_top">
<polygon fill="#ccccff" stroke="#000000" points="259,-544 205,-544 205,-508 259,-508 259,-544"/>
<text text-anchor="middle" x="232" y="-523.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">pipeline</text>
</a>
</g>
</g>
<!-- application&#45;&gt;pipeline -->
<g id="edge23" class="edge">
<title>application&#45;&gt;pipeline</title>
<path fill="none" stroke="#000000" d="M510.9059,-597.5143C452.3458,-582.4989 330.8592,-551.3485 269.3763,-535.5837"/>
<polygon fill="#000000" stroke="#000000" points="269.8879,-532.1017 259.3319,-533.0082 268.1492,-538.8823 269.8879,-532.1017"/>
<text text-anchor="middle" x="404.5" y="-564.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has</text>
</g>
<!-- query -->
<g id="node16" class="node">
<title>query</title>
<g id="a_node16"><a xlink:href="gstreamer-GstQuery.html" xlink:title="query" target="_top">
<polygon fill="#ddffdd" stroke="#000000" points="677,-304 623,-304 623,-268 677,-268 677,-304"/>
<text text-anchor="middle" x="650" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">query</text>
</a>
</g>
</g>
<!-- application&#45;&gt;query -->
<g id="edge25" class="edge">
<title>application&#45;&gt;query</title>
<path fill="none" stroke="#000000" d="M577.1639,-601.3855C617.7094,-593.6598 681,-573.9247 681,-526 681,-526 681,-526 681,-366 681,-347.6719 673.8382,-328.4806 666.3992,-313.4901"/>
<polygon fill="#000000" stroke="#000000" points="669.3088,-311.5046 661.5433,-304.2972 663.1192,-314.7742 669.3088,-311.5046"/>
<text text-anchor="middle" x="690" y="-444.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">send</text>
</g>
<!-- bin -->
<g id="node2" class="node">
<title>bin</title>
<g id="a_node2"><a xlink:href="GstBin.html" xlink:title="bin" target="_top">
<polygon fill="#ccccff" stroke="#000000" points="343,-464 289,-464 289,-428 343,-428 343,-464"/>
<text text-anchor="middle" x="316" y="-443.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">bin</text>
</a>
</g>
</g>
<!-- element -->
<g id="node7" class="node">
<title>element</title>
<g id="a_node7"><a xlink:href="GstElement.html" xlink:title="element" target="_top">
<polygon fill="#ccccff" stroke="#000000" points="379,-384 325,-384 325,-348 379,-348 379,-384"/>
<text text-anchor="middle" x="352" y="-363.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">element</text>
</a>
</g>
</g>
<!-- bin&#45;&gt;element -->
<g id="edge1" class="edge">
<title>bin&#45;&gt;element</title>
<path fill="none" stroke="#000000" d="M313.4728,-427.8198C313.0652,-419.637 313.6319,-410.0331 317,-402 318.4683,-398.498 320.4504,-395.1455 322.7289,-391.9929"/>
<polygon fill="#000000" stroke="#000000" points="325.5616,-394.0618 329.3031,-384.1495 320.1969,-389.5651 325.5616,-394.0618"/>
<text text-anchor="middle" x="323.5" y="-404.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">is&#45;a</text>
</g>
<!-- bin&#45;&gt;element -->
<g id="edge12" class="edge">
<title>bin&#45;&gt;element</title>
<path fill="none" stroke="#000000" d="M324.169,-427.8468C328.7718,-417.6183 334.6118,-404.6405 339.7523,-393.217"/>
<polygon fill="#000000" stroke="#000000" points="342.9514,-394.6369 343.8634,-384.0814 336.5679,-391.7643 342.9514,-394.6369"/>
<text text-anchor="middle" x="346" y="-404.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
<!-- message -->
<g id="node10" class="node">
<title>message</title>
<g id="a_node10"><a xlink:href="gstreamer-GstMessage.html" xlink:title="message" target="_top">
<polygon fill="#ddffdd" stroke="#000000" points="128,-304 72,-304 72,-268 128,-268 128,-304"/>
<text text-anchor="middle" x="100" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">message</text>
</a>
</g>
</g>
<!-- bus&#45;&gt;message -->
<g id="edge19" class="edge">
<title>bus&#45;&gt;message</title>
<path fill="none" stroke="#000000" d="M95.5638,-427.957C96.4266,-400.3487 98.082,-347.3746 99.1086,-314.5255"/>
<polygon fill="#000000" stroke="#000000" points="102.6164,-314.327 99.4305,-304.2226 95.6198,-314.1083 102.6164,-314.327"/>
<text text-anchor="middle" x="111.5" y="-364.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">receive</text>
</g>
<!-- buffer -->
<g id="node4" class="node">
<title>buffer</title>
<g id="a_node4"><a xlink:href="gstreamer-GstBuffer.html" xlink:title="buffer" target="_top">
<polygon fill="#ddffdd" stroke="#000000" points="521,-250 467,-250 467,-214 521,-214 521,-250"/>
<text text-anchor="middle" x="494" y="-229.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">buffer</text>
</a>
</g>
</g>
<!-- caps -->
<g id="node5" class="node">
<title>caps</title>
<g id="a_node5"><a xlink:href="gstreamer-GstCaps.html" xlink:title="caps" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="472,-116 418,-116 418,-80 472,-80 472,-116"/>
<text text-anchor="middle" x="445" y="-95.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">caps</text>
</a>
</g>
</g>
<!-- buffer&#45;&gt;caps -->
<g id="edge10" class="edge">
<title>buffer&#45;&gt;caps</title>
<path fill="none" stroke="#000000" d="M487.8971,-213.8918C482.9336,-199.2961 475.6823,-178.2673 469,-160 464.7467,-148.3727 463.4659,-145.5473 459,-134 457.9568,-131.3027 456.8678,-128.4926 455.7781,-125.6842"/>
<polygon fill="#000000" stroke="#000000" points="459.0195,-124.3625 452.1353,-116.309 452.4947,-126.8978 459.0195,-124.3625"/>
<text text-anchor="middle" x="492" y="-176.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
<!-- structure -->
<g id="node18" class="node">
<title>structure</title>
<g id="a_node18"><a xlink:href="gstreamer-GstStructure.html" xlink:title="structure" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="474.5,-36 415.5,-36 415.5,0 474.5,0 474.5,-36"/>
<text text-anchor="middle" x="445" y="-15.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">structure</text>
</a>
</g>
</g>
<!-- caps&#45;&gt;structure -->
<g id="edge11" class="edge">
<title>caps&#45;&gt;structure</title>
<path fill="none" stroke="#000000" d="M445,-79.8468C445,-69.9251 445,-57.4167 445,-46.2492"/>
<polygon fill="#000000" stroke="#000000" points="448.5001,-46.0814 445,-36.0814 441.5001,-46.0814 448.5001,-46.0814"/>
<text text-anchor="middle" x="455" y="-56.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
<!-- clock -->
<g id="node6" class="node">
<title>clock</title>
<g id="a_node6"><a xlink:href="GstClock.html" xlink:title="clock" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="200,-304 146,-304 146,-268 200,-268 200,-304"/>
<text text-anchor="middle" x="173" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">clock</text>
</a>
</g>
</g>
<!-- element&#45;&gt;buffer -->
<g id="edge17" class="edge">
<title>element&#45;&gt;buffer</title>
<path fill="none" stroke="#000000" d="M379.0052,-348.1841C387.6581,-342.4256 397.2602,-335.9827 406,-330 422.585,-318.647 428.7615,-318.1851 443,-304 456.442,-290.6085 468.8159,-273.3197 478.0084,-259.0402"/>
<polygon fill="#000000" stroke="#000000" points="481.227,-260.4951 483.569,-250.1624 475.2946,-256.7794 481.227,-260.4951"/>
<text text-anchor="middle" x="446" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">send &amp; receive</text>
</g>
<!-- element&#45;&gt;clock -->
<g id="edge7" class="edge">
<title>element&#45;&gt;clock</title>
<path fill="none" stroke="#000000" d="M324.9778,-361.1851C299.2847,-355.9049 260.0596,-345.9868 229,-330 218.9195,-324.8114 208.8758,-317.6948 200.1358,-310.6969"/>
<polygon fill="#000000" stroke="#000000" points="202.1225,-307.7968 192.197,-304.0908 197.6451,-313.1776 202.1225,-307.7968"/>
<text text-anchor="middle" x="251.5" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">may provide</text>
</g>
<!-- element_factory -->
<g id="node8" class="node">
<title>element_factory</title>
<g id="a_node8"><a xlink:href="GstElementFactory.html" xlink:title="element factory" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="306,-304 218,-304 218,-268 306,-268 306,-304"/>
<text text-anchor="middle" x="262" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">element factory</text>
</a>
</g>
</g>
<!-- element&#45;&gt;element_factory -->
<g id="edge14" class="edge">
<title>element&#45;&gt;element_factory</title>
<path fill="none" stroke="#000000" d="M324.8244,-356.6294C310.9201,-350.7366 294.5406,-341.9588 283,-330 278.4484,-325.2835 274.729,-319.3944 271.7547,-313.4736"/>
<polygon fill="#000000" stroke="#000000" points="274.9408,-312.0246 267.6816,-304.3075 268.5439,-314.8672 274.9408,-312.0246"/>
<text text-anchor="middle" x="310.5" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">is created from</text>
</g>
<!-- element&#45;&gt;event -->
<g id="edge16" class="edge">
<title>element&#45;&gt;event</title>
<path fill="none" stroke="#000000" d="M379.0347,-360.7461C406.0174,-355.003 448.3405,-344.6282 483,-330 496.4301,-324.3318 510.3994,-316.6794 522.5904,-309.3462"/>
<polygon fill="#000000" stroke="#000000" points="524.4387,-312.3185 531.1199,-304.0958 520.7692,-306.3573 524.4387,-312.3185"/>
<text text-anchor="middle" x="526" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">send &amp; receive</text>
</g>
<!-- element&#45;&gt;message -->
<g id="edge18" class="edge">
<title>element&#45;&gt;message</title>
<path fill="none" stroke="#000000" d="M324.9822,-361.5785C293.1497,-355.9741 238.9085,-345.1811 194,-330 170.198,-321.9538 163.449,-316.9228 137.4211,-304.2336"/>
<polygon fill="#000000" stroke="#000000" points="138.777,-301.0021 128.2471,-299.8311 135.7484,-307.3131 138.777,-301.0021"/>
<text text-anchor="middle" x="203" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">send</text>
</g>
<!-- pad -->
<g id="node11" class="node">
<title>pad</title>
<g id="a_node11"><a xlink:href="GstPad.html" xlink:title="pad" target="_top">
<polygon fill="#ccccff" stroke="#000000" points="434,-304 380,-304 380,-268 434,-268 434,-304"/>
<text text-anchor="middle" x="407" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">pad</text>
</a>
</g>
</g>
<!-- element&#45;&gt;pad -->
<g id="edge6" class="edge">
<title>element&#45;&gt;pad</title>
<path fill="none" stroke="#000000" d="M364.4804,-347.8468C371.6531,-337.4137 380.7923,-324.1203 388.7582,-312.5335"/>
<polygon fill="#000000" stroke="#000000" points="391.7879,-314.3047 394.569,-304.0814 386.0196,-310.339 391.7879,-314.3047"/>
<text text-anchor="middle" x="392" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
<!-- pad_template -->
<g id="node12" class="node">
<title>pad_template</title>
<g id="a_node12"><a xlink:href="GstPadTemplate.html" xlink:title="pad template" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="408.5,-196 331.5,-196 331.5,-160 408.5,-160 408.5,-196"/>
<text text-anchor="middle" x="370" y="-175.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">pad template</text>
</a>
</g>
</g>
<!-- element&#45;&gt;pad_template -->
<g id="edge5" class="edge">
<title>element&#45;&gt;pad_template</title>
<path fill="none" stroke="#000000" d="M351.6297,-347.8244C351.397,-335.4673 351.1189,-318.748 351,-304 350.871,-288.0005 349.3386,-283.9135 351,-268 353.1835,-247.0865 358.1473,-223.877 362.4537,-206.266"/>
<polygon fill="#000000" stroke="#000000" points="365.9671,-206.6471 365.0193,-196.0948 359.1797,-204.935 365.9671,-206.6471"/>
<text text-anchor="middle" x="361" y="-284.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
<!-- element&#45;&gt;query -->
<g id="edge15" class="edge">
<title>element&#45;&gt;query</title>
<path fill="none" stroke="#000000" d="M379.0863,-363.5768C418.8478,-359.5008 495.0155,-349.7102 557,-330 576.3889,-323.8346 596.9357,-314.4447 613.7714,-305.9205"/>
<polygon fill="#000000" stroke="#000000" points="615.4351,-309.0005 622.7118,-301.2998 612.2211,-302.7819 615.4351,-309.0005"/>
<text text-anchor="middle" x="594" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">answers</text>
</g>
<!-- plugin_feature -->
<g id="node15" class="node">
<title>plugin_feature</title>
<g id="a_node15"><a xlink:href="GstPluginFeature.html" xlink:title="plugin feature" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="161,-196 81,-196 81,-160 161,-160 161,-196"/>
<text text-anchor="middle" x="121" y="-175.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">plugin feature</text>
</a>
</g>
</g>
<!-- element_factory&#45;&gt;plugin_feature -->
<g id="edge22" class="edge">
<title>element_factory&#45;&gt;plugin_feature</title>
<path fill="none" stroke="#000000" d="M238.3998,-267.9232C214.9138,-249.9339 178.719,-222.2103 152.7282,-202.3024"/>
<polygon fill="#000000" stroke="#000000" points="154.7443,-199.438 144.6772,-196.1357 150.4877,-204.9951 154.7443,-199.438"/>
<text text-anchor="middle" x="219.5" y="-230.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">is&#45;a</text>
</g>
<!-- pad&#45;&gt;caps -->
<g id="edge8" class="edge">
<title>pad&#45;&gt;caps</title>
<path fill="none" stroke="#000000" d="M421.5944,-267.8888C425.2714,-262.4333 428.7961,-256.2319 431,-250 438.8006,-227.9426 442.5008,-164.0023 444.0459,-126.4479"/>
<polygon fill="#000000" stroke="#000000" points="447.5545,-126.2911 444.4424,-116.1637 440.5597,-126.0214 447.5545,-126.2911"/>
<text text-anchor="middle" x="453" y="-176.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
<!-- pad&#45;&gt;pad_template -->
<g id="edge13" class="edge">
<title>pad&#45;&gt;pad_template</title>
<path fill="none" stroke="#000000" d="M387.4506,-267.737C382.9375,-262.4616 378.679,-256.3893 376,-250 370.2976,-236.3999 368.5674,-220.1056 368.3637,-206.4602"/>
<polygon fill="#000000" stroke="#000000" points="371.8665,-206.2262 368.4808,-196.1869 364.8669,-206.1464 371.8665,-206.2262"/>
<text text-anchor="middle" x="403.5" y="-230.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">is created from</text>
</g>
<!-- pad_template&#45;&gt;caps -->
<g id="edge9" class="edge">
<title>pad_template&#45;&gt;caps</title>
<path fill="none" stroke="#000000" d="M386.7291,-159.9921C394.1513,-152.0167 402.9991,-142.5287 411,-134 414.1284,-130.6653 417.4244,-127.1622 420.6835,-123.7048"/>
<polygon fill="#000000" stroke="#000000" points="423.3614,-125.9667 427.6795,-116.2917 418.2705,-121.1622 423.3614,-125.9667"/>
<text text-anchor="middle" x="421" y="-136.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
<!-- pipeline&#45;&gt;bin -->
<g id="edge2" class="edge">
<title>pipeline&#45;&gt;bin</title>
<path fill="none" stroke="#000000" d="M251.0609,-507.8468C262.4452,-497.0045 277.0731,-483.0732 289.5625,-471.1785"/>
<polygon fill="#000000" stroke="#000000" points="292.1869,-473.5125 297.0145,-464.0814 287.3593,-468.4435 292.1869,-473.5125"/>
<text text-anchor="middle" x="283.5" y="-484.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">is&#45;a</text>
</g>
<!-- pipeline&#45;&gt;bus -->
<g id="edge3" class="edge">
<title>pipeline&#45;&gt;bus</title>
<path fill="none" stroke="#000000" d="M204.6065,-523.7303C178.9936,-520.2926 141.0367,-511.6598 116,-490 110.959,-485.6389 107.0322,-479.7973 104.0111,-473.7986"/>
<polygon fill="#000000" stroke="#000000" points="107.1483,-472.2343 99.9793,-464.4332 100.7188,-475.0022 107.1483,-472.2343"/>
<text text-anchor="middle" x="126" y="-484.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has 1</text>
</g>
<!-- pipeline&#45;&gt;clock -->
<g id="edge4" class="edge">
<title>pipeline&#45;&gt;clock</title>
<path fill="none" stroke="#000000" d="M224.1619,-507.8066C209.9486,-473.7131 180.4285,-397.5454 170,-330 169.2231,-324.968 169.0522,-319.5812 169.225,-314.3635"/>
<polygon fill="#000000" stroke="#000000" points="172.7398,-314.2874 169.9782,-304.0589 165.7584,-313.7771 172.7398,-314.2874"/>
<text text-anchor="middle" x="199" y="-404.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has 1</text>
</g>
<!-- plugin -->
<g id="node14" class="node">
<title>plugin</title>
<g id="a_node14"><a xlink:href="GstPlugin.html" xlink:title="plugin" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="54,-304 0,-304 0,-268 54,-268 54,-304"/>
<text text-anchor="middle" x="27" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">plugin</text>
</a>
</g>
</g>
<!-- plugin&#45;&gt;plugin_feature -->
<g id="edge21" class="edge">
<title>plugin&#45;&gt;plugin_feature</title>
<path fill="none" stroke="#000000" d="M42.9458,-267.6793C58.2302,-250.1185 81.4452,-223.4459 98.5869,-203.7512"/>
<polygon fill="#000000" stroke="#000000" points="101.3645,-205.8911 105.2897,-196.0502 96.0843,-201.2954 101.3645,-205.8911"/>
<text text-anchor="middle" x="98" y="-230.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
<!-- registry -->
<g id="node17" class="node">
<title>registry</title>
<g id="a_node17"><a xlink:href="GstRegistry.html" xlink:title="registry" target="_top">
<polygon fill="#eeeeee" stroke="#000000" points="54,-384 0,-384 0,-348 54,-348 54,-384"/>
<text text-anchor="middle" x="27" y="-363.8" font-family="Bitstream Vera Sans" font-size="9.00" fill="#000000">registry</text>
</a>
</g>
</g>
<!-- registry&#45;&gt;plugin -->
<g id="edge20" class="edge">
<title>registry&#45;&gt;plugin</title>
<path fill="none" stroke="#000000" d="M27,-347.8468C27,-337.9251 27,-325.4167 27,-314.2492"/>
<polygon fill="#000000" stroke="#000000" points="30.5001,-314.0814 27,-304.0814 23.5001,-314.0814 30.5001,-314.0814"/>
<text text-anchor="middle" x="37" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00" fill="#000000">has n</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

336
docs/index.md Normal file
View file

@ -0,0 +1,336 @@
---
short-description: GStreamer core API reference.
...
# GStreamer Core
GStreamer is a streaming media framework. It uses graphs of elements
which operate on data. The functionality to process media is provided by
plug-ins which provide features like elements, typefinding, and so on.
This allows new functionality to be added simply by installing new
plug-ins.
GStreamer is cross-platform and works on most UNIX-like platforms as
well as Windows. It is released under the GNU Library General Public
License (GNU LGPL).
![ Relation between gstreamer core objects. ]
[ Relation between gstreamer core objects. ]: images/gst-universe.svg
## Building on UNIX
On UNIX, GStreamer uses the standard GNU build system, using autoconf
for package configuration and resolving portability issues, automake for
building makefiles that comply with the GNU Coding Standards, and
libtool for building shared libraries on multiple platforms. The normal
sequence for compiling and installing the GStreamer library is thus:
`./configure` `make` `make install`
The standard options provided by GNU autoconf may be passed to the
`configure` script. Please see the autoconf documentation or run
`./configure --help` for information about the standard options.
In addition there are several options to activate or deactivate
features. E.g. passing `--disable-gst-debug` to `configure` will turn
the debugging subsystem into a non-functional stub and remove all macro
based invocations from within the library (and anything compiled against
the library afterwards.)
If library size matters and one builds in a controlled environment, it
is also possible to totally remove subsystem code. This is intentionally
not offered as a configure option as it causes an ABI break. Code built
against a version of GStreamer without these modifications needs to be
recompiled.
`make CFLAGS="-DGST_REMOVE_DEPRECATED -DGST_REMOVE_DISABLED"`
- `GST_REMOVE_DEPRECATED` - Omit deprecated functions from the
library.
- `GST_REMOVE_DISABLED` - Omit stubs for disabled subsystems from the
library.
## Building GStreamer Applications
Applications and libraries can use `pkg-config` to get all the needed
compiler and linker flags to build against GStreamer. Please note that
GStreamer is split into several libraries itself.
`pkg-config --list-all | grep gstreamer` will list the available
libraries.
## Running and debugging GStreamer Applications
### Environment variables
GStreamer inspects a few of environment variables in addition to
standard variables like LANG, PATH or HOME.
**GST_PLUGIN_SYSTEM_PATH, GST_PLUGIN_SYSTEM_PATH_1_0.**
This environment variable can be set to a colon-separated list of paths
(or semicolon-separated list on Windows). If this variable is not set,
GStreamer will fill in this list for you with
- plug-ins in the user's home directory, or rather the user's "data
home" directory according to the xdg base dir specification. Usually
this will be a directory called `plugins` inside the
`.local/share/gstreamer-GST_API_VERSION` directory in the user's
home directory by default, though this search path may change if the
XDG_DATA_HOME environment variable is set.
- plug-ins installed system-wide. On this system, they are stored in
`GST_PLUGINS_DIR`.
GStreamer will scan these paths for GStreamer plug-ins. These plug-ins
will be loaded after the plug-ins in the GST_PLUGIN_PATH variable
below. The paths are scanned in the given order. This allows a user to
override system-installed plug-ins with his own versions.
The GST_PLUGIN_SYSTEM_PATH_1_0 variant is useful if both the old
GStreamer 0.10 version and the new GStreamer 1.0 version need to be
pointed to new plugin paths. The latter will use the _1_0 variant over
the non-versioned one if it is set.
Setting this variable to an empty string will cause GStreamer not to
scan any system paths at all for plug-ins. This can be useful if you're
running uninstalled (for development purposes) or while running
testsuites.
**GST_PLUGIN_PATH, GST_PLUGIN_PATH_1_0.**
This environment variable can be set to a colon-separated list of paths
(or a semicolon-separated list on Windows). GStreamer will scan these
paths for GStreamer plug-ins. These plug-ins will be loaded in addition
to, and before, the plug-ins in the system paths.
The GST_PLUGIN_PATH_1_0 variant is useful if both the old GStreamer
0.10 version and the new GStreamer 1.0 version need to be pointed to new
plugin paths. The latter will use the _1_0 variant over the
non-versioned one if it is set.
**GST_DEBUG.**
If GStreamer has been configured with `--enable-gst-debug=yes`, this
variable can be set to a list of debug options, which cause GStreamer to
print out different types of debugging information to stderr.
The variable takes a comma-separated list of "category_name:level"
pairs to set specific levels for the individual categories. The level
value ranges from 0 (nothing) to 9 (MEMDUMP).
* 1 - `ERROR`: Logs all fatal errors. These are errors that do not allow the core
or elements to perform the requested action. The application can
still recover if programmed to handle the conditions that triggered
the error.
* 2 - `WARNING`: Logs all warnings. Typically these are non-fatal, but user-visible
problems are expected to happen.
* 3 - `FIXME`: Logs all fixme messages. Fixme messages are messages that indicate
that something in the executed code path is not fully implemented or
handled yet. The purpose of this message is to make it easier to
spot incomplete/unfinished pieces of code when reading the debug
log.
* 4 - `INFO`: Logs all informational messages. These are typically used for events
in the system that only happen once, or are important and rare
enough to be logged at this level.
* 5 - `DEBUG`: Logs all debug messages. These are general debug messages for events
that happen only a limited number of times during an object's
lifetime; these include setup, teardown, change of parameters, ...
* 6 - `LOG`: Logs all log messages. These are messages for events that happen
repeatedly during an object's lifetime; these include streaming and
steady-state conditions.
* 7 - `TRACE`: Logs all trace messages. These messages for events that happen
repeatedly during an object's lifetime such as the ref/unref cycles.
* 9 - `MEMDUMP`: Log all memory dump messages. Memory dump messages are used to log
(small) chunks of data as memory dumps in the log. They will be
displayed as hexdump with ASCII characters.
The category_name can contain "`*"` as a wildcard.
For example, setting GST_DEBUG to `GST_AUTOPLUG:6,GST_ELEMENT_*:4`,
will cause the `GST_AUTOPLUG` category to be logged at full `LOG` level,
while all categories starting with `GST_ELEMENT_` will be logged at
`INFO` level.
To get all possible debug output, set GST_DEBUG to `*:9`. For debugging
purposes a `*:6` debug log is usually the most useful, as it contains
all important information, but hides a lot of noise such as refs/unrefs.
For bug reporting purposes, a `*:6` log is also what will be requested
usually. It's often also worth running with `*:3` to see if there are
any non-fatal errors or warnings that might be related to the problem at
hand.
Since GStreamer 1.2 it is also possible to specify debug levels by name,
e.g. GST_DEBUG=*:WARNING,*audio*:LOG
**GST_DEBUG_NO_COLOR.**
Set this environment variable to any value ("1" typically) to switch off
colouring in GST_DEBUG output. This has the same effect as specifying
the `--gst-debug-no-color` or `--gst-debug-color-mode`=off command line
option to well-behaved GStreamer applications (ie. those that pass
command-line options correctly to GStreamer). This is particularly
useful to reduce the size of debug output and also allows for the output
to be compressed much better than with colours turned on.
Has the same effect as setting GST_DEBUG_COLOR_MODE environment
variable to "off".
**GST_DEBUG_COLOR_MODE.**
Set this environment variable to change log colouring in GST_DEBUG
output. Possible values:
* `on`: Enables debug log output coloring. Uses default coloring method for
current platform. This is the default.
* `off`: Disables debug log output coloring. This has the same effect as
specifying the `--gst-debug-color-mode`=off command line option to
well-behaved GStreamer applications (ie. those that pass
command-line options correctly to GStreamer). This is particularly
useful to reduce the size of debug output and also allows for the
output to be compressed much better than with colours turned on.
Has the same effect as setting GST_DEBUG_NO_COLOR environment
variable to any value.
* `auto`: Same as `on`.
* `disable`: Same as `off`.
* `unix`: Enables debug log output coloring and forces the use of UNIX termial
codes for coloring, even if this method is not normally used on
current platform. This has the same effect as specifying the
`--gst-debug-color-mode`=unix command line option to well-behaved
GStreamer applications (ie. those that pass command-line options
correctly to GStreamer). This is particularly useful to dump debug
output into a file on non-UNIX platforms to be sent to developers
who have viewers that support UNIX terminal codes.
**GST_DEBUG_OPTIONS.**
This environment variable can be used to tweak the behaviour of the
debugging system. Currently the only options supported are "pretty-tags"
and "full-tags". In "pretty-tags" mode (the default), taglists in the
debug log will be serialized so that only the first few and last few
bytes of a buffer-type tag will be serialized into the log, to avoid
dumping hundreds of lines of useless output into the log in case of
large image tags and the like.
**GST_DEBUG_DUMP_DOT_DIR.**
Set this environment variable to a path to turn on all
#GST_DEBUG_BIN_TO_DOT_FILE or
#GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS calls and have the dot files
in that location.
This will only work if the application in question makes these calls in
strategic places (like when the pipeline state changes or an error
occurs). gst-launch-GST_API_VERSION is one such application.
These .dot files can then be turned into images using the 'dot' utility
from the graphviz set of tools, like this:
`dot foo.dot -Tsvg -o foo.svg` or `dot foo.dot -Tpng -o foo.png` or
`dot foo.dot -Tjpg -o foo.jpg`.
There is also a utility called `xdot` which allows you to view the dot
file directly without converting it first.
**GST_REGISTRY, GST_REGISTRY_1_0.**
Set this environment variable to make GStreamer use a different file for
the plugin cache / registry than the default one. This is useful when
operating in a separate environment which should not affect the default
cache in the user's home directory.
**GST_REGISTRY_FORK.**
Set this environment variable to "no" to prevent GStreamer from forking
on startup in order to update the plugin registry. This is useful for
debugging purposes, but should not be used under normal circumstances,
since it means that plugins may be loaded into memory even if they are
not needed by the application.
**GST_REGISTRY_UPDATE.**
Set this environment variable to "no" to prevent GStreamer from updating
the plugin registry. This is useful for embedded device which is not
updating the plugins frequently, it will save time when doing
gst_init().
**GST_TRACE.**
Enable memory allocation tracing. Most GStreamer objects have support
for tracing the number of unfreed objects and their memory pointers.
The variable takes a comma-separated list of tracing options to enable.
* live: Counts all live objects and dumps an overview of the number of
unfreed objects at program exit.
* mem-live: Keep track of the unfreed memory pointers and dump an overview of
all unfreed memory at program exit. Together with a level 9 debug
log this can be used to follow the lifecycle of leaked objects in
order to track down where they are leaked. This can be useful for
debugging memory leaks in situations where tools such as valgrind
are not available, or not an option.
Use `all` to enable all tracing flags.
**GST_DEBUG_FILE.**
Set this variable to a file path to redirect all GStreamer debug
messages to this file. If left unset, debug messages with be output unto
the standard error.
**ORC_CODE.**
Useful Orc environment variable. Set ORC_CODE=debug to enable debuggers
such as gdb to create useful backtraces from Orc-generated code. Set
ORC_CODE=backup or ORC_CODE=emulate if you suspect Orc's SIMD code
generator is producing incorrect code (Quite a few important GStreamer
plugins like videotestsrc, audioconvert or audioresample use Orc). One
can also combine flags like ORC_CODE=backup,debug.
**G_DEBUG.**
Useful GLib environment variable. Set G_DEBUG=fatal_warnings to make
GStreamer programs abort when a critical warning such as an assertion
failure occurs. This is useful if you want to find out which part of the
code caused that warning to be triggered and under what circumstances.
Simply set G_DEBUG as mentioned above and run the program in gdb (or
let it core dump). Then get a stack trace in the usual way.
**G_SLICE.**
Useful GLib environment variable. Set G_SLICE=always-malloc when
running GStreamer programs in valgrind, or debugging memory leaks with
other tools. See the GLib API reference for more details.
**GST_TAG_ENCODING.**
Try this character encoding first for tag-related strings where the
encoding is not defined and which are not UTF-8 already. By default the
current locale will be tried (if not UTF-8).
**GST_TAG_ID3_ENCODING.**
Try this character encoding first for ID3 tag-related strings where the
encoding is not defined and which are not UTF-8 already. By default the
current locale will be tried (if not UTF-8).
**GST_TAG_ID3V1_ENCODING.**
Try this character encoding first for ID3v1 tag-related strings where
the encoding does not look like UTF-8.
**GST_GL_WINDOW.**
Influences the window system to use by the GStreamer OpenGL library.
Common values are 'x11', 'wayland', 'win32' or 'cocoa'.
**GST_GL_PLATFORM.**
Influences the OpenGL platform to use by the GStreamer OpenGL library.
Common values are 'egl', 'glx', 'wgl' or 'cgl'.
**GST_GL_API.**
Influences the OpenGL API requested by the OpenGL platform. Common
values are 'opengl' or 'gles2'.

3
docs/libs/base/index.md Normal file
View file

@ -0,0 +1,3 @@
# Base and Utility classes
`gstreamer-base` provides some base classes to be extended by elements and utility classes that are most useful for plugin developers.

View file

@ -0,0 +1,4 @@
gi-index
gstbitreader.h
gstbytereader.h
gstbytewriter.h

3
docs/libs/check/index.md Normal file
View file

@ -0,0 +1,3 @@
# Check Unit Testing
`gstreamer-check` provides functionality for writing unit tests that use the check framework.

View file

@ -0,0 +1,2 @@
gi-index
gstcheck.h

View file

@ -0,0 +1,3 @@
# Dynamic Parameter Control
`gstreamer-controller` provides functionality to animate element properties over time.

View file

@ -0,0 +1 @@
gi-index

1
docs/libs/index.md Normal file
View file

@ -0,0 +1 @@
# GStreamer core libraries API

3
docs/libs/net/index.md Normal file
View file

@ -0,0 +1,3 @@
# Network Classes
`gstreamer-net-1.0` provides network elements and objects.

View file

@ -0,0 +1 @@
gi-index

144
docs/meson.build Normal file
View file

@ -0,0 +1,144 @@
build_hotdoc = false
if meson.is_cross_build()
if get_option('doc').enabled()
error('Documentation enabled but building the doc while cross building is not supported yet.')
endif
message('Documentation not built as building it while cross building is not supported yet.')
subdir_done()
endif
hotdoc_plugin_scanner = executable('gst-hotdoc-plugins-scanner',
'gst-hotdoc-plugins-scanner.c',
c_args : gst_c_args,
include_directories : [configinc],
dependencies : [gobject_dep, gmodule_dep, glib_dep, gst_dep],
install_dir : helpers_install_dir,
link_with: [printf_lib],
install: true,
)
configure_file(
input: 'gst-plugins-doc-cache-generator.py',
output: 'gst-plugins-doc-cache-generator',
copy: true,
install_dir : helpers_install_dir,
)
plugins_cache_generator = find_program(join_paths(meson.current_build_dir(), 'gst-plugins-doc-cache-generator'))
plugins_cache = join_paths(meson.current_source_dir(), 'plugins', 'gst_plugins_cache.json')
plugins_doc_dep = custom_target('build-doc-cache',
build_by_default: true,
command: [plugins_cache_generator, plugins_cache, '@OUTPUT@', '@INPUT@'],
input: plugins,
output: 'gst_plugins_cache.json',
depends: [hotdoc_plugin_scanner],
)
hotdoc_p = find_program('hotdoc', required: get_option('doc'))
if not hotdoc_p.found()
message('Hotdoc not found, not building the documentation')
subdir_done()
endif
hotdoc = import('hotdoc')
required_hotdoc_extensions = ['gi-extension', 'gst-extension']
foreach extension: required_hotdoc_extensions
if not hotdoc.has_extensions(extension)
if get_option('doc').enabled()
error('Documentation enabled but @0@ missing'.format(extension))
endif
message('@0@ extension not found, not building documentation'.format(extension))
subdir_done()
endif
endforeach
if not build_gir
if get_option('doc').enabled()
error('Documentation enabled but introspection not built.')
endif
message('Introspection not built, can\'t build the documentation')
subdir_done()
endif
all_plugins_paths = []
foreach l: plugins
all_plugins_paths += l.full_path()
endforeach
build_hotdoc = true
docconf = configuration_data()
docconf.set('GST_API_VERSION', apiversion)
version_entities = configure_file(input : 'version.in',
output : 'gst_api_version.md',
configuration : docconf)
gst_excludes = []
foreach h: ['gettext.h', 'glib-compat-private.h', 'glib-compat.h',
'gst-i18n-app.h', 'gst-i18n-lib.h', 'gst_private.h',
'gstelementdetails.h', 'gstmacros.h', 'gstmarshal.h',
'math-compat.h', 'parse/grammar.tab.h',
'../libs/gst/base/gstindex.h',
'../libs/gst/base/gstindex.c',
'parser/grammar.tab.pre.h', 'parse/parse_lex.h', 'types.h',
'gst-printf.h', 'printf-args.h', 'printf-extension.h',
'printf-parse.h', 'vasnprintf.h', 'gstregistrybinary.c',
'gstregistrybinary.h', 'gstpluginloader.h', 'gstpluginloader.c']
gst_excludes += [join_paths(meson.current_source_dir(), '..', 'gst', h)]
endforeach
libs_doc = [hotdoc.generate_doc('gstreamer',
project_version: apiversion,
gi_c_sources: '../gst/*.[hc]',
gi_sources: [gst_gir[0].full_path()],
gi_c_source_filters: gst_excludes,
sitemap: 'gst/sitemap.txt',
index: 'gst/index.md',
gi_index: 'gst/gi-index.md',
gi_smart_index: true,
gi_c_source_roots: [join_paths(meson.current_source_dir(), '../gst/'), ],
dependencies: [gst_dep, glib_dep, gobject_dep, gmodule_dep, hotdoc_plugin_scanner],
extra_assets: [join_paths(meson.current_source_dir(), 'images')],
)]
libs = [
['base', gst_base_gir, gst_base_dep],
['controller', gst_controller_gir, gst_controller_dep,],
['net', gst_net_gir, gst_net_dep],
['check', gst_check_gir, gst_check_dep],
]
foreach lib: libs
name = lib[0]
gir = lib[1]
deps = [lib[2], gir]
libs_doc += [hotdoc.generate_doc('gstreamer-' + name,
project_version: apiversion,
gi_c_sources: ['../libs/gst/' + name + '/*.[hc]'],
gi_c_source_filters: gst_excludes,
gi_sources: gir[0].full_path(),
gi_c_source_roots: [join_paths(meson.current_source_dir(), '../libs/gst/' + name), ],
sitemap: join_paths('libs', name, 'sitemap.txt'),
index: join_paths('libs/', name, 'index.md'),
gi_index: join_paths('libs/', name, 'index.md'),
gi_smart_index: true,
gi_order_generated_subpages: true,
dependencies: deps + [hotdoc_plugin_scanner],
install: false,
)]
endforeach
plugins_doc = [hotdoc.generate_doc('GStreamer-core-plugins',
project_version: apiversion,
sitemap: 'plugins/sitemap.txt',
index: 'plugins/index.md',
gst_index: 'plugins/index.md',
gst_smart_index: true,
gst_c_sources: ['../plugins/elements/*.c', '../plugins/elements/*.h'],
dependencies: [plugins_doc_dep],
gst_cache_file: plugins_cache,
)]

View file

@ -1,95 +0,0 @@
GST_DOC_SCANOBJ = $(top_srcdir)/common/gstdoc-scangobj
## Process this file with automake to produce Makefile.in
# The name of the module, e.g. 'glib'.
#DOC_MODULE=gst-plugins-libs-@GST_API_VERSION@
MODULE=gstreamer
DOC_MODULE=$(MODULE)-plugins
# for upload-doc.mak
DOC=$(MODULE)-plugins
FORMATS=html
html: html-build.stamp
include $(top_srcdir)/common/upload-doc.mak
# Extra environment needed for Core only...
INSPECT_EXTRA_ENVIRONMENT= \
GST_PLUGIN_SCANNER_1_0=$(top_builddir)/libs/gst/helpers/gst-plugin-scanner
# The top-level SGML file. Change it if you want.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
# The directory containing the source code.
# gtk-doc will search all .c & .h files beneath here for inline comments
# documenting functions and macros.
DOC_SOURCE_DIR = $(top_srcdir)/plugins/elements $(top_srcdir)/plugins/tracers
# Extra options to supply to gtkdoc-scan.
SCAN_OPTIONS=
# Extra options to supply to gtkdoc-mkdb.
MKDB_OPTIONS=--sgml-mode
# Extra options to supply to gtkdoc-fixref.
FIXXREF_OPTIONS=--extra-dir=$(top_builddir)/docs/gst/html \
--extra-dir=$(top_builddir)/docs/libs/html \
--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
--extra-dir=$(datadir)/gtk-doc/html
# Used for dependencies.
HFILE_GLOB=$(top_srcdir)/plugins/elements/*.h $(top_srcdir)/plugins/tracers/*.h
CFILE_GLOB=$(top_srcdir)/plugins/elements/*.c $(top_srcdir)/plugins/tracers/*.c
# Header files to ignore when scanning.
IGNORE_HFILES =
IGNORE_CFILES =
# we add all .h files of elements that have signals/args we want
# sadly this also pulls in the private methods - maybe we should
# move those around in the source ?
# also, we should add some stuff here conditionally based on whether
# or not the plugin will actually build
# but I'm not sure about that - it might be this Just Works given that
# the registry won't have the element
EXTRA_HFILES = \
$(top_srcdir)/plugins/elements/gstcapsfilter.h \
$(top_srcdir)/plugins/elements/gstdataurisrc.h \
$(top_srcdir)/plugins/elements/gstdownloadbuffer.h \
$(top_srcdir)/plugins/elements/gstfakesrc.h \
$(top_srcdir)/plugins/elements/gstfakesink.h \
$(top_srcdir)/plugins/elements/gstfdsink.h \
$(top_srcdir)/plugins/elements/gstfdsrc.h \
$(top_srcdir)/plugins/elements/gstfilesrc.h \
$(top_srcdir)/plugins/elements/gstfilesink.h \
$(top_srcdir)/plugins/elements/gstidentity.h \
$(top_srcdir)/plugins/elements/gstinputselector.h \
$(top_srcdir)/plugins/elements/gstmultiqueue.h \
$(top_srcdir)/plugins/elements/gstoutputselector.h \
$(top_srcdir)/plugins/elements/gstqueue.h \
$(top_srcdir)/plugins/elements/gstqueue2.h \
$(top_srcdir)/plugins/elements/gsttypefindelement.h \
$(top_srcdir)/plugins/elements/gsttee.h \
$(top_srcdir)/plugins/elements/gstvalve.h
# Images to copy into HTML directory.
HTML_IMAGES =
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
content_files =
# Other files to distribute.
extra_files =
# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
# contains GtkObjects/GObjects and you want to document signals and properties.
GTKDOC_CFLAGS = $(GST_OBJ_CFLAGS) -I$(top_builddir) -I$(top_builddir)/libs
GTKDOC_LIBS = $(GST_OBJ_LIBS)
# If you need to override some of the declarations, place them in this file
# and uncomment this line.
#DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
DOC_OVERRIDES =
include $(top_srcdir)/common/gtk-doc-plugins.mak

File diff suppressed because it is too large Load diff

View file

@ -1,58 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY % version-entities SYSTEM "version.entities">
%version-entities;
]>
<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
<title>GStreamer Core Plugins &GST_API_VERSION; Plugins Reference Manual</title>
<releaseinfo>
for GStreamer Core Plugins &GST_API_VERSION; (&GST_VERSION;)
The latest version of this documentation can be found on-line at
<ulink role="online-location" url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/</ulink>.
</releaseinfo>
</bookinfo>
<chapter>
<title>gstreamer Elements</title>
<xi:include href="xml/element-capsfilter.xml" />
<xi:include href="xml/element-concat.xml" />
<xi:include href="xml/element-dataurisrc.xml" />
<xi:include href="xml/element-downloadbuffer.xml" />
<xi:include href="xml/element-fakesink.xml" />
<xi:include href="xml/element-fakesrc.xml" />
<xi:include href="xml/element-fdsink.xml" />
<xi:include href="xml/element-fdsrc.xml" />
<xi:include href="xml/element-filesink.xml" />
<xi:include href="xml/element-filesrc.xml" />
<xi:include href="xml/element-funnel.xml" />
<xi:include href="xml/element-identity.xml" />
<xi:include href="xml/element-input-selector.xml" />
<xi:include href="xml/element-multiqueue.xml" />
<xi:include href="xml/element-output-selector.xml" />
<xi:include href="xml/element-queue2.xml" />
<xi:include href="xml/element-queue.xml" />
<xi:include href="xml/element-streamiddemux.xml" />
<xi:include href="xml/element-tee.xml" />
<xi:include href="xml/element-typefind.xml" />
<xi:include href="xml/element-valve.xml" />
</chapter>
<chapter>
<title>gstreamer Tracers</title>
<xi:include href="xml/element-latencytracer.xml" />
<xi:include href="xml/element-leakstracer.xml" />
<xi:include href="xml/element-logtracer.xml" />
<xi:include href="xml/element-rusagetracer.xml" />
<xi:include href="xml/element-statstracer.xml" />
</chapter>
<chapter>
<title>gstreamer Plugins</title>
<xi:include href="xml/plugin-coreelements.xml" />
<xi:include href="xml/plugin-coretracers.xml" />
</chapter>
</book>

View file

@ -1,430 +0,0 @@
<SECTION>
<FILE>element-capsfilter</FILE>
<TITLE>capsfilter</TITLE>
GstCapsFilter
GstCapsFilterCapsChangeMode
<SUBSECTION Standard>
GstCapsFilterClass
GST_CAPS_FILTER
GST_CAPS_FILTER_CAST
GST_IS_CAPS_FILTER
GST_CAPS_FILTER_CLASS
GST_IS_CAPS_FILTER_CLASS
GST_TYPE_CAPS_FILTER
<SUBSECTION Private>
gst_caps_filter_get_type
</SECTION>
<SECTION>
<FILE>element-concat</FILE>
<TITLE>concat</TITLE>
GstConcat
<SUBSECTION Standard>
GstConcatClass
GST_CONCAT
GST_CONCAT_CAST
GST_IS_CONCAT
GST_CONCAT_CLASS
GST_IS_CONCAT_CLASS
GST_TYPE_CONCAT
<SUBSECTION Private>
gst_concat_get_type
</SECTION>
<SECTION>
<FILE>element-dataurisrc</FILE>
<TITLE>dataurisrc</TITLE>
GstDataURISrc
<SUBSECTION Standard>
GstDataURISrcClass
GST_DATA_URI_SRC
GST_DATA_URI_SRC_CAST
GST_IS_DATA_URI_SRC
GST_DATA_URI_SRC_CLASS
GST_IS_DATA_URI_SRC_CLASS
GST_TYPE_DATA_URI_SRC
<SUBSECTION Private>
gst_data_uri_src_get_type
</SECTION>
<SECTION>
<FILE>element-downloadbuffer</FILE>
<TITLE>downloadbuffer</TITLE>
GstDownloadBuffer
<SUBSECTION Standard>
GstDownloadBufferSize
GstDownloadBufferClass
GST_DOWNLOAD_BUFFER
GST_DOWNLOAD_BUFFER_CAST
GST_IS_DOWNLOAD_BUFFER
GST_DOWNLOAD_BUFFER_CLASS
GST_IS_DOWNLOAD_BUFFER_CLASS
GST_TYPE_DOWNLOAD_BUFFER
<SUBSECTION Private>
gst_download_buffer_get_type
</SECTION>
<SECTION>
<FILE>element-fakesink</FILE>
<TITLE>fakesink</TITLE>
GstFakeSink
GstFakeSinkStateError
<SUBSECTION Standard>
GstFakeSinkClass
GST_FAKE_SINK
GST_FAKE_SINK_CAST
GST_IS_FAKE_SINK
GST_FAKE_SINK_CLASS
GST_IS_FAKE_SINK_CLASS
GST_TYPE_FAKE_SINK
<SUBSECTION Private>
gst_fake_sink_get_type
</SECTION>
<SECTION>
<FILE>element-fakesrc</FILE>
<TITLE>fakesrc</TITLE>
GstFakeSrc
GstFakeSrcDataType
GstFakeSrcFillType
GstFakeSrcOutputType
GstFakeSrcSizeType
<SUBSECTION Standard>
GstFakeSrcClass
GST_FAKE_SRC
GST_IS_FAKE_SRC
GST_FAKE_SRC_CLASS
GST_IS_FAKE_SRC_CLASS
GST_TYPE_FAKE_SRC
<SUBSECTION Private>
gst_fake_src_get_type
</SECTION>
<SECTION>
<FILE>element-fdsink</FILE>
<TITLE>fdsink</TITLE>
GstFdSink
<SUBSECTION Standard>
GstFdSinkClass
GST_FD_SINK
GST_FD_SINK_CAST
GST_IS_FD_SINK
GST_FD_SINK_CLASS
GST_IS_FD_SINK_CLASS
GST_TYPE_FD_SINK
<SUBSECTION Private>
gst_fd_sink_get_type
</SECTION>
<SECTION>
<FILE>element-fdsrc</FILE>
<TITLE>fdsrc</TITLE>
GstFdSrc
<SUBSECTION Standard>
GstFdSrcClass
GST_FD_SRC
GST_IS_FD_SRC
GST_FD_SRC_CLASS
GST_IS_FD_SRC_CLASS
GST_TYPE_FD_SRC
<SUBSECTION Private>
gst_fd_src_get_type
</SECTION>
<SECTION>
<FILE>element-filesink</FILE>
<TITLE>filesink</TITLE>
GstFileSink
GstFileSinkBufferMode
<SUBSECTION Standard>
GstFileSinkClass
GST_FILE_SINK
GST_FILE_SINK_CAST
GST_IS_FILE_SINK
GST_FILE_SINK_CLASS
GST_IS_FILE_SINK_CLASS
GST_TYPE_FILE_SINK
GST_TYPE_FILE_SINK_BUFFER_MODE
<SUBSECTION Private>
gst_file_sink_get_type
</SECTION>
<SECTION>
<FILE>element-filesrc</FILE>
<TITLE>filesrc</TITLE>
GstFileSrc
<SUBSECTION Standard>
GstFileSrcClass
GST_FILE_SRC
GST_FILE_SRC_CAST
GST_IS_FILE_SRC
GST_FILE_SRC_CLASS
GST_IS_FILE_SRC_CLASS
GST_TYPE_FILE_SRC
<SUBSECTION Private>
gst_file_src_get_type
</SECTION>
<SECTION>
<FILE>element-funnel</FILE>
<TITLE>funnel</TITLE>
GstFunnel
<SUBSECTION Standard>
GstFunnelClass
GST_FUNNEL
GST_IS_FUNNEL
GST_FUNNEL_CLASS
GST_IS_FUNNEL_CLASS
GST_TYPE_FUNNEL
<SUBSECTION Private>
gst_funnel_get_type
</SECTION>
<SECTION>
<FILE>element-identity</FILE>
<TITLE>identity</TITLE>
GstIdentity
<SUBSECTION Standard>
GstIdentityClass
GST_IDENTITY
GST_IS_IDENTITY
GST_IDENTITY_CLASS
GST_IS_IDENTITY_CLASS
GST_TYPE_IDENTITY
<SUBSECTION Private>
gst_identity_get_type
</SECTION>
<SECTION>
<FILE>element-input-selector</FILE>
<TITLE>input-selector</TITLE>
GstInputSelector
GstInputSelectorSyncMode
<SUBSECTION Standard>
GstInputSelectorClass
GST_INPUT_SELECTOR
GST_IS_INPUT_SELECTOR
GST_INPUT_SELECTOR_CLASS
GST_IS_INPUT_SELECTOR_CLASS
GST_TYPE_INPUT_SELECTOR
GST_INPUT_SELECTOR_BROADCAST
GST_INPUT_SELECTOR_GET_COND
GST_INPUT_SELECTOR_GET_LOCK
GST_INPUT_SELECTOR_LOCK
GST_INPUT_SELECTOR_UNLOCK
GST_INPUT_SELECTOR_WAIT
<SUBSECTION Private>
gst_input_selector_get_type
</SECTION>
<SECTION>
<FILE>element-latencytracer</FILE>
<TITLE>latencytracer</TITLE>
GstLatencyTracer
<SUBSECTION Standard>
GstLatencyTracerClass
GST_LATENCY_TRACER
GST_LATENCY_TRACER_CAST
GST_IS_LATENCY_TRACER
GST_LATENCY_TRACER_CLASS
GST_IS_LATENCY_TRACER_CLASS
GST_TYPE_LATENCY_TRACER
<SUBSECTION Private>
gst_latency_tracer_get_type
</SECTION>
<SECTION>
<FILE>element-leakstracer</FILE>
<TITLE>leakstracer</TITLE>
GstLeaksTracer
<SUBSECTION Standard>
GstLeaksTracerClass
GST_LEAKS_TRACER
GST_LEAKS_TRACER_CAST
GST_IS_LEAKS_TRACER
GST_LEAKS_TRACER_CLASS
GST_IS_LEAKS_TRACER_CLASS
GST_TYPE_LEAKS_TRACER
<SUBSECTION Private>
gst_leaks_tracer_get_type
</SECTION>
<SECTION>
<FILE>element-logtracer</FILE>
<TITLE>logtracer</TITLE>
GstLogTracer
<SUBSECTION Standard>
GstLogTracerClass
GST_LOG_TRACER
GST_LOG_TRACER_CAST
GST_IS_LOG_TRACER
GST_LOG_TRACER_CLASS
GST_IS_LOG_TRACER_CLASS
GST_TYPE_LOG_TRACER
<SUBSECTION Private>
gst_log_tracer_get_type
</SECTION>
<SECTION>
<FILE>element-multiqueue</FILE>
<TITLE>multiqueue</TITLE>
GstMultiQueue
<SUBSECTION Standard>
GstMultiQueueClass
GST_MULTI_QUEUE
GST_IS_MULTI_QUEUE
GST_MULTI_QUEUE_CLASS
GST_IS_MULTI_QUEUE_CLASS
GST_TYPE_MULTI_QUEUE
<SUBSECTION Private>
gst_multi_queue_get_type
</SECTION>
<SECTION>
<FILE>element-output-selector</FILE>
<TITLE>output-selector</TITLE>
GstOutputSelector
GstOutputSelectorPadNegotiationMode
<SUBSECTION Standard>
GstOutputSelectorClass
GST_OUTPUT_SELECTOR
GST_IS_OUTPUT_SELECTOR
GST_OUTPUT_SELECTOR_CLASS
GST_IS_OUTPUT_SELECTOR_CLASS
GST_TYPE_OUTPUT_SELECTOR
<SUBSECTION Private>
gst_output_selector_get_type
</SECTION>
<SECTION>
<FILE>element-queue</FILE>
<TITLE>queue</TITLE>
GstQueue
GstQueueLeaky
<SUBSECTION Standard>
GstQueueClass
GST_QUEUE
GST_QUEUE_CAST
GST_IS_QUEUE
GST_QUEUE_CLASS
GST_IS_QUEUE_CLASS
GST_TYPE_QUEUE
<SUBSECTION Private>
GstQueueSize
gst_queue_get_type
GST_QUEUE_CLEAR_LEVEL
</SECTION>
<SECTION>
<FILE>element-queue2</FILE>
<TITLE>queue2</TITLE>
GstQueue2
<SUBSECTION Standard>
GstQueue2Class
GST_QUEUE2
GST_QUEUE2_CAST
GST_IS_QUEUE2
GST_QUEUE2_CLASS
GST_IS_QUEUE2_CLASS
GST_TYPE_QUEUE2
<SUBSECTION Private>
GstQueue2Size
GstQueue2Range
gst_queue2_get_type
</SECTION>
<SECTION>
<FILE>element-rusagetracer</FILE>
<TITLE>rusagetracer</TITLE>
GstRUsageTracer
<SUBSECTION Standard>
GstRUsageTracerClass
GST_RUSAGE_TRACER
GST_RUSAGE_TRACER_CAST
GST_IS_RUSAGE_TRACER
GST_RUSAGE_TRACER_CLASS
GST_IS_RUSAGE_TRACER_CLASS
GST_TYPE_RUSAGE_TRACER
<SUBSECTION Private>
gst_rusage_tracer_get_type
</SECTION>
<SECTION>
<FILE>element-statstracer</FILE>
<TITLE>statstracer</TITLE>
GstStatsTracer
<SUBSECTION Standard>
GstStatsTracerClass
GST_STATS_TRACER
GST_STATS_TRACER_CAST
GST_IS_STATS_TRACER
GST_STATS_TRACER_CLASS
GST_IS_STATS_TRACER_CLASS
GST_TYPE_STATS_TRACER
<SUBSECTION Private>
gst_stats_tracer_get_type
</SECTION>
<SECTION>
<FILE>element-streamiddemux</FILE>
<TITLE>streamiddemux</TITLE>
GstStreamidDemux
<SUBSECTION Standard>
GstStreamidDemuxClass
GST_STREAMID_DEMUX
GST_STREAMID_DEMUX_CAST
GST_IS_STREAMID_DEMUX
GST_STREAMID_DEMUX_CLASS
GST_IS_STREAMID_DEMUX_CLASS
GST_TYPE_STREAMID_DEMUX
<SUBSECTION Private>
gst_streamid_demux_get_type
</SECTION>
<SECTION>
<FILE>element-tee</FILE>
<TITLE>tee</TITLE>
GstTee
GstTeePullMode
<SUBSECTION Standard>
GstTeeClass
GST_TEE
GST_TEE_CAST
GST_IS_TEE
GST_TEE_CLASS
GST_IS_TEE_CLASS
GST_TYPE_TEE
<SUBSECTION Private>
gst_tee_get_type
</SECTION>
<SECTION>
<FILE>element-typefind</FILE>
<TITLE>typefind</TITLE>
GstTypeFindElement
<SUBSECTION Standard>
GstTypeFindElementClass
GST_TYPE_FIND_ELEMENT
GST_IS_TYPE_FIND_ELEMENT
GST_TYPE_FIND_ELEMENT_CLASS
GST_IS_TYPE_FIND_ELEMENT_CLASS
GST_TYPE_TYPE_FIND_ELEMENT
<SUBSECTION Private>
gst_type_find_element_get_type
</SECTION>
<SECTION>
<FILE>element-valve</FILE>
<TITLE>valve</TITLE>
GstValve
<SUBSECTION Standard>
GstValveClass
GST_VALVE
GST_IS_VALVE
GST_VALVE_CLASS
GST_IS_VALVE_CLASS
GST_TYPE_VALVE
<SUBSECTION Private>
gst_valve_get_type
</SECTION>

File diff suppressed because it is too large Load diff

View file

@ -1,62 +0,0 @@
GObject
GInitiallyUnowned
GstObject
GstAllocator
GstAllocatorSysmem
GstBus
GstClock
GstControlBinding
GstControlSource
GstElement
GstBaseSink
GstFakeSink
GstFdSink
GstFileSink
GstBaseSrc
GstDataURISrc
GstFakeSrc
GstFileSrc
GstPushSrc
GstFdSrc
GstBaseTransform
GstCapsFilter
GstIdentity
GstBin
GstPipeline
GstConcat
GstDownloadBuffer
GstFunnel
GstInputSelector
GstMultiQueue
GstOutputSelector
GstQueue
GstQueue2
GstStreamidDemux
GstTee
GstTypeFindElement
GstValve
GstPad
GstMultiQueuePad
GstSelectorPad
GstPadTemplate
GstPlugin
GstPluginFeature
GstDeviceProviderFactory
GstDynamicTypeFactory
GstElementFactory
GstTracerFactory
GstTypeFindFactory
GstRegistry
GstTask
GstTaskPool
GstTracer
GstLatencyTracer
GstLeaksTracer
GstLogTracer
GstRUsageTracer
GstStatsTracer
GstTracerRecord
GInterface
GTypePlugin
GstChildProxy
GstURIHandler

View file

@ -1,7 +0,0 @@
GstBin GstChildProxy
GstDataURISrc GstURIHandler
GstFdSink GstURIHandler
GstFdSrc GstURIHandler
GstFileSink GstURIHandler
GstFileSrc GstURIHandler
GstPipeline GstChildProxy

View file

@ -1 +0,0 @@
GstChildProxy GObject

View file

@ -1,93 +0,0 @@
<SIGNAL>
<NAME>GstTypeFindElement::have-type</NAME>
<RETURNS>void</RETURNS>
<FLAGS>l</FLAGS>
GstTypeFindElement *gsttypefindelement
guint arg1
GstCaps *arg2
</SIGNAL>
<SIGNAL>
<NAME>GstQueue::overrun</NAME>
<RETURNS>void</RETURNS>
<FLAGS>f</FLAGS>
GstQueue *gstqueue
</SIGNAL>
<SIGNAL>
<NAME>GstQueue::pushing</NAME>
<RETURNS>void</RETURNS>
<FLAGS>f</FLAGS>
GstQueue *gstqueue
</SIGNAL>
<SIGNAL>
<NAME>GstQueue::running</NAME>
<RETURNS>void</RETURNS>
<FLAGS>f</FLAGS>
GstQueue *gstqueue
</SIGNAL>
<SIGNAL>
<NAME>GstQueue::underrun</NAME>
<RETURNS>void</RETURNS>
<FLAGS>f</FLAGS>
GstQueue *gstqueue
</SIGNAL>
<SIGNAL>
<NAME>GstMultiQueue::overrun</NAME>
<RETURNS>void</RETURNS>
<FLAGS>f</FLAGS>
GstMultiQueue *gstmultiqueue
</SIGNAL>
<SIGNAL>
<NAME>GstMultiQueue::underrun</NAME>
<RETURNS>void</RETURNS>
<FLAGS>f</FLAGS>
GstMultiQueue *gstmultiqueue
</SIGNAL>
<SIGNAL>
<NAME>GstIdentity::handoff</NAME>
<RETURNS>void</RETURNS>
<FLAGS>l</FLAGS>
GstIdentity *gstidentity
GstBuffer *arg1
</SIGNAL>
<SIGNAL>
<NAME>GstFakeSrc::handoff</NAME>
<RETURNS>void</RETURNS>
<FLAGS>l</FLAGS>
GstFakeSrc *gstfakesrc
GstBuffer *arg1
GstPad *arg2
</SIGNAL>
<SIGNAL>
<NAME>GstFakeSink::handoff</NAME>
<RETURNS>void</RETURNS>
<FLAGS>l</FLAGS>
GstFakeSink *gstfakesink
GstBuffer *arg1
GstPad *arg2
</SIGNAL>
<SIGNAL>
<NAME>GstFakeSink::preroll-handoff</NAME>
<RETURNS>void</RETURNS>
<FLAGS>l</FLAGS>
GstFakeSink *gstfakesink
GstBuffer *arg1
GstPad *arg2
</SIGNAL>
<SIGNAL>
<NAME>GstQueue2::overrun</NAME>
<RETURNS>void</RETURNS>
<FLAGS>f</FLAGS>
GstQueue2 *gstqueue2
</SIGNAL>

View file

@ -1 +0,0 @@
#include <gst/gst.h>

5
docs/plugins/index.md Normal file
View file

@ -0,0 +1,5 @@
---
short-description: GStreamer plugin from GStreamer core
...
# Core Plugin

View file

@ -1,412 +0,0 @@
<plugin>
<name>coreelements</name>
<description>GStreamer core elements</description>
<filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
<basename>libgstcoreelements.so</basename>
<version>1.17.0.1</version>
<license>LGPL</license>
<source>gstreamer</source>
<package>GStreamer git</package>
<origin>Unknown package origin</origin>
<elements>
<element>
<name>capsfilter</name>
<longname>CapsFilter</longname>
<class>Generic</class>
<description>Pass data without modification, limiting formats</description>
<author>David Schleef &lt;ds@schleef.org&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>concat</name>
<longname>Concat</longname>
<class>Generic</class>
<description>Concatenate multiple streams</description>
<author>Sebastian Dröge &lt;sebastian@centricular.com&gt;</author>
<pads>
<caps>
<name>sink_%u</name>
<direction>sink</direction>
<presence>request</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>dataurisrc</name>
<longname>data: URI source element</longname>
<class>Source</class>
<description>Handles data: uris</description>
<author>Philippe Normand &lt;pnormand@igalia.com&gt;, Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
<pads>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>downloadbuffer</name>
<longname>DownloadBuffer</longname>
<class>Generic</class>
<description>Download Buffer element</description>
<author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>fakesink</name>
<longname>Fake Sink</longname>
<class>Sink</class>
<description>Black hole for data</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim@fluendo.com&gt;, Mr. &apos;frag-me-more&apos; Vanderwingo &lt;wingo@fluendo.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>fakesrc</name>
<longname>Fake Source</longname>
<class>Source</class>
<description>Push empty (no data) buffers around</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</author>
<pads>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>fdsink</name>
<longname>Filedescriptor Sink</longname>
<class>Sink/File</class>
<description>Write data to a file descriptor</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>fdsrc</name>
<longname>Filedescriptor Source</longname>
<class>Source/File</class>
<description>Read from a file descriptor</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;</author>
<pads>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>filesink</name>
<longname>File Sink</longname>
<class>Sink/File</class>
<description>Write stream to a file</description>
<author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>filesrc</name>
<longname>File Source</longname>
<class>Source/File</class>
<description>Read from arbitrary point in a file</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;</author>
<pads>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>funnel</name>
<longname>Funnel pipe fitting</longname>
<class>Generic</class>
<description>N-to-1 pipe fitting</description>
<author>Olivier Crete &lt;olivier.crete@collabora.co.uk&gt;</author>
<pads>
<caps>
<name>sink_%u</name>
<direction>sink</direction>
<presence>request</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>identity</name>
<longname>Identity</longname>
<class>Generic</class>
<description>Pass data without modification</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>input-selector</name>
<longname>Input selector</longname>
<class>Generic</class>
<description>N-to-1 input stream selector</description>
<author>Julien Moutte &lt;julien@moutte.net&gt;, Jan Schmidt &lt;thaytan@mad.scientist.com&gt;, Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
<pads>
<caps>
<name>sink_%u</name>
<direction>sink</direction>
<presence>request</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>multiqueue</name>
<longname>MultiQueue</longname>
<class>Generic</class>
<description>Multiple data queue</description>
<author>Edward Hervey &lt;edward@fluendo.com&gt;</author>
<pads>
<caps>
<name>sink_%u</name>
<direction>sink</direction>
<presence>request</presence>
<details>ANY</details>
</caps>
<caps>
<name>src_%u</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>output-selector</name>
<longname>Output selector</longname>
<class>Generic</class>
<description>1-to-N output stream selector</description>
<author>Stefan Kost &lt;stefan.kost@nokia.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src_%u</name>
<direction>source</direction>
<presence>request</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>queue</name>
<longname>Queue</longname>
<class>Generic</class>
<description>Simple data queue</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>queue2</name>
<longname>Queue 2</longname>
<class>Generic</class>
<description>Simple data queue</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>streamiddemux</name>
<longname>Streamid Demux</longname>
<class>Generic</class>
<description>1-to-N output stream by stream-id</description>
<author>HoonHee Lee &lt;hoonhee.lee@lge.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src_%u</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>tee</name>
<longname>Tee pipe fitting</longname>
<class>Generic</class>
<description>1-to-N pipe fitting</description>
<author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src_%u</name>
<direction>source</direction>
<presence>request</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>typefind</name>
<longname>TypeFind</longname>
<class>Generic</class>
<description>Finds the media type of a stream</description>
<author>Benjamin Otte &lt;in7y118@public.uni-hamburg.de&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
<element>
<name>valve</name>
<longname>Valve element</longname>
<class>Filter</class>
<description>Drops buffers and events or lets them through</description>
<author>Olivier Crete &lt;olivier.crete@collabora.co.uk&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>ANY</details>
</caps>
</pads>
</element>
</elements>
</plugin>

View file

@ -1,28 +0,0 @@
<plugin>
<name>coretracers</name>
<description>GStreamer core tracers</description>
<filename>../../plugins/tracers/.libs/libgstcoretracers.so</filename>
<basename>libgstcoretracers.so</basename>
<version>1.17.0.1</version>
<license>LGPL</license>
<source>gstreamer</source>
<package>GStreamer git</package>
<origin>Unknown package origin</origin>
<elements>
<tracer>
<name>latency</name>
</tracer>
<tracer>
<name>leaks</name>
</tracer>
<tracer>
<name>log</name>
</tracer>
<tracer>
<name>rusage</name>
</tracer>
<tracer>
<name>stats</name>
</tracer>
</elements>
</plugin>

1
docs/plugins/sitemap.txt Normal file
View file

@ -0,0 +1 @@
gst-index

1
docs/version.in Normal file
View file

@ -0,0 +1 @@
@GST_API_VERSION@

View file

@ -25,6 +25,13 @@
* @title: GstElement
* @short_description: Abstract base class for all pipeline elements
* @see_also: #GstElementFactory, #GstPad
* @symbols:
* - GST_ELEMENT_METADATA_LONGNAME
* - GST_ELEMENT_METADATA_KLASS
* - GST_ELEMENT_METADATA_DESCRIPTION
* - GST_ELEMENT_METADATA_AUTHOR
* - GST_ELEMENT_METADATA_DOC_URI
* - GST_ELEMENT_METADATA_ICON_NAME
*
* GstElement is the abstract base class needed to construct an element that
* can be used in a GStreamer pipeline. Please refer to the plugin writers

View file

@ -22,6 +22,12 @@
* @title: GstError
* @short_description: Categorized error messages
* @see_also: #GstMessage
* @symbols:
* - gst_error_get_message
* - gst_stream_error_quark
* - gst_core_error_quark
* - gst_resource_error_quark
* - gst_library_error_quark
*
* GStreamer elements can throw non-fatal warnings and fatal errors.
* Higher-level elements and applications can programmatically filter

View file

@ -3050,8 +3050,8 @@ gst_message_parse_streams_selected (GstMessage * message,
* such as bitrate statistics for the given location.
*
* By default, message recipients should treat entries in the order they are
* stored. The recipient should therefore try entry #0 first, and if this
* entry is not acceptable or working, try entry #1 etc. Senders must make
* stored. The recipient should therefore try entry \#0 first, and if this
* entry is not acceptable or working, try entry \#1 etc. Senders must make
* sure that they add entries in this order. However, recipients are free to
* ignore the order and pick an entry that is "best" for them. One example
* would be a recipient that scans the entries for the one with the highest

View file

@ -28,7 +28,7 @@
* to wait on them in a cancellable way
*
* A #GstPoll keeps track of file descriptors much like fd_set (used with
* select()) or a struct pollfd array (used with poll()). Once created with
* select ()) or a struct pollfd array (used with poll ()). Once created with
* gst_poll_new(), the set can be used to wait for file descriptors to be
* readable and/or writable. It is possible to make this wait be controlled
* by specifying %TRUE for the @controllable flag when creating the set (or

View file

@ -262,7 +262,7 @@ if build_gir
endif
gst_incdirs += [configinc]
gst_gen_sources += [gnome.generate_gir(libgst,
gst_gir = gnome.generate_gir(libgst,
sources : gst_sources + gst_headers + gst_enums + [gst_version_h],
namespace : 'Gst',
nsversion : apiversion,
@ -272,7 +272,8 @@ if build_gir
includes : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0' ],
install : true,
extra_args : gst_gir_extra_args,
)]
)
gst_gen_sources += gst_gir
endif
gst_compile_args = []

View file

@ -31,6 +31,17 @@
* SECTION:gstbitreader
* @title: GstBitReader
* @short_description: Reads any number of bits from a memory buffer
* @symbols:
* - gst_bit_reader_skip_unchecked
* - gst_bit_reader_skip_to_byte_unchecked
* - gst_bit_reader_get_bits_uint8_unchecked
* - gst_bit_reader_peek_bits_uint8_unchecked
* - gst_bit_reader_get_bits_uint16_unchecked
* - gst_bit_reader_peek_bits_uint16_unchecked
* - gst_bit_reader_get_bits_uint32_unchecked
* - gst_bit_reader_peek_bits_uint32_unchecked
* - gst_bit_reader_get_bits_uint64_unchecked
* - gst_bit_reader_peek_bits_uint64_unchecked
*
* #GstBitReader provides a bit reader that can read any number of bits
* from a memory buffer. It provides functions for reading any number of bits

View file

@ -33,6 +33,47 @@
* @title: GstByteReader
* @short_description: Reads different integer, string and floating point
* types from a memory buffer
* @symbols:
* - gst_byte_reader_skip_unchecked
* - gst_byte_reader_get_uint8_unchecked
* - gst_byte_reader_peek_uint8_unchecked
* - gst_byte_reader_get_int8_unchecked
* - gst_byte_reader_peek_int8_unchecked
* - gst_byte_reader_get_uint16_le_unchecked
* - gst_byte_reader_get_uint16_be_unchecked
* - gst_byte_reader_peek_uint16_le_unchecked
* - gst_byte_reader_peek_uint16_be_unchecked
* - gst_byte_reader_get_int16_le_unchecked
* - gst_byte_reader_get_int16_be_unchecked
* - gst_byte_reader_peek_int16_le_unchecked
* - gst_byte_reader_peek_int16_be_unchecked
* - gst_byte_reader_get_uint24_le_unchecked
* - gst_byte_reader_get_uint24_be_unchecked
* - gst_byte_reader_peek_uint24_le_unchecked
* - gst_byte_reader_peek_uint24_be_unchecked
* - gst_byte_reader_get_int24_le_unchecked
* - gst_byte_reader_get_int24_be_unchecked
* - gst_byte_reader_peek_int24_le_unchecked
* - gst_byte_reader_peek_int24_be_unchecked
* - gst_byte_reader_get_uint32_le_unchecked
* - gst_byte_reader_get_uint32_be_unchecked
* - gst_byte_reader_peek_uint32_le_unchecked
* - gst_byte_reader_peek_uint32_be_unchecked
* - gst_byte_reader_get_int32_le_unchecked
* - gst_byte_reader_get_int32_be_unchecked
* - gst_byte_reader_peek_int32_le_unchecked
* - gst_byte_reader_peek_int32_be_unchecked
* - gst_byte_reader_get_float32_le_unchecked
* - gst_byte_reader_get_float32_be_unchecked
* - gst_byte_reader_get_float64_le_unchecked
* - gst_byte_reader_get_float64_be_unchecked
* - gst_byte_reader_peek_float32_le_unchecked
* - gst_byte_reader_peek_float32_be_unchecked
* - gst_byte_reader_peek_float64_le_unchecked
* - gst_byte_reader_peek_float64_be_unchecked
* - gst_byte_reader_peek_data_unchecked
* - gst_byte_reader_get_data_unchecked
* - gst_byte_reader_dup_data_unchecked
*
* #GstByteReader provides a byte reader that can read different integer and
* floating point types from a memory buffer. It provides functions for reading

View file

@ -30,6 +30,31 @@
* @title: GstByteWriter
* @short_description: Writes different integer, string and floating point
* types to a memory buffer and allows reading
* @symbols:
* - gst_byte_writer_put_uint8_unchecked
* - gst_byte_writer_put_uint16_be_unchecked
* - gst_byte_writer_put_uint24_be_unchecked
* - gst_byte_writer_put_uint32_be_unchecked
* - gst_byte_writer_put_uint64_be_unchecked
* - gst_byte_writer_put_uint16_le_unchecked
* - gst_byte_writer_put_uint24_le_unchecked
* - gst_byte_writer_put_uint32_le_unchecked
* - gst_byte_writer_put_uint64_le_unchecked
* - gst_byte_writer_put_int8_unchecked
* - gst_byte_writer_put_int16_be_unchecked
* - gst_byte_writer_put_int24_be_unchecked
* - gst_byte_writer_put_int32_be_unchecked
* - gst_byte_writer_put_int64_be_unchecked
* - gst_byte_writer_put_int16_le_unchecked
* - gst_byte_writer_put_int24_le_unchecked
* - gst_byte_writer_put_int32_le_unchecked
* - gst_byte_writer_put_int64_le_unchecked
* - gst_byte_writer_put_float32_be_unchecked
* - gst_byte_writer_put_float64_be_unchecked
* - gst_byte_writer_put_float32_le_unchecked
* - gst_byte_writer_put_float64_le_unchecked
* - gst_byte_writer_put_data_unchecked
* - gst_byte_writer_fill_unchecked
*
* #GstByteWriter provides a byte writer and reader that can write/read different
* integer and floating point types to/from a memory buffer. It provides functions

View file

@ -53,7 +53,7 @@ gst_base = library('gstbase-@0@'.format(apiversion),
if build_gir
gst_gir_extra_args = gir_init_section + [ '--c-include=gst/base/base.h' ]
gst_base_gen_sources += [gnome.generate_gir(gst_base,
gst_base_gir = gnome.generate_gir(gst_base,
sources : gst_base_sources + gst_base_headers,
namespace : 'GstBase',
nsversion : apiversion,
@ -65,7 +65,9 @@ if build_gir
includes : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0', 'Gst-1.0'],
install : true,
extra_args : gst_gir_extra_args,
)]
)
gst_base_gen_sources += [gst_base_gir]
endif
gst_base_dep = declare_dependency(link_with : gst_base,

View file

@ -53,7 +53,7 @@ gst_check_gen_sources = []
if build_gir
gst_gir_extra_args = gir_init_section + [ '--c-include=gst/check/check.h' ]
gst_check_gen_sources += [gnome.generate_gir(gst_check,
gst_check_gir = gnome.generate_gir(gst_check,
sources : gst_check_sources + gst_check_headers,
namespace : 'GstCheck',
nsversion : apiversion,
@ -65,7 +65,8 @@ if build_gir
includes : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0', 'Gst-1.0'],
install : true,
extra_args : gst_gir_extra_args,
)]
)
gst_check_gen_sources += gst_check_gir
endif
gst_check_dep = declare_dependency(link_with : gst_check,

View file

@ -1,6 +1,6 @@
project('gstreamer', 'c',
version : '1.17.0.1',
meson_version : '>= 0.47',
meson_version : '>= 0.48',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])
@ -521,6 +521,7 @@ endif
subdir('pkgconfig')
subdir('tests')
subdir('data')
subdir('docs')
# xgettext is optional (on Windows for instance)
if find_program('xgettext', required : get_option('nls')).found()
@ -529,7 +530,5 @@ if find_program('xgettext', required : get_option('nls')).found()
endif
configure_file(output : 'config.h', configuration : cdata)
run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')
install_data('gst-element-check-1.0.m4', install_dir : join_paths(get_option('datadir'), 'aclocal'))

View file

@ -44,3 +44,5 @@ option('package-name', type : 'string', yield : true,
description : 'package name to use in plugins')
option('package-origin', type : 'string', value : 'Unknown package origin', yield : true,
description : 'package origin URL to use in plugins')
option('doc', type : 'feature', value : 'auto', yield: true,
description: 'Enable documentation.')

View file

@ -22,9 +22,9 @@
/**
* SECTION:element-capsfilter
* @title: capsfilter
* @short_description: enforce limitations on the data format
*
* The element does not modify data as such, but can enforce limitations on the
* data format.
* The element does not modify data as such, but can enforce limitations on the data format.
*
* ## Example launch line
* |[

View file

@ -19,7 +19,11 @@
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
/**
* plugin-coreelements:
*
* GStreamer core elements
*/
#ifdef HAVE_CONFIG_H
# include "config.h"

View file

@ -34,3 +34,5 @@ gst_elements = library('gstcoreelements',
install_dir : plugins_install_dir,
)
pkgconfig.generate(gst_elements, install_dir : plugins_pkgconfig_install_dir)
plugins += [gst_elements]

View file

@ -1,3 +1,4 @@
plugins = []
subdir('elements')
if tracer_hooks
subdir('tracers')

View file

@ -31,7 +31,7 @@
/*
* This is a kind of hacky way to make all the tools use the same version code.
* If anyone knows a less hacky way to get this done, feel free to implement it.
*
*
* It also includes all the files that all the tools require.
*/