Exemplo n.º 1
0
static int init(int rate_hz, int channels, int format, int flags)
{
	int err;
	int frag_spec;

	if( (err=arts_init()) ) {
		mp_msg(MSGT_AO, MSGL_ERR, MSGTR_AO_ARTS_CantInit, arts_error_text(err));
		return 0;
	}
	mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_ARTS_ServerConnect);

	/*
	 * arts supports 8bit unsigned and 16bit signed sample formats
	 * (16bit apparently in little endian format, even in the case
	 * when artsd runs on a big endian cpu).
	 *
	 * Unsupported formats are translated to one of these two formats
	 * using mplayer's audio filters.
	 */
	switch (format) {
	case AF_FORMAT_U8:
	case AF_FORMAT_S8:
	    format = AF_FORMAT_U8;
	    break;
	default:
	    format = AF_FORMAT_S16_LE;    /* artsd always expects little endian?*/
	    break;
	}

	ao_data.format = format;
	ao_data.channels = channels;
	ao_data.samplerate = rate_hz;
	ao_data.bps = (rate_hz*channels);

	if(format != AF_FORMAT_U8 && format != AF_FORMAT_S8)
		ao_data.bps*=2;

	stream=arts_play_stream(rate_hz, OBTAIN_BITRATE(format), channels, "MPlayer");

	if(stream == NULL) {
		mp_msg(MSGT_AO, MSGL_ERR, MSGTR_AO_ARTS_CantOpenStream);
		arts_free();
		return 0;
	}

	/* Set the stream to blocking: it will not block anyway, but it seems */
	/* to be working better */
	arts_stream_set(stream, ARTS_P_BLOCKING, 1);
	frag_spec = ARTS_PACKET_SIZE_LOG2 | ARTS_PACKETS << 16;
	arts_stream_set(stream, ARTS_P_PACKET_SETTINGS, frag_spec);
	ao_data.buffersize = arts_stream_get(stream, ARTS_P_BUFFER_SIZE);
	mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_ARTS_StreamOpen);

	mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_ARTS_BufferSize,
	    ao_data.buffersize);
	mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_ARTS_BufferSize,
	    arts_stream_get(stream, ARTS_P_PACKET_SIZE));

	return 1;
}
Exemplo n.º 2
0
static void close_output(void)
{
    if(stream == 0)
	return;
    arts_close_stream(stream);
    arts_free();
    arts_init_state = 2;
    stream = 0;
}
Exemplo n.º 3
0
static void arts_dsp_destroy(struct sysdep_dsp_struct *dsp)
{
   struct arts_dsp_priv_data *priv = dsp->_priv;
   if(priv)
   {
	   arts_close_stream(priv->stream);
	   arts_free();
	   free(priv);
   }
   free(dsp);
}
Exemplo n.º 4
0
static void
gst_artsdsink_close_audio (GstArtsdsink * sink)
{
  if (!sink->connected)
    return;

  arts_close_stream (sink->stream);
  arts_free ();
  GST_OBJECT_FLAG_UNSET (sink, GST_ARTSDSINK_OPEN);
  sink->connected = FALSE;

  g_print ("artsdsink: closed connection\n");
}
Exemplo n.º 5
0
/* close sound device or disconnect from aRts server */
void audio_exit(audio_dev_handle* handle)
{
#ifdef HAS_ARTS
    if(handle->use_arts)
    {
        arts_close_stream(handle->arts_handle);
        arts_free();
    }
    else
#endif
    {
        snd_pcm_close(handle->alsa_handle);
    }
}
Exemplo n.º 6
0
static void uninit(int immed)
{
	arts_close_stream(stream);
	arts_free();
}
Exemplo n.º 7
0
Arquivo: arts.c Projeto: jolange/cmus
static int op_arts_exit(void)
{
	arts_free();
	return 0;
}