// -*- c++ -*-
// Generated by gtkmmproc -- DO NOT MODIFY!
#ifndef _GSTREAMERMM_PLAYBIN2_H
#define _GSTREAMERMM_PLAYBIN2_H


#include <glibmm.h>

// Generated by generate_plugin_gmmproc_file. Don't edit this file.


#include <gstreamermm/pipeline.h>
#include <gstreamermm/element.h>
#include <gstreamermm/buffer.h>
#include <gstreamermm/taglist.h>
#include <gstreamermm/caps.h>
#include <gstreamermm/pad.h>
#include <gstreamermm/streamvolume.h>


#ifndef DOXYGEN_SHOULD_SKIP_THIS
typedef struct _GstPlayBin2 GstPlayBin2;
typedef struct _GstPlayBin2Class GstPlayBin2Class;
#endif /* DOXYGEN_SHOULD_SKIP_THIS */


namespace Gst
{ class PlayBin2_Class; } // namespace Gst
namespace Gst
{

/** @addtogroup gstreamermmEnums gstreamermm Enums and Flags */

/**
 * @ingroup gstreamermmEnums
 * @par Bitwise operators:
 * <tt>%PlayFlags operator|(PlayFlags, PlayFlags)</tt><br>
 * <tt>%PlayFlags operator&(PlayFlags, PlayFlags)</tt><br>
 * <tt>%PlayFlags operator^(PlayFlags, PlayFlags)</tt><br>
 * <tt>%PlayFlags operator~(PlayFlags)</tt><br>
 * <tt>%PlayFlags& operator|=(PlayFlags&, PlayFlags)</tt><br>
 * <tt>%PlayFlags& operator&=(PlayFlags&, PlayFlags)</tt><br>
 * <tt>%PlayFlags& operator^=(PlayFlags&, PlayFlags)</tt><br>
 */
enum PlayFlags
{
  PLAY_FLAG_VIDEO = (1 << 0),
  PLAY_FLAG_AUDIO = (1 << 1),
  PLAY_FLAG_TEXT = (1 << 2),
  PLAY_FLAG_VIS = (1 << 3),
  PLAY_FLAG_SOFT_VOLUME = (1 << 4),
  PLAY_FLAG_NATIVE_AUDIO = (1 << 5),
  PLAY_FLAG_NATIVE_VIDEO = (1 << 6),
  PLAY_FLAG_DOWNLOAD = (1 << 7),
  PLAY_FLAG_BUFFERING = (1 << 8)
};

/** @ingroup gstreamermmEnums */
inline PlayFlags operator|(PlayFlags lhs, PlayFlags rhs)
  { return static_cast<PlayFlags>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); }

/** @ingroup gstreamermmEnums */
inline PlayFlags operator&(PlayFlags lhs, PlayFlags rhs)
  { return static_cast<PlayFlags>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); }

/** @ingroup gstreamermmEnums */
inline PlayFlags operator^(PlayFlags lhs, PlayFlags rhs)
  { return static_cast<PlayFlags>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); }

/** @ingroup gstreamermmEnums */
inline PlayFlags operator~(PlayFlags flags)
  { return static_cast<PlayFlags>(~static_cast<unsigned>(flags)); }

/** @ingroup gstreamermmEnums */
inline PlayFlags& operator|=(PlayFlags& lhs, PlayFlags rhs)
  { return (lhs = static_cast<PlayFlags>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); }

/** @ingroup gstreamermmEnums */
inline PlayFlags& operator&=(PlayFlags& lhs, PlayFlags rhs)
  { return (lhs = static_cast<PlayFlags>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); }

/** @ingroup gstreamermmEnums */
inline PlayFlags& operator^=(PlayFlags& lhs, PlayFlags rhs)
  { return (lhs = static_cast<PlayFlags>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); }

} // namespace Gst


#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class Value<Gst::PlayFlags> : public Glib::Value_Flags<Gst::PlayFlags>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */


