/* gstreamermm - a C++ wrapper for gstreamer
 *
 * Copyright 2008-2016 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 <gst/gst.h>
#include <gstreamermm/object.h>

_DEFS(gstreamermm,gst)

namespace Gst
{

class Caps;

/** Gst::EncodingProfile can be provided to the 'encodebin' element, which will take
 * care of selecting and setting up the required elements to produce an output stream
 * conforming to the specifications of the profile.
 *
 * TODO update example
 *
 * Last reviewed on 2016-05-21 (1.8.0).
 *
 */
class EncodingProfile : public Gst::Object
{
  _CLASS_GOBJECT(EncodingProfile, GstEncodingProfile, GST_ENCODING_PROFILE, Gst::Object, GstObject)

public:
  _WRAP_METHOD(Glib::ustring get_name() const, gst_encoding_profile_get_name)
  _WRAP_METHOD(Glib::ustring get_description() const, gst_encoding_profile_get_description)
  _WRAP_METHOD(Glib::RefPtr<Gst::Caps> get_format(), gst_encoding_profile_get_format)
  _WRAP_METHOD(Glib::RefPtr<const Gst::Caps> get_format() const, gst_encoding_profile_get_format)
  _WRAP_METHOD(Glib::ustring get_preset() const, gst_encoding_profile_get_preset)
  _WRAP_METHOD(Glib::ustring get_preset_name() const, gst_encoding_profile_get_preset_name)
  _WRAP_METHOD(guint get_presence() const, gst_encoding_profile_get_presence)
  _WRAP_METHOD(Glib::RefPtr<Gst::Caps> get_restriction(), gst_encoding_profile_get_restriction)
  _WRAP_METHOD(Glib::RefPtr<const Gst::Caps> get_restriction() const, gst_encoding_profile_get_restriction, constversion)
  _WRAP_METHOD(Glib::ustring get_file_extension() const, gst_encoding_profile_get_file_extension)
  _WRAP_METHOD(void set_name(const Glib::ustring& name), gst_encoding_profile_set_name)
  _WRAP_METHOD(void set_description(const Glib::ustring& name), gst_encoding_profile_set_description)
  _WRAP_METHOD(void set_enabled(bool enabled), gst_encoding_profile_set_enabled)
  _WRAP_METHOD(void set_format(const Glib::RefPtr<Gst::Caps>& format), gst_encoding_profile_set_format)
  _WRAP_METHOD(void set_preset(const Glib::ustring& preset), gst_encoding_profile_set_preset)
  _WRAP_METHOD(void set_preset_name(const Glib::ustring& preset_name), gst_encoding_profile_set_preset_name)
  _WRAP_METHOD(void set_restriction(const Glib::RefPtr<Gst::Caps>& restriction), gst_encoding_profile_set_restriction)
  _WRAP_METHOD(void set_presence(guint presence), gst_encoding_profile_set_presence)
  _WRAP_METHOD(bool is_equal(const Glib::RefPtr<Gst::EncodingProfile>& profile2) const, gst_encoding_profile_is_equal)
  _WRAP_METHOD(bool is_enabled() const, gst_encoding_profile_is_enabled)
  _WRAP_METHOD(Glib::RefPtr<Gst::Caps> get_input_caps() const, gst_encoding_profile_get_input_caps)
  _WRAP_METHOD(Glib::ustring get_type_nick() const, gst_encoding_profile_get_type_nick)

  _WRAP_METHOD(bool get_allow_dynamic_output() const, gst_encoding_profile_get_allow_dynamic_output)
  _WRAP_METHOD(void set_allow_dynamic_output(bool allow_dynamic_output), gst_encoding_profile_set_allow_dynamic_output)

  _WRAP_PROPERTY("restriction-caps", Glib::RefPtr<Gst::Caps>)
};

} // namespace Gst
