view src/sun/sun.h @ 2284:d19b53359b24

cleaned up the sndfile wav plugin, currently limiting it ONLY TO WAV PLAYBACK. if somebody is more experienced with it and wants to restore the other formats, go ahead (maybe change the name of the plugin too?).
author mf0102 <0102@gmx.at>
date Wed, 09 Jan 2008 15:41:22 +0100
parents 2ebeb7816c5e
children 41c619e96a17
line wrap: on
line source

/*
 *  Copyright (C) 2001  CubeSoft Communications, Inc.
 *  <http://www.csoft.org>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program 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 General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

#include "config.h"

#include <gtk/gtk.h>

#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/time.h>

#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>

#include "audioio.h"

#include <audacious/plugin.h>
#include <audacious/configdb.h>

/* Default path to audio device. */
#ifndef SUN_DEV_AUDIO
#define SUN_DEV_AUDIO "/dev/audio"
#endif

/* Default path to audioctl device */
#ifndef SUN_DEV_AUDIOCTL
#define SUN_DEV_AUDIOCTL "/dev/audioctl"
#endif

/* Default path to mixer device */
#ifndef SUN_DEV_MIXER
#define SUN_DEV_MIXER "/dev/mixer"
#endif

/* Default mixer device to control */
#ifndef SUN_DEFAULT_VOLUME_DEV
#define SUN_DEFAULT_VOLUME_DEV "dac"
#endif

/* Default hardware block size */
#ifndef SUN_DEFAULT_BLOCKSIZE
#define SUN_DEFAULT_BLOCKSIZE 8800
#endif

/* Default `requested' buffer size */
#ifndef SUN_DEFAULT_BUFFER_SIZE
#define SUN_DEFAULT_BUFFER_SIZE 8800
#endif

/* Minimum total buffer size */
#ifndef SUN_MIN_BUFFER_SIZE
#define SUN_MIN_BUFFER_SIZE 14336
#endif

/* Default prebuffering (%) */
#ifndef SUN_DEFAULT_PREBUFFER_SIZE
#define SUN_DEFAULT_PREBUFFER_SIZE 25
#endif

#define SUN_VERSION "0.6"

struct sun_format {
	char	name[16];
	union {
		AFormat	xmms;
		gint	sun;
	} format;
	int	frequency;
	int	channels;
	int	bps;
};

struct sun_audio {
	struct	sun_format *input;
	struct	sun_format *output;
	struct	sun_format *effect;

	gchar	*devaudio;
	gchar	*devaudioctl;
	gchar	*devmixer;
	gchar	*mixer_voldev;

	gint	fd;
	gint	mixerfd;

	gboolean mixer_keepopen;

	gboolean going;
	gboolean paused;
	gboolean unpause, do_pause;

	gint	req_prebuffer_size;
	gint	req_buffer_size;

	pthread_mutex_t	mixer_mutex;
};

struct sun_statsframe {
	int	fd;
	int	active;

	GtkWidget	*mode_label;
	GtkWidget	*blocksize_label;
	GtkWidget	*ooffs_label;
	pthread_mutex_t	audioctl_mutex;
	pthread_mutex_t	active_mutex;
};

extern	OutputPlugin	op;

extern struct sun_audio		audio;
extern struct sun_statsframe	stats_frame;

void	 sun_init(void);
void	 sun_about(void);
void	 sun_configure(void);
void	 sun_cleanup(void);

gint	 sun_open(AFormat, int, int);
void	 sun_write(void *, int);
void	 sun_close(void);
void	 sun_flush(int);
void	 sun_pause(short);
gint	 sun_free(void);
gint	 sun_playing(void);
gint	 sun_output_time(void);
gint	 sun_written_time(void);
void	 sun_get_volume(int *, int *);
void	 sun_set_volume(int, int);
void	*sun_get_convert_buffer(size_t);
int	(*sun_get_convert_func(int, int))(void **, int);

#ifdef WORDS_BIGENDIAN
#define IS_BIG_ENDIAN TRUE
#else
#define IS_BIG_ENDIAN FALSE
#endif