1/* gstreamermm - a C++ wrapper for gstreamer
2 *
3 * Copyright 2008-2016 The gstreamermm Development Team
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
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 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free
17 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20#include <gst/gst.h>
21#include <glibmm/interface.h>
22#include <gstreamermm/enums.h>
23#include <glibmm/arrayhandle.h>
24#include <cstdio>
25_DEFS(gstreamermm,gst)
26
27namespace Gst
28{
29
30class Element;
31
32_WRAP_ENUM(URIType, GstURIType)
33_WRAP_ENUM(URIError, GstURIError)
34
35/** An interface to ease URI handling in plugins.
36 * The Gst::URIHandler is an interface that is implemented by Source and Sink
37 * Gst::Element to simplify then handling of URI.
38 *
39 * An application can use the following functions to quickly get an element
40 * that handles the given URI for reading or writing (make_element_from_uri()).
41 *
42 * Source and Sink plugins should implement this interface when possible.
43 *
44 * Last reviewed on 2016-08-27 (1.8.0)
45 * @ingroup GstInterfaces
46 */
47class URIHandler : public Glib::Interface
48{
49  _CLASS_INTERFACE(URIHandler, GstURIHandler, GST_URI_HANDLER, GstURIHandlerInterface)
50
51public:
52  _WRAP_METHOD(static bool protocol_is_valid(const Glib::ustring& protocol), gst_uri_protocol_is_valid)
53  _WRAP_METHOD(static bool protocol_is_supported(const Gst::URIType type, const Glib::ustring& protocol), gst_uri_protocol_is_supported)
54  _WRAP_METHOD(static bool uri_is_valid(const Glib::ustring& uri), gst_uri_is_valid)
55  _WRAP_METHOD(static bool uri_has_protocol(const Glib::ustring& uri, const Glib::ustring& protocol), gst_uri_has_protocol)
56  _WRAP_METHOD(static Glib::ustring get_protocol(const Glib::ustring& uri), gst_uri_get_protocol)
57  _WRAP_METHOD(static Glib::ustring get_location(const Glib::ustring& uri), gst_uri_get_location)
58  _WRAP_METHOD(static Glib::ustring construct_uri(const Glib::ustring& protocol, const Glib::ustring& location), gst_uri_construct)
59  _WRAP_METHOD(static Glib::ustring filename_to_uri(const Glib::ustring& filename), gst_filename_to_uri, errthrow)
60  _WRAP_METHOD(static Glib::RefPtr<Gst::Element> make_element_from_uri(const Gst::URIType type, const Glib::ustring& uri, const Glib::ustring& name), gst_element_make_from_uri, errthrow)
61
62  _WRAP_METHOD(URIType get_uri_type() const, gst_uri_handler_get_uri_type)
63
64#m4 _CONVERSION(`const gchar* const*',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_NONE)')
65  _WRAP_METHOD(std::vector<Glib::ustring> get_protocols() const, gst_uri_handler_get_protocols)
66
67  _WRAP_METHOD(Glib::ustring get_uri() const, gst_uri_handler_get_uri)
68  _WRAP_METHOD(bool set_uri(const Glib::ustring& uri), gst_uri_handler_set_uri, errthrow)
69
70#m4 _CONVERSION(`Glib::ustring', `const gchar*', `($3).c_str()')
71
72  /** Virtual method which should be implemented to return the URI currently
73   * handled by the element.
74   */
75  _WRAP_VFUNC(Glib::ustring get_uri() const, "get_uri")
76
77  /** Virtual method which should be implemented to set a new URI.
78   */
79  _WRAP_VFUNC(bool set_uri(const Glib::ustring& uri, GError** error), "set_uri")
80
81  /**
82   * Method to return the list of protocols handled by the element.
83   */
84  virtual const gchar * const * get_protocols_vfunc() const;
85
86  /**
87   * Method to tell whether the element handles source or sink URI.
88   */
89  virtual URIType get_type_vfunc();
90
91
92protected:
93#m4begin
94  _PUSH(SECTION_PCC_CLASS_INIT_VFUNCS)
95  klass->get_type = &get_type_vfunc_callback;
96  klass->get_protocols = &get_protocols_vfunc_callback;
97  _SECTION(SECTION_PH_VFUNCS)
98  static GstURIType get_type_vfunc_callback(GType type);
99  static const gchar * const * get_protocols_vfunc_callback(GType type);
100_POP()
101#m4end
102};
103
104} // namespace Gst
105