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

#ifndef __gnu_javax_sound_sampled_gstreamer_io_GstAudioFileReaderNativePeer$GstHeader__
#define __gnu_javax_sound_sampled_gstreamer_io_GstAudioFileReaderNativePeer$GstHeader__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace sound
      {
        namespace sampled
        {
          namespace gstreamer
          {
            namespace io
            {
                class GstAudioFileReaderNativePeer$GstHeader;
            }
          }
        }
      }
    }
  }
}

class gnu::javax::sound::sampled::gstreamer::io::GstAudioFileReaderNativePeer$GstHeader : public ::java::lang::Object
{

  GstAudioFileReaderNativePeer$GstHeader();
public: // actually package-private
  GstAudioFileReaderNativePeer$GstHeader(::gnu::javax::sound::sampled::gstreamer::io::GstAudioFileReaderNativePeer$GstHeader *);
public:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) file;
  ::java::lang::String * suffix;
  ::java::lang::String * name;
  ::java::lang::String * mimetype;
  ::java::lang::String * endianness;
  ::java::lang::String * channels;
  ::java::lang::String * rate;
  ::java::lang::String * width;
  ::java::lang::String * depth;
  ::java::lang::String * isSigned;
  ::java::lang::String * layer;
  ::java::lang::String * bitrate;
  ::java::lang::String * framed;
  ::java::lang::String * type;
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_sound_sampled_gstreamer_io_GstAudioFileReaderNativePeer$GstHeader__
