- rtpjitterbuffer has improved end-of-stream handling
-- rtpmp4vpay will be prefered over rtpmp4gpay for MPEG-4 video in
+- rtpmp4vpay will be preferred over rtpmp4gpay for MPEG-4 video in
autoplugging scenarios now
- rtspsrc now allows applications to send RTSP SET_PARAMETER and
used in order to re-produce a specific build. To set a manifest, you
can set manifest = 'my_manifest.xml' in your configuration file, or
use the --manifest command line option. The command line option will
- take precendence over anything specific in the configuration file.
+ take precedence over anything specific in the configuration file.
- The new build-deps command can be used to build only the
dependencies of a recipe, without the recipe itself.
Hotdoc build targets are generated for each documentation 'components' (ie. hotdoc
subprojects). This includes libraries documentation and one target per GStreamer plugin.
-One can build a specific documentation target by explicitely building the target,
+One can build a specific documentation target by explicitly building the target,
for example to build the GStreamer core library documentation (adapt the paths if you
are using `gst-build`):
ninja docs/libgstreamer-doc
-Then the documentation will be avalaible in `docs/libgstreamer-doc/html/`.
+Then the documentation will be available in `docs/libgstreamer-doc/html/`.
SPELL CHECKING
--------------
! user configurable plugin (aasink, sdlsink, xvideosink, ...)
! (MEDIUM)
!
- ? ! property proxy in compount elements. not sure if it's possible at all.
+ ? ! property proxy in compound elements. not sure if it's possible at all.
! what with elements with the same property?
! (MEDIUM, needs some thinking)
!
at runtime
* it can be used in a pipeline to remove/insert elements at runtime
* element with 1 source- and 1 sinkpad
-* when both connected it passes data thru
+* when both connected it passes data through
* if src is not connected it drops received buffers
* if sink is not connected
* it does not push
- a label: giving a title to the group
- a role:
- this can give the UI a hint about the purpose of the controls
- - this only makes sense, if we dont make this a thousand templates
+ - this only makes sense, if we don't make this a thousand templates
- a list of dparams or properties
- question
- should this be aware of instruments (voice-groups)
after the queues have sent out their last buffer, they calls eos on their
src pads.
- the parent already has the two queues in the EOS provider list so they dont
+ the parent already has the two queues in the EOS provider list so they don't
get added twice.
the two queues perform gst_pad_eos () on their pads when the queue is empty,
the parent removes the EOS providers from its list, when the list is empty,
OK, so an element exposes interfaces. This allows us to think of
the idea of embedding interfaces (dynamically, of course) in the
GstElement object. Think of an object being able to register an
-indefinate number of interfaces per object instance, and a client
+indefinite number of interfaces per object instance, and a client
application could then enumerate interfaces and instantiate one.
Glib gives us GInterface for this purpose. The disadvantage of
this is that it's on a per-class basis, not a per-instance basis.
So an element contains interfaces. But where are these interfaces
described? And who creates them? I suggest that we do that just as
we handle gstvideo and gstaudio right now (these libs do *nothing*
-useful currently, so this'd make them a lot more interesting).
+useful currently, so this would make them a lot more interesting).
These interfaces inherit from GstInterface. The functions that
are needed, can be provided through a class object. The element is
then responsible for storing variables and so on. gstvideo/audio
2) Threading:
- Can signals be emitted from any thread?
- - what operations are permited from a signal handler?
+ - what operations are permitted from a signal handler?
3) Error reporting
Suggested implementation:
-Tbe implementation that I suggest contains an rtpdec element. This element has one sink pad for the data, one src pad for the decoded data, and a pair of src and sink pads for control messages. The decoded data that comes from rtpdec has no RTP dependency. It is in the format expected by the codec that it decodes it. Therefore, rtpdec must do codec specific processing of data to take into account that different codecs are stored differently in RTP.
+The implementation that I suggest contains an rtpdec element. This element has one sink pad for the data, one src pad for the decoded data, and a pair of src and sink pads for control messages. The decoded data that comes from rtpdec has no RTP dependency. It is in the format expected by the codec that it decodes it. Therefore, rtpdec must do codec specific processing of data to take into account that different codecs are stored differently in RTP.
A possible pipeline is:
the SEGMENT event so that it became selfcontained. The complicated segment
accumulation logic of 0.10 was simply removed and replaced with pad offsets.
-It is now possible to tweak the timing of the data comming from a pad by
+It is now possible to tweak the timing of the data coming from a pad by
using the pad offset property.
}
-5. capabilty compatibility
+5. capability compatibility
--------------------------
Two pads are compatible if:
==============
The current autoplugger as described in autoplug1 has some
-serious shortcommings:
+serious shortcomings:
- it is embedded in GstPipeline and cannot be used with a
generic interface. A lot of complexity is inside the
---------------------
EOS is currently implemented by selectively disabling scheduling of
-the chains. This procedure continues untill a bin/thread has no more
+the chains. This procedure continues until a bin/thread has no more
chains left to schedule, at which point it will fire the EOS signal.
A gboolean was added to the chain structure to indicate if this chain
after the queues have sent out their last buffer, they calls eos on their
src pads.
- the parent already has the two queues in the EOS provider list so they dont
+ the parent already has the two queues in the EOS provider list so they don't
get added twice.
the two queues perform gst_pad_eos () on their pads when the queue is empty,
the parent removes the EOS providers from its list, when the list is empty,
all the pads in i1 and fsk1 to EOS too. none of these elements
override the default behaviour so gst_pad_set_eos returns TRUE.
- fakesrc signals EOS. since an element in chain1 has signales
+ fakesrc signals EOS. since an element in chain1 has signals
EOS, chain1 becomes EOS. All the elements in the chain are set
to the READY state and the chain is not scheduled anymore because
its EOS flag is on.
accept or refuse the provided caps.
For autopluggers it is important to know when the pad is ready to start the negotiation.
-It is also inportant to know when the negotiation failed and it must be possible to
+It is also important to know when the negotiation failed and it must be possible to
restart the negotiation with another element. This functionality will be provided
with signals.
in parallel with the datastream so the event path should
use a different connection.
-4) GStreamer deamon
+4) GStreamer daemon
- - each host has to run a deamon that listens for
+ - each host has to run a daemon that listens for
commands and creates elements/pipelines and performs all
operations on the real pipeline.
always get the number of bytes from track0->track2.
If we want to get the number of bytes of one particular track, we have
-to substract two convert values. Look at the following figure to understand
+to subtract two convert values. Look at the following figure to understand
this. The --- defines the region we want to convert.
..and we get the number of bytes this plugin takes in each second.
Again, note that this value is relative to 0, you can get an average
-of a specific period by using the same substract trick as above.
+of a specific period by using the same subtract trick as above.
Element Properties
-bad asfmux: asfmux: ASF muxer
-bad asfmux: asfparse: ASF parser
-bad asfmux: rtpasfpay: RTP ASF payloader
- -bad autoconvert: autoconvert: Select convertor based on caps
- -bad autoconvert: autovideoconvert: Select color space convertor based on caps
+ -bad autoconvert: autoconvert: Select converter based on caps
+ -bad autoconvert: autovideoconvert: Select color space converter based on caps
-bad avcsrc: avcsrc:
bluetooth: a2dpsink: Bluetooth A2DP sink
It is possible that when an element still has a connection with some other
element in the group, the group has to be split up anyway. This can happen
-in fakesrc ! indentity ! identity ! fakesink when we break the connection
+in fakesrc ! identity ! identity ! fakesink when we break the connection
between the two identity elements. We have to be careful here in the cothread
case that we don't take away the running cothread from under the elements.
In the non-cothread case we can just move the elements to another new group.
binding->name))) {
GST_DEBUG_OBJECT (object, " psec->flags : 0x%08x", pspec->flags);
- /* check if this param is witable && controlable && !construct-only */
+ /* check if this param is writeable && controllable && !construct-only */
if ((pspec->flags & (G_PARAM_WRITABLE | GST_PARAM_CONTROLLABLE |
G_PARAM_CONSTRUCT_ONLY)) ==
(G_PARAM_WRITABLE | GST_PARAM_CONTROLLABLE)) {
} else {
GST_WARNING_OBJECT (object,
"property '%s' on class '%s' needs to "
- "be writeable, controlable and not construct_only", binding->name,
+ "be writeable, controllable and not construct_only", binding->name,
G_OBJECT_TYPE_NAME (object));
}
} else {
goto ymd;
string += 10;
- /* Exit if there is no expeceted value on this stage */
+ /* Exit if there is no expected value on this stage */
if (!(*string == 'T' || *string == '-' || *string == ' '))
goto ymd;
* gst_device_monitor_get_show_all_devices:
* @monitor: a #GstDeviceMonitor
*
- * Get if @monitor is curretly showing all devices, even those from hidden
+ * Get if @monitor is currently showing all devices, even those from hidden
* providers.
*
* Returns: %TRUE when all devices will be shown.
/**
* gst_device_provider_device_changed:
* @device: (transfer none): the new version of @changed_device
- * @changed_device: (transfer floating): the old version of the device that has been udpated
+ * @changed_device: (transfer floating): the old version of the device that has been updated
*
* This function is used when @changed_device was modified into its new form
* @device. This will post a `DEVICE_CHANGED` message on the bus to let
*
* Creates a new #GstBitWriter instance with the given memory area. If
* @initialized is %TRUE it is possible to read @size bits from the
- * #GstBitWriter from the beginnig.
+ * #GstBitWriter from the beginning.
*
* Free-function: gst_bit_writer_free
*
* @bitwriter: a #GstBitWriter instance
* @pos: The new position in bits
*
- * Set the new postion of data end which should be the new size of @data.
+ * Set the new position of data end which should be the new size of @data.
*
* Returns: %TRUE if successful, %FALSE otherwise
*/
* The application that wants to index the stream will create a new index object
* using gst_index_new() or gst_index_factory_make(). The index is assigned to a
* specific element, a bin or the whole pipeline. This will cause indexable
- * elements to add entires to the index while playing.
+ * elements to add entries to the index while playing.
*/
/* FIXME: complete gobject annotations */
*
* Unrefs @object_to_unref and checks that is has properly been
* destroyed, also checks that the other objects passed in
- * parametter have been destroyed as a concequence of
+ * parameter have been destroyed as a concequence of
* unrefing @object_to_unref. Last variable argument should be NULL.
*
* Since: 1.6
rmsg = rcvmsg_create ();
- /* Allcate a buffer */
+ /* Allocate a buffer */
buf = (char *) emalloc (CK_MAX_MSG_SIZE);
/* Fill the buffer from the file */
nread = read_buf (fdes, CK_MAX_MSG_SIZE, buf);
# it is not a string-like type
if gvalue_type.fields()[1].type == value.type:
# don't print the raw GValue union
- v = "<unkown type: %s>" % tname
+ v = "<unknown type: %s>" % tname
else:
v = str(value)
except gdb.MemoryError:
elif g_inherits_type(value, "GstEvent"):
obj = GdbGstCaps(value)
else:
- raise Exception("'%s' has an unkown type" % arg)
+ raise Exception("'%s' has an unknown type" % arg)
obj.print(0)
if obj is None:
obj = gdb
- # Make sure this is always used befor the glib lookup function.
+ # Make sure this is always used before the glib lookup function.
# Otherwise the gobject pretty printer is used for GstObjects
obj.pretty_printers.insert(0, gst_pretty_printer_lookup)
GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue);
/* only activate the pads when we are not in the NULL state
- * and add the pad under the state_lock to prevend state changes
+ * and add the pad under the state_lock to prevent state changes
* between activating and adding */
g_rec_mutex_lock (GST_STATE_GET_LOCK (mqueue));
if (GST_STATE_TARGET (mqueue) != GST_STATE_NULL) {
/* set queue size to 2 buffers
* pull 1 buffer
- * check over/underuns
+ * check over/underruns
*/
GST_START_TEST (test_non_leaky_underrun)
{
/* set queue size to 2 buffers
* push 2 buffers
- * check over/underuns
+ * check over/underruns
* push 1 more buffer
- * check over/underuns again
+ * check over/underruns again
*/
GST_START_TEST (test_non_leaky_overrun)
{
/* set queue size to 2 buffers
* push 2 buffers
- * check over/underuns
+ * check over/underruns
* push 1 more buffer
- * check over/underuns again
+ * check over/underruns again
* check which buffer was leaked
*/
GST_START_TEST (test_leaky_upstream)
/* set queue size to 2 buffers
* push 2 buffers
- * check over/underuns
+ * check over/underruns
* push 1 more buffer
- * check over/underuns again
+ * check over/underruns again
* check which buffer was leaked
*/
GST_START_TEST (test_leaky_downstream)
elem = gst_element_factory_make ("testobj", NULL);
cs = gst_test_control_source_new ();
- /* that property should exist and but is not controlable */
+ /* that property should exist and but is not controllable */
cb = gst_test_control_binding_new (GST_OBJECT (elem), "static",
GST_CONTROL_SOURCE (cs));
fail_unless (GST_CONTROL_BINDING_PSPEC (cb) == NULL, NULL);
fail_unless (peer == srcpad);
gst_object_unref (peer);
- /* check caps, untargetted pad should return ANY or the padtemplate caps
+ /* check caps, untargeted pad should return ANY or the padtemplate caps
* when it was created from a template */
caps = gst_pad_query_caps (srcpad, NULL);
fail_unless (gst_caps_is_any (caps));
fail_unless (gst_element_add_pad (bin, pad));
fail_unless (gst_element_remove_pad (bin, pad));
- /* Setting a pad that's already deactive to deactive should not fail. */
+ /* Setting a pad that's already deactivated to deactivated should not fail. */
fail_if (gst_pad_is_active (pad));
fail_unless (gst_pad_activate_mode (pad, GST_PAD_MODE_PUSH, FALSE));
fail_unless_equals_int (flush_start_events, 0);
fail_unless_equals_int (flush_stop_events, 0);
- /* flush ogg:sink_0. This flushs collectpads, calls ::flush() and sends
+ /* flush ogg:sink_0. This flushes collectpads, calls ::flush() and sends
* FLUSH_START downstream */
fail_unless (gst_pad_push_event (srcpad1, gst_event_new_flush_start ()));
fail_unless_equals_int (flush_start_events, 1);
"fakesrc ! video/raw,format=(antwerp)monkeys ! fakesink silent=true",
/* checks: Empty pipeline is invalid */
"",
- /* checks: Link without sink element failes */
+ /* checks: Link without sink element fails */
"fakesrc ! ",
- /* checks: Link without src element failes */
+ /* checks: Link without src element fails */
" ! fakesink silent=true",
/* checks: Source URI for which no element exists is a failure */
"borky://fdaffd ! fakesink silent=true",