diff --git a/gir-files/GstAllocators-1.0.gir b/gir-files/GstAllocators-1.0.gir new file mode 100644 index 000000000..5e5596847 --- /dev/null +++ b/gir-files/GstAllocators-1.0.gir @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + Constant that defines the caps feature name for DMA buffer sharing. + +It has to be used for non-mappable dma-buf only, i.e. when the underlying +memory is not mappable to user space. Or when the mapped memory contains +non meaningful data. It can be the case for protected content or when the +user wants explicitly avoid any software post processing. + +In these cases all elements between the exported and the importer has to work +in passthrough mode. This is done by adding this caps feature. + +When the memory is mappable for read and write requests then it is assumes +to be a fast path and so this caps feature should not be used. Though +according to the dma-buf protocol, while it is mapped it prevents the +exporter to migrate the buffer. + +This caps feature should not serve at all the purpose of selecting the +@GST_ALLOCATOR_DMABUF allocator during caps negotiation. +When the exporter is the upstream element from the importer point of view, +the exporter should try to map the dma buffer at runtime (preferably during +decide_allocation phase). When it succeeds for #GST_MAP_READWRITE this caps +feature should not be used. This allows scalers, color converts and any image +processing filters to work directly on the dma buffer. +In this case the importer element should check all incoming memory using +gst_is_dmabuf_memory(). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base class for allocators with dmabuf-backed memory + + + Return a new dmabuf allocator. + + + a new dmabuf allocator, or NULL if the allocator + isn't available. Use gst_object_unref() to release the allocator after + usage + + + + + Return a %GstMemory that wraps a dmabuf file descriptor. + + + a GstMemory based on @allocator. +When the buffer will be released dmabuf allocator will close the @fd. +The memory is only mmapped on gst_buffer_map() request. + + + + + allocator to be used for this memory + + + + dmabuf file descriptor + + + + memory size + + + + + + Return a %GstMemory that wraps a dmabuf file descriptor. + + + a GstMemory based on @allocator. + +When the buffer will be released the allocator will close the @fd unless +the %GST_FD_MEMORY_FLAG_DONT_CLOSE flag is specified. +The memory is only mmapped on gst_buffer_mmap() request. + + + + + allocator to be used for this memory + + + + dmabuf file descriptor + + + + memory size + + + + extra #GstFdMemoryFlags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base class for allocators with fd-backed memory + + + Return a new fd allocator. + + + a new fd allocator, or NULL if the allocator + isn't available. Use gst_object_unref() to release the allocator after + usage + + + + + Return a %GstMemory that wraps a generic file descriptor. + + + a GstMemory based on @allocator. +When the buffer will be released the allocator will close the @fd unless +the %GST_FD_MEMORY_FLAG_DONT_CLOSE flag is specified. +The memory is only mmapped on gst_buffer_map() request. + + + + + allocator to be used for this memory + + + + file descriptor + + + + memory size + + + + extra #GstFdMemoryFlags + + + + + + + + + + + + + + + + Various flags to control the operation of the fd backed memory. + + + no flag + + + once the memory is mapped, + keep it mapped until the memory is destroyed. + + + do a private mapping instead of + the default shared mapping. + + + don't close the file descriptor when + the memory is freed. Since: 1.10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Marker interface for allocators with physical address backed memory + + + + + + + + + + + + + + + + + + + + + + + Return the file descriptor associated with @mem. + + + the file descriptor associated with the memory, or -1. The file + descriptor is still owned by the GstMemory. Use dup to take a copy + if you intend to use it beyond the lifetime of this GstMemory. + + + + + the memory to get the file descriptor + + + + + + Get the fd from @mem. Call gst_is_fd_memory() to check if @mem has +an fd. + + + the fd of @mem or -1 when there is no fd on @mem + + + + + #GstMemory + + + + + + Check if @mem is dmabuf memory. + + + %TRUE if @mem is dmabuf memory, otherwise %FALSE + + + + + the memory to be check + + + + + + Check if @mem is memory backed by an fd + + + %TRUE when @mem has an fd that can be retrieved with +gst_fd_memory_get_fd(). + + + + + #GstMemory + + + + + + + + whether the memory at @mem is backed by physical memory + + + + + a #GstMemory + + + + + + + + Physical memory address that is backing @mem, or 0 if none + + + + + a #GstMemory + + + + + + diff --git a/gir-files/GstAudio-1.0.gir b/gir-files/GstAudio-1.0.gir index 852e506a9..4e561bf6d 100644 --- a/gir-files/GstAudio-1.0.gir +++ b/gir-files/GstAudio-1.0.gir @@ -10646,6 +10646,16 @@ channel positions. + + This library contains some helper functions for audio elements. + + + This library contains some helper functions for multichannel audio. + + + This module contains some helper functions for encapsulating various +audio formats in IEC 61937 headers and padding. + diff --git a/gir-files/GstGL-1.0.gir b/gir-files/GstGL-1.0.gir index d1f74a4fe..82a52706f 100644 --- a/gir-files/GstGL-1.0.gir +++ b/gir-files/GstGL-1.0.gir @@ -10556,6 +10556,13 @@ or a valid GLSL version and/or profile. + + Provides some helper API for dealing with OpenGL API's and platforms + + + Some useful utilities for converting between various formats and OpenGL +formats. + @@ -10621,395 +10628,5 @@ or a valid GLSL version and/or profile. - - - - - - the contents of a #GstGLDisplayEGL are private and should only be accessed -through the provided API - - - Create a new #GstGLDisplayEGL using the default EGL_DEFAULT_DISPLAY. - - - a new #GstGLDisplayEGL or %NULL - - - - - - - - - - - - - - - - Creates a EGL display connection from a native Display. - -This function will return the same value for multiple calls with the same -@display. - - - a new #GstGLDisplayEGL - - - - - an existing #GstGLDisplay - - - - - - Attempts to create a new `EGLDisplay` from @display. If @type is -%GST_GL_DISPLAY_TYPE_ANY, then @display must be 0. @type must not be -%GST_GL_DISPLAY_TYPE_NONE. - - - A `EGLDisplay` or `EGL_NO_DISPLAY` - - - - - a #GstGLDisplayType - - - - pointer to a display (or 0) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - the contents of a #GstGLDisplayWayland are private and should only be accessed -through the provided API - - - Create a new #GstGLDisplayWayland from the wayland display name. See `wl_display_connect`() -for details on what is a valid name. - - - a new #GstGLDisplayWayland or %NULL - - - - - a display name - - - - - - Creates a new display connection from a wl_display Display. - - - a new #GstGLDisplayWayland - - - - - an existing, wayland display - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - the contents of a #GstGLDisplayX11 are private and should only be accessed -through the provided API - - - Create a new #GstGLDisplayX11 from the x11 display name. See `XOpenDisplay`() -for details on what is a valid name. - - - a new #GstGLDisplayX11 or %NULL - - - - - a display name - - - - - - Creates a new display connection from a X11 Display. - - - a new #GstGLDisplayX11 - - - - - an existing, x11 display - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gir-files/GstGLEGL-1.0.gir b/gir-files/GstGLEGL-1.0.gir new file mode 100644 index 000000000..6b8e7ac2a --- /dev/null +++ b/gir-files/GstGLEGL-1.0.gir @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + the contents of a #GstGLDisplayEGL are private and should only be accessed +through the provided API + + + Create a new #GstGLDisplayEGL using the default EGL_DEFAULT_DISPLAY. + + + a new #GstGLDisplayEGL or %NULL + + + + + + + + + + + + + + + + Creates a EGL display connection from a native Display. + +This function will return the same value for multiple calls with the same +@display. + + + a new #GstGLDisplayEGL + + + + + an existing #GstGLDisplay + + + + + + Attempts to create a new `EGLDisplay` from @display. If @type is +%GST_GL_DISPLAY_TYPE_ANY, then @display must be 0. @type must not be +%GST_GL_DISPLAY_TYPE_NONE. + + + A `EGLDisplay` or `EGL_NO_DISPLAY` + + + + + a #GstGLDisplayType + + + + pointer to a display (or 0) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GstGLDisplayEGL represents a connection to an EGL `EGLDisplay` handle created +internally (gst_gl_display_egl_new()) or wrapped by the application +(gst_gl_display_egl_new_with_egl_display()) + + + #GstGLDisplayEGLDevice represents a `EGLDeviceEXT` handle created internally +(gst_gl_display_egl_device_new()) or wrapped by the application +(gst_gl_display_egl_device_new_with_egl_device()) + + + + diff --git a/gir-files/GstGLWayland-1.0.gir b/gir-files/GstGLWayland-1.0.gir new file mode 100644 index 000000000..865c8dc0b --- /dev/null +++ b/gir-files/GstGLWayland-1.0.gir @@ -0,0 +1,125 @@ + + + + + + + + + + + + the contents of a #GstGLDisplayWayland are private and should only be accessed +through the provided API + + + Create a new #GstGLDisplayWayland from the wayland display name. See `wl_display_connect`() +for details on what is a valid name. + + + a new #GstGLDisplayWayland or %NULL + + + + + a display name + + + + + + Creates a new display connection from a wl_display Display. + + + a new #GstGLDisplayWayland + + + + + an existing, wayland display + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GstGLDisplayWayland represents a connection to a Wayland `wl_display` handle +created internally (gst_gl_display_wayland_new()) or wrapped by the application +(gst_gl_display_wayland_new_with_display()) + + + diff --git a/gir-files/GstGLX11-1.0.gir b/gir-files/GstGLX11-1.0.gir new file mode 100644 index 000000000..6bdcb7f73 --- /dev/null +++ b/gir-files/GstGLX11-1.0.gir @@ -0,0 +1,119 @@ + + + + + + + + + + + + the contents of a #GstGLDisplayX11 are private and should only be accessed +through the provided API + + + Create a new #GstGLDisplayX11 from the x11 display name. See `XOpenDisplay`() +for details on what is a valid name. + + + a new #GstGLDisplayX11 or %NULL + + + + + a display name + + + + + + Creates a new display connection from a X11 Display. + + + a new #GstGLDisplayX11 + + + + + an existing, x11 display + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GstGLDisplayX11 represents a connection to an X11 `Display` handle created +internally (gst_gl_display_x11_new()) or wrapped by the application +(gst_gl_display_x11_new_with_display()) + + + diff --git a/gir-files/GstPbutils-1.0.gir b/gir-files/GstPbutils-1.0.gir index 1eb83bc64..0e1b82284 100644 --- a/gir-files/GstPbutils-1.0.gir +++ b/gir-files/GstPbutils-1.0.gir @@ -3462,6 +3462,309 @@ invalid Opus caps. + + Functions to create and handle encoding profiles. + +Encoding profiles describe the media types and settings one wishes to use +for an encoding process. The top-level profiles are commonly +#GstEncodingContainerProfile(s) (which contains a user-readable name and +description along with which container format to use). These, in turn, +reference one or more #GstEncodingProfile(s) which indicate which encoding +format should be used on each individual streams. + +#GstEncodingProfile(s) can be provided to the 'encodebin' element, which +will take care of selecting and setting up the required elements to produce +an output stream conforming to the specifications of the profile. + +Unlike other systems, the encoding profiles do not specify which #GstElement +to use for the various encoding and muxing steps, but instead relies on +specifying the format one wishes to use. + +Encoding profiles can be created at runtime by the application or loaded +from (and saved to) file using the #GstEncodingTarget API. + +## Defining a GstEncodingProfile as a string + +### Serialized encoding profile formats + +#### Using encoders and muxer element factory name: + +``` + muxer_factory_name:video_encoder_factory_name:audio_encoder_factory_name +``` + +For example to encode a stream into a WebM container, with an OGG audio +stream and a VP8 video stream, the serialized #GstEncodingProfile looks +like: + +``` + webmmux:vp8enc:vorbisenc +``` + +#### Define the encoding profile in a generic way using caps: + +``` + muxer_source_caps:video_encoder_source_caps:audio_encoder_source_caps +``` + +For example to encode a stream into a WebM container, with an OGG audio +stream and a VP8 video stream, the serialized #GstEncodingProfile looks +like: + +``` + video/webm:video/x-vp8:audio/x-vorbis +``` + +It is possible to mix caps and element type names so you can specify a specific +video encoder while using caps for other encoders/muxer. + +### Advanced encoding format serialization features: + +You can also set the preset name of the encoding profile using the +caps+preset_name syntax as in: + +``` + video/webm:video/x-vp8+youtube-preset:audio/x-vorbis +``` + +Moreover, you can set extra properties `presence`, `single-segment` and +`variable-framerate` * of an * encoding profile using the `|presence=` syntax +as in: + +``` + video/webm:video/x-vp8|presence=1,variable-framerate=true|single-segment=true:audio/x-vorbis +``` + +This field allows specifies the maximum number of times a +#GstEncodingProfile can be used inside an encodebin. If 0, it is not a +mandatory stream and can be used as many times as necessary. + +You can also use the `restriction_caps->encoded_format_caps` syntax to +specify the restriction caps to be set on a #GstEncodingProfile + +It corresponds to the restriction #GstCaps to apply before the encoder that +will be used in the profile. The fields present in restriction caps are +properties of the raw stream (that is, before encoding), such as height and +width for video and depth and sampling rate for audio. This property does +not make sense for muxers. See #gst_encoding_profile_get_restriction for +more details. + +To force a video stream to be encoded with a Full HD resolution (using WebM +as the container format, VP8 as the video codec and Vorbis as the audio +codec), you should use: + +``` + "video/webm:video/x-raw,width=1920,height=1080->video/x-vp8:audio/x-vorbis" +``` + +> NOTE: Make sure to enclose into quotes to avoid '>' to be reinterpreted by +> the shell. + +In the case you are using encoder types, the following is also possible: + +``` + "matroskamux:x264enc,width=1920,height=1080:audio/x-vorbis" +``` + +## Some serialized encoding formats examples: + +MP3 audio and H264 in MP4: + +``` + video/quicktime,variant=iso:video/x-h264:audio/mpeg,mpegversion=1,layer=3 +``` + +Vorbis and theora in OGG: + +``` + application/ogg:video/x-theora:audio/x-vorbis +``` + +AC3 and H264 in MPEG-TS: + +``` + video/mpegts:video/x-h264:audio/x-ac3 +``` + +## Loading a profile from encoding targets + +Anywhere where you have to use a string to define a #GstEncodingProfile, +you can use load it from a #GstEncodingTarget using the following syntaxes: + +``` + target_name[/profilename/category] +``` + +or + +``` + /path/to/target.gep:profilename +``` + +## Examples + +### Creating a profile + +``` c +#include <gst/pbutils/encoding-profile.h> +... +GstEncodingProfile * +create_ogg_theora_profile(void) +{ + GstEncodingContainerProfile *prof; + GstCaps *caps; + + caps = gst_caps_from_string("application/ogg"); + prof = gst_encoding_container_profile_new("Ogg audio/video", + "Standard OGG/THEORA/VORBIS", + caps, NULL); + gst_caps_unref (caps); + + caps = gst_caps_from_string("video/x-theora"); + gst_encoding_container_profile_add_profile(prof, + (GstEncodingProfile*) gst_encoding_video_profile_new(caps, NULL, NULL, 0)); + gst_caps_unref (caps); + + caps = gst_caps_from_string("audio/x-vorbis"); + gst_encoding_container_profile_add_profile(prof, + (GstEncodingProfile*) gst_encoding_audio_profile_new(caps, NULL, NULL, 0)); + gst_caps_unref (caps); + + return (GstEncodingProfile*) prof; +} + +``` + +### Example: Using an encoder preset with a profile + +``` c +#include <gst/pbutils/encoding-profile.h> +... +GstEncodingProfile * +create_ogg_theora_profile(void) +{ + GstEncodingVideoProfile *v; + GstEncodingAudioProfile *a; + GstEncodingContainerProfile *prof; + GstCaps *caps; + GstPreset *preset; + + caps = gst_caps_from_string ("application/ogg"); + prof = gst_encoding_container_profile_new ("Ogg audio/video", + "Standard OGG/THEORA/VORBIS", + caps, NULL); + gst_caps_unref (caps); + + preset = GST_PRESET (gst_element_factory_make ("theoraenc", "theorapreset")); + g_object_set (preset, "bitrate", 1000, NULL); + // The preset will be saved on the filesystem, + // so try to use a descriptive name + gst_preset_save_preset (preset, "theora_bitrate_preset"); + gst_object_unref (preset); + + caps = gst_caps_from_string ("video/x-theora"); + v = gst_encoding_video_profile_new (caps, "theora_bitrate_preset", NULL, 0); + gst_encoding_container_profile_add_profile (prof, (GstEncodingProfile*) v); + gst_caps_unref (caps); + + caps = gst_caps_from_string ("audio/x-vorbis"); + a = gst_encoding_audio_profile_new (caps, NULL, NULL, 0); + gst_encoding_container_profile_add_profile (prof, (GstEncodingProfile*) a); + gst_caps_unref (caps); + + return (GstEncodingProfile*) prof; +} + +``` + +### Listing categories, targets and profiles + +``` c +#include <gst/pbutils/encoding-profile.h> +... +GstEncodingProfile *prof; +GList *categories, *tmpc; +GList *targets, *tmpt; +... +categories = gst_encoding_list_available_categories (); + +... Show available categories to user ... + +for (tmpc = categories; tmpc; tmpc = tmpc->next) { + gchar *category = (gchar *) tmpc->data; + + ... and we can list all targets within that category ... + + targets = gst_encoding_list_all_targets (category); + + ... and show a list to our users ... + + g_list_foreach (targets, (GFunc) gst_encoding_target_unref, NULL); + g_list_free (targets); +} + +g_list_foreach (categories, (GFunc) g_free, NULL); +g_list_free (categories); + +... +``` + + + On top of the notion of profiles, we implement the notion of EncodingTarget. +Encoding Targets are basically a higher level of abstraction to define formats +for specific target types. Those can define several GstEncodingProfiles with +different names, for example one for transcoding in full HD, another one for +low res, etc.. which are defined in the same encoding target. + +Basically if you want to encode a stream to send it to, say, youtube you should +have a Youtube encoding target defined in the "online-service" category. + +## Encoding target serialization format + +Encoding targets are serialized in a KeyFile like files. + +|[ +[GStreamer Encoding Target] +name : <name> +category : <category> +\description : <description> #translatable + +[profile-<profile1name>] +name : <name> +\description : <description> #optional +format : <format> +preset : <preset> + +[streamprofile-<id>] +parent : <encodingprofile.name>[,<encodingprofile.name>..] +\type : <type> # "audio", "video", "text" +format : <format> +preset : <preset> +restriction : <restriction> +presence : <presence> +pass : <pass> +variableframerate : <variableframerate> +]| + +## Location of encoding target files + +$GST_DATADIR/gstreamer-GST_API_VERSION/encoding-profile +$HOME/gstreamer-GST_API_VERSION/encoding-profile + +There also is a GST_ENCODING_TARGET_PATH environment variable +defining a list of folder containing encoding target files. + +## Naming convention + +|[ + $(target.category)/$(target.name).gep +]| + +## Naming restrictions: + + * lowercase ASCII letter for the first character + * Same for all other characters + numerics + hyphens + List all available #GstEncodingTarget for the specified category, or all categories if @categoryname is %NULL. @@ -3527,6 +3830,306 @@ of #GstEncodingTarget categories. + + libgstpbutils is a general utility library for plugins and applications. +It currently provides the +following: + +* human-readable description strings of codecs, elements, sources, decoders, +encoders, or sinks from decoder/encoder caps, element names, or protocol +names. + +* support for applications to initiate installation of missing plugins (if +this is supported by the distribution or operating system used) + +* API for GStreamer elements to create missing-plugin messages in order to +communicate to the application that a certain type of plugin is missing +(decoder, encoder, URI protocol source, URI protocol sink, named element) + +* API for applications to recognise and handle missing-plugin messages + +## Linking to this library + +You should obtain the required CFLAGS and LIBS using pkg-config on the +gstreamer-plugins-base-1.0 module. You will then also need to add +'-lgstreamer-pbutils-1.0' manually to your LIBS line. + +## Library initialisation + +Before using any of its functions, applications and plugins must call +gst_pb_utils_init() to initialise the library. + + + Provides codec-specific ulility functions such as functions to provide the +codec profile and level in human-readable string form from header data. + + + The above functions provide human-readable strings for media formats +and decoder/demuxer/depayloader/encoder/muxer/payloader elements for use +in error dialogs or other messages shown to users. + +gst_pb_utils_add_codec_description_to_tag_list() is a utility function +for demuxer and decoder elements to add audio/video codec tags from a +given (fixed) #GstCaps. + + + ## Overview + +Using this API, applications can request the installation of missing +GStreamer plugins. These may be missing decoders/demuxers or +encoders/muxers for a certain format, sources or sinks for a certain URI +protocol (e.g. 'http'), or certain elements known by their element +factory name ('audioresample'). + +Whether plugin installation is supported or not depends on the operating +system and/or distribution in question. The vendor of the operating +system needs to make sure the necessary hooks and mechanisms are in +place for plugin installation to work. See below for more detailed +information. + +From the application perspective, plugin installation is usually +triggered either + +- when the application itself has found that it wants or needs to + install a certain element +- when the application has been notified by an element (such as + playbin or decodebin) that one or more plugins are missing *and* the + application has decided that it wants to install one or more of + those missing plugins + +The install functions in this section all take one or more 'detail +strings'. These detail strings contain information about the type of +plugin that needs to be installed (decoder, encoder, source, sink, or +named element), and some additional information such GStreamer version +used and a human-readable description of the component to install for +user dialogs. + +Applications should not concern themselves with the composition of the +string itself. They should regard the string as if it was a shared +secret between GStreamer and the plugin installer application. + +Detail strings can be obtained using the function +gst_missing_plugin_message_get_installer_detail() on a +missing-plugin message. Such a message will either have been found by +the application on a pipeline's #GstBus, or the application will have +created it itself using gst_missing_element_message_new(), +gst_missing_decoder_message_new(), +gst_missing_encoder_message_new(), +gst_missing_uri_sink_message_new(), or +gst_missing_uri_source_message_new(). + +For each GStreamer element/plugin/component that should be installed, +the application needs one of those 'installer detail' string mentioned +in the previous section. This string can be obtained, as already +mentioned above, from a missing-plugin message using the function +gst_missing_plugin_message_get_installer_detail(). The +missing-plugin message is either posted by another element and then +found on the bus by the application, or the application has created it +itself as described above. + +The application will then call gst_install_plugins_async(), passing a +NULL-terminated array of installer detail strings, and a function that +should be called when the installation of the plugins has finished +(successfully or not). Optionally, a #GstInstallPluginsContext created +with gst_install_plugins_context_new() may be passed as well. This +way additional optional arguments like the application window's XID can +be passed to the external installer application. + +gst_install_plugins_async() will return almost immediately, with the +return code indicating whether plugin installation was started or not. +If the necessary hooks for plugin installation are in place and an +external installer application has in fact been called, the passed in +function will be called with a result code as soon as the external +installer has finished. If the result code indicates that new plugins +have been installed, the application will want to call +gst_update_registry() so the run-time plugin registry is updated and +the new plugins are made available to the application. + +> A Gtk/GLib main loop must be running in order for the result function +> to be called when the external installer has finished. If this is not +> the case, make sure to regularly call in your code: +> +> g_main_context_iteration (NULL,FALSE); + +## 1. Installer hook + +When GStreamer applications initiate plugin installation via +gst_install_plugins_async() or gst_install_plugins_sync(), a +pre-defined helper application will be called. + +The exact path of the helper application to be called is set at compile +time, usually by the build system based on the install prefix. +For a normal package build into the `/usr` prefix, this will usually +default to `/usr/libexec/gst-install-plugins-helper` or +`/usr/lib/gst-install-plugins-helper`. + +Vendors/distros who want to support GStreamer plugin installation should +either provide such a helper script/application or use the meson option +`-Dinstall_plugins_helper'=/path/to/installer` to make GStreamer call an +installer of their own directly. + +It is strongly recommended that vendors provide a small helper +application as interlocutor to the real installer though, even more so +if command line argument munging is required to transform the command +line arguments passed by GStreamer to the helper application into +arguments that are understood by the real installer. + +The helper application path defined at compile time can be overridden at +runtime by setting the GST_INSTALL_PLUGINS_HELPER environment +variable. This can be useful for testing/debugging purposes. + +## 2. Arguments passed to the install helper + +GStreamer will pass the following arguments to the install helper (this +is in addition to the path of the executable itself, which is by +convention argv[0]): + +- none to many optional arguments in the form of `--foo-bar=val`. + Example: `--transient-for=XID` where XID is the X Window ID of the + main window of the calling application (so the installer can make + itself transient to that window). Unknown optional arguments should + be ignored by the installer. + +- one 'installer detail string' argument for each plugin to be + installed; these strings will have a `gstreamer` prefix; the exact + format of the detail string is explained below + +## 3. Detail string describing the missing plugin + +The string is in UTF-8 encoding and is made up of several fields, +separated by '|' characters (but neither the first nor the last +character is a '|'). The fields are: + +- plugin system identifier, ie. "gstreamer" + This identifier determines the format of the rest of the detail + string. Automatic plugin installers should not process detail + strings with unknown identifiers. This allows other plugin-based + libraries to use the same mechanism for their automatic plugin + installation needs, or for the format to be changed should it turn + out to be insufficient. +- plugin system version, e.g. "1.0" + This is required so that when there is GStreamer-2.0 at some point + in future, the different major versions can still co-exist and use + the same plugin install mechanism in the same way. +- application identifier, e.g. "totem" + This may also be in the form of "pid/12345" if the program name + can't be obtained for some reason. +- human-readable localised description of the required component, e.g. + "Vorbis audio decoder" +- identifier string for the required component (see below for details + about how to map this to the package/plugin that needs installing), + e.g. + - urisource-$(PROTOCOL_REQUIRED), e.g. urisource-http or + urisource-mms + - element-$(ELEMENT_REQUIRED), e.g. element-videoconvert + - decoder-$(CAPS_REQUIRED), e.g. (do read below for more + details!): + - decoder-audio/x-vorbis + - decoder-application/ogg + - decoder-audio/mpeg, mpegversion=(int)4 + - decoder-video/mpeg, systemstream=(boolean)true, + mpegversion=(int)2 + - encoder-$(CAPS_REQUIRED), e.g. encoder-audio/x-vorbis +- optional further fields not yet specified + +An entire ID string might then look like this, for example: ` +gstreamer|1.0|totem|Vorbis audio decoder|decoder-audio/x-vorbis` + +Plugin installers parsing this ID string should expect further fields +also separated by '|' symbols and either ignore them, warn the user, or +error out when encountering them. + +Those unfamiliar with the GStreamer 'caps' system should note a few +things about the caps string used in the above decoder/encoder case: + +- the first part ("video/mpeg") of the caps string is a GStreamer + media type and *not* a MIME type. Wherever possible, the GStreamer + media type will be the same as the corresponding MIME type, but + often it is not. +- a caps string may or may not have additional comma-separated fields + of various types (as seen in the examples above) +- the caps string of a 'required' component (as above) will always + have fields with fixed values, whereas an introspected string (see + below) may have fields with non-fixed values. Compare for example: + - `audio/mpeg, mpegversion=(int)4` vs. + `audio/mpeg, mpegversion=(int){2, 4}` + - `video/mpeg, mpegversion=(int)2` vs. + `video/mpeg, systemstream=(boolean){ true, false}, mpegversion=(int)[1, 2]` + +## 4. Exit codes the installer should return + +The installer should return one of the following exit codes when it +exits: + +- 0 if all of the requested plugins could be installed + (#GST_INSTALL_PLUGINS_SUCCESS) +- 1 if no appropriate installation candidate for any of the requested + plugins could be found. Only return this if nothing has been + installed (#GST_INSTALL_PLUGINS_NOT_FOUND) +- 2 if an error occurred during the installation. The application will + assume that the user will already have seen an error message by the + installer in this case and will usually not show another one + (#GST_INSTALL_PLUGINS_ERROR) +- 3 if some of the requested plugins could be installed, but not all + (#GST_INSTALL_PLUGINS_PARTIAL_SUCCESS) +- 4 if the user aborted the installation + (#GST_INSTALL_PLUGINS_USER_ABORT) + +## 5. How to map the required detail string to packages + +It is up to the vendor to find mechanism to map required components from +the detail string to the actual packages/plugins to install. This could +be a hardcoded list of mappings, for example, or be part of the +packaging system metadata. + +GStreamer plugin files can be introspected for this information. The +`gst-inspect` utility has a special command line option that will output +information similar to what is required. For example ` +$ gst-inspect-1.0 --print-plugin-auto-install-info /path/to/libgstvorbis.so +should output something along the lines of +`decoder-audio/x-vorbis`, `element-vorbisdec` `element-vorbisenc` +`element-vorbisparse`, `element-vorbistag`, `encoder-audio/x-vorbis` + +Note that in the encoder and decoder case the introspected caps can be +more complex with additional fields, e.g. +`audio/mpeg,mpegversion=(int){2,4}`, so they will not always exactly +match the caps wanted by the application. It is up to the installer to +deal with this (either by doing proper caps intersection using the +GStreamer #GstCaps API, or by only taking into account the media type). + +Another potential source of problems are plugins such as ladspa or +libvisual where the list of elements depends on the installed +ladspa/libvisual plugins at the time. This is also up to the +distribution to handle (but usually not relevant for playback +applications). + + + Functions to create, recognise and parse missing-plugins messages for +applications and elements. + +Missing-plugin messages are posted on the bus by elements like decodebin +or playbin if they can't find an appropriate source element or decoder +element. The application can use these messages for two things: + + * concise error/problem reporting to the user mentioning what exactly + is missing, see gst_missing_plugin_message_get_description() + + * initiate installation of missing plugins, see + gst_missing_plugin_message_get_installer_detail() and + gst_install_plugins_async() + +Applications may also create missing-plugin messages themselves to install +required elements that are missing, using the install mechanism mentioned +above. + + + Use the GST_PLUGINS_BASE_VERSION_* macros e.g. to check what version of +gst-plugins-base you are building against, and gst_plugins_base_version() +if you need to check at runtime what version of the gst-plugins-base +libraries are being used / you are currently linked against. + +The version macros get defined by including &lt;gst/pbutils/pbutils.h&gt;. + Requests plugin installation without blocking. Once the plugins have been installed or installation has failed, @func will be called with the result diff --git a/gir-files/GstRtp-1.0.gir b/gir-files/GstRtp-1.0.gir index f9c24e2a9..19bb6fa45 100644 --- a/gir-files/GstRtp-1.0.gir +++ b/gir-files/GstRtp-1.0.gir @@ -4864,6 +4864,14 @@ is no such metadata on @buffer. + + Provides common defines for the RTP library. + + + The GstRTPPayloads helper functions makes it easy to deal with static and dynamic +payloads. Its main purpose is to retrieve properties such as the default clock-rate +and get session bandwidth information. + Open @buffer for reading or writing, depending on @flags. The resulting RTCP buffer state is stored in @rtcp. diff --git a/gir-files/GstRtsp-1.0.gir b/gir-files/GstRtsp-1.0.gir index de1fa1901..4b0f2f133 100644 --- a/gir-files/GstRtsp-1.0.gir +++ b/gir-files/GstRtsp-1.0.gir @@ -4138,6 +4138,9 @@ not equal #GST_RTSP_OK. + + Provides common defines for the RTSP library. + Free a %NULL-terminated array of credentials returned from gst_rtsp_message_parse_auth_credentials(). diff --git a/gir-files/GstSdp-1.0.gir b/gir-files/GstSdp-1.0.gir index 224d58a42..e5b0d5491 100644 --- a/gir-files/GstSdp-1.0.gir +++ b/gir-files/GstSdp-1.0.gir @@ -4099,6 +4099,10 @@ time. + + The GstMIKEY helper functions makes it easy to parse and create MIKEY +messages. + Check if the given @addr is a multicast address. diff --git a/gir-files/GstTag-1.0.gir b/gir-files/GstTag-1.0.gir index 78b19ce91..188061061 100644 --- a/gir-files/GstTag-1.0.gir +++ b/gir-files/GstTag-1.0.gir @@ -930,6 +930,41 @@ the schema wasn't in the list + + Contains additional standardized GStreamer tag definitions for plugins +and applications, and functions to register them with the GStreamer +tag system. + + + Contains utility function to parse #GstTagList<!-- -->s from exif +buffers and to create exif buffers from #GstTagList<!-- -->s + +Note that next IFD fields on the created exif buffers are set to 0. + + + Contains various utility functions for plugins to parse or create +ID3 tags and map ID3v2 identifiers to and from GStreamer identifiers. + + + Provides helper functions to convert between the various ISO-639 language +codes, and to map language codes to language names. + + + Provides information about Creative Commons media licenses, which are +often expressed in media files as a license URI in tags. Also useful +for applications creating media files, in case the user wants to license +the content under a Creative Commons license. + + + Contains various utility functions for plugins to parse or create +vorbiscomments and map them to and from #GstTagList<!-- -->s. + + + Contains various utility functions for plugins to parse or create +xmp packets and map them to and from #GstTagList<!-- -->s. + +Please note that the xmp parser is very lightweight and not strict at all. + Check if a given string contains a known ISO 639 language code. diff --git a/gir-files/GstVideo-1.0.gir b/gir-files/GstVideo-1.0.gir index e7372a439..d84804b43 100644 --- a/gir-files/GstVideo-1.0.gir +++ b/gir-files/GstVideo-1.0.gir @@ -4337,6 +4337,7 @@ They can conflict with other extended buffer flags. GST_VIDEO_BUFFER_FLAG_ONEFIELD (Since: 1.16). Use GST_VIDEO_BUFFER_IS_TOP_FIELD() to check for this flag. + The video frame has the bottom field only. This is the same as GST_VIDEO_BUFFER_FLAG_ONEFIELD @@ -8677,11 +8678,11 @@ for details about the layout and packing of these formats in memory. packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18) - - NV12 with 4x4 tiles in linear order (Since: 1.18) + + NV12 with 4x4 tiles in linear order. - - NV12 with 32x32 tiles in linear order (Since: 1.18) + + NV12 with 32x32 tiles in linear order. Converts a FOURCC value into the corresponding #GstVideoFormat. @@ -9352,6 +9353,7 @@ All video planes of @buffer will be mapped and the pointers will be set in is the same as GST_VIDEO_FRAME_FLAG_TFF | GST_VIDEO_FRAME_FLAG_ONEFIELD (Since: 1.16). + The video frame has the bottom field only. This is the same as GST_VIDEO_FRAME_FLAG_ONEFIELD @@ -12842,8 +12844,8 @@ frames will only be rendered in PLAYING state. in memory in Z or flipped Z order. In case of odd rows, the last row of blocks is arranged in linear order. - - Tiles are in row order. (Since: 1.18) + + Tiles are in row order. @@ -13601,11 +13603,8 @@ non-linear RGB (R'G'B') and linear RGB STD-B67 and Rec. ITU-R BT.2100-1 hybrid loggamma (HLG) system Since: 1.18 - - also known as SMPTE170M / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC - Functionally the same as the values - GST_VIDEO_TRANSFER_BT709, and GST_VIDEO_TRANSFER_BT2020_10. - Since: 1.18 + + also known as SMPTE170M / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC Converts the @value to the #GstVideoTransferFunction @@ -14467,6 +14466,28 @@ in @align + + This library contains some helper functions and includes the +videosink and videofilter base classes. + + + A collection of objects and methods to assist with handling Ancillary Data +present in Vertical Blanking Interval as well as Closed Caption. + + + The functions gst_video_chroma_from_string() and gst_video_chroma_to_string() convert +between #GstVideoChromaSite and string descriptions. + +#GstVideoChromaResample is a utility object for resampling chroma planes +and converting between different chroma sampling sitings. + + + Special GstBufferPool subclass for raw video buffers. + +Allows configuration of video-specific requirements such as +stride alignments or pixel padding, and can also be configured +to automatically add #GstVideoMeta to the buffers. + Convenience function to check if the given message is a "prepare-window-handle" message from a #GstVideoOverlay. @@ -16488,5 +16509,14 @@ and "ITU-T H.273 Table 3". + + This object is used to convert video frames from one format to another. +The object can perform conversion of: + + * video format + * video colorspace + * chroma-siting + * video size +