1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
GNonLin Design Document
Global Overview
---------------
GNonLin works as a companion library for GStreamer, in order to be
able to easily manipulate and assemble media streams through time, and
use that composition in any GStreamer graph just like any other
GStreamer element.
GNonLin Object (GnlObject)
--------------------------
Base class for all GNonLin objects. Virtual class.
Contains all the properties, functions and methods for
time-shifting.
* Properties:
_ start: Start position of the object in it's container.
_ duration: Duration of the object in it's container.
_ stop: Stop position of the object in it's container (read-only,
computed from start and duration properties).
_ media-start: Start position of the element controlled by the
object.
_ media-duration: Duration of the element controlled by the object.
_ media-stop: Stop position of the element controlled by the object
(read-only, computed from media-start and media-duration
properties).
_ rate: Rate of the outgoing stream (read-only, computed from
duration and media-duration properties).
_ caps: GstCaps used to filter the object's caps. The first pad
whose caps intersect with these caps will be used by the
GnlObject.
_ priority: Priority of the object in it's container
GnlComposition. 0 is the highest priority (the object will
supersed any other object set to play at the same time), and 2^32
is the lowest priority (the object will be scheduled to play if
nothing else is set to play at that time).
_ active: If set to FALSE, this object will not be used in it's
container GnlComposition
* Time-shifting:
The values set for start, duration, media-start and media-duration
will be used to decide which section will be taken in the controlled
element, and how it will be shifted in time.
The outputted data will be:
[media-start -> media-stop] from the controlled element,
shifted to appear as [start -> stop].
This time-shifting is done by intercepting incoming and outgoing
events in the element pad controlled by the GnlObject.
GNonLin source (GnlSource)
--------------------------
Object for controlling source elements (only provide data).
* Controlling a GstElement:
The GnlSource can control a source GstElement which is added to it
(using the standard gst_bin_add() function).
If the element provides several pads, the first pad whose caps
intersect the one specified in the caps property will be used.
GNonLin URI source (GnlURISource)
-----------------------------------
Convenience source. Contains a uridecodebin.
* URI
The URI of the content to control.
GNonLin operation (GnlOperation)
--------------------------------
Object for controlling multiple-input single-output elements.
* Controlling an effect GstElement:
The same rules applies here as for GnlSource. The only difference
is that the operation will check that the given element has
(potential) input sources.
* Number of inputs:
The number of inputs to be used by this operation is set with the
'inputs' priority. This will be used by the container composition to
automatically link it to the proper sources.
The default value, 0, means that it will be up to the parent
composition to request new input pads if it needs more. If a value
was specified, then the composition will only use those N
inputs. This suits both the cases where, the developer automatically
wants that operation to apply to all the underlying sources, and the
case where the developers only wants that operation to apply to a
given number of underlying sources.
If the controlled operation has non-request sinkpads, then the
number of inputs will be set to the number of sinkpads. Trying to
manually change that property will fail.
GNonLin composition (GnlComposition)
------------------------------------
Contains GnlObjects and connects them dynamicly to create a
composition.
* Adding/Removing objects to the composition:
Any GnlObject derivative can be added/removed to/from a
composition using the standard gst_bin_add()/gst_bin_remove()
methods.
* What is played at any given time:
The object taken for output at one given time is the object:
_ which is active
_ AND is set for that time (start <= time < stop)
_ AND has the highest priority (smallest numerical value)
If that object is an operation which has N sinkpads, the
composition will recursively connect the GnlObjects by increasing
priorities:
_ which are active
_ AND set for that time (start <= time < stop)
_ If the object is an operation, recursively apply this rule.
Object Hierarchy:
-----------------
GstBin
!
+--- GnlObject
!
+--- GnlSource
! !
! +--- GnlUriSource
!
+--- GnlOperation
!
+--- GnlComposition
|