// -*- c++ -*-
// Generated by gmmproc 2.42.0 -- DO NOT MODIFY!
#ifndef _GSTREAMERMM_AUDIOINFO_H
#define _GSTREAMERMM_AUDIOINFO_H


#include <glibmm/ustring.h>
#include <sigc++/sigc++.h>

/* gstreamermm - a C++ wrapper for gstreamer
 *
 * Copyright 2008-2009 The gstreamermm Development Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <gstreamermm/audioformat.h>
#include <gst/audio/audio-info.h>


namespace Gst
{

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

/** 
 *  @var AudioFlags AUDIO_FLAG_NONE
 *  No valid flag.
 * 
 *  @var AudioFlags AUDIO_FLAG_UNPOSITIONED
 *  The position array explicitly contains unpositioned channels.
 * 
 *  @enum AudioFlags
 * 
 * Extra audio flags
 * @ingroup gstreamermmEnums
 * @par Bitwise operators:
 * <tt>%AudioFlags operator|(AudioFlags, AudioFlags)</tt><br>
 * <tt>%AudioFlags operator&(AudioFlags, AudioFlags)</tt><br>
 * <tt>%AudioFlags operator^(AudioFlags, AudioFlags)</tt><br>
 * <tt>%AudioFlags operator~(AudioFlags)</tt><br>
 * <tt>%AudioFlags& operator|=(AudioFlags&, AudioFlags)</tt><br>
 * <tt>%AudioFlags& operator&=(AudioFlags&, AudioFlags)</tt><br>
 * <tt>%AudioFlags& operator^=(AudioFlags&, AudioFlags)</tt><br>
 */
enum AudioFlags
{
  AUDIO_FLAG_NONE = 0x0,
  AUDIO_FLAG_UNPOSITIONED = (1 << 0)
};

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

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

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

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

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

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

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

} // namespace Gst


#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

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

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


namespace Gst
{

  /** 
 *  @var AudioLayout AUDIO_LAYOUT_INTERLEAVED
 *  Interleaved audio.
 * 
 *  @var AudioLayout AUDIO_LAYOUT_NON_INTERLEAVED
 *  Non-interleaved audio.
 * 
 *  @enum AudioLayout
 * 
 * Layout of the audio samples for the different channels.
 * @ingroup gstreamermmEnums
 */
enum AudioLayout
{
  AUDIO_LAYOUT_INTERLEAVED,
  AUDIO_LAYOUT_NON_INTERLEAVED
};

} // namespace Gst


#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

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

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


namespace Gst
{


/**
 * Information for an audio format.
 */
class AudioInfo : public Gst::AudioFormatInfo
{
  public:
#ifndef DOXYGEN_SHOULD_SKIP_THIS
  typedef AudioInfo CppObjectType;
  typedef GstAudioInfo BaseObjectType;
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

private:

public:
  AudioInfo(const GstAudioInfo* info, bool take_ownership = false);


  virtual ~AudioInfo();
  /// Gets the underlying gobject.
  const GstAudioInfo* gobj() const { return m_info; };

protected:
#ifndef DOXYGEN_SHOULD_SKIP_THIS
  const GstAudioInfo* m_info;
  bool take_ownership;
#endif


};

}


#endif /* _GSTREAMERMM_AUDIOINFO_H */

