/*
 * This file was generated automatically by xsubpp version 1.9508 from the 
 * contents of Vorbis.xs. Do not edit this file, edit Vorbis.xs instead.
 *
 *	ANY CHANGES MADE HERE WILL BE LOST! 
 *
 */

#line 1 "Vorbis.xs"
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include <vorbis/vorbisfile.h>

typedef int Ogg__Vorbis;

static int
not_here(char *s)
{
    croak("%s not implemented on this architecture", s);
    return -1;
}

static double
constant(char *name, int arg)
{
    errno = 0;
    switch (*name) {
    }
    errno = EINVAL;
    return 0;

not_there:
    errno = ENOENT;
    return 0;
}


#line 41 "Vorbis.c"
XS(XS_Ogg__Vorbis_constant)
{
    dXSARGS;
    if (items != 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::constant(name, arg)");
    {
	char *	name = (char *)SvPV(ST(0),PL_na);
	int	arg = (int)SvIV(ST(1));
	double	RETVAL;
	dXSTARG;

	RETVAL = constant(name, arg);
	XSprePUSH; PUSHn((double)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_new)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::new(CLASS)");
    {
	char *	CLASS = (char *)SvPV(ST(0),PL_na);
	OggVorbis_File *	RETVAL;
#line 44 "Vorbis.xs"
        RETVAL = (OggVorbis_File*) malloc(sizeof(OggVorbis_File));
#line 69 "Vorbis.c"
	ST(0) = sv_newmortal();
        sv_setref_pv(ST(0), "Ogg::Vorbis", (void*)RETVAL);

    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_DESTROY)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::DESTROY(self)");
    {
	OggVorbis_File *	self;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;
#line 52 "Vorbis.xs"
	safefree(self);
#line 93 "Vorbis.c"
    }
    XSRETURN_EMPTY;
}

XS(XS_Ogg__Vorbis_clear)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::clear(self)");
    {
	OggVorbis_File *	self;
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_clear(self);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_open)
{
    dXSARGS;
    if (items < 2 || items > 4)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::open(self, file, initial=\"\", ibytes=0)");
    {
	OggVorbis_File *	self;
	FILE *	file = IoIFP(sv_2io(ST(1)));
	char *	initial;
	long	ibytes;
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	if (items < 3)
	    initial = "";
	else {
	    initial = (char *)SvPV(ST(2),PL_na);
	}

	if (items < 4)
	    ibytes = 0;
	else {
	    ibytes = (long)SvIV(ST(3));
	}
#line 65 "Vorbis.xs"
        /* we swapped file and self for an OO interface */
        RETVAL = ov_open(file, self, initial, ibytes);
#line 155 "Vorbis.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_streams)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::streams(self)");
    {
	OggVorbis_File *	self;
	long	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_streams(self);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_seekable)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::seekable(self)");
    {
	OggVorbis_File *	self;
	long	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_seekable(self);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_bitrate)
{
    dXSARGS;
    if (items < 1 || items > 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::bitrate(self, i=-1)");
    {
	OggVorbis_File *	self;
	int	i;
	long	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	if (items < 2)
	    i = -1;
	else {
	    i = (int)SvIV(ST(1));
	}

	RETVAL = ov_bitrate(self, i);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_serialnumber)
{
    dXSARGS;
    if (items < 1 || items > 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::serialnumber(self, i=-1)");
    {
	OggVorbis_File *	self;
	int	i;
	long	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	if (items < 2)
	    i = -1;
	else {
	    i = (int)SvIV(ST(1));
	}

	RETVAL = ov_serialnumber(self, i);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_bitrate_instant)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::bitrate_instant(self)");
    {
	OggVorbis_File *	self;
	long	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_bitrate_instant(self);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_raw_total)
{
    dXSARGS;
    if (items < 1 || items > 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::raw_total(self, i=-1)");
    {
	OggVorbis_File *	self;
	int	i;
	ogg_int64_t	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	if (items < 2)
	    i = -1;
	else {
	    i = (int)SvIV(ST(1));
	}

	RETVAL = ov_raw_total(self, i);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_pcm_total)
{
    dXSARGS;
    if (items < 1 || items > 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::pcm_total(self, i=-1)");
    {
	OggVorbis_File *	self;
	int	i;
	ogg_int64_t	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	if (items < 2)
	    i = -1;
	else {
	    i = (int)SvIV(ST(1));
	}

	RETVAL = ov_pcm_total(self, i);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_time_total)
{
    dXSARGS;
    if (items < 1 || items > 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::time_total(self, i=-1)");
    {
	OggVorbis_File *	self;
	int	i;
	double	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	if (items < 2)
	    i = -1;
	else {
	    i = (int)SvIV(ST(1));
	}

	RETVAL = ov_time_total(self, i);
	XSprePUSH; PUSHn((double)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_raw_seek)
{
    dXSARGS;
    if (items != 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::raw_seek(self, pos)");
    {
	OggVorbis_File *	self;
	long	pos = (long)SvIV(ST(1));
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_raw_seek(self, pos);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_pcm_seek_page)
{
    dXSARGS;
    if (items != 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::pcm_seek_page(self, pos)");
    {
	OggVorbis_File *	self;
	ogg_int64_t	pos = (ogg_int64_t)SvIV(ST(1));
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_pcm_seek_page(self, pos);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_pcm_seek)
{
    dXSARGS;
    if (items != 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::pcm_seek(self, pos)");
    {
	OggVorbis_File *	self;
	ogg_int64_t	pos = (ogg_int64_t)SvIV(ST(1));
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_pcm_seek(self, pos);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_time_seek)
{
    dXSARGS;
    if (items != 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::time_seek(self, seconds)");
    {
	OggVorbis_File *	self;
	double	seconds = (double)SvNV(ST(1));
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_time_seek(self, seconds);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_time_seek_page)
{
    dXSARGS;
    if (items != 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::time_seek_page(self, seconds)");
    {
	OggVorbis_File *	self;
	double	seconds = (double)SvNV(ST(1));
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_time_seek_page(self, seconds);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_raw_tell)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::raw_tell(self)");
    {
	OggVorbis_File *	self;
	ogg_int64_t	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_raw_tell(self);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_pcm_tell)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::pcm_tell(self)");
    {
	OggVorbis_File *	self;
	ogg_int64_t	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_pcm_tell(self);
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_time_tell)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::time_tell(self)");
    {
	OggVorbis_File *	self;
	double	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	RETVAL = ov_time_tell(self);
	XSprePUSH; PUSHn((double)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_info)
{
    dXSARGS;
    if (items < 1 || items > 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::info(self, link=-1)");
    {
	OggVorbis_File *	self;
	int	link;
	vorbis_info *	RETVAL;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	if (items < 2)
	    link = -1;
	else {
	    link = (int)SvIV(ST(1));
	}

	RETVAL = ov_info(self, link);
	ST(0) = sv_newmortal();
        sv_setref_pv(ST(0), "Ogg::Vorbis::Info", (void*)RETVAL);

    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_comment)
{
    dXSARGS;
    if (items < 1 || items > 2)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::comment(self, link=-1)");
    {
	OggVorbis_File *	self;
	int	link;
#line 154 "Vorbis.xs"
        char *key, *val;
        int i, keylen, vallen;
        vorbis_comment *comments;
        SV *temp;
#line 613 "Vorbis.c"
	HV *	RETVAL;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;

	if (items < 2)
	    link = -1;
	else {
	    link = (int)SvIV(ST(1));
	}
#line 159 "Vorbis.xs"
        /* fetch the comments */
        comments = ov_comment(self, link);
        RETVAL = newHV();
        /* store the comments in a hash */
        for (i=0; i < comments->comments; i++) {
            key = comments->user_comments[i];
            if (val = strchr(key, '=')) {
                keylen = val - key;
                *(val++) = '\0';
                vallen = comments->comment_lengths[i] - keylen - 1;
                hv_store(RETVAL, key, keylen, newSVpv((char*)val, vallen), 0);
                *(--val) = '=';
            } else {
                fprintf(stderr, "warning: invalid comment field #%d\n", i);
            }
        }
#line 645 "Vorbis.c"
	ST(0) = newRV((SV*)RETVAL);
	sv_2mortal(ST(0));
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis_read)
{
    dXSARGS;
    if (items != 7)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::read(self, buffer, length, bigendianp, word, sgned, bitstream)");
    {
	OggVorbis_File*	self;
	SV*	buffer = ST(1);
	int	length = (int)SvIV(ST(2));
	int	bigendianp = (int)SvIV(ST(3));
	int	word = (int)SvIV(ST(4));
	int	sgned = (int)SvIV(ST(5));
	int	bitstream = (int)SvIV(ST(6));
	long	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (OggVorbis_File *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis");;
#line 188 "Vorbis.xs"
        /* If buffer is a string, read from the string */
        if (SvPOKp(buffer)) {
            RETVAL = ov_read(self, (char*)SvPV(buffer,PL_na), length,
                             bigendianp, word, sgned, &bitstream);
        } else {
        /* otherwise buffer is a reference, de-reference it */
            RETVAL = ov_read(self, (char*)SvRV(buffer), length,
                             bigendianp, word, sgned, &bitstream);
        }
#line 684 "Vorbis.c"
	sv_setiv(ST(6), (IV)bitstream);
	SvSETMAGIC(ST(6));
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis__Info_version)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::Info::version(self)");
    {
	vorbis_info *	self;
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis::Info")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (vorbis_info *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis::Info");;
#line 208 "Vorbis.xs"
        RETVAL = self->version;
#line 710 "Vorbis.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis__Info_channels)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::Info::channels(self)");
    {
	vorbis_info *	self;
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis::Info")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (vorbis_info *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis::Info");;
#line 216 "Vorbis.xs"
        RETVAL = self->channels;
#line 734 "Vorbis.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis__Info_rate)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::Info::rate(self)");
    {
	vorbis_info *	self;
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis::Info")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (vorbis_info *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis::Info");;
#line 224 "Vorbis.xs"
        RETVAL = self->rate;
#line 758 "Vorbis.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis__Info_bitrate_upper)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::Info::bitrate_upper(self)");
    {
	vorbis_info *	self;
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis::Info")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (vorbis_info *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis::Info");;
#line 232 "Vorbis.xs"
        RETVAL = self->bitrate_upper;
#line 782 "Vorbis.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis__Info_bitrate_nominal)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::Info::bitrate_nominal(self)");
    {
	vorbis_info *	self;
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis::Info")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (vorbis_info *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis::Info");;
#line 240 "Vorbis.xs"
        RETVAL = self->bitrate_nominal;
#line 806 "Vorbis.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

XS(XS_Ogg__Vorbis__Info_bitrate_lower)
{
    dXSARGS;
    if (items != 1)
	Perl_croak(aTHX_ "Usage: Ogg::Vorbis::Info::bitrate_lower(self)");
    {
	vorbis_info *	self;
	int	RETVAL;
	dXSTARG;

        if (sv_derived_from(ST(0), "Ogg::Vorbis::Info")) {
                IV tmp = SvIV((SV*)SvRV(ST(0)));
                self = (vorbis_info *) tmp;
        }
        else
                croak("self is not of type Ogg::Vorbis::Info");;
#line 248 "Vorbis.xs"
        RETVAL = self->bitrate_lower;
#line 830 "Vorbis.c"
	XSprePUSH; PUSHi((IV)RETVAL);
    }
    XSRETURN(1);
}

#ifdef __cplusplus
extern "C"
#endif
XS(boot_Ogg__Vorbis)
{
    dXSARGS;
    char* file = __FILE__;

    XS_VERSION_BOOTCHECK ;

        newXS("Ogg::Vorbis::constant", XS_Ogg__Vorbis_constant, file);
        newXS("Ogg::Vorbis::new", XS_Ogg__Vorbis_new, file);
        newXS("Ogg::Vorbis::DESTROY", XS_Ogg__Vorbis_DESTROY, file);
        newXS("Ogg::Vorbis::clear", XS_Ogg__Vorbis_clear, file);
        newXS("Ogg::Vorbis::open", XS_Ogg__Vorbis_open, file);
        newXS("Ogg::Vorbis::streams", XS_Ogg__Vorbis_streams, file);
        newXS("Ogg::Vorbis::seekable", XS_Ogg__Vorbis_seekable, file);
        newXS("Ogg::Vorbis::bitrate", XS_Ogg__Vorbis_bitrate, file);
        newXS("Ogg::Vorbis::serialnumber", XS_Ogg__Vorbis_serialnumber, file);
        newXS("Ogg::Vorbis::bitrate_instant", XS_Ogg__Vorbis_bitrate_instant, file);
        newXS("Ogg::Vorbis::raw_total", XS_Ogg__Vorbis_raw_total, file);
        newXS("Ogg::Vorbis::pcm_total", XS_Ogg__Vorbis_pcm_total, file);
        newXS("Ogg::Vorbis::time_total", XS_Ogg__Vorbis_time_total, file);
        newXS("Ogg::Vorbis::raw_seek", XS_Ogg__Vorbis_raw_seek, file);
        newXS("Ogg::Vorbis::pcm_seek_page", XS_Ogg__Vorbis_pcm_seek_page, file);
        newXS("Ogg::Vorbis::pcm_seek", XS_Ogg__Vorbis_pcm_seek, file);
        newXS("Ogg::Vorbis::time_seek", XS_Ogg__Vorbis_time_seek, file);
        newXS("Ogg::Vorbis::time_seek_page", XS_Ogg__Vorbis_time_seek_page, file);
        newXS("Ogg::Vorbis::raw_tell", XS_Ogg__Vorbis_raw_tell, file);
        newXS("Ogg::Vorbis::pcm_tell", XS_Ogg__Vorbis_pcm_tell, file);
        newXS("Ogg::Vorbis::time_tell", XS_Ogg__Vorbis_time_tell, file);
        newXS("Ogg::Vorbis::info", XS_Ogg__Vorbis_info, file);
        newXS("Ogg::Vorbis::comment", XS_Ogg__Vorbis_comment, file);
        newXS("Ogg::Vorbis::read", XS_Ogg__Vorbis_read, file);
        newXS("Ogg::Vorbis::Info::version", XS_Ogg__Vorbis__Info_version, file);
        newXS("Ogg::Vorbis::Info::channels", XS_Ogg__Vorbis__Info_channels, file);
        newXS("Ogg::Vorbis::Info::rate", XS_Ogg__Vorbis__Info_rate, file);
        newXS("Ogg::Vorbis::Info::bitrate_upper", XS_Ogg__Vorbis__Info_bitrate_upper, file);
        newXS("Ogg::Vorbis::Info::bitrate_nominal", XS_Ogg__Vorbis__Info_bitrate_nominal, file);
        newXS("Ogg::Vorbis::Info::bitrate_lower", XS_Ogg__Vorbis__Info_bitrate_lower, file);
    XSRETURN_YES;
}

