2 * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
3 * 2009 Nokia Corporation
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
21 #ifndef _GST_DISCOVERER_H_
22 #define _GST_DISCOVERER_H_
28 #define GST_TYPE_DISCOVERER_STREAM_INFO \
29 (gst_discoverer_stream_info_get_type ())
30 #define GST_DISCOVERER_STREAM_INFO(obj) \
31 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_STREAM_INFO, GstDiscovererStreamInfo))
32 #define GST_IS_DISCOVERER_STREAM_INFO(obj) \
33 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_STREAM_INFO))
34 typedef struct _GstDiscovererStreamInfo GstDiscovererStreamInfo;
35 typedef GObjectClass GstDiscovererStreamInfoClass;
36 GType gst_discoverer_stream_info_get_type (void);
39 * GstDiscovererStreamInfo:
41 * Base structure for information concerning a media stream. Depending on the
42 * stream type, one can find more media-specific information in
43 * #GstDiscovererAudioInfo, #GstDiscovererVideoInfo, and
44 * #GstDiscovererContainerInfo.
46 * The #GstDiscovererStreamInfo represents the topology of the stream. Siblings
47 * can be iterated over with gst_discoverer_stream_info_get_next() and
48 * gst_discoverer_stream_info_get_previous(). Children (sub-streams) of a
49 * stream can be accessed using the #GstDiscovererContainerInfo API.
51 * As a simple example, if you run #GstDiscoverer on an AVI file with one audio
52 * and one video stream, you will get a #GstDiscovererContainerInfo
53 * corresponding to the AVI container, which in turn will have a
54 * #GstDiscovererAudioInfo sub-stream and a #GstDiscovererVideoInfo sub-stream
55 * for the audio and video streams respectively.
57 #define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) g_object_ref((GObject*) info))
58 #define gst_discoverer_stream_info_unref(info) (g_object_unref((GObject*) info))
60 GstDiscovererStreamInfo* gst_discoverer_stream_info_get_previous(GstDiscovererStreamInfo* info);
61 GstDiscovererStreamInfo* gst_discoverer_stream_info_get_next(GstDiscovererStreamInfo* info);
62 GstCaps* gst_discoverer_stream_info_get_caps(GstDiscovererStreamInfo* info);
63 const GstTagList* gst_discoverer_stream_info_get_tags(GstDiscovererStreamInfo* info);
64 const GstToc* gst_discoverer_stream_info_get_toc(GstDiscovererStreamInfo* info);
65 const GstStructure* gst_discoverer_stream_info_get_misc(GstDiscovererStreamInfo* info);
66 const gchar * gst_discoverer_stream_info_get_stream_type_nick(GstDiscovererStreamInfo* info);
69 * GstDiscovererContainerInfo:
71 * #GstDiscovererStreamInfo specific to container streams.
73 #define GST_TYPE_DISCOVERER_CONTAINER_INFO \
74 (gst_discoverer_container_info_get_type ())
75 #define GST_DISCOVERER_CONTAINER_INFO(obj) \
76 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO, GstDiscovererContainerInfo))
77 #define GST_IS_DISCOVERER_CONTAINER_INFO(obj) \
78 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO))
79 typedef struct _GstDiscovererContainerInfo GstDiscovererContainerInfo;
80 typedef GObjectClass GstDiscovererContainerInfoClass;
82 GType gst_discoverer_container_info_get_type (void);
84 GList *gst_discoverer_container_info_get_streams(GstDiscovererContainerInfo *info);
88 * GstDiscovererAudioInfo:
90 * #GstDiscovererStreamInfo specific to audio streams.
92 #define GST_TYPE_DISCOVERER_AUDIO_INFO \
93 (gst_discoverer_audio_info_get_type ())
94 #define GST_DISCOVERER_AUDIO_INFO(obj) \
95 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_AUDIO_INFO, GstDiscovererAudioInfo))
96 #define GST_IS_DISCOVERER_AUDIO_INFO(obj) \
97 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_AUDIO_INFO))
98 typedef struct _GstDiscovererAudioInfo GstDiscovererAudioInfo;
99 typedef GObjectClass GstDiscovererAudioInfoClass;
101 GType gst_discoverer_audio_info_get_type (void);
103 guint gst_discoverer_audio_info_get_channels(const GstDiscovererAudioInfo* info);
104 guint gst_discoverer_audio_info_get_sample_rate(const GstDiscovererAudioInfo* info);
105 guint gst_discoverer_audio_info_get_depth(const GstDiscovererAudioInfo* info);
106 guint gst_discoverer_audio_info_get_bitrate(const GstDiscovererAudioInfo* info);
107 guint gst_discoverer_audio_info_get_max_bitrate(const GstDiscovererAudioInfo* info);
108 const gchar * gst_discoverer_audio_info_get_language(const GstDiscovererAudioInfo* info);
111 * GstDiscovererVideoInfo:
113 * #GstDiscovererStreamInfo specific to video streams (this includes images).
115 #define GST_TYPE_DISCOVERER_VIDEO_INFO \
116 (gst_discoverer_video_info_get_type ())
117 #define GST_DISCOVERER_VIDEO_INFO(obj) \
118 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_VIDEO_INFO, GstDiscovererVideoInfo))
119 #define GST_IS_DISCOVERER_VIDEO_INFO(obj) \
120 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_VIDEO_INFO))
121 typedef struct _GstDiscovererVideoInfo GstDiscovererVideoInfo;
122 typedef GObjectClass GstDiscovererVideoInfoClass;
123 GType gst_discoverer_video_info_get_type (void);
125 guint gst_discoverer_video_info_get_width(const GstDiscovererVideoInfo* info);
126 guint gst_discoverer_video_info_get_height(const GstDiscovererVideoInfo* info);
127 guint gst_discoverer_video_info_get_depth(const GstDiscovererVideoInfo* info);
128 guint gst_discoverer_video_info_get_framerate_num(const GstDiscovererVideoInfo* info);
129 guint gst_discoverer_video_info_get_framerate_denom(const GstDiscovererVideoInfo* info);
130 guint gst_discoverer_video_info_get_par_num(const GstDiscovererVideoInfo* info);
131 guint gst_discoverer_video_info_get_par_denom(const GstDiscovererVideoInfo* info);
132 gboolean gst_discoverer_video_info_is_interlaced(const GstDiscovererVideoInfo* info);
133 guint gst_discoverer_video_info_get_bitrate(const GstDiscovererVideoInfo* info);
134 guint gst_discoverer_video_info_get_max_bitrate(const GstDiscovererVideoInfo* info);
135 gboolean gst_discoverer_video_info_is_image(const GstDiscovererVideoInfo* info);
138 * GstDiscovererSubtitleInfo:
140 * #GstDiscovererStreamInfo specific to subtitle streams (this includes text and
143 #define GST_TYPE_DISCOVERER_SUBTITLE_INFO \
144 (gst_discoverer_subtitle_info_get_type ())
145 #define GST_DISCOVERER_SUBTITLE_INFO(obj) \
146 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO, GstDiscovererSubtitleInfo))
147 #define GST_IS_DISCOVERER_SUBTITLE_INFO(obj) \
148 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO))
149 typedef struct _GstDiscovererSubtitleInfo GstDiscovererSubtitleInfo;
150 typedef GObjectClass GstDiscovererSubtitleInfoClass;
151 GType gst_discoverer_subtitle_info_get_type (void);
153 const gchar * gst_discoverer_subtitle_info_get_language(const GstDiscovererSubtitleInfo* info);
156 * GstDiscovererResult:
157 * @GST_DISCOVERER_OK: The discovery was successful
158 * @GST_DISCOVERER_URI_INVALID: the URI is invalid
159 * @GST_DISCOVERER_ERROR: an error happened and the GError is set
160 * @GST_DISCOVERER_TIMEOUT: the discovery timed-out
161 * @GST_DISCOVERER_BUSY: the discoverer was already discovering a file
162 * @GST_DISCOVERER_MISSING_PLUGINS: Some plugins are missing for full discovery
164 * Result values for the discovery process.
167 GST_DISCOVERER_OK = 0,
168 GST_DISCOVERER_URI_INVALID = 1,
169 GST_DISCOVERER_ERROR = 2,
170 GST_DISCOVERER_TIMEOUT = 3,
171 GST_DISCOVERER_BUSY = 4,
172 GST_DISCOVERER_MISSING_PLUGINS = 5
173 } GstDiscovererResult;
179 * Structure containing the information of a URI analyzed by #GstDiscoverer.
181 typedef struct _GstDiscovererInfo GstDiscovererInfo;
183 #define GST_TYPE_DISCOVERER_INFO \
184 (gst_discoverer_info_get_type ())
185 #define GST_DISCOVERER_INFO(obj) \
186 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_INFO, GstDiscovererInfo))
187 #define GST_IS_DISCOVERER_INFO(obj) \
188 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_INFO))
189 typedef GObjectClass GstDiscovererInfoClass;
190 GType gst_discoverer_info_get_type (void);
192 #define gst_discoverer_info_unref(info) (g_object_unref((GObject*)info))
193 #define gst_discoverer_info_ref(info) (g_object_ref((Gbject*)info))
195 GstDiscovererInfo* gst_discoverer_info_copy (GstDiscovererInfo * ptr);
197 const gchar* gst_discoverer_info_get_uri(const GstDiscovererInfo* info);
198 GstDiscovererResult gst_discoverer_info_get_result(const GstDiscovererInfo* info);
199 GstDiscovererStreamInfo* gst_discoverer_info_get_stream_info(GstDiscovererInfo* info);
200 GList* gst_discoverer_info_get_stream_list(GstDiscovererInfo* info);
201 GstClockTime gst_discoverer_info_get_duration(const GstDiscovererInfo* info);
202 gboolean gst_discoverer_info_get_seekable(const GstDiscovererInfo* info);
203 const GstStructure* gst_discoverer_info_get_misc(const GstDiscovererInfo* info);
204 const GstTagList* gst_discoverer_info_get_tags(const GstDiscovererInfo* info);
205 const GstToc* gst_discoverer_info_get_toc(const GstDiscovererInfo* info);
207 GList * gst_discoverer_info_get_streams (GstDiscovererInfo *info,
209 GList * gst_discoverer_info_get_audio_streams (GstDiscovererInfo *info);
210 GList * gst_discoverer_info_get_video_streams (GstDiscovererInfo *info);
211 GList * gst_discoverer_info_get_subtitle_streams (GstDiscovererInfo *info);
212 GList * gst_discoverer_info_get_container_streams (GstDiscovererInfo *info);
214 void gst_discoverer_stream_info_list_free (GList *infos);
216 #define GST_TYPE_DISCOVERER \
217 (gst_discoverer_get_type())
218 #define GST_DISCOVERER(obj) \
219 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER,GstDiscoverer))
220 #define GST_DISCOVERER_CLASS(klass) \
221 (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISCOVERER,GstDiscovererClass))
222 #define GST_IS_DISCOVERER(obj) \
223 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER))
224 #define GST_IS_DISCOVERER_CLASS(klass) \
225 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISCOVERER))
227 typedef struct _GstDiscoverer GstDiscoverer;
228 typedef struct _GstDiscovererClass GstDiscovererClass;
229 typedef struct _GstDiscovererPrivate GstDiscovererPrivate;
234 * The #GstDiscoverer structure.
236 struct _GstDiscoverer {
240 GstDiscovererPrivate *priv;
242 gpointer _reserved[GST_PADDING];
245 struct _GstDiscovererClass {
246 GObjectClass parentclass;
249 void (*finished) (GstDiscoverer *discoverer);
250 void (*starting) (GstDiscoverer *discoverer);
251 void (*discovered) (GstDiscoverer *discoverer,
252 GstDiscovererInfo *info,
254 void (*source_setup) (GstDiscoverer *discoverer,
257 gpointer _reserved[GST_PADDING];
260 GType gst_discoverer_get_type (void);
261 GstDiscoverer *gst_discoverer_new (GstClockTime timeout, GError **err);
263 /* Asynchronous API */
264 void gst_discoverer_start (GstDiscoverer *discoverer);
265 void gst_discoverer_stop (GstDiscoverer *discoverer);
266 gboolean gst_discoverer_discover_uri_async (GstDiscoverer *discoverer,
269 /* Synchronous API */
271 gst_discoverer_discover_uri (GstDiscoverer * discoverer,
277 #endif /* _GST_DISCOVERER_H */