namespace Gst
{


/** A Wrapper for the playbin2 plugin.
 * Please note that, though using the underlying GObject is fine, using its C
 * <B>type</B> is not guaranteed to be API stable across releases because it is
 * not guaranteed to always remain the same.  Also, not all plug-ins are
 * available on all systems so care must be taken that they exist before they
 * are used, otherwise there will be errors and possibly a crash.
 *
 * @ingroup GstPlugins
 */

class PlayBin2
: public Gst::Pipeline, public Gst::StreamVolume
{
  
#ifndef DOXYGEN_SHOULD_SKIP_THIS

public:
  typedef PlayBin2 CppObjectType;
  typedef PlayBin2_Class CppClassType;
  typedef GstPlayBin2 BaseObjectType;
  typedef GstPlayBin2Class BaseClassType;

private:  friend class PlayBin2_Class;
  static CppClassType playbin2_class_;

private:
  // noncopyable
  PlayBin2(const PlayBin2&);
  PlayBin2& operator=(const PlayBin2&);

protected:
  explicit PlayBin2(const Glib::ConstructParams& construct_params);
  explicit PlayBin2(GstPlayBin2* castitem);

#endif /* DOXYGEN_SHOULD_SKIP_THIS */

public:
  virtual ~PlayBin2();

#ifndef DOXYGEN_SHOULD_SKIP_THIS
  static GType get_type()      G_GNUC_CONST;


  static GType get_base_type() G_GNUC_CONST;
#endif

  ///Provides access to the underlying C GObject.
  GstPlayBin2*       gobj()       { return reinterpret_cast<GstPlayBin2*>(gobject_); }

  ///Provides access to the underlying C GObject.
  const GstPlayBin2* gobj() const { return reinterpret_cast<GstPlayBin2*>(gobject_); }

  ///Provides access to the underlying C instance. The caller is responsible for unrefing it. Use when directly setting fields in structs.
  GstPlayBin2* gobj_copy();

private:

  
protected:
  PlayBin2();
  explicit PlayBin2(const Glib::ustring& name);

public:
  /** Creates a new playbin2 plugin with a unique name.
   */
  
  static Glib::RefPtr<PlayBin2> create();


  /** Creates a new playbin2 plugin with the given name.
   */
  
  static Glib::RefPtr<PlayBin2> create(const Glib::ustring& name);


  /** This is a convenience method for the action signal
   * signal_get_video_tags().
   */
  Gst::TagList get_video_tags(int arg0);

  /** This is a convenience method for the action signal
   * signal_get_audio_tags().
   */
  Gst::TagList get_audio_tags(int arg0);

  /** This is a convenience method for the action signal
   * signal_get_text_tags().
   */
  Gst::TagList get_text_tags(int arg0);

  /** This is a convenience method for the action signal
   * signal_convert_frame().
   */
  Glib::RefPtr<Gst::Buffer> convert_frame(const Glib::RefPtr<Gst::Caps>& arg0);

  /** This is a convenience method for the action signal
   * signal_get_video_pad().
   */
  Glib::RefPtr<Gst::Pad> get_video_pad(int arg0);

  /** This is a convenience method for the action signal
   * signal_get_audio_pad().
   */
  Glib::RefPtr<Gst::Pad> get_audio_pad(int arg0);

  /** This is a convenience method for the action signal
   * signal_get_text_pad().
   */
  Glib::RefPtr<Gst::Pad> get_text_pad(int arg0);


  #ifdef GLIBMM_PROPERTIES_ENABLED
/** URI of the media to play.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<Glib::ustring> property_uri() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** URI of the media to play.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<Glib::ustring> property_uri() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Optional URI of a subtitle.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<Glib::ustring> property_suburi() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Optional URI of a subtitle.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<Glib::ustring> property_suburi() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Source element.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< Glib::RefPtr<Gst::Element> > property_source() const;
#endif //#GLIBMM_PROPERTIES_ENABLED


  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Flags to control behaviour.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<Gst::PlayFlags> property_flags() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Flags to control behaviour.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<Gst::PlayFlags> property_flags() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Total number of video streams.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<int> property_n_video() const;
#endif //#GLIBMM_PROPERTIES_ENABLED


  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Currently playing video stream (-1 = auto).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<int> property_current_video() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Currently playing video stream (-1 = auto).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<int> property_current_video() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Total number of audio streams.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<int> property_n_audio() const;
#endif //#GLIBMM_PROPERTIES_ENABLED


  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Currently playing audio stream (-1 = auto).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<int> property_current_audio() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Currently playing audio stream (-1 = auto).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<int> property_current_audio() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Total number of text streams.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<int> property_n_text() const;
#endif //#GLIBMM_PROPERTIES_ENABLED


  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Currently playing text stream (-1 = auto).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<int> property_current_text() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Currently playing text stream (-1 = auto).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<int> property_current_text() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<Glib::ustring> property_subtitle_encoding() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<Glib::ustring> property_subtitle_encoding() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** the audio output element to use (NULL = default sink).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy< Glib::RefPtr<Gst::Element> > property_audio_sink() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** the audio output element to use (NULL = default sink).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< Glib::RefPtr<Gst::Element> > property_audio_sink() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** the video output element to use (NULL = default sink).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy< Glib::RefPtr<Gst::Element> > property_video_sink() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** the video output element to use (NULL = default sink).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< Glib::RefPtr<Gst::Element> > property_video_sink() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** the visualization element to use (NULL = default).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy< Glib::RefPtr<Gst::Element> > property_vis_plugin() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** the visualization element to use (NULL = default).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< Glib::RefPtr<Gst::Element> > property_vis_plugin() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** the text output element to use (NULL = default textoverlay).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy< Glib::RefPtr<Gst::Element> > property_text_sink() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** the text output element to use (NULL = default textoverlay).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< Glib::RefPtr<Gst::Element> > property_text_sink() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** The audio volume, 1.0=100%.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<double> property_volume() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** The audio volume, 1.0=100%.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<double> property_volume() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Mute the audio channel without changing the volume.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<bool> property_mute() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Mute the audio channel without changing the volume.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<bool> property_mute() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** The last frame (NULL = no video available).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< Glib::RefPtr<Gst::Buffer> > property_frame() const;
#endif //#GLIBMM_PROPERTIES_ENABLED


  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Pango font description of font to be used for subtitle rendering.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_WriteOnly<Glib::ustring> property_subtitle_font_desc() ;
#endif //#GLIBMM_PROPERTIES_ENABLED


  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Network connection speed in kbps (0 = unknown).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<guint> property_connection_speed() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Network connection speed in kbps (0 = unknown).
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<guint> property_connection_speed() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Buffer size when buffering network streams.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<int> property_buffer_size() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Buffer size when buffering network streams.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<int> property_buffer_size() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** Buffer duration when buffering network streams.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<gint64> property_buffer_duration() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** Buffer duration when buffering network streams.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<gint64> property_buffer_duration() const;
#endif //#GLIBMM_PROPERTIES_ENABLED

  #ifdef GLIBMM_PROPERTIES_ENABLED
/** The synchronisation offset between audio and video in nanoseconds.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy<gint64> property_av_offset() ;
#endif //#GLIBMM_PROPERTIES_ENABLED

#ifdef GLIBMM_PROPERTIES_ENABLED
/** The synchronisation offset between audio and video in nanoseconds.
   *
   * You rarely need to use properties because there are get_ and set_ methods for almost all of them.
   * @return A PropertyProxy that allows you to get or set the property of the value, or receive notification when
   * the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly<gint64> property_av_offset() const;
#endif //#GLIBMM_PROPERTIES_ENABLED


  /**
   * @par Prototype:
   * <tt>void on_my_%about_to_finish()</tt>
   */

  Glib::SignalProxy0< void > signal_about_to_finish();

  
  /**
   * @par Prototype:
   * <tt>void on_my_%video_changed()</tt>
   */

  Glib::SignalProxy0< void > signal_video_changed();

  
  /**
   * @par Prototype:
   * <tt>void on_my_%audio_changed()</tt>
   */

  Glib::SignalProxy0< void > signal_audio_changed();

  
  /**
   * @par Prototype:
   * <tt>void on_my_%text_changed()</tt>
   */

  Glib::SignalProxy0< void > signal_text_changed();

  
  /**
   * @par Prototype:
   * <tt>void on_my_%video_tags_changed(int arg0)</tt>
   */

  Glib::SignalProxy1< void,int > signal_video_tags_changed();

  
  /**
   * @par Prototype:
   * <tt>void on_my_%audio_tags_changed(int arg0)</tt>
   */

  Glib::SignalProxy1< void,int > signal_audio_tags_changed();

  
  /**
   * @par Prototype:
   * <tt>void on_my_%text_tags_changed(int arg0)</tt>
   */

  Glib::SignalProxy1< void,int > signal_text_tags_changed();


  /** This is an action signal which is designed to be used as a method.  To 
   * do that, use its convenience method, get_video_tags().
   *
   * @par Prototype:
   * <tt>Gst::TagList on_my_%get_video_tags(int arg0)</tt>
   */

  Glib::SignalProxy1< Gst::TagList,int > signal_get_video_tags();


  /** This is an action signal which is designed to be used as a method.  To 
   * do that, use its convenience method, get_audio_tags().
   *
   * @par Prototype:
   * <tt>Gst::TagList on_my_%get_audio_tags(int arg0)</tt>
   */

  Glib::SignalProxy1< Gst::TagList,int > signal_get_audio_tags();


  /** This is an action signal which is designed to be used as a method.  To 
   * do that, use its convenience method, get_text_tags().
   *
   * @par Prototype:
   * <tt>Gst::TagList on_my_%get_text_tags(int arg0)</tt>
   */

  Glib::SignalProxy1< Gst::TagList,int > signal_get_text_tags();


  /** This is an action signal which is designed to be used as a method.  To 
   * do that, use its convenience method, convert_frame().
   *
   * @par Prototype:
   * <tt>Glib::RefPtr<Gst::Buffer> on_my_%convert_frame(const Glib::RefPtr<Gst::Caps>& arg0)</tt>
   */

  Glib::SignalProxy1< Glib::RefPtr<Gst::Buffer>,const Glib::RefPtr<Gst::Caps>& > signal_convert_frame();


  /** This is an action signal which is designed to be used as a method.  To 
   * do that, use its convenience method, get_video_pad().
   *
   * @par Prototype:
   * <tt>Glib::RefPtr<Gst::Pad> on_my_%get_video_pad(int arg0)</tt>
   */

  Glib::SignalProxy1< Glib::RefPtr<Gst::Pad>,int > signal_get_video_pad();


  /** This is an action signal which is designed to be used as a method.  To 
   * do that, use its convenience method, get_audio_pad().
   *
   * @par Prototype:
   * <tt>Glib::RefPtr<Gst::Pad> on_my_%get_audio_pad(int arg0)</tt>
   */

  Glib::SignalProxy1< Glib::RefPtr<Gst::Pad>,int > signal_get_audio_pad();


  /** This is an action signal which is designed to be used as a method.  To 
   * do that, use its convenience method, get_text_pad().
   *
   * @par Prototype:
   * <tt>Glib::RefPtr<Gst::Pad> on_my_%get_text_pad(int arg0)</tt>
   */

  Glib::SignalProxy1< Glib::RefPtr<Gst::Pad>,int > signal_get_text_pad();


public:

public:
  //C++ methods used to invoke GTK+ virtual functions:

protected:
  //GTK+ Virtual Functions (override these to change behaviour):

  //Default Signal Handlers::
  virtual void on_about_to_finish();
  virtual void on_video_changed();
  virtual void on_audio_changed();
  virtual void on_text_changed();
  virtual void on_video_tags_changed(int arg0);
  virtual void on_audio_tags_changed(int arg0);
  virtual void on_text_tags_changed(int arg0);
  virtual Gst::TagList on_get_video_tags(int arg0);
  virtual Gst::TagList on_get_audio_tags(int arg0);
  virtual Gst::TagList on_get_text_tags(int arg0);
  virtual Glib::RefPtr<Gst::Buffer> on_convert_frame(const Glib::RefPtr<Gst::Caps>& arg0);
  virtual Glib::RefPtr<Gst::Pad> on_get_video_pad(int arg0);
  virtual Glib::RefPtr<Gst::Pad> on_get_audio_pad(int arg0);
  virtual Glib::RefPtr<Gst::Pad> on_get_text_pad(int arg0);


};

} // namespace Gst


namespace Glib
{
  /** A Glib::wrap() method for this object.
   * 
   * @param object The C instance.
   * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
   * @result A C++ instance that wraps this C instance.
   *
   * @relates Gst::PlayBin2
   */
  Glib::RefPtr<Gst::PlayBin2> wrap(GstPlayBin2* object, bool take_copy = false);
}


#endif /* _GSTREAMERMM_PLAYBIN2_H */

