mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
9e994ea616
This allows user to serialize the GstDiscovererInfo in other places than the default folder, like a database when running web services for examples. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3911>
449 lines
16 KiB
C
449 lines
16 KiB
C
/* 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);
|
|
/**
|
|
* GstDiscovererClass::load_serialize_info:
|
|
* @dc: the #GstDiscoverer
|
|
* @uri: the uri to load the info from
|
|
*
|
|
* Loads the serialized info from the given uri.
|
|
*
|
|
* Returns: (transfer full): the #GstDiscovererInfo or %NULL if it could not be loaded
|
|
*
|
|
* Since: 1.24
|
|
*/
|
|
GstDiscovererInfo *
|
|
(*load_serialize_info) (GstDiscoverer *dc,
|
|
gchar *uri);
|
|
|
|
gpointer _reserved[GST_PADDING - 1];
|
|
};
|
|
|
|
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 */
|