Commit 30b3cf88 authored by Edward Hervey's avatar Edward Hervey
Browse files

pbutils: New Discoverer utility

Fixes #625944
parent ff45b44e
......@@ -29,8 +29,10 @@ riff: tag audio
rtsp: sdp
pbutils: video
INDEPENDENT_SUBDIRS = \
interfaces tag fft floatcast netbuffer pbutils rtp sdp video app
interfaces tag fft floatcast netbuffer rtp sdp video app
.PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS)
......
pbutils-enumtypes.c
pbutils-enumtypes.h
pbutils-marshal.c
pbutils-marshal.h
......@@ -4,7 +4,8 @@ headers_pbutils = \
pbutils.h \
descriptions.h \
install-plugins.h \
missing-plugins.h
missing-plugins.h \
gstdiscoverer.h
# variables used for enum/marshal generation
glib_enum_headers = $(headers_pbutils)
......@@ -13,10 +14,12 @@ glib_gen_prefix = gst_install
glib_gen_basename = pbutils
built_sources = \
pbutils-enumtypes.c
pbutils-enumtypes.c \
pbutils-marshal.c
built_headers = \
pbutils-enumtypes.h
pbutils-enumtypes.h \
pbutils-marshal.h
built_headers_configure = \
gstpluginsbaseversion.h
......@@ -26,7 +29,9 @@ libgstpbutils_@GST_MAJORMINOR@_la_SOURCES = \
pbutils.c \
descriptions.c \
install-plugins.c \
missing-plugins.c
missing-plugins.c \
gstdiscoverer.c \
gstdiscoverer-types.c
nodist_libgstpbutils_@GST_MAJORMINOR@_la_SOURCES = \
$(built_sources)
......@@ -36,8 +41,13 @@ libgstpbutils_@GST_MAJORMINOR@include_HEADERS = \
$(headers_pbutils)
nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS = \
$(built_headers) $(built_headers_configure)
noinst_HEADERS = \
gstdiscoverer-private.h
EXTRA_DIST = pbutils-marshal.list
libgstpbutils_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS)
libgstpbutils_@GST_MAJORMINOR@_la_LIBADD = \
$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
$(GST_LIBS)
libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
libgstpbutils_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
......@@ -71,10 +81,12 @@ GstPbutils-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_MAJ
-I$(top_srcdir)/gst-libs \
-I$(top_builddir)/gst-libs \
--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-0.10` \
--add-include-path=$(srcdir)/../video \
--library=libgstpbutils-0.10.la \
--include=Gst-0.10 \
--libtool="$(top_builddir)/libtool" \
--pkg gstreamer-0.10 \
--pkg gstreamer-video-@GST_MAJORMINOR@ \
--output $@ \
$(gir_headers) \
$(gir_sources)
......@@ -91,6 +103,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
%.typelib: %.gir $(INTROSPECTION_COMPILER)
$(AM_V_GEN)$(INTROSPECTION_COMPILER) \
--includedir=$(srcdir) \
--includedir=$(srcdir)/../video \
--includedir=$(builddir) \
--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-0.10` \
$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
......
/* GStreamer
* Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
* 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., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
struct _GstDiscovererStreamInfo {
GstMiniObject parent;
GstDiscovererStreamInfo *previous; /* NULL for starting points */
GstDiscovererStreamInfo *next; /* NULL for containers */
GstCaps *caps;
GstTagList *tags;
GstStructure *misc;
};
struct _GstDiscovererContainerInfo {
GstDiscovererStreamInfo parent;
GList *streams;
};
struct _GstDiscovererAudioInfo {
GstDiscovererStreamInfo parent;
guint channels;
guint sample_rate;
guint depth;
guint bitrate;
guint max_bitrate;
};
struct _GstDiscovererVideoInfo {
GstDiscovererStreamInfo parent;
guint width;
guint height;
guint depth;
guint framerate_num;
guint framerate_denom;
guint par_num;
guint par_denom;
gboolean interlaced;
guint bitrate;
guint max_bitrate;
gboolean is_image;
};
struct _GstDiscovererInfo {
GstMiniObject parent;
gchar *uri;
GstDiscovererResult result;
/* Sub-streams */
GstDiscovererStreamInfo *stream_info;
GList *stream_list;
/* Stream global information */
GstClockTime duration;
GstStructure *misc;
GstTagList *tags;
gpointer _reserved[GST_PADDING];
};
This diff is collapsed.
This diff is collapsed.
/* 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., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef _GST_DISCOVERER_H_
#define _GST_DISCOVERER_H_
#include <gst/gst.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 GstMiniObjectClass GstDiscovererStreamInfoClass;
GType gst_discoverer_stream_info_get_type (void);
/**
* GstDiscovererStreamInfo:
*
* Base structure for informations concerning a media stream. Depending on the @streamtype,
* One can find more media-specific information in #GstDiscovererAudioInfo,
* #GstDiscovererVideoInfo, #GstDiscovererContainerInfo.
*
* Since 0.10.31
*/
#define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) gst_mini_object_ref((GstMiniObject*) info))
#define gst_discoverer_stream_info_unref(info) (gst_mini_object_unref((GstMiniObject*) info))
GstDiscovererStreamInfo* gst_discoverer_stream_info_get_previous(GstDiscovererStreamInfo* info);
GstDiscovererStreamInfo* gst_discoverer_stream_info_get_next(GstDiscovererStreamInfo* info);
GstCaps* gst_discoverer_stream_info_get_caps(GstDiscovererStreamInfo* info);
const GstTagList* gst_discoverer_stream_info_get_tags(GstDiscovererStreamInfo* info);
const GstStructure* gst_discoverer_stream_info_get_misc(GstDiscovererStreamInfo* info);
const gchar * gst_discoverer_stream_info_get_stream_type_nick(GstDiscovererStreamInfo* info);
/**
* GstDiscovererContainerInfo:
*
* #GstDiscovererStreamInfo specific to container streams.
*
* Since 0.10.31
*/
#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 GstMiniObjectClass GstDiscovererContainerInfoClass;
GType gst_discoverer_container_info_get_type (void);
GList *gst_discoverer_container_info_get_streams(GstDiscovererStreamInfo *info);
/**
* GstDiscovererAudioInfo:
*
* #GstDiscovererStreamInfo specific to audio streams.
*
* Since 0.10.31
*/
#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 GstMiniObjectClass GstDiscovererAudioInfoClass;
GType gst_discoverer_audio_info_get_type (void);
guint gst_discoverer_audio_info_get_channels(GstDiscovererStreamInfo* info);
guint gst_discoverer_audio_info_get_sample_rate(GstDiscovererStreamInfo* info);
guint gst_discoverer_audio_info_get_depth(GstDiscovererStreamInfo* info);
guint gst_discoverer_audio_info_get_bitrate(GstDiscovererStreamInfo* info);
guint gst_discoverer_audio_info_get_max_bitrate(GstDiscovererStreamInfo* info);
/**
* GstDiscovererVideoInfo:
*
* #GstDiscovererStreamInfo specific to video streams.
*
* Since 0.10.31
*/
#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 GstMiniObjectClass GstDiscovererVideoInfoClass;
GType gst_discoverer_video_info_get_type (void);
guint gst_discoverer_video_info_get_width(GstDiscovererStreamInfo* info);
guint gst_discoverer_video_info_get_height(GstDiscovererStreamInfo* info);
guint gst_discoverer_video_info_get_depth(GstDiscovererStreamInfo* info);
guint gst_discoverer_video_info_get_framerate_num(GstDiscovererStreamInfo* info);
guint gst_discoverer_video_info_get_framerate_denom(GstDiscovererStreamInfo* info);
guint gst_discoverer_video_info_get_par_num(GstDiscovererStreamInfo* info);
guint gst_discoverer_video_info_get_par_denom(GstDiscovererStreamInfo* info);
gboolean gst_discoverer_video_info_get_interlaced(GstDiscovererStreamInfo* info);
guint gst_discoverer_video_info_get_bitrate(GstDiscovererStreamInfo* info);
guint gst_discoverer_video_info_get_max_bitrate(GstDiscovererStreamInfo* info);
gboolean gst_discoverer_video_info_get_is_image(GstDiscovererStreamInfo* 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.
*
* Since 0.10.31
*/
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;
/**
* GstDiscovererInfo:
*
* Structure containing the information of a URI analyzed by #GstDiscoverer.
*
* Since 0.10.31
*/
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 GstMiniObjectClass GstDiscovererInfoClass;
GType gst_discoverer_info_get_type (void);
#define gst_discoverer_info_unref(info) (gst_mini_object_unref((GstMiniObject*)info))
#define gst_discoverer_info_ref(info) (gst_mini_object_ref((GstMiniObject*)info))
GstDiscovererInfo* gst_discoverer_info_copy (GstDiscovererInfo * ptr);
const gchar* gst_discoverer_info_get_uri(GstDiscovererInfo* info);
GstDiscovererResult gst_discoverer_info_get_result(GstDiscovererInfo* info);
GstDiscovererStreamInfo* gst_discoverer_info_get_stream_info(GstDiscovererInfo* info);
GList* gst_discoverer_info_get_stream_list(GstDiscovererInfo* info);
GstClockTime gst_discoverer_info_get_duration(GstDiscovererInfo* info);
const GstStructure* gst_discoverer_info_get_misc(GstDiscovererInfo* info);
const GstTagList* gst_discoverer_info_get_tags(GstDiscovererInfo* info);
GList * gst_discoverer_info_get_streams (GstDiscovererInfo *info,
GType streamtype);
GList * gst_discoverer_info_get_audio_streams (GstDiscovererInfo *info);
GList * gst_discoverer_info_get_video_streams (GstDiscovererInfo *info);
GList * gst_discoverer_info_get_container_streams (GstDiscovererInfo *info);
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.
*
* Since 0.10.31
**/
struct _GstDiscoverer {
GObject parent;
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);
gpointer _reserved[GST_PADDING];
};
GType gst_discoverer_get_type (void);
GstDiscoverer *gst_discoverer_new (GstClockTime timeout, GError **err);
/* Asynchronous API */
void gst_discoverer_start (GstDiscoverer *discoverer);
void gst_discoverer_stop (GstDiscoverer *discoverer);
gboolean gst_discoverer_discover_uri_async (GstDiscoverer *discoverer,
const gchar *uri);
/* Synchronous API */
GstDiscovererInfo *
gst_discoverer_discover_uri (GstDiscoverer * discoverer,
const gchar * uri,
GError ** err);
G_END_DECLS
#endif /* _GST_DISCOVERER_H */
......@@ -27,6 +27,8 @@
#include <gst/pbutils/missing-plugins.h>
#include <gst/pbutils/install-plugins.h>
#include <gst/pbutils/pbutils-enumtypes.h>
#include <gst/pbutils/pbutils-marshal.h>
#include <gst/pbutils/gstdiscoverer.h>
G_BEGIN_DECLS
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment