
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_javax_sound_sampled_gstreamer_GStreamerMixer__
#define __gnu_javax_sound_sampled_gstreamer_GStreamerMixer__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace sound
      {
        namespace sampled
        {
          namespace gstreamer
          {
              class GStreamerMixer;
          }
        }
      }
    }
  }
  namespace javax
  {
    namespace sound
    {
      namespace sampled
      {
          class AudioFormat;
          class Control;
          class Control$Type;
          class Line;
          class Line$Info;
          class LineListener;
          class Mixer$Info;
      }
    }
  }
}

class gnu::javax::sound::sampled::gstreamer::GStreamerMixer : public ::java::lang::Object
{

public:
  GStreamerMixer();
  virtual ::javax::sound::sampled::Line * getLine(::javax::sound::sampled::Line$Info *);
  virtual jint getMaxLines(::javax::sound::sampled::Line$Info *);
  virtual ::javax::sound::sampled::Mixer$Info * getMixerInfo();
  virtual JArray< ::javax::sound::sampled::Line$Info * > * getSourceLineInfo();
  virtual JArray< ::javax::sound::sampled::Line$Info * > * getSourceLineInfo(::javax::sound::sampled::Line$Info *);
  virtual JArray< ::javax::sound::sampled::Line * > * getSourceLines();
  virtual JArray< ::javax::sound::sampled::Line$Info * > * getTargetLineInfo();
  virtual JArray< ::javax::sound::sampled::Line$Info * > * getTargetLineInfo(::javax::sound::sampled::Line$Info *);
  virtual JArray< ::javax::sound::sampled::Line * > * getTargetLines();
  virtual jboolean isLineSupported(::javax::sound::sampled::Line$Info *);
  virtual jboolean isSynchronizationSupported(JArray< ::javax::sound::sampled::Line * > *, jboolean);
  virtual void synchronize(JArray< ::javax::sound::sampled::Line * > *, jboolean);
  virtual void unsynchronize(JArray< ::javax::sound::sampled::Line * > *);
  virtual void addLineListener(::javax::sound::sampled::LineListener *);
  virtual void close();
  virtual ::javax::sound::sampled::Control * getControl(::javax::sound::sampled::Control$Type *);
  virtual JArray< ::javax::sound::sampled::Control * > * getControls();
  virtual ::javax::sound::sampled::Line$Info * getLineInfo();
  virtual jboolean isControlSupported(::javax::sound::sampled::Control$Type *);
  virtual jboolean isOpen();
  virtual void open();
  virtual void removeLineListener(::javax::sound::sampled::LineListener *);
  static ::java::lang::String * GST_BACKEND;
  static ::java::lang::String * GST_DECODER;
private:
  static JArray< ::javax::sound::sampled::AudioFormat * > * BASIC_FORMATS;
  static ::javax::sound::sampled::Mixer$Info * INFO;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_sound_sampled_gstreamer_GStreamerMixer__
