doc: Build documentation with hotdoc

This commit is contained in:
Thibault Saunier 2018-10-22 08:22:52 +02:00
parent 5caf822526
commit e7816eba1d
25 changed files with 928 additions and 1735 deletions

View file

@ -1,12 +1,10 @@
DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc --with-bash-completion-dir=no
if BUILD_EXAMPLES
EXAMPLES_SUBDIRS= examples
else
EXAMPLES_SUBDIRS=
endif
SUBDIRS = ges tests tools common m4 pkgconfig docs bindings plugins $(EXAMPLES_SUBDIRS)
SUBDIRS = ges tests tools common m4 pkgconfig bindings plugins $(EXAMPLES_SUBDIRS)
DIST_SUBDIRS = $(SUBDIRS)

View file

@ -114,12 +114,6 @@ AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno")
dnl check for gobject-introspection
GOBJECT_INTROSPECTION_CHECK([0.9.6])
dnl check for documentation tools
AG_GST_DOCBOOK_CHECK
GTK_DOC_CHECK([1.3])
AS_PATH_PYTHON([2.1])
AG_GST_PLUGIN_DOCS([1.3],[2.1])
dnl check for pygobject
AC_SUBST(PYGOBJECT_REQ, 3.0)
PKG_CHECK_MODULES(PYGOBJECT, pygobject-3.0 >= $PYGOBJECT_REQ,
@ -417,9 +411,6 @@ examples/c/Makefile
tests/validate/Makefile
tests/validate/scenarios/Makefile
tools/Makefile
docs/Makefile
docs/version.entities
docs/libs/Makefile
pkgconfig/Makefile
pkgconfig/gst-editing-services.pc
pkgconfig/gst-editing-services-uninstalled.pc

View file

@ -1,14 +0,0 @@
if ENABLE_GTK_DOC
DOCS_SUBDIRS = libs
else
DOCS_SUBDIRS =
endif
SUBDIRS = $(DOCS_SUBDIRS)
DIST_SUBDIRS = libs
EXTRA_DIST = \
version.entities.in
upload:
@if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi

1
docs/base-classes.md Normal file
View file

@ -0,0 +1 @@
# Base classes

669
docs/gst_plugins_cache.json Normal file
View file

@ -0,0 +1,669 @@
{
"nle": {
"description": "GStreamer Non Linear Engine",
"elements": {
"nlecomposition": {
"author": "Wim Taymans <wim.taymans@gmail.com>, Edward Hervey <bilboed@bilboed.com>, Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>, Thibault Saunier <tsaunier@gnome.org>",
"description": "Combines NLE objects",
"hierarchy": [
"NleComposition",
"NleObject",
"GstBin",
"GstElement",
"GstObject",
"GInitiallyUnowned",
"GObject"
],
"klass": "Filter/Editor",
"long-name": "GNonLin Composition",
"name": "nlecomposition",
"pad-templates": {
"src": {
"caps": "ANY",
"direction": "src",
"presence": "always"
}
},
"properties": {
"active": {
"blurb": "Use this object in the NleComposition",
"construct": false,
"construct-only": false,
"default": "true",
"type-name": "gboolean",
"writable": true
},
"async-handling": {
"blurb": "The bin will handle Asynchronous state changes",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"caps": {
"blurb": "Caps used to filter/choose the output stream",
"construct": false,
"construct-only": false,
"default": "ANY",
"type-name": "GstCaps",
"writable": true
},
"duration": {
"blurb": "Outgoing duration (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "9223372036854775807",
"min": "0",
"type-name": "gint64",
"writable": true
},
"expandable": {
"blurb": "Expand to the full duration of the container composition",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"inpoint": {
"blurb": "The media start position (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "18446744073709551615",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": true
},
"media-duration-factor": {
"blurb": "The relative rate caused by this object",
"construct": false,
"construct-only": false,
"default": "1",
"max": "1.79769e+308",
"min": "0.01",
"type-name": "gdouble",
"writable": true
},
"message-forward": {
"blurb": "Forwards all children messages",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"name": {
"blurb": "The name of the object",
"construct": true,
"construct-only": false,
"default": "NULL",
"hotdoc-fixed-default": true,
"type-name": "gchararray",
"writable": true
},
"parent": {
"blurb": "The parent of the object",
"construct": false,
"construct-only": false,
"type-name": "GstObject",
"writable": true
},
"priority": {
"blurb": "The priority of the object (0 = highest priority)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "-1",
"min": "0",
"type-name": "guint",
"writable": true
},
"start": {
"blurb": "The start position relative to the parent (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": true
},
"stop": {
"blurb": "The stop position relative to the parent (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": false
}
},
"rank": "none",
"signals": {
"commit": {
"args": [
"gboolean"
],
"retval": "gboolean"
},
"commited": {
"args": [
"gboolean"
],
"retval": "void"
},
"query-position": {
"args": [],
"retval": "guint64"
}
}
},
"nleoperation": {
"author": "Wim Taymans <wim.taymans@gmail.com>, Edward Hervey <bilboed@bilboed.com>",
"description": "Encapsulates filters/effects for use with NLE Objects",
"hierarchy": [
"NleOperation",
"NleObject",
"GstBin",
"GstElement",
"GstObject",
"GInitiallyUnowned",
"GObject"
],
"klass": "Filter/Editor",
"long-name": "GNonLin Operation",
"name": "nleoperation",
"pad-templates": {
"sink%%d": {
"caps": "ANY",
"direction": "sink",
"presence": "request"
},
"src": {
"caps": "ANY",
"direction": "src",
"presence": "always"
}
},
"properties": {
"active": {
"blurb": "Use this object in the NleComposition",
"construct": false,
"construct-only": false,
"default": "true",
"type-name": "gboolean",
"writable": true
},
"async-handling": {
"blurb": "The bin will handle Asynchronous state changes",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"caps": {
"blurb": "Caps used to filter/choose the output stream",
"construct": false,
"construct-only": false,
"default": "ANY",
"type-name": "GstCaps",
"writable": true
},
"duration": {
"blurb": "Outgoing duration (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "9223372036854775807",
"min": "0",
"type-name": "gint64",
"writable": true
},
"expandable": {
"blurb": "Expand to the full duration of the container composition",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"inpoint": {
"blurb": "The media start position (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "18446744073709551615",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": true
},
"media-duration-factor": {
"blurb": "The relative rate caused by this object",
"construct": false,
"construct-only": false,
"default": "1",
"max": "1.79769e+308",
"min": "0.01",
"type-name": "gdouble",
"writable": true
},
"message-forward": {
"blurb": "Forwards all children messages",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"name": {
"blurb": "The name of the object",
"construct": true,
"construct-only": false,
"default": "NULL",
"hotdoc-fixed-default": true,
"type-name": "gchararray",
"writable": true
},
"parent": {
"blurb": "The parent of the object",
"construct": false,
"construct-only": false,
"type-name": "GstObject",
"writable": true
},
"priority": {
"blurb": "The priority of the object (0 = highest priority)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "-1",
"min": "0",
"type-name": "guint",
"writable": true
},
"sinks": {
"blurb": "Number of input sinks (-1 for automatic handling)",
"construct": false,
"construct-only": false,
"default": "1",
"max": "2147483647",
"min": "-1",
"type-name": "gint",
"writable": true
},
"start": {
"blurb": "The start position relative to the parent (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": true
},
"stop": {
"blurb": "The stop position relative to the parent (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": false
}
},
"rank": "none",
"signals": {
"commit": {
"args": [
"gboolean"
],
"retval": "gboolean"
},
"input-priority-changed": {
"args": [
"GstPad",
"guint"
],
"retval": "void"
}
}
},
"nlesource": {
"author": "Wim Taymans <wim.taymans@gmail.com>, Edward Hervey <bilboed@bilboed.com>",
"description": "Manages source elements",
"hierarchy": [
"NleSource",
"NleObject",
"GstBin",
"GstElement",
"GstObject",
"GInitiallyUnowned",
"GObject"
],
"klass": "Filter/Editor",
"long-name": "GNonLin Source",
"name": "nlesource",
"pad-templates": {
"src": {
"caps": "ANY",
"direction": "src",
"presence": "always"
}
},
"properties": {
"active": {
"blurb": "Use this object in the NleComposition",
"construct": false,
"construct-only": false,
"default": "true",
"type-name": "gboolean",
"writable": true
},
"async-handling": {
"blurb": "The bin will handle Asynchronous state changes",
"construct": false,
"construct-only": false,
"default": "true",
"type-name": "gboolean",
"writable": true
},
"caps": {
"blurb": "Caps used to filter/choose the output stream",
"construct": false,
"construct-only": false,
"default": "ANY",
"type-name": "GstCaps",
"writable": true
},
"duration": {
"blurb": "Outgoing duration (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "9223372036854775807",
"min": "0",
"type-name": "gint64",
"writable": true
},
"expandable": {
"blurb": "Expand to the full duration of the container composition",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"inpoint": {
"blurb": "The media start position (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "18446744073709551615",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": true
},
"media-duration-factor": {
"blurb": "The relative rate caused by this object",
"construct": false,
"construct-only": false,
"default": "1",
"max": "1.79769e+308",
"min": "0.01",
"type-name": "gdouble",
"writable": true
},
"message-forward": {
"blurb": "Forwards all children messages",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"name": {
"blurb": "The name of the object",
"construct": true,
"construct-only": false,
"default": "NULL",
"hotdoc-fixed-default": true,
"type-name": "gchararray",
"writable": true
},
"parent": {
"blurb": "The parent of the object",
"construct": false,
"construct-only": false,
"type-name": "GstObject",
"writable": true
},
"priority": {
"blurb": "The priority of the object (0 = highest priority)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "-1",
"min": "0",
"type-name": "guint",
"writable": true
},
"start": {
"blurb": "The start position relative to the parent (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": true
},
"stop": {
"blurb": "The stop position relative to the parent (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": false
}
},
"rank": "none",
"signals": {
"commit": {
"args": [
"gboolean"
],
"retval": "gboolean"
}
}
},
"nleurisource": {
"author": "Edward Hervey <bilboed@bilboed.com>",
"description": "High-level URI Source element",
"hierarchy": [
"NleURISource",
"NleSource",
"NleObject",
"GstBin",
"GstElement",
"GstObject",
"GInitiallyUnowned",
"GObject"
],
"klass": "Filter/Editor",
"long-name": "GNonLin URI Source",
"name": "nleurisource",
"pad-templates": {
"src": {
"caps": "ANY",
"direction": "src",
"presence": "sometimes"
}
},
"properties": {
"active": {
"blurb": "Use this object in the NleComposition",
"construct": false,
"construct-only": false,
"default": "true",
"type-name": "gboolean",
"writable": true
},
"async-handling": {
"blurb": "The bin will handle Asynchronous state changes",
"construct": false,
"construct-only": false,
"default": "true",
"type-name": "gboolean",
"writable": true
},
"caps": {
"blurb": "Caps used to filter/choose the output stream",
"construct": false,
"construct-only": false,
"default": "ANY",
"type-name": "GstCaps",
"writable": true
},
"duration": {
"blurb": "Outgoing duration (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "9223372036854775807",
"min": "0",
"type-name": "gint64",
"writable": true
},
"expandable": {
"blurb": "Expand to the full duration of the container composition",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"inpoint": {
"blurb": "The media start position (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "18446744073709551615",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": true
},
"media-duration-factor": {
"blurb": "The relative rate caused by this object",
"construct": false,
"construct-only": false,
"default": "1",
"max": "1.79769e+308",
"min": "0.01",
"type-name": "gdouble",
"writable": true
},
"message-forward": {
"blurb": "Forwards all children messages",
"construct": false,
"construct-only": false,
"default": "false",
"type-name": "gboolean",
"writable": true
},
"name": {
"blurb": "The name of the object",
"construct": true,
"construct-only": false,
"default": "NULL",
"hotdoc-fixed-default": true,
"type-name": "gchararray",
"writable": true
},
"parent": {
"blurb": "The parent of the object",
"construct": false,
"construct-only": false,
"type-name": "GstObject",
"writable": true
},
"priority": {
"blurb": "The priority of the object (0 = highest priority)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "-1",
"min": "0",
"type-name": "guint",
"writable": true
},
"start": {
"blurb": "The start position relative to the parent (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": true
},
"stop": {
"blurb": "The stop position relative to the parent (in nanoseconds)",
"construct": false,
"construct-only": false,
"default": "0",
"max": "18446744073709551615",
"min": "0",
"type-name": "guint64",
"writable": false
},
"uri": {
"blurb": "Uri of the file to use",
"construct": false,
"construct-only": false,
"default": "NULL",
"type-name": "gchararray",
"writable": true
}
},
"rank": "none",
"signals": {
"commit": {
"args": [
"gboolean"
],
"retval": "gboolean"
},
"no-more-pads": {
"args": [],
"retval": "void"
},
"pad-added": {
"args": [
"GstPad"
],
"retval": "void"
},
"pad-removed": {
"args": [
"GstPad"
],
"retval": "void"
}
}
}
},
"filename": "libgstnle.so",
"license": "LGPL",
"package": "GStreamer Editing Services",
"source": "gst-editing-services",
"url": "Unknown package origin"
}
}

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

68
docs/index.md Normal file
View file

@ -0,0 +1,68 @@
---
short-description: GStreamer Editing Services API reference.
...
# GStreamer Editing Services
The "GStreamer Editing Services" is a library to simplify the creation
of multimedia editing applications. Based on the GStreamer multimedia framework
and the GNonLin set of plugins, its goals are to suit all types of editing-related
applications.
The GStreamer Editing Services are cross-platform and work on most UNIX-like
platform as well as Windows. It is released under the GNU Library General Public License
(GNU LGPL).
## Goals of GStreamer Editing Services
The GStreamer multimedia framework and the accompanying GNonLin set of
plugins for non-linear editing offer all the building blocks for:
- Decoding and encoding to a wide variety of formats, through all the
available GStreamer plugins.
- Easily choosing segments of streams and arranging them through time
through the GNonLin set of plugins.
But all those building blocks only offer stream-level access, which
results in developers who want to write non-linear editors to write a
consequent amount of code to get to the level of *non-linear editing*
notions which are closer and more meaningful for the end-user (and
therefore the application).
The GStreamer Editing Services (hereafter GES) aims to fill the gap
between GStreamer/GNonLin and the application developer by offering a
series of classes to simplify the creation of many kind of
editing-related applications.
## Architecture
### Timeline and TimelinePipeline
The most top-level object encapsulating every other object is the
[GESTimeline](GESTimeline). It is the central object for any editing project.
The `GESTimeline` is a `GstElement`. It can therefore be used in any
GStreamer pipeline like any other object.
### Tracks and Layers
The GESTimeline can contain two types of objects (seen in
"Layers and Tracks"):
- Layers - Corresponds to the user-visible arrangement of clips, and
what you primarily interact with as an application developer. A
minimalistic timeline would only have one layer, but a more complex
editing application could use as many as needed.
- Tracks - Corresponds to the output streams in GStreamer. A typical
GESTimeline, aimed at a video editing application, would have an
audio track and a video track. A GESTimeline for an audio editing
application would only require an audio track. Multiple layers can
be related to each track.
![Layers and Tracks](images/layer_track_overview.png)
In order to reduce even more the amount of GStreamer interaction the
application developer has to deal with, a convenience GstPipeline has
been made available specifically for Timelines : [GESPipeline](GESPipeline).

17
docs/libs/.gitignore vendored
View file

@ -1,17 +0,0 @@
ges-decl-list.txt
ges-decl.txt
ges-overrides.txt
ges-undeclared.txt
ges-undocumented.txt
ges-unused.txt
ges.args
ges.hierarchy
ges.interfaces
ges.prerequisites
ges.signals
*.stamp
html/
tmpl/
xml/
doc-registry.xml

View file

@ -1,86 +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'.
MODULE=ges
DOC_MODULE=$(MODULE)
# for upload-doc.mak
DOC=gstreamer-editing-services
FORMATS=html
html: html-build.stamp
include $(top_srcdir)/common/upload-doc.mak
# 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)/ges
SCAN_OPTIONS=
# Extra options to supply to gtkdoc-mkdb.
MKDB_OPTIONS=--sgml-mode --source-suffixes=c,h,cc,m
# Extra options to supply to gtkdoc-fixref.
FIXXREF_OPTIONS=--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
--extra-dir=$(GST_PREFIX)/share/gtk-doc/html \
--extra-dir=$(GSTPB_PREFIX)/share/gtk-doc/html
# Used for dependencies.
HFILE_GLOB=$(top_srcdir)/ges/ges-*.h
CFILE_GLOB=$(top_srcdir)/ges/ges-*.c
# Extra options to supply to gtkdoc-scan.
SCANOBJ_OPTIONS=--type-init-func="g_type_init();gst_init(&argc,&argv)"
# Header files to ignore when scanning.
IGNORE_HFILES = \
gesmarshal.h \
ges-internal.h \
ges-auto-transition.h \
ges-structured-interface.h \
ges-structure-parser.h \
ges-smart-video-mixer.h \
gstframepositioner.h
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)/ges/ges-types.h
# Images to copy into HTML directory.
HTML_IMAGES = layer_track_overview.png
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
content_files = architecture.xml
# 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 = -I$(top_srcdir) $(GST_PBUTILS_CFLAGS) $(GST_BASE_CFLAGS) \
$(GST_CFLAGS) $(GIO_CFLAGS) $(GCOV_CFLAGS)
GTKDOC_LIBS = \
$(top_builddir)/ges/libges-@GST_API_VERSION@.la \
$(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS) $(GCOV_LIBS)
GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC)
GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC)
# If you need to override some of the declarations, place them in this file
# and uncomment this line.
DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
include $(top_srcdir)/common/gtk-doc.mak

View file

@ -1,111 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
]>
<refentry id="ges-architecture" revision="25 mar 2009">
<refmeta>
<refentrytitle>Overview and architecture</refentrytitle>
<manvolnum>1</manvolnum>
<refmiscinfo>GStreamer Editing Services</refmiscinfo>
</refmeta>
<!-- <refnamediv> -->
<!-- <refname>Overview</refname> -->
<!-- <refpurpose> -->
<!-- Goals of the GStreamer Editing Services. -->
<!-- </refpurpose> -->
<!-- </refnamediv> -->
<refsect1>
<title>Goals of GStreamer Editing Services</title>
<para>The GStreamer multimedia framework and the accompanying GNonLin set
of plugins for non-linear editing offer all the building blocks for:
<itemizedlist>
<listitem>
<para>Decoding and encoding to a wide variety of formats, through
all the available GStreamer plugins.</para>
</listitem>
<listitem>
<para>Easily choosing segments of streams and arranging them through
time through the GNonLin set of plugins.</para>
</listitem>
</itemizedlist></para>
<para>But all those building blocks only offer stream-level access, which
results in developers who want to write non-linear editors to write a
consequent amount of code to get to the level of <emphasis>non-linear
editing</emphasis> notions which are closer and more meaningful for the
end-user (and therefore the application).</para>
<para>The GStreamer Editing Services <remark>(hereafter GES)</remark> aims
to fill the gap between GStreamer/GNonLin and the application developer by
offering a series of classes to simplify the creation of many kind of
editing-related applications.</para>
</refsect1>
<refsect1>
<title>Architecture</title>
<refsect2>
<title>Timeline and TimelinePipeline</title>
<para>The most top-level object encapsulating every other object is the
<link linkend="GESTimeline">GESTimeline</link>. It is the central object
for any editing project.</para>
<para>The <classname>GESTimeline</classname> is a
<classname>GstElement</classname>. It can therefore be used in any
GStreamer pipeline like any other object.</para>
</refsect2>
<refsect2>
<title>Tracks and Layers</title>
<para>The GESTimeline can contain two types of objects (seen in <xref
linkend="layer_tracks_diagram" />): <itemizedlist>
<listitem>
<para>Layers - Corresponds to the user-visible arrangement of clips,
and what you primarily interact with as an application developer.
A minimalistic timeline would only have one layer,
but a more complex editing application could use as many as needed.
</para>
</listitem>
<listitem>
<para>Tracks - Corresponds to the output streams in GStreamer.
A typical GESTimeline, aimed at a video editing application, would
have an audio track and a video track.
A GESTimeline for an audio editing application would only require
an audio track. Multiple layers can be related to each track.</para>
</listitem>
</itemizedlist></para>
<figure float="0" id="layer_tracks_diagram">
<title>Layers and Tracks</title>
<mediaobject>
<imageobject>
<imagedata fileref="layer_track_overview.png" scale="75" />
</imageobject>
</mediaobject>
</figure>
<para>In order to reduce even more the amount of GStreamer interaction
the application developer has to deal with, a convenience GstPipeline
has been made available specifically for Timelines : <link
linkend="GESPipeline">GESPipeline</link>.</para>
</refsect2>
</refsect1>
</refentry>

View file

@ -1,130 +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 Editing Services &GES_VERSION; Reference Manual</title>
<releaseinfo>
for GStreamer Editing Services &GST_API_VERSION; (&GES_VERSION;)
</releaseinfo>
</bookinfo>
<chapter>
<title>GStreamer Editing Services Overview</title>
<para>
The "GStreamer Editing Services" is a library to simplify the creation
of multimedia editing applications. Based on the GStreamer multimedia framework
and the GNonLin set of plugins, its goals are to suit all types of editing-related
applications.
</para>
<para>
The GStreamer Editing Services are cross-platform and work on most UNIX-like
platform as well as Windows. It is released under the GNU Library General Public License
(GNU LGPL).
</para>
<xi:include href="architecture.xml"/>
<xi:include href="xml/ges-common.xml"/>
<xi:include href="xml/ges-enums.xml"/>
<xi:include href="xml/ges-gerror.xml"/>
</chapter>
<chapter>
<title>Base Classes</title>
<xi:include href="xml/gestimeline.xml"/>
<xi:include href="xml/geslayer.xml"/>
<xi:include href="xml/gestimelineelement.xml"/>
<xi:include href="xml/gescontainer.xml"/>
<xi:include href="xml/gesclip.xml"/>
<xi:include href="xml/gessourceclip.xml"/>
<xi:include href="xml/gesoperationclip.xml"/>
<xi:include href="xml/gesoverlayclip.xml"/>
<xi:include href="xml/gesbaseeffectclip.xml"/>
<xi:include href="xml/gestrack.xml"/>
<xi:include href="xml/gestrackelement.xml"/>
<xi:include href="xml/gessource.xml"/>
<xi:include href="xml/gesvideosource.xml"/>
<xi:include href="xml/gesaudiosource.xml"/>
<xi:include href="xml/gesbaseeffect.xml"/>
<xi:include href="xml/gesoperation.xml"/>
<xi:include href="xml/gesbasetransitionclip.xml"/>
<xi:include href="xml/gesasset.xml"/>
</chapter>
<chapter>
<title>Timeline objects</title>
<xi:include href="xml/gesuriclip.xml"/>
<xi:include href="xml/gestitleclip.xml"/>
<xi:include href="xml/gestestclip.xml"/>
<xi:include href="xml/gestextoverlayclip.xml"/>
<xi:include href="xml/gestransitionclip.xml"/>
<xi:include href="xml/geseffectclip.xml"/>
<xi:include href="xml/gesgroup.xml"/>
</chapter>
<chapter>
<title>Track objects</title>
<xi:include href="xml/gesaudiourisource.xml"/>
<xi:include href="xml/gesvideourisource.xml"/>
<xi:include href="xml/gestitlesource.xml"/>
<xi:include href="xml/gesaudiotestsource.xml"/>
<xi:include href="xml/gesvideotestsource.xml"/>
<xi:include href="xml/gestextoverlay.xml"/>
<xi:include href="xml/gestransition.xml"/>
<xi:include href="xml/gesvideotransition.xml"/>
<xi:include href="xml/gesaudiotransition.xml"/>
<xi:include href="xml/gesimagesource.xml"/>
<xi:include href="xml/gesmultifilesource.xml"/>
<xi:include href="xml/geseffect.xml"/>
</chapter>
<chapter>
<title>Convenience classes</title>
<xi:include href="xml/gespipeline.xml"/>
</chapter>
<chapter>
<title>Serialization Classes</title>
<xi:include href="xml/gesformatter.xml"/>
<xi:include href="xml/gespitiviformatter.xml"/>
<xi:include href="xml/gesbasexmlformatter.xml"/>
<xi:include href="xml/gesxmlformatter.xml"/>
</chapter>
<chapter>
<title>Interfaces</title>
<xi:include href="xml/gesmetacontainer.xml"/>
<xi:include href="xml/gesextractable.xml"/>
</chapter>
<chapter>
<title>Assets</title>
<xi:include href="xml/gesclipasset.xml"/>
<xi:include href="xml/gestrackelementasset.xml"/>
<xi:include href="xml/gesuriclipasset.xml"/>
<xi:include href="xml/gesurisourceasset.xml"/>
<xi:include href="xml/gesproject.xml"/>
</chapter>
<chapter>
<title>Tracks</title>
<xi:include href="xml/gesvideotrack.xml"/>
<xi:include href="xml/gesaudiotrack.xml"/>
</chapter>
<chapter id="ges-hierarchy">
<title>Object Hierarchy</title>
<xi:include href="xml/tree_index.sgml"/>
</chapter>
<index id="api-index-full">
<title>API Index</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
</book>

File diff suppressed because it is too large Load diff

View file

@ -1,43 +0,0 @@
#include <gst/gst.h>
#include <ges/ges.h>
ges_formatter_get_type
%ges_text_halign_get_type
%ges_text_valign_get_type
ges_timeline_get_type
ges_layer_get_type
ges_clip_get_type
ges_operation_clip_get_type
ges_overlay_clip_get_type
ges_pipeline_get_type
ges_source_clip_get_type
ges_test_clip_get_type
ges_base_transition_clip_get_type
ges_transition_clip_get_type
ges_base_effect_clip_get_type
ges_effect_clip_get_type
ges_uri_clip_get_type
ges_text_overlay_clip_get_type
ges_title_clip_get_type
ges_audio_test_source_get_type
ges_audio_transition_get_type
ges_video_uri_source_get_type
ges_audio_uri_source_get_type
ges_track_get_type
ges_image_source_get_type
ges_multi_file_source_get_type
ges_track_element_get_type
ges_base_effect_get_type
ges_effect_get_type
ges_operation_get_type
ges_source_get_type
ges_text_overlay_get_type
ges_title_source_get_type
ges_transition_get_type
%ges_track_type_get_type
ges_video_test_source_get_type
ges_video_transition_get_type
ges_project_get_type
%ges_video_test_pattern_get_type
%ges_video_standard_transition_type_get_type
ges_meta_container_get_type

View file

@ -1,35 +0,0 @@
types = configure_file(input : 'ges.types',
output : 'ges.types',
copy: true)
doc_deps_names = ['glib-2.0',
'gstreamer-@0@'.format(apiversion),
'gstreamer-plugins-base-@0@'.format(apiversion)]
doc_deps = []
foreach doc_dep : doc_deps_names
# TODO: Use get_pkgconfig_variable()
runcmd = run_command('pkg-config', '--variable=prefix', doc_dep)
if runcmd.returncode() == 0
tmp = '--extra-dir=' + runcmd.stdout().strip() + '/share/gtk-doc/html/'
tmp.strip()
doc_deps = doc_deps + [tmp]
endif
endforeach
gnome.gtkdoc('ges',
main_sgml : 'ges-docs.sgml',
src_dir : '@0@/../../ges'.format(meson.current_source_dir()),
scan_args : ['--deprecated-guards=GST_DISABLE_DEPRECATED',
'--ignore-decorators=GES_API',
'--ignore-headers=gesmarshal.h ges-internal.h ges-auto-transition.h ges-structured-interface.h ges-structure-parser.h ges-smart-video-mixer.h gstframepositioner.h'
],
scanobjs_args : ['--type-init-func="gst_init(NULL,NULL)"'],
gobject_typesfile : types,
dependencies : [ges_dep],
fixxref_args: doc_deps + ['--html-dir=' + get_option('prefix') + '/share/gtk-doc/html/'],
content_files : ['architecture.xml', 'ges-sections.txt', version_entities],
html_assets : 'layer_track_overview.png',
install : true,
install_dir : 'gstreamer-editing-services',
)

5
docs/low_level.md Normal file
View file

@ -0,0 +1,5 @@
# Low level APIs
Those APIs should usually not be used unless you know
what you are doing, check other parts of the documentation
before deciding you should use one of those.

View file

@ -1,11 +1,106 @@
docconf = configuration_data()
build_hotdoc = false
docconf.set('GST_API_VERSION', apiversion)
docconf.set('VERSION', gst_version)
docconf.set('PLUGINDIR', '@0@/lib/gstreamer-1.0'.format(get_option('prefix')))
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
version_entities = configure_file(input : 'version.entities.in',
output : 'version.entities',
configuration : docconf)
message('Documentation not built as building it while cross building is not supported yet.')
subdir_done()
endif
subdir('libs')
required_hotdoc_extensions = ['gi-extension', 'gst-extension']
if gst_dep.type_name() == 'internal'
gst_proj = subproject('gstreamer')
plugins_cache_generator = gst_proj.get_variable('plugins_cache_generator')
else
plugins_cache_generator = find_program(join_paths(gst_dep.get_pkgconfig_variable('libexecdir'), 'gstreamer-' + apiversion, 'gst-plugins-doc-cache-generator'))
endif
plugins_cache = join_paths(meson.current_source_dir(), 'gst_plugins_cache.json')
if plugins_cache_generator.found()
plugins_doc_dep = custom_target('editing-services-doc-cache',
build_by_default: true,
command: [plugins_cache_generator, plugins_cache, '@OUTPUT@', '@INPUT@'],
input: plugins,
output: 'gst_plugins_cache.json',
)
else
warning('GStreamer plugin inspector for documentation not found, can\'t update the cache')
endif
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')
foreach extension: required_hotdoc_extensions
if not hotdoc.has_extensions(extension)
if get_option('doc').enabled()
error('Documentation enabled but gi-extension missing')
endif
message('@0@ extensions not found, not building documentation requiring it'.format(extension))
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
build_hotdoc = true
ges_excludes = []
foreach f: ['gesmarshal.*',
'ges-internal.*',
'ges-auto-transition.*',
'ges-structured-interface.*',
'ges-structure-parser.*',
'ges-version.h',
'ges-smart-*',
'ges-command-line-formatter.*',
'ges-base-xml-formatter.h',
'gstframepositioner.*',
'lex.priv_ges_parse_yy.c',
'ges-parse-lex.[c]']
ges_excludes += [join_paths(meson.current_source_dir(), '..', '..', 'ges', f)]
endforeach
hotdoc = import('hotdoc')
libs_doc = [hotdoc.generate_doc('gst-editing-services',
project_version: apiversion,
extra_assets: [join_paths(meson.current_source_dir(), 'images')],
gi_c_sources: ges_sources + ges_headers,
gi_c_source_roots: [join_paths(meson.current_source_dir(), '../ges/')],
gi_sources: [ges_gir[0].full_path()],
gi_c_source_filters: ges_excludes,
sitemap: 'sitemap.txt',
index: 'index.md',
gi_index: 'index.md',
gi_smart_index: true,
gi_order_generated_subpages: true,
dependencies: [ges_dep],
disable_incremental_build: true,
)]
plugins_doc = [hotdoc.generate_doc('nle',
project_version: apiversion,
extra_assets: [join_paths(meson.current_source_dir(), 'images')],
sitemap: 'nle-sitemap.txt',
index: 'nle-index.md',
dependencies: [nle],
disable_incremental_build: true,
gst_order_generated_subpages: true,
gst_index: 'nle-index.md',
gst_c_sources: ['../../plugins/nle/*.[ch]'],
gst_smart_index: true,
gst_cache_file: plugins_cache,
gst_plugin_name: 'nle',
)]

0
docs/nle-index.md Normal file
View file

1
docs/nle-sitemap.txt Normal file
View file

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

7
docs/nle.md Normal file
View file

@ -0,0 +1,7 @@
---
short-description: Non Linear Engine
...
# Non Linear Engine
NLE is a set of elements to implement Non Linear multimedia editing.

58
docs/sitemap.txt Normal file
View file

@ -0,0 +1,58 @@
gi-index
ges.h
ges-timeline.h
ges-layer.h
ges-clip.h
ges-uri-clip.h
ges-title-clip.h
ges-test-clip.h
ges-pipeline.h
ges-project.h
ges-effect.h
base-classes.md
ges-timeline-element.h
ges-container.h
ges-track.h
ges-audio-track.h
ges-video-track.h
ges-asset.h
ges-extractable.h
ges-gerror.h
ges-group.h
ges-meta-container.h
ges-text-overlay.h
ges-formatter.h
ges-track-element.h
ges-video-source.h
ges-audio-source.h
ges-enums.h
low_level.md
ges-audio-test-source.h
ges-audio-transition.h
ges-audio-uri-source.h
ges-base-effect-clip.h
ges-base-effect.h
ges-base-transition-clip.h
ges-clip-asset.h
# ges-effect-asset.h
ges-effect-clip.h
ges-image-source.h
ges-multi-file-source.h
ges-operation-clip.h
ges-operation.h
ges-overlay-clip.h
# ges-pitivi-formatter.h
ges-screenshot.h
ges-source-clip.h
ges-source.h
ges-text-overlay-clip.h
ges-title-source.h
ges-track-element-asset.h
ges-transition-clip.h
ges-transition.h
ges-types.h
ges-uri-asset.h
ges-video-test-source.h
ges-video-transition.h
ges-video-uri-source.h
# ges-xml-formatter.h

View file

@ -1,4 +1,4 @@
ges_sources = [
ges_sources = files([
'ges.c',
'ges-enums.c',
'ges-meta-container.c',
@ -62,9 +62,9 @@ ges_sources = [
'ges-structured-interface.c',
'ges-structure-parser.c',
'gstframepositioner.c'
]
])
ges_headers = [
ges_headers = files([
'ges-types.h',
'ges.h',
'ges-prelude.h',
@ -123,7 +123,7 @@ ges_headers = [
'ges-effect-asset.h',
'ges-utils.h',
'ges-group.h'
]
])
if libxml_dep.found()
ges_sources += files(['ges-pitivi-formatter.c'])
@ -177,7 +177,7 @@ if build_gir
'-I' + meson.current_build_dir() + '/..',
'--cflags-end']
endif
ges_gen_sources += [gnome.generate_gir(libges,
ges_gir = gnome.generate_gir(libges,
sources : ges_sources + ges_headers,
namespace : 'GES',
nsversion : apiversion,
@ -188,7 +188,9 @@ if build_gir
install : true,
dependencies : libges_deps,
extra_args : ges_gir_extra_args
)]
)
ges_gen_sources += [ges_gir]
endif
ges_dep = declare_dependency(link_with : libges,

View file

@ -1,6 +1,6 @@
project('gst-editing-services', 'c',
version : '1.17.0.1',
meson_version : '>= 0.47',
meson_version : '>= 0.48',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])
@ -180,6 +180,7 @@ subdir('tools')
subdir('pkgconfig')
subdir('tests')
subdir('examples')
subdir('docs')
override_detector = '''
import sys
@ -225,14 +226,4 @@ if pygi_override_dir != ''
subdir('bindings/python')
endif
if build_machine.system() == 'windows'
message('Disabling gtk-doc while building on Windows')
else
if find_program('gtkdoc-scan', required : get_option('gtk_doc')).found()
subdir('docs')
else
message('Not building documentation as gtk-doc was not found')
endif
endif
run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')

View file

@ -1,5 +1,3 @@
option('gtk_doc', type : 'feature', value : 'auto', yield : true,
description : 'Build API documentation with gtk-doc')
option('introspection', type : 'feature', value : 'auto', yield : true,
description : 'Generate gobject-introspection bindings')
option('tests', type : 'feature', value : 'auto', yield : true,
@ -8,3 +6,5 @@ option('pygi-overrides-dir', type : 'string', value : '',
description: 'Path to pygobject overrides directory')
option('xptv', type : 'feature', value : 'auto',
description : 'Build the deprecated xptv formater')
option('doc', type : 'feature', value : 'auto', yield: true,
description: 'Enable documentation.')

View file

@ -1,2 +1,3 @@
plugins = []
subdir('nle')
subdir('ges')

View file

@ -15,3 +15,4 @@ nle = library('gstnle', nle_sources,
install_dir : plugins_install_dir,
)
pkgconfig.generate(nle, install_dir : plugins_pkgconfig_install_dir)
plugins += [nle]