summaryrefslogtreecommitdiff
path: root/include/gst/pbutils
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-08-03 21:02:36 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-08-03 21:02:36 +0300
commit5323a782c4e8c42781f22ce2f488962a18f82554 (patch)
treef71537197b16f0f8fd0d6937f7120d018d220814 /include/gst/pbutils
parent50acf9d37183f86f6f623aad410003392b0af41f (diff)
Jabber: initial version of Jingle support
Diffstat (limited to 'include/gst/pbutils')
-rw-r--r--include/gst/pbutils/codec-utils.h162
-rw-r--r--include/gst/pbutils/descriptions.h101
-rw-r--r--include/gst/pbutils/encoding-profile.h286
-rw-r--r--include/gst/pbutils/encoding-target.h181
-rw-r--r--include/gst/pbutils/gstaudiovisualizer.h112
-rw-r--r--include/gst/pbutils/gstdiscoverer.h435
-rw-r--r--include/gst/pbutils/gstpluginsbaseversion.h79
-rw-r--r--include/gst/pbutils/install-plugins.h164
-rw-r--r--include/gst/pbutils/missing-plugins.h90
-rw-r--r--include/gst/pbutils/pbutils-enumtypes.h42
-rw-r--r--include/gst/pbutils/pbutils-prelude.h41
-rw-r--r--include/gst/pbutils/pbutils.h44
12 files changed, 1737 insertions, 0 deletions
diff --git a/include/gst/pbutils/codec-utils.h b/include/gst/pbutils/codec-utils.h
new file mode 100644
index 0000000000..1aa72467c1
--- /dev/null
+++ b/include/gst/pbutils/codec-utils.h
@@ -0,0 +1,162 @@
+/* GStreamer base utils library codec-specific utility functions
+ * Copyright (C) 2010 Arun Raghavan <arun.raghavan@collabora.co.uk>
+ * 2010 Collabora Multimedia
+ * 2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PB_UTILS_CODEC_UTILS_H__
+#define __GST_PB_UTILS_CODEC_UTILS_H__
+
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils-prelude.h>
+
+G_BEGIN_DECLS
+
+/* AAC */
+
+GST_PBUTILS_API
+guint gst_codec_utils_aac_get_sample_rate_from_index (guint sr_idx);
+
+GST_PBUTILS_API
+gint gst_codec_utils_aac_get_index_from_sample_rate (guint rate);
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_aac_get_profile (const guint8 * audio_config, guint len);
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_aac_get_level (const guint8 * audio_config, guint len);
+
+GST_PBUTILS_API
+guint gst_codec_utils_aac_get_sample_rate (const guint8 * audio_config, guint len);
+
+GST_PBUTILS_API
+guint gst_codec_utils_aac_get_channels (const guint8 * audio_config, guint len);
+
+GST_PBUTILS_API
+gboolean gst_codec_utils_aac_caps_set_level_and_profile (GstCaps * caps,
+ const guint8 * audio_config,
+ guint len);
+
+/* H.264 */
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_h264_get_profile (const guint8 * sps, guint len);
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_h264_get_level (const guint8 * sps, guint len);
+
+GST_PBUTILS_API
+guint8 gst_codec_utils_h264_get_level_idc (const gchar * level);
+
+GST_PBUTILS_API
+gboolean gst_codec_utils_h264_caps_set_level_and_profile (GstCaps * caps,
+ const guint8 * sps,
+ guint len);
+
+GST_PBUTILS_API
+gboolean gst_codec_utils_h264_get_profile_flags_level (const guint8 * codec_data,
+ guint len,
+ guint8 * profile,
+ guint8 * flags,
+ guint8 * level);
+
+/* H.265 */
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_h265_get_profile (const guint8 * profile_tier_level,
+ guint len);
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_h265_get_tier (const guint8 * profile_tier_level,
+ guint len);
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_h265_get_level (const guint8 * profile_tier_level,
+ guint len);
+
+GST_PBUTILS_API
+guint8 gst_codec_utils_h265_get_level_idc (const gchar * level);
+
+GST_PBUTILS_API
+gboolean gst_codec_utils_h265_caps_set_level_tier_and_profile (GstCaps * caps,
+ const guint8 * profile_tier_level,
+ guint len);
+/* MPEG-4 part 2 */
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_mpeg4video_get_profile (const guint8 * vis_obj_seq, guint len);
+
+GST_PBUTILS_API
+const gchar * gst_codec_utils_mpeg4video_get_level (const guint8 * vis_obj_seq, guint len);
+
+GST_PBUTILS_API
+gboolean gst_codec_utils_mpeg4video_caps_set_level_and_profile (GstCaps * caps,
+ const guint8 * vis_obj_seq,
+ guint len);
+
+/* Opus */
+
+GST_PBUTILS_API
+gboolean gst_codec_utils_opus_parse_caps (GstCaps * caps,
+ guint32 * rate,
+ guint8 * channels,
+ guint8 * channel_mapping_family,
+ guint8 * stream_count,
+ guint8 * coupled_count,
+ guint8 channel_mapping[256]);
+
+GST_PBUTILS_API
+GstCaps * gst_codec_utils_opus_create_caps (guint32 rate,
+ guint8 channels,
+ guint8 channel_mapping_family,
+ guint8 stream_count,
+ guint8 coupled_count,
+ const guint8 * channel_mapping);
+
+GST_PBUTILS_API
+GstCaps * gst_codec_utils_opus_create_caps_from_header (GstBuffer * header, GstBuffer * comments);
+
+GST_PBUTILS_API
+GstBuffer * gst_codec_utils_opus_create_header (guint32 rate,
+ guint8 channels,
+ guint8 channel_mapping_family,
+ guint8 stream_count,
+ guint8 coupled_count,
+ const guint8 * channel_mapping,
+ guint16 pre_skip,
+ gint16 output_gain);
+
+GST_PBUTILS_API
+gboolean gst_codec_utils_opus_parse_header (GstBuffer * header,
+ guint32 * rate,
+ guint8 * channels,
+ guint8 * channel_mapping_family,
+ guint8 * stream_count,
+ guint8 * coupled_count,
+ guint8 channel_mapping[256],
+ guint16 * pre_skip,
+ gint16 * output_gain);
+
+/* General */
+GST_PBUTILS_API
+gchar * gst_codec_utils_caps_get_mime_codec (GstCaps * caps);
+
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_CODEC_UTILS_H__ */
diff --git a/include/gst/pbutils/descriptions.h b/include/gst/pbutils/descriptions.h
new file mode 100644
index 0000000000..8b28bf7214
--- /dev/null
+++ b/include/gst/pbutils/descriptions.h
@@ -0,0 +1,101 @@
+/* GStreamer base utils library source/sink/codec description support
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PB_UTILS_DESCRIPTIONS_H__
+#define __GST_PB_UTILS_DESCRIPTIONS_H__
+
+#include <gst/gsttaglist.h>
+#include <gst/gstcaps.h>
+#include <gst/pbutils/pbutils-prelude.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstPbUtilsCapsDescriptionFlags:
+ * @GST_PBUTILS_CAPS_DESCRIPTION_FLAG_CONTAINER: Caps describe a container format.
+ * @GST_PBUTILS_CAPS_DESCRIPTION_FLAG_AUDIO: Caps describe an audio format, or a
+ * container format that can store audio.
+ * @GST_PBUTILS_CAPS_DESCRIPTION_FLAG_VIDEO: Caps describe an video format, or a
+ * container format that can store video.
+ * @GST_PBUTILS_CAPS_DESCRIPTION_FLAG_IMAGE: Caps describe an image format, or a
+ * container format that can store image.
+ * @GST_PBUTILS_CAPS_DESCRIPTION_FLAG_SUBTITLE: Caps describe an subtitle format, or a
+ * container format that can store subtitles.
+ * @GST_PBUTILS_CAPS_DESCRIPTION_FLAG_TAG: Container format is a tags container.
+ * @GST_PBUTILS_CAPS_DESCRIPTION_FLAG_GENERIC: Container format can store any kind of
+ * stream type.
+ *
+ * Flags that are returned by gst_pb_utils_get_caps_description_flags() and
+ * describe the format of the caps.
+ *
+ * Since: 1.20
+ */
+typedef enum {
+ GST_PBUTILS_CAPS_DESCRIPTION_FLAG_CONTAINER = 1 << 0,
+ GST_PBUTILS_CAPS_DESCRIPTION_FLAG_AUDIO = 1 << 1,
+ GST_PBUTILS_CAPS_DESCRIPTION_FLAG_VIDEO = 1 << 2,
+ GST_PBUTILS_CAPS_DESCRIPTION_FLAG_IMAGE = 1 << 3,
+ GST_PBUTILS_CAPS_DESCRIPTION_FLAG_SUBTITLE = 1 << 4,
+ GST_PBUTILS_CAPS_DESCRIPTION_FLAG_TAG = 1 << 5,
+ GST_PBUTILS_CAPS_DESCRIPTION_FLAG_GENERIC = 1 << 6,
+} GstPbUtilsCapsDescriptionFlags;
+
+/*
+ * functions for use by demuxers or decoders to add CODEC tags to tag lists
+ * from caps
+ */
+
+GST_PBUTILS_API
+gboolean gst_pb_utils_add_codec_description_to_tag_list (GstTagList * taglist,
+ const gchar * codec_tag,
+ const GstCaps * caps);
+
+GST_PBUTILS_API
+gchar * gst_pb_utils_get_codec_description (const GstCaps * caps);
+
+/*
+ * functions mainly used by the missing plugins message creation functions to
+ * find descriptions of what exactly is missing
+ */
+
+GST_PBUTILS_API
+gchar * gst_pb_utils_get_source_description (const gchar * protocol);
+
+GST_PBUTILS_API
+gchar * gst_pb_utils_get_sink_description (const gchar * protocol);
+
+GST_PBUTILS_API
+gchar * gst_pb_utils_get_decoder_description (const GstCaps * caps);
+
+GST_PBUTILS_API
+gchar * gst_pb_utils_get_encoder_description (const GstCaps * caps);
+
+GST_PBUTILS_API
+gchar * gst_pb_utils_get_element_description (const gchar * factory_name);
+
+GST_PBUTILS_API
+GstPbUtilsCapsDescriptionFlags gst_pb_utils_get_caps_description_flags (const GstCaps * caps);
+
+GST_PBUTILS_API
+gchar * gst_pb_utils_get_file_extension_from_caps (const GstCaps *caps);
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_DESCRIPTIONS_H__ */
+
diff --git a/include/gst/pbutils/encoding-profile.h b/include/gst/pbutils/encoding-profile.h
new file mode 100644
index 0000000000..ad97d01f0b
--- /dev/null
+++ b/include/gst/pbutils/encoding-profile.h
@@ -0,0 +1,286 @@
+/* GStreamer encoding profiles library
+ * Copyright (C) 2009-2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ * (C) 2009-2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PROFILE_H__
+#define __GST_PROFILE_H__
+
+#include <gst/gst.h>
+
+#include <gst/pbutils/pbutils-enumtypes.h>
+#include <gst/pbutils/gstdiscoverer.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstEncodingProfile:
+ *
+ * The opaque base class object for all encoding profiles. This contains generic
+ * information like name, description, format and preset.
+ */
+
+#define GST_TYPE_ENCODING_PROFILE \
+ (gst_encoding_profile_get_type ())
+#define GST_ENCODING_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_PROFILE, GstEncodingProfile))
+#define GST_IS_ENCODING_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_PROFILE))
+typedef struct _GstEncodingProfile GstEncodingProfile;
+typedef struct _GstEncodingProfileClass GstEncodingProfileClass;
+
+GST_PBUTILS_API
+GType gst_encoding_profile_get_type (void);
+
+
+
+/**
+ * GstEncodingContainerProfile:
+ *
+ * Encoding profiles for containers. Keeps track of a list of #GstEncodingProfile
+ */
+#define GST_TYPE_ENCODING_CONTAINER_PROFILE \
+ (gst_encoding_container_profile_get_type ())
+#define GST_ENCODING_CONTAINER_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_CONTAINER_PROFILE, GstEncodingContainerProfile))
+#define GST_IS_ENCODING_CONTAINER_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_CONTAINER_PROFILE))
+typedef struct _GstEncodingContainerProfile GstEncodingContainerProfile;
+typedef struct _GstEncodingContainerProfileClass GstEncodingContainerProfileClass;
+
+GST_PBUTILS_API
+GType gst_encoding_container_profile_get_type (void);
+
+
+
+/**
+ * GstEncodingVideoProfile:
+ *
+ * Variant of #GstEncodingProfile for video streams, allows specifying the @pass.
+ */
+#define GST_TYPE_ENCODING_VIDEO_PROFILE \
+ (gst_encoding_video_profile_get_type ())
+#define GST_ENCODING_VIDEO_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_VIDEO_PROFILE, GstEncodingVideoProfile))
+#define GST_IS_ENCODING_VIDEO_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_VIDEO_PROFILE))
+typedef struct _GstEncodingVideoProfile GstEncodingVideoProfile;
+typedef struct _GstEncodingVideoProfileClass GstEncodingVideoProfileClass;
+
+GST_PBUTILS_API
+GType gst_encoding_video_profile_get_type (void);
+
+
+
+/**
+ * GstEncodingAudioProfile:
+ *
+ * Variant of #GstEncodingProfile for audio streams.
+ */
+#define GST_TYPE_ENCODING_AUDIO_PROFILE \
+ (gst_encoding_audio_profile_get_type ())
+#define GST_ENCODING_AUDIO_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_AUDIO_PROFILE, GstEncodingAudioProfile))
+#define GST_IS_ENCODING_AUDIO_PROFILE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_AUDIO_PROFILE))
+typedef struct _GstEncodingAudioProfile GstEncodingAudioProfile;
+typedef struct _GstEncodingAudioProfileClass GstEncodingAudioProfileClass;
+
+GST_PBUTILS_API
+GType gst_encoding_audio_profile_get_type (void);
+
+
+
+/* GstEncodingProfile API */
+
+/**
+ * gst_encoding_profile_unref:
+ * @profile: a #GstEncodingProfile
+ *
+ * Decreases the reference count of the @profile, possibly freeing the @profile.
+ */
+#define gst_encoding_profile_unref(profile) (g_object_unref ((GObject*) profile))
+
+/**
+ * gst_encoding_profile_ref:
+ * @profile: a #GstEncodingProfile
+ *
+ * Increases the reference count of the @profile.
+ */
+#define gst_encoding_profile_ref(profile) (g_object_ref ((GObject*) profile))
+
+GST_PBUTILS_API
+const gchar * gst_encoding_profile_get_name (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_name (GstEncodingProfile *profile,
+ const gchar *name);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_profile_get_description (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_description (GstEncodingProfile *profile,
+ const gchar *description);
+
+GST_PBUTILS_API
+GstCaps * gst_encoding_profile_get_format (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_format (GstEncodingProfile *profile,
+ GstCaps *format);
+
+GST_PBUTILS_API
+gboolean gst_encoding_profile_get_allow_dynamic_output (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_allow_dynamic_output (GstEncodingProfile *profile,
+ gboolean allow_dynamic_output);
+
+GST_PBUTILS_API
+gboolean gst_encoding_profile_get_single_segment (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_single_segment (GstEncodingProfile *profile,
+ gboolean single_segment);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_profile_get_preset (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_profile_get_preset_name (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_preset (GstEncodingProfile *profile,
+ const gchar *preset);
+
+GST_PBUTILS_API
+guint gst_encoding_profile_get_presence (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_presence (GstEncodingProfile *profile,
+ guint presence);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_preset_name (GstEncodingProfile * profile,
+ const gchar * preset_name);
+
+GST_PBUTILS_API
+GstCaps * gst_encoding_profile_get_restriction (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_restriction (GstEncodingProfile *profile,
+ GstCaps *restriction);
+
+GST_PBUTILS_API
+gboolean gst_encoding_profile_is_equal (GstEncodingProfile *a,
+ GstEncodingProfile *b);
+
+GST_PBUTILS_API
+GstCaps * gst_encoding_profile_get_input_caps (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_profile_get_type_nick (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_profile_get_file_extension (GstEncodingProfile * profile);
+
+GST_PBUTILS_API
+GstEncodingProfile * gst_encoding_profile_find (const gchar *targetname,
+ const gchar *profilename,
+ const gchar *category);
+
+GST_PBUTILS_API
+gboolean gst_encoding_profile_is_enabled (GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_enabled (GstEncodingProfile *profile,
+ gboolean enabled);
+/* GstEncodingContainerProfile API */
+
+GST_PBUTILS_API
+gboolean gst_encoding_container_profile_add_profile (GstEncodingContainerProfile *container,
+ GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+gboolean gst_encoding_container_profile_contains_profile (GstEncodingContainerProfile * container,
+ GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+const GList * gst_encoding_container_profile_get_profiles (GstEncodingContainerProfile *profile);
+
+
+GST_PBUTILS_API
+GstEncodingContainerProfile * gst_encoding_container_profile_new (const gchar *name,
+ const gchar *description,
+ GstCaps *format,
+ const gchar *preset);
+
+
+/* Individual stream encodingprofile API */
+
+GST_PBUTILS_API
+GstEncodingVideoProfile * gst_encoding_video_profile_new (GstCaps *format,
+ const gchar *preset,
+ GstCaps *restriction,
+ guint presence);
+
+GST_PBUTILS_API
+GstEncodingAudioProfile * gst_encoding_audio_profile_new (GstCaps *format,
+ const gchar *preset,
+ GstCaps *restriction,
+ guint presence);
+
+GST_PBUTILS_API
+guint gst_encoding_video_profile_get_pass (GstEncodingVideoProfile *prof);
+
+GST_PBUTILS_API
+gboolean gst_encoding_video_profile_get_variableframerate (GstEncodingVideoProfile *prof);
+
+GST_PBUTILS_API
+void gst_encoding_video_profile_set_pass (GstEncodingVideoProfile *prof,
+ guint pass);
+
+GST_PBUTILS_API
+void gst_encoding_video_profile_set_variableframerate (GstEncodingVideoProfile *prof,
+ gboolean variableframerate);
+
+GST_PBUTILS_API
+GstEncodingProfile * gst_encoding_profile_from_discoverer (GstDiscovererInfo *info);
+
+GST_PBUTILS_API
+GstEncodingProfile * gst_encoding_profile_copy (GstEncodingProfile *self);
+
+GST_PBUTILS_API
+void gst_encoding_profile_set_element_properties (GstEncodingProfile *self,
+ GstStructure *element_properties);
+
+GST_PBUTILS_API
+GstStructure *gst_encoding_profile_get_element_properties (GstEncodingProfile *self);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingAudioProfile, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingContainerProfile, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingProfile, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingVideoProfile, gst_object_unref)
+
+G_END_DECLS
+
+#endif /* __GST_PROFILE_H__ */
diff --git a/include/gst/pbutils/encoding-target.h b/include/gst/pbutils/encoding-target.h
new file mode 100644
index 0000000000..9a51dac55f
--- /dev/null
+++ b/include/gst/pbutils/encoding-target.h
@@ -0,0 +1,181 @@
+/* GStreamer encoding profile registry
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ * (C) 2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PROFILE_REGISTRY_H__
+#define __GST_PROFILE_REGISTRY_H__
+
+#include <gst/pbutils/encoding-profile.h>
+
+G_BEGIN_DECLS
+
+
+/* FIXME/UNKNOWNS
+ *
+ * Should encoding categories be well-known strings/quarks ?
+ *
+ */
+
+/**
+ * GST_ENCODING_CATEGORY_DEVICE:
+ *
+ * #GstEncodingTarget category for device-specific targets.
+ * The name of the target will usually be the constructor and model of the device,
+ * and that target will contain #GstEncodingProfiles suitable for that device.
+ */
+#define GST_ENCODING_CATEGORY_DEVICE "device"
+
+/**
+ * GST_ENCODING_CATEGORY_ONLINE_SERVICE:
+ *
+ * #GstEncodingTarget category for online-services.
+ * The name of the target will usually be the name of the online service
+ * and that target will contain #GstEncodingProfiles suitable for that online
+ * service.
+ */
+
+#define GST_ENCODING_CATEGORY_ONLINE_SERVICE "online-service"
+
+/**
+ * GST_ENCODING_CATEGORY_STORAGE_EDITING:
+ *
+ * #GstEncodingTarget category for storage, archiving and editing targets.
+ * Those targets can be lossless and/or provide very fast random access content.
+ * The name of the target will usually be the container type or editing target,
+ * and that target will contain #GstEncodingProfiles suitable for editing or
+ * storage.
+ */
+#define GST_ENCODING_CATEGORY_STORAGE_EDITING "storage-editing"
+
+/**
+ * GST_ENCODING_CATEGORY_CAPTURE:
+ *
+ * #GstEncodingTarget category for recording and capture.
+ * Targets within this category are optimized for low latency encoding.
+ */
+#define GST_ENCODING_CATEGORY_CAPTURE "capture"
+
+/**
+ * GST_ENCODING_CATEGORY_FILE_EXTENSION:
+ *
+ * #GstEncodingTarget category for file extensions.
+ * The name of the target will be the name of the file extensions possible
+ * for a particular target. Those targets are defining like 'default' formats
+ * usually used for a particular file extension.
+ */
+
+#define GST_ENCODING_CATEGORY_FILE_EXTENSION "file-extension"
+
+/**
+ * GstEncodingTarget:
+ *
+ * Collection of #GstEncodingProfile for a specific target or use-case.
+ *
+ * When being stored/loaded, targets come from a specific category, like
+ * #GST_ENCODING_CATEGORY_DEVICE.
+ */
+#define GST_TYPE_ENCODING_TARGET \
+ (gst_encoding_target_get_type ())
+#define GST_ENCODING_TARGET(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_TARGET, GstEncodingTarget))
+#define GST_IS_ENCODING_TARGET(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_TARGET))
+
+typedef struct _GstEncodingTarget GstEncodingTarget;
+typedef GObjectClass GstEncodingTargetClass;
+
+GST_PBUTILS_API
+GType gst_encoding_target_get_type (void);
+
+/**
+ * gst_encoding_target_unref:
+ * @target: a #GstEncodingTarget
+ *
+ * Decreases the reference count of the @target, possibly freeing it.
+ */
+#define gst_encoding_target_unref(target) \
+ (g_object_unref ((GObject*) target))
+
+/**
+ * gst_encoding_target_ref:
+ * @target: a #GstEncodingTarget
+ *
+ * Increases the reference count of the @target.
+ */
+#define gst_encoding_target_ref(target) \
+ (g_object_ref ((GObject*) target))
+
+GST_PBUTILS_API
+GstEncodingTarget * gst_encoding_target_new (const gchar *name,
+ const gchar *category,
+ const gchar *description,
+ const GList *profiles);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_target_get_name (GstEncodingTarget *target);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_target_get_category (GstEncodingTarget *target);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_target_get_description (GstEncodingTarget *target);
+
+GST_PBUTILS_API
+const gchar * gst_encoding_target_get_path (GstEncodingTarget *target);
+
+GST_PBUTILS_API
+const GList * gst_encoding_target_get_profiles (GstEncodingTarget *target);
+
+GST_PBUTILS_API
+GstEncodingProfile * gst_encoding_target_get_profile (GstEncodingTarget *target,
+ const gchar *name);
+
+GST_PBUTILS_API
+gboolean gst_encoding_target_add_profile (GstEncodingTarget *target,
+ GstEncodingProfile *profile);
+
+GST_PBUTILS_API
+gboolean gst_encoding_target_save (GstEncodingTarget *target,
+ GError **error);
+
+GST_PBUTILS_API
+gboolean gst_encoding_target_save_to_file (GstEncodingTarget *target,
+ const gchar *filepath,
+ GError **error);
+
+GST_PBUTILS_API
+GstEncodingTarget * gst_encoding_target_load (const gchar *name,
+ const gchar *category,
+ GError **error);
+
+GST_PBUTILS_API
+GstEncodingTarget * gst_encoding_target_load_from_file (const gchar *filepath,
+ GError **error);
+
+GST_PBUTILS_API
+GList * gst_encoding_list_available_categories (void);
+
+GST_PBUTILS_API
+GList * gst_encoding_list_all_targets (const gchar * categoryname);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingTarget, gst_object_unref)
+
+G_END_DECLS
+
+#endif /* __GST_PROFILE_REGISTRY_H__ */
diff --git a/include/gst/pbutils/gstaudiovisualizer.h b/include/gst/pbutils/gstaudiovisualizer.h
new file mode 100644
index 0000000000..5c9fb48925
--- /dev/null
+++ b/include/gst/pbutils/gstaudiovisualizer.h
@@ -0,0 +1,112 @@
+/* GStreamer
+ * Copyright (C) <2011> Stefan Kost <ensonic@users.sf.net>
+ * Copyright (C) <2015> Luis de Bethencourt <luis@debethencourt.com>
+ *
+ * gstaudiovisualizer.c: base class for audio visualisation elements
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_AUDIO_VISUALIZER_H__
+#define __GST_AUDIO_VISUALIZER_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+
+#include <gst/video/video.h>
+#include <gst/audio/audio.h>
+#include <gst/base/gstadapter.h>
+#include <gst/pbutils/pbutils-prelude.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_AUDIO_VISUALIZER (gst_audio_visualizer_get_type())
+#define GST_AUDIO_VISUALIZER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizer))
+#define GST_AUDIO_VISUALIZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizerClass))
+#define GST_AUDIO_VISUALIZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizerClass))
+#define GST_IS_SYNAESTHESIA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_VISUALIZER))
+#define GST_IS_SYNAESTHESIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_VISUALIZER))
+typedef struct _GstAudioVisualizer GstAudioVisualizer;
+typedef struct _GstAudioVisualizerClass GstAudioVisualizerClass;
+typedef struct _GstAudioVisualizerPrivate GstAudioVisualizerPrivate;
+
+typedef void (*GstAudioVisualizerShaderFunc)(GstAudioVisualizer *scope, const GstVideoFrame *s, GstVideoFrame *d);
+
+/**
+ * GstAudioVisualizerShader:
+ * @GST_AUDIO_VISUALIZER_SHADER_NONE: no shading
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE: plain fading
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP: fade and move up
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN: fade and move down
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT: fade and move left
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT: fade and move right
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT: fade and move horizontally out
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN: fade and move horizontally in
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT: fade and move vertically out
+ * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN: fade and move vertically in
+ *
+ * Different types of supported background shading functions.
+ */
+typedef enum {
+ GST_AUDIO_VISUALIZER_SHADER_NONE,
+ GST_AUDIO_VISUALIZER_SHADER_FADE,
+ GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP,
+ GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN,
+ GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT,
+ GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT,
+ GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT,
+ GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN,
+ GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT,
+ GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN
+} GstAudioVisualizerShader;
+
+struct _GstAudioVisualizer
+{
+ GstElement parent;
+
+ guint req_spf; /* min samples per frame wanted by the subclass */
+
+ /* video state */
+ GstVideoInfo vinfo;
+
+ /* audio state */
+ GstAudioInfo ainfo;
+
+ /*< private >*/
+ GstAudioVisualizerPrivate *priv;
+};
+
+struct _GstAudioVisualizerClass
+{
+ /*< private >*/
+ GstElementClass parent_class;
+
+ /*< public >*/
+ /* virtual function, called whenever the format changes */
+ gboolean (*setup) (GstAudioVisualizer * scope);
+
+ /* virtual function for rendering a frame */
+ gboolean (*render) (GstAudioVisualizer * scope, GstBuffer * audio, GstVideoFrame * video);
+
+ gboolean (*decide_allocation) (GstAudioVisualizer * scope, GstQuery *query);
+};
+
+GST_PBUTILS_API
+GType gst_audio_visualizer_get_type (void);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (GstAudioVisualizer, gst_object_unref)
+
+G_END_DECLS
+#endif /* __GST_AUDIO_VISUALIZER_H__ */
diff --git a/include/gst/pbutils/gstdiscoverer.h b/include/gst/pbutils/gstdiscoverer.h
new file mode 100644
index 0000000000..61a6575391
--- /dev/null
+++ b/include/gst/pbutils/gstdiscoverer.h
@@ -0,0 +1,435 @@
+/* GStreamer
+ * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
+ * 2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_DISCOVERER_H_
+#define _GST_DISCOVERER_H_
+
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils-prelude.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DISCOVERER_STREAM_INFO \
+ (gst_discoverer_stream_info_get_type ())
+#define GST_DISCOVERER_STREAM_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_STREAM_INFO, GstDiscovererStreamInfo))
+#define GST_IS_DISCOVERER_STREAM_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_STREAM_INFO))
+typedef struct _GstDiscovererStreamInfo GstDiscovererStreamInfo;
+typedef GObjectClass GstDiscovererStreamInfoClass;
+
+GST_PBUTILS_API
+GType gst_discoverer_stream_info_get_type (void);
+
+/**
+ * GstDiscovererStreamInfo:
+ *
+ * Base structure for information concerning a media stream. Depending on the
+ * stream type, one can find more media-specific information in
+ * #GstDiscovererAudioInfo, #GstDiscovererVideoInfo, and
+ * #GstDiscovererContainerInfo.
+ *
+ * The #GstDiscovererStreamInfo represents the topology of the stream. Siblings
+ * can be iterated over with gst_discoverer_stream_info_get_next() and
+ * gst_discoverer_stream_info_get_previous(). Children (sub-streams) of a
+ * stream can be accessed using the #GstDiscovererContainerInfo API.
+ *
+ * As a simple example, if you run #GstDiscoverer on an AVI file with one audio
+ * and one video stream, you will get a #GstDiscovererContainerInfo
+ * corresponding to the AVI container, which in turn will have a
+ * #GstDiscovererAudioInfo sub-stream and a #GstDiscovererVideoInfo sub-stream
+ * for the audio and video streams respectively.
+ */
+#define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) g_object_ref((GObject*) info))
+#define gst_discoverer_stream_info_unref(info) (g_object_unref((GObject*) info))
+
+GST_PBUTILS_API
+GstDiscovererStreamInfo* gst_discoverer_stream_info_get_previous(GstDiscovererStreamInfo* info);
+
+GST_PBUTILS_API
+GstDiscovererStreamInfo* gst_discoverer_stream_info_get_next(GstDiscovererStreamInfo* info);
+
+GST_PBUTILS_API
+GstCaps* gst_discoverer_stream_info_get_caps(GstDiscovererStreamInfo* info);
+
+GST_PBUTILS_API
+const GstTagList* gst_discoverer_stream_info_get_tags(GstDiscovererStreamInfo* info);
+
+GST_PBUTILS_API
+const GstToc* gst_discoverer_stream_info_get_toc(GstDiscovererStreamInfo* info);
+
+GST_PBUTILS_API
+const gchar* gst_discoverer_stream_info_get_stream_id(GstDiscovererStreamInfo* info);
+
+GST_PBUTILS_DEPRECATED_FOR(gst_discoverer_info_get_missing_elements_installer_details)
+const GstStructure* gst_discoverer_stream_info_get_misc(GstDiscovererStreamInfo* info);
+
+GST_PBUTILS_API
+const gchar * gst_discoverer_stream_info_get_stream_type_nick(GstDiscovererStreamInfo* info);
+
+GST_PBUTILS_API
+gint gst_discoverer_stream_info_get_stream_number(GstDiscovererStreamInfo *info);
+
+/**
+ * GstDiscovererContainerInfo:
+ *
+ * #GstDiscovererStreamInfo specific to container streams.
+ */
+#define GST_TYPE_DISCOVERER_CONTAINER_INFO \
+ (gst_discoverer_container_info_get_type ())
+#define GST_DISCOVERER_CONTAINER_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO, GstDiscovererContainerInfo))
+#define GST_IS_DISCOVERER_CONTAINER_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO))
+typedef struct _GstDiscovererContainerInfo GstDiscovererContainerInfo;
+typedef GObjectClass GstDiscovererContainerInfoClass;
+
+GST_PBUTILS_API
+GType gst_discoverer_container_info_get_type (void);
+
+GST_PBUTILS_API
+GList *gst_discoverer_container_info_get_streams(GstDiscovererContainerInfo *info);
+
+GST_PBUTILS_API
+const GstTagList* gst_discoverer_container_info_get_tags(const GstDiscovererContainerInfo *info);
+
+
+/**
+ * GstDiscovererAudioInfo:
+ *
+ * #GstDiscovererStreamInfo specific to audio streams.
+ */
+#define GST_TYPE_DISCOVERER_AUDIO_INFO \
+ (gst_discoverer_audio_info_get_type ())
+#define GST_DISCOVERER_AUDIO_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_AUDIO_INFO, GstDiscovererAudioInfo))
+#define GST_IS_DISCOVERER_AUDIO_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_AUDIO_INFO))
+typedef struct _GstDiscovererAudioInfo GstDiscovererAudioInfo;
+typedef GObjectClass GstDiscovererAudioInfoClass;
+
+GST_PBUTILS_API
+GType gst_discoverer_audio_info_get_type (void);
+
+GST_PBUTILS_API
+guint gst_discoverer_audio_info_get_channels(const GstDiscovererAudioInfo* info);
+
+GST_PBUTILS_API
+guint64 gst_discoverer_audio_info_get_channel_mask(const GstDiscovererAudioInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_audio_info_get_sample_rate(const GstDiscovererAudioInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_audio_info_get_depth(const GstDiscovererAudioInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_audio_info_get_bitrate(const GstDiscovererAudioInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_audio_info_get_max_bitrate(const GstDiscovererAudioInfo* info);
+
+GST_PBUTILS_API
+const gchar * gst_discoverer_audio_info_get_language(const GstDiscovererAudioInfo* info);
+
+/**
+ * GstDiscovererVideoInfo:
+ *
+ * #GstDiscovererStreamInfo specific to video streams (this includes images).
+ */
+#define GST_TYPE_DISCOVERER_VIDEO_INFO \
+ (gst_discoverer_video_info_get_type ())
+#define GST_DISCOVERER_VIDEO_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_VIDEO_INFO, GstDiscovererVideoInfo))
+#define GST_IS_DISCOVERER_VIDEO_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_VIDEO_INFO))
+typedef struct _GstDiscovererVideoInfo GstDiscovererVideoInfo;
+typedef GObjectClass GstDiscovererVideoInfoClass;
+
+GST_PBUTILS_API
+GType gst_discoverer_video_info_get_type (void);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_width(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_height(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_depth(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_framerate_num(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_framerate_denom(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_par_num(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_par_denom(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+gboolean gst_discoverer_video_info_is_interlaced(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_bitrate(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+guint gst_discoverer_video_info_get_max_bitrate(const GstDiscovererVideoInfo* info);
+
+GST_PBUTILS_API
+gboolean gst_discoverer_video_info_is_image(const GstDiscovererVideoInfo* info);
+
+/**
+ * GstDiscovererSubtitleInfo:
+ *
+ * #GstDiscovererStreamInfo specific to subtitle streams (this includes text and
+ * image based ones).
+ */
+#define GST_TYPE_DISCOVERER_SUBTITLE_INFO \
+ (gst_discoverer_subtitle_info_get_type ())
+#define GST_DISCOVERER_SUBTITLE_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO, GstDiscovererSubtitleInfo))
+#define GST_IS_DISCOVERER_SUBTITLE_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO))
+typedef struct _GstDiscovererSubtitleInfo GstDiscovererSubtitleInfo;
+typedef GObjectClass GstDiscovererSubtitleInfoClass;
+
+GST_PBUTILS_API
+GType gst_discoverer_subtitle_info_get_type (void);
+
+GST_PBUTILS_API
+const gchar * gst_discoverer_subtitle_info_get_language(const GstDiscovererSubtitleInfo* info);
+
+/**
+ * GstDiscovererResult:
+ * @GST_DISCOVERER_OK: The discovery was successful
+ * @GST_DISCOVERER_URI_INVALID: the URI is invalid
+ * @GST_DISCOVERER_ERROR: an error happened and the GError is set
+ * @GST_DISCOVERER_TIMEOUT: the discovery timed-out
+ * @GST_DISCOVERER_BUSY: the discoverer was already discovering a file
+ * @GST_DISCOVERER_MISSING_PLUGINS: Some plugins are missing for full discovery
+ *
+ * Result values for the discovery process.
+ */
+typedef enum {
+ GST_DISCOVERER_OK = 0,
+ GST_DISCOVERER_URI_INVALID = 1,
+ GST_DISCOVERER_ERROR = 2,
+ GST_DISCOVERER_TIMEOUT = 3,
+ GST_DISCOVERER_BUSY = 4,
+ GST_DISCOVERER_MISSING_PLUGINS = 5
+} GstDiscovererResult;
+
+/**
+ * GstDiscovererSerializeFlags:
+ * @GST_DISCOVERER_SERIALIZE_BASIC: Serialize only basic information, excluding
+ * caps, tags and miscellaneous information
+ * @GST_DISCOVERER_SERIALIZE_CAPS: Serialize the caps for each stream
+ * @GST_DISCOVERER_SERIALIZE_TAGS: Serialize the tags for each stream
+ * @GST_DISCOVERER_SERIALIZE_MISC: Serialize miscellaneous information for each stream
+ * @GST_DISCOVERER_SERIALIZE_ALL: Serialize all the available info, including
+ * caps, tags and miscellaneous information
+ *
+ * You can use these flags to control what is serialized by
+ * gst_discoverer_info_to_variant()
+ *
+ * Since: 1.6
+ */
+
+typedef enum {
+ GST_DISCOVERER_SERIALIZE_BASIC = 0,
+ GST_DISCOVERER_SERIALIZE_CAPS = 1 << 0,
+ GST_DISCOVERER_SERIALIZE_TAGS = 1 << 1,
+ GST_DISCOVERER_SERIALIZE_MISC = 1 << 2,
+ GST_DISCOVERER_SERIALIZE_ALL = GST_DISCOVERER_SERIALIZE_CAPS | GST_DISCOVERER_SERIALIZE_TAGS | GST_DISCOVERER_SERIALIZE_MISC
+} GstDiscovererSerializeFlags;
+
+/**
+ * GstDiscovererInfo:
+ *
+ * Structure containing the information of a URI analyzed by #GstDiscoverer.
+ */
+typedef struct _GstDiscovererInfo GstDiscovererInfo;
+
+#define GST_TYPE_DISCOVERER_INFO \
+ (gst_discoverer_info_get_type ())
+#define GST_DISCOVERER_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_INFO, GstDiscovererInfo))
+#define GST_IS_DISCOVERER_INFO(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_INFO))
+typedef GObjectClass GstDiscovererInfoClass;
+
+GST_PBUTILS_API
+GType gst_discoverer_info_get_type (void);
+
+#define gst_discoverer_info_unref(info) (g_object_unref((GObject*)info))
+#define gst_discoverer_info_ref(info) (g_object_ref((GObject*)info))
+
+GST_PBUTILS_API
+GstDiscovererInfo* gst_discoverer_info_copy (GstDiscovererInfo * ptr);
+
+GST_PBUTILS_API
+const gchar* gst_discoverer_info_get_uri(const GstDiscovererInfo* info);
+
+GST_PBUTILS_API
+GstDiscovererResult gst_discoverer_info_get_result(const GstDiscovererInfo* info);
+
+GST_PBUTILS_API
+GstDiscovererStreamInfo* gst_discoverer_info_get_stream_info(GstDiscovererInfo* info);
+
+GST_PBUTILS_API
+GList* gst_discoverer_info_get_stream_list(GstDiscovererInfo* info);
+
+GST_PBUTILS_API
+GstClockTime gst_discoverer_info_get_duration(const GstDiscovererInfo* info);
+
+GST_PBUTILS_API
+gboolean gst_discoverer_info_get_seekable(const GstDiscovererInfo* info);
+
+GST_PBUTILS_API
+gboolean gst_discoverer_info_get_live(const GstDiscovererInfo* info);
+
+GST_PBUTILS_DEPRECATED_FOR(gst_discoverer_info_get_missing_elements_installer_details)
+const GstStructure* gst_discoverer_info_get_misc(const GstDiscovererInfo* info);
+
+GST_PBUTILS_DEPRECATED
+const GstTagList* gst_discoverer_info_get_tags(const GstDiscovererInfo* info);
+GST_PBUTILS_API
+const GstToc* gst_discoverer_info_get_toc(const GstDiscovererInfo* info);
+
+GST_PBUTILS_API
+const gchar** gst_discoverer_info_get_missing_elements_installer_details(const GstDiscovererInfo* info);
+
+GST_PBUTILS_API
+GList * gst_discoverer_info_get_streams (GstDiscovererInfo *info,
+ GType streamtype);
+
+GST_PBUTILS_API
+GList * gst_discoverer_info_get_audio_streams (GstDiscovererInfo *info);
+
+GST_PBUTILS_API
+GList * gst_discoverer_info_get_video_streams (GstDiscovererInfo *info);
+
+GST_PBUTILS_API
+GList * gst_discoverer_info_get_subtitle_streams (GstDiscovererInfo *info);
+
+GST_PBUTILS_API
+GList * gst_discoverer_info_get_container_streams (GstDiscovererInfo *info);
+
+GST_PBUTILS_API
+GVariant * gst_discoverer_info_to_variant (GstDiscovererInfo *info,
+ GstDiscovererSerializeFlags flags);
+
+GST_PBUTILS_API
+GstDiscovererInfo * gst_discoverer_info_from_variant (GVariant *variant);
+
+GST_PBUTILS_API
+void gst_discoverer_stream_info_list_free (GList *infos);
+
+#define GST_TYPE_DISCOVERER \
+ (gst_discoverer_get_type())
+#define GST_DISCOVERER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER,GstDiscoverer))
+#define GST_DISCOVERER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISCOVERER,GstDiscovererClass))
+#define GST_IS_DISCOVERER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER))
+#define GST_IS_DISCOVERER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISCOVERER))
+
+typedef struct _GstDiscoverer GstDiscoverer;
+typedef struct _GstDiscovererClass GstDiscovererClass;
+typedef struct _GstDiscovererPrivate GstDiscovererPrivate;
+
+/**
+ * GstDiscoverer:
+ *
+ * The #GstDiscoverer structure.
+ **/
+struct _GstDiscoverer {
+ GObject parent;
+
+ /*< private >*/
+ GstDiscovererPrivate *priv;
+
+ gpointer _reserved[GST_PADDING];
+};
+
+struct _GstDiscovererClass {
+ GObjectClass parentclass;
+
+ /* signals */
+ void (*finished) (GstDiscoverer *discoverer);
+ void (*starting) (GstDiscoverer *discoverer);
+ void (*discovered) (GstDiscoverer *discoverer,
+ GstDiscovererInfo *info,
+ const GError *err);
+ void (*source_setup) (GstDiscoverer *discoverer,
+ GstElement *source);
+
+ gpointer _reserved[GST_PADDING];
+};
+
+GST_PBUTILS_API
+GType gst_discoverer_get_type (void);
+
+GST_PBUTILS_API
+GstDiscoverer *gst_discoverer_new (GstClockTime timeout, GError **err);
+
+/* Asynchronous API */
+
+GST_PBUTILS_API
+void gst_discoverer_start (GstDiscoverer *discoverer);
+
+GST_PBUTILS_API
+void gst_discoverer_stop (GstDiscoverer *discoverer);
+
+GST_PBUTILS_API
+gboolean gst_discoverer_discover_uri_async (GstDiscoverer *discoverer,
+ const gchar *uri);
+
+/* Synchronous API */
+
+GST_PBUTILS_API
+GstDiscovererInfo *
+gst_discoverer_discover_uri (GstDiscoverer * discoverer,
+ const gchar * uri,
+ GError ** err);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscoverer, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererAudioInfo, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererContainerInfo, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererInfo, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererStreamInfo, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererSubtitleInfo, gst_object_unref)
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererVideoInfo, gst_object_unref)
+
+G_END_DECLS
+
+#endif /* _GST_DISCOVERER_H */
diff --git a/include/gst/pbutils/gstpluginsbaseversion.h b/include/gst/pbutils/gstpluginsbaseversion.h
new file mode 100644
index 0000000000..807096a8e0
--- /dev/null
+++ b/include/gst/pbutils/gstpluginsbaseversion.h
@@ -0,0 +1,79 @@
+/* GStreamer base plugins libraries version information
+ * Copyright (C) 2010 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLUGINS_BASE_VERSION_H__
+#define __GST_PLUGINS_BASE_VERSION_H__
+
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils-prelude.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_PLUGINS_BASE_VERSION_MAJOR:
+ *
+ * The major version of GStreamer's gst-plugins-base libraries at compile time.
+ */
+#define GST_PLUGINS_BASE_VERSION_MAJOR (1)
+/**
+ * GST_PLUGINS_BASE_VERSION_MINOR:
+ *
+ * The minor version of GStreamer's gst-plugins-base libraries at compile time.
+ */
+#define GST_PLUGINS_BASE_VERSION_MINOR (20)
+/**
+ * GST_PLUGINS_BASE_VERSION_MICRO:
+ *
+ * The micro version of GStreamer's gst-plugins-base libraries at compile time.
+ */
+#define GST_PLUGINS_BASE_VERSION_MICRO (3)
+/**
+ * GST_PLUGINS_BASE_VERSION_NANO:
+ *
+ * The nano version of GStreamer's gst-plugins-base libraries at compile time.
+ * Actual releases have 0, GIT versions have 1, prerelease versions have 2-...
+ */
+#define GST_PLUGINS_BASE_VERSION_NANO (0)
+
+/**
+ * GST_CHECK_PLUGIN_BASE_VERSION:
+ * @major: a number indicating the major version
+ * @minor: a number indicating the minor version
+ * @micro: a number indicating the micro version
+ *
+ * Check whether a GStreamer's gst-plugins-base libraries' version equal to
+ * or greater than major.minor.micro is present.
+ */
+#define GST_CHECK_PLUGINS_BASE_VERSION(major,minor,micro) \
+ (GST_PLUGINS_BASE_VERSION_MAJOR > (major) || \
+ (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR > (minor)) || \
+ (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR == (minor) && \
+ GST_PLUGINS_BASE_VERSION_MICRO >= (micro)) || \
+ (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR == (minor) && \
+ GST_PLUGINS_BASE_VERSION_MICRO + 1 == (micro) && GST_PLUGINS_BASE_VERSION_NANO > 0))
+
+GST_PBUTILS_API
+void gst_plugins_base_version (guint *major, guint *minor, guint *micro, guint *nano);
+
+GST_PBUTILS_API
+gchar * gst_plugins_base_version_string (void);
+
+G_END_DECLS
+
+#endif /* __GST_PLUGINS_BASE_VERSION_H__ */
diff --git a/include/gst/pbutils/install-plugins.h b/include/gst/pbutils/install-plugins.h
new file mode 100644
index 0000000000..4a8878d67e
--- /dev/null
+++ b/include/gst/pbutils/install-plugins.h
@@ -0,0 +1,164 @@
+/* GStreamer base utils library plugin install support for applications
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2006 Ryan Lortie <desrt desrt ca>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PB_UTILS_INSTALL_PLUGINS_H__
+#define __GST_PB_UTILS_INSTALL_PLUGINS_H__
+
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils-prelude.h>
+
+G_BEGIN_DECLS
+
+/*
+ * functions for use by applications to initiate installation of missing plugins
+ */
+
+/**
+ * GstInstallPluginsReturn:
+ * @GST_INSTALL_PLUGINS_SUCCESS: all of the requested plugins could be
+ * installed
+ * @GST_INSTALL_PLUGINS_NOT_FOUND: no appropriate installation candidate for
+ * any of the requested plugins could be found. Only return this if nothing
+ * has been installed. Return #GST_INSTALL_PLUGINS_PARTIAL_SUCCESS if
+ * some (but not all) of the requested plugins could be installed.
+ * @GST_INSTALL_PLUGINS_ERROR: an error occurred during the installation. If
+ * this happens, the user has already seen an error message and another
+ * one should not be displayed
+ * @GST_INSTALL_PLUGINS_CRASHED: the installer had an unclean exit code
+ * (ie. death by signal)
+ * @GST_INSTALL_PLUGINS_PARTIAL_SUCCESS: some of the requested plugins could
+ * be installed, but not all
+ * @GST_INSTALL_PLUGINS_USER_ABORT: the user has aborted the installation
+ * @GST_INSTALL_PLUGINS_INVALID: the helper returned an invalid status code
+ * @GST_INSTALL_PLUGINS_STARTED_OK: returned by gst_install_plugins_async() to
+ * indicate that everything went fine so far and the provided callback
+ * will be called with the result of the installation later
+ * @GST_INSTALL_PLUGINS_INTERNAL_FAILURE: some internal failure has
+ * occurred when trying to start the installer
+ * @GST_INSTALL_PLUGINS_HELPER_MISSING: the helper script to call the
+ * actual installer is not installed
+ * @GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS: a previously-started plugin
+ * installation is still in progress, try again later
+ *
+ * Result codes returned by gst_install_plugins_async() and
+ * gst_install_plugins_sync(), and also the result code passed to the
+ * #GstInstallPluginsResultFunc specified with gst_install_plugins_async().
+ *
+ * These codes indicate success or failure of starting an external installer
+ * program and to what extent the requested plugins could be installed.
+ */
+typedef enum {
+ /* Return codes from the installer. Returned by gst_install_plugins_sync(),
+ * or passed as result code to your #GstInstallPluginsResultFunc */
+ GST_INSTALL_PLUGINS_SUCCESS = 0,
+ GST_INSTALL_PLUGINS_NOT_FOUND = 1,
+ GST_INSTALL_PLUGINS_ERROR = 2,
+ GST_INSTALL_PLUGINS_PARTIAL_SUCCESS = 3,
+ GST_INSTALL_PLUGINS_USER_ABORT = 4,
+
+ /* Returned by gst_install_plugins_sync(), or passed as result code to your
+ * #GstInstallPluginsResultFunc */
+ GST_INSTALL_PLUGINS_CRASHED = 100,
+ GST_INSTALL_PLUGINS_INVALID,
+
+ /* Return codes from starting the external helper, may be returned by both
+ * gst_install_plugins_sync() and gst_install_plugins_async(), but should
+ * never be seen by a #GstInstallPluginsResultFunc */
+ GST_INSTALL_PLUGINS_STARTED_OK = 200,
+ GST_INSTALL_PLUGINS_INTERNAL_FAILURE,
+ GST_INSTALL_PLUGINS_HELPER_MISSING,
+ GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS
+} GstInstallPluginsReturn;
+
+/**
+ * GstInstallPluginsContext:
+ *
+ * Opaque context structure for the plugin installation. Use the provided
+ * API to set details on it.
+ */
+
+#define GST_TYPE_INSTALL_PLUGINS_CONTEXT (gst_install_plugins_context_get_type())
+
+typedef struct _GstInstallPluginsContext GstInstallPluginsContext;
+
+GST_PBUTILS_API
+GstInstallPluginsContext * gst_install_plugins_context_new (void);
+
+GST_PBUTILS_API
+GstInstallPluginsContext * gst_install_plugins_context_copy (GstInstallPluginsContext * ctx);
+GST_PBUTILS_API
+void gst_install_plugins_context_free (GstInstallPluginsContext * ctx);
+
+GST_PBUTILS_API
+void gst_install_plugins_context_set_confirm_search (GstInstallPluginsContext * ctx,
+ gboolean confirm_search);
+
+GST_PBUTILS_API
+void gst_install_plugins_context_set_desktop_id (GstInstallPluginsContext * ctx,
+ const gchar * desktop_id);
+
+GST_PBUTILS_API
+void gst_install_plugins_context_set_startup_notification_id (GstInstallPluginsContext * ctx,
+ const gchar * startup_id);
+
+GST_PBUTILS_API
+void gst_install_plugins_context_set_xid (GstInstallPluginsContext * ctx,
+ guint xid);
+
+GST_PBUTILS_API
+GType gst_install_plugins_context_get_type (void);
+
+/**
+ * GstInstallPluginsResultFunc:
+ * @result: whether the installation of the requested plugins succeeded or not
+ * @user_data: the user data passed to gst_install_plugins_async()
+ *
+ * The prototype of the callback function that will be called once the
+ * external plugin installer program has returned. You only need to provide
+ * a callback function if you are using the asynchronous interface.
+ */
+typedef void (*GstInstallPluginsResultFunc) (GstInstallPluginsReturn result,
+ gpointer user_data);
+
+GST_PBUTILS_API
+GstInstallPluginsReturn gst_install_plugins_async (const gchar * const * details,
+ GstInstallPluginsContext * ctx,
+ GstInstallPluginsResultFunc func,
+ gpointer user_data);
+
+GST_PBUTILS_API
+GstInstallPluginsReturn gst_install_plugins_sync (const gchar * const * details,
+ GstInstallPluginsContext * ctx);
+
+GST_PBUTILS_API
+const gchar * gst_install_plugins_return_get_name (GstInstallPluginsReturn ret);
+
+GST_PBUTILS_API
+gboolean gst_install_plugins_installation_in_progress (void);
+
+GST_PBUTILS_API
+gboolean gst_install_plugins_supported (void);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstInstallPluginsContext, gst_install_plugins_context_free)
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_INSTALL_PLUGINS_H__ */
+
diff --git a/include/gst/pbutils/missing-plugins.h b/include/gst/pbutils/missing-plugins.h
new file mode 100644
index 0000000000..c1e6c42e88
--- /dev/null
+++ b/include/gst/pbutils/missing-plugins.h
@@ -0,0 +1,90 @@
+/* GStreamer base utils library missing plugins support
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PB_UTILS_MISSING_PLUGINS_H__
+#define __GST_PB_UTILS_MISSING_PLUGINS_H__
+
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils-prelude.h>
+
+G_BEGIN_DECLS
+
+/*
+ * functions to create missing-plugin messages, for use by plugins primarily
+ */
+
+GST_PBUTILS_API
+GstMessage * gst_missing_uri_source_message_new (GstElement * element,
+ const gchar * protocol);
+
+GST_PBUTILS_API
+GstMessage * gst_missing_uri_sink_message_new (GstElement * element,
+ const gchar * protocol);
+
+GST_PBUTILS_API
+GstMessage * gst_missing_element_message_new (GstElement * element,
+ const gchar * factory_name);
+
+GST_PBUTILS_API
+GstMessage * gst_missing_decoder_message_new (GstElement * element,
+ const GstCaps * decode_caps);
+
+GST_PBUTILS_API
+GstMessage * gst_missing_encoder_message_new (GstElement * element,
+ const GstCaps * encode_caps);
+
+/*
+ * functions for use by applications when dealing with missing-plugin messages
+ */
+
+GST_PBUTILS_API
+gchar * gst_missing_plugin_message_get_installer_detail (GstMessage * msg);
+
+GST_PBUTILS_API
+gchar * gst_missing_plugin_message_get_description (GstMessage * msg);
+
+GST_PBUTILS_API
+gboolean gst_is_missing_plugin_message (GstMessage * msg);
+
+
+/*
+ * functions for use by applications that know exactly what plugins they are
+ * missing and want to request them directly rather than just react to
+ * missing-plugin messages posted by elements such as playbin or decodebin
+ */
+
+GST_PBUTILS_API
+gchar * gst_missing_uri_source_installer_detail_new (const gchar * protocol);
+
+GST_PBUTILS_API
+gchar * gst_missing_uri_sink_installer_detail_new (const gchar * protocol);
+
+GST_PBUTILS_API
+gchar * gst_missing_element_installer_detail_new (const gchar * factory_name);
+
+GST_PBUTILS_API
+gchar * gst_missing_decoder_installer_detail_new (const GstCaps * decode_caps);
+
+GST_PBUTILS_API
+gchar * gst_missing_encoder_installer_detail_new (const GstCaps * encode_caps);
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_MISSING_PLUGINS_H__ */
+
diff --git a/include/gst/pbutils/pbutils-enumtypes.h b/include/gst/pbutils/pbutils-enumtypes.h
new file mode 100644
index 0000000000..3fea241e65
--- /dev/null
+++ b/include/gst/pbutils/pbutils-enumtypes.h
@@ -0,0 +1,42 @@
+
+/* This file is generated by glib-mkenums, do not modify it. This code is licensed under the same license as the containing project. Note that it links to GLib, so must comply with the LGPL linking clauses. */
+
+#pragma once
+
+ #include <glib-object.h>
+ #include <gst/pbutils/pbutils-prelude.h>
+
+ G_BEGIN_DECLS
+
+/* enumerations from "descriptions.h" */
+
+GST_PBUTILS_API
+GType gst_pb_utils_caps_description_flags_get_type (void);
+#define GST_TYPE_PB_UTILS_CAPS_DESCRIPTION_FLAGS (gst_pb_utils_caps_description_flags_get_type())
+
+/* enumerations from "gstaudiovisualizer.h" */
+
+GST_PBUTILS_API
+GType gst_audio_visualizer_shader_get_type (void);
+#define GST_TYPE_AUDIO_VISUALIZER_SHADER (gst_audio_visualizer_shader_get_type())
+
+/* enumerations from "gstdiscoverer.h" */
+
+GST_PBUTILS_API
+GType gst_discoverer_result_get_type (void);
+#define GST_TYPE_DISCOVERER_RESULT (gst_discoverer_result_get_type())
+
+GST_PBUTILS_API
+GType gst_discoverer_serialize_flags_get_type (void);
+#define GST_TYPE_DISCOVERER_SERIALIZE_FLAGS (gst_discoverer_serialize_flags_get_type())
+
+/* enumerations from "install-plugins.h" */
+
+GST_PBUTILS_API
+GType gst_install_plugins_return_get_type (void);
+#define GST_TYPE_INSTALL_PLUGINS_RETURN (gst_install_plugins_return_get_type())
+
+G_END_DECLS
+
+/* Generated data ends here */
+
diff --git a/include/gst/pbutils/pbutils-prelude.h b/include/gst/pbutils/pbutils-prelude.h
new file mode 100644
index 0000000000..eefec47664
--- /dev/null
+++ b/include/gst/pbutils/pbutils-prelude.h
@@ -0,0 +1,41 @@
+/* GStreamer Plugins Base Utils Library
+ * Copyright (C) 2018 GStreamer developers
+ *
+ * pbutils-prelude.h: prelude include header for gst-pbutils library
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PBUTILS_PRELUDE_H__
+#define __GST_PBUTILS_PRELUDE_H__
+
+#include <gst/gst.h>
+
+#ifdef BUILDING_GST_PBUTILS
+#define GST_PBUTILS_API GST_API_EXPORT /* from config.h */
+#else
+#define GST_PBUTILS_API GST_API_IMPORT
+#endif
+
+#ifndef GST_DISABLE_DEPRECATED
+#define GST_PBUTILS_DEPRECATED GST_PBUTILS_API
+#define GST_PBUTILS_DEPRECATED_FOR(f) GST_PBUTILS_API
+#else
+#define GST_PBUTILS_DEPRECATED G_DEPRECATED GST_PBUTILS_API
+#define GST_PBUTILS_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) GST_PBUTILS_API
+#endif
+
+#endif /* __GST_PBUTILS_PRELUDE_H__ */
diff --git a/include/gst/pbutils/pbutils.h b/include/gst/pbutils/pbutils.h
new file mode 100644
index 0000000000..f04070b3a3
--- /dev/null
+++ b/include/gst/pbutils/pbutils.h
@@ -0,0 +1,44 @@
+/* GStreamer base utils library
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PB_UTILS_BASE_UTILS_H__
+#define __GST_PB_UTILS_BASE_UTILS_H__
+
+#include <gst/gst.h>
+
+#include <gst/pbutils/gstpluginsbaseversion.h>
+#include <gst/pbutils/descriptions.h>
+#include <gst/pbutils/missing-plugins.h>
+#include <gst/pbutils/install-plugins.h>
+#include <gst/pbutils/codec-utils.h>
+#include <gst/pbutils/pbutils-enumtypes.h>
+#include <gst/pbutils/gstdiscoverer.h>
+#include <gst/pbutils/encoding-profile.h>
+#include <gst/pbutils/encoding-target.h>
+#include <gst/pbutils/gstaudiovisualizer.h>
+
+G_BEGIN_DECLS
+
+GST_PBUTILS_API
+void gst_pb_utils_init (void);
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_BASE_UTILS_H__ */
+