void (* pf_flush)( audio_output_t *, bool ); /**< Flush/drain callback
(optional, may be NULL) */
aout_volume_cb pf_volume_set; /**< Volume setter (or NULL) */
- int i_nb_samples;
};
/**
add_shortcut( "dummy" )
vlc_module_end ()
-#define FRAME_SIZE 2048
#define A52_FRAME_NB 1536
/*****************************************************************************
}
else
p_aout->format.i_format = HAVE_FPU ? VLC_CODEC_FL32 : VLC_CODEC_S16N;
- p_aout->i_nb_samples = A52_FRAME_NB;
/* Create the variable for the audio-device */
var_Create( p_aout, "audio-device", VLC_VAR_INTEGER | VLC_VAR_HASCHOICE );
*****************************************************************************/
struct aout_sys_t
{
+ aout_packet_t packet;
snd_pcm_t * p_snd_pcm;
unsigned int i_period_time;
pcm_format = SND_PCM_FORMAT_S16;
channels = 2;
- p_aout->i_nb_samples = i_period_size = ALSA_SPDIF_PERIOD_SIZE;
+ i_period_size = ALSA_SPDIF_PERIOD_SIZE;
p_aout->format.i_bytes_per_frame = AOUT_SPDIF_SIZE;
p_aout->format.i_frame_length = A52_FRAME_NB;
i_buffer_size = ALSA_DEFAULT_BUFFER_SIZE;
channels = aout_FormatNbChannels( &p_aout->format );
- p_aout->i_nb_samples = i_period_size = ALSA_DEFAULT_PERIOD_SIZE;
+ i_period_size = ALSA_DEFAULT_PERIOD_SIZE;
aout_VolumeSoftInit( p_aout );
}
snd_strerror( val ) );
goto error;
}
- p_aout->i_nb_samples = i_period_size;
/* Set buffer size. */
val = snd_pcm_hw_params_set_buffer_size_near( p_sys->p_snd_pcm, p_hw,
/* Get Initial software parameters */
snd_pcm_sw_params_current( p_sys->p_snd_pcm, p_sw );
- snd_pcm_sw_params_set_avail_min( p_sys->p_snd_pcm, p_sw,
- p_aout->i_nb_samples );
+ snd_pcm_sw_params_set_avail_min( p_sys->p_snd_pcm, p_sw, i_period_size );
/* start playing when one period has been written */
val = snd_pcm_sw_params_set_start_threshold( p_sys->p_snd_pcm, p_sw,
ALSA_DEFAULT_PERIOD_SIZE);
p_sys->start_date = 0;
vlc_sem_init( &p_sys->wait, 0 );
+ aout_PacketInit (p_aout, &p_sys->packet, i_period_size);
/* Create ALSA thread and wait for its readiness. */
if( vlc_clone( &p_sys->thread, ALSAThread, p_aout,
vlc_cancel( p_sys->thread );
vlc_join( p_sys->thread, NULL );
vlc_sem_destroy( &p_sys->wait );
+ aout_PacketDestroy (p_aout);
snd_pcm_drop( p_sys->p_snd_pcm );
snd_pcm_close( p_sys->p_snd_pcm );
#include <AudioToolBox/AudioToolBox.h>
-#define FRAME_SIZE 2048
#define NUMBER_OF_BUFFERS 3
/*****************************************************************************
*****************************************************************************/
struct aout_sys_t
{
+ aout_packet_t packet;
AudioQueueRef audioQueue;
};
p_aout->format.i_format = VLC_CODEC_S16L;
p_aout->format.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
p_aout->format.i_rate = 44100;
- p_aout->format.i_nb_samples = FRAME_SIZE;
+ aout_PacketInit(p_aout, &p_sys->packet, FRAME_SIZE);
p_aout->pf_play = aout_PacketPlay;
p_aout->pf_pause = aout_PacketPause;
p_aout->pf_flush = aout_PacketFlush;
AudioQueueStop(p_sys->audioQueue, false);
msg_Dbg(p_aout, "Disposing of AudioQueue");
AudioQueueDispose(p_sys->audioQueue, false);
+ aout_PacketDestroy(p_aout);
free (p_sys);
}
*****************************************************************************/
struct aout_sys_t
{
+ aout_packet_t packet;
AudioDeviceID i_default_dev; /* Keeps DeviceID of defaultOutputDevice */
AudioDeviceID i_selected_dev; /* Keeps DeviceID of the selected device */
AudioDeviceIOProcID i_procID; /* DeviceID of current device */
/* Do the last VLC aout setups */
aout_FormatPrepare( &p_aout->format );
- p_aout->i_nb_samples = FRAMESIZE;
+ aout_PacketInit( p_aout, &p_sys->packet, FRAMESIZE );
aout_VolumeSoftInit( p_aout );
/* set the IOproc callback */
p_aout->format.i_format = VLC_CODEC_SPDIFL;
p_aout->format.i_bytes_per_frame = AOUT_SPDIF_SIZE;
p_aout->format.i_frame_length = A52_FRAME_NB;
- p_aout->i_nb_samples = p_aout->format.i_frame_length;
p_aout->format.i_rate = (unsigned int)p_sys->stream_format.mSampleRate;
aout_FormatPrepare( &p_aout->format );
+ aout_PacketInit( p_aout, &p_sys->packet, A52_FRAME_NB );
aout_VolumeNoneInit( p_aout );
/* Add IOProc callback */
if( err != noErr ) msg_Err( p_aout, "Could not release hogmode: [%4.4s]", (char *)&err );
}
+ aout_PacketDestroy( p_aout );
free( p_sys );
}
*****************************************************************************/
struct aout_sys_t
{
+ aout_packet_t packet;
HINSTANCE hdsound_dll; /* handle of the opened dsound dll */
char * psz_device; /* user defined device name */
p_aout->format.i_format = VLC_CODEC_SPDIFL;
/* Calculate the frame size in bytes */
- p_aout->i_nb_samples = A52_FRAME_NB;
p_aout->format.i_bytes_per_frame = AOUT_SPDIF_SIZE;
p_aout->format.i_frame_length = A52_FRAME_NB;
p_aout->sys->i_frame_size = p_aout->format.i_bytes_per_frame;
return VLC_EGENERIC;
}
+ aout_PacketInit( p_aout, &p_sys->packet, A52_FRAME_NB );
aout_VolumeNoneInit( p_aout );
}
else
}
/* Calculate the frame size in bytes */
- p_aout->i_nb_samples = FRAME_SIZE;
aout_FormatPrepare( &p_aout->format );
+ aout_PacketInit( p_aout, &p_sys->packet, FRAME_SIZE );
aout_VolumeSoftInit( p_aout );
}
if( p_sys->hdsound_dll ) FreeLibrary( p_sys->hdsound_dll );
free( p_aout->sys->p_device_guid );
+ aout_PacketDestroy( p_aout );
free( p_sys );
}
{
DWORD l_read;
int l_queued = 0, l_free_slots;
- unsigned i_frame_siz = p_aout->i_nb_samples;
+ unsigned i_frame_siz = p_sys->packet.samples;
mtime_t mtime = mdate();
int i;
#include <vlc_codecs.h> /* WAVEHEADER */
#include <vlc_fs.h>
-#define FRAME_SIZE 2048
#define A52_FRAME_NB 1536
/*****************************************************************************
p_aout->format.i_format = format_int[i];
if ( AOUT_FMT_NON_LINEAR( &p_aout->format ) )
{
- p_aout->i_nb_samples = A52_FRAME_NB;
p_aout->format.i_bytes_per_frame = AOUT_SPDIF_SIZE;
p_aout->format.i_frame_length = A52_FRAME_NB;
aout_VolumeNoneInit( p_aout );
}
else
- {
- p_aout->i_nb_samples = FRAME_SIZE;
aout_VolumeSoftInit( p_aout );
- }
/* Channels number */
i_channels = var_CreateGetInteger( p_this, "audiofile-channels" );
*****************************************************************************/
struct aout_sys_t
{
+ aout_packet_t packet;
jack_client_t *p_jack_client;
jack_port_t **p_jack_ports;
jack_sample_t **p_jack_buffers;
p_aout->pf_play = aout_PacketPlay;
p_aout->pf_pause = aout_PacketPause;
p_aout->pf_flush = aout_PacketFlush;
+ aout_PacketInit( p_aout, &p_sys->packet,
+ jack_get_buffer_size( p_sys->p_jack_client ) );
aout_VolumeSoftInit( p_aout );
/* JACK only supports fl32 format */
p_aout->format.i_format = VLC_CODEC_FL32;
// TODO add buffer size callback
- p_aout->i_nb_samples = jack_get_buffer_size( p_sys->p_jack_client );
p_aout->format.i_rate = jack_get_sample_rate( p_sys->p_jack_client );
p_sys->i_channels = aout_FormatNbChannels( &p_aout->format );
free( pp_in_ports );
}
- msg_Dbg( p_aout, "JACK audio output initialized (%d channels, buffer "
- "size=%d, rate=%d)", p_sys->i_channels,
- p_aout->i_nb_samples, p_aout->format.i_rate );
+ msg_Dbg( p_aout, "JACK audio output initialized (%d channels, rate=%d)",
+ p_sys->i_channels, p_aout->format.i_rate );
error_out:
/* Clean up, if an error occurred */
}
free( p_sys->p_jack_ports );
free( p_sys->p_jack_buffers );
+ aout_PacketDestroy( p_aout );
free( p_sys );
}
// we want 16bit signed data little endian.
p_aout->format.i_format = VLC_CODEC_S16L;
- p_aout->i_nb_samples = 2048;
p_aout->format.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
p_aout->pf_play = Play;
p_aout->pf_pause = NULL;
*****************************************************************************/
struct aout_sys_t
{
+ aout_packet_t packet;
int i_fd;
int i_fragstotal;
mtime_t max_buffer_duration;
}
p_aout->format.i_format = VLC_CODEC_SPDIFL;
- p_aout->i_nb_samples = A52_FRAME_NB;
p_aout->format.i_bytes_per_frame = AOUT_SPDIF_SIZE;
p_aout->format.i_frame_length = A52_FRAME_NB;
+ aout_PacketInit( p_aout, &p_sys->packet, A52_FRAME_NB );
aout_VolumeNoneInit( p_aout );
}
free( p_sys );
return VLC_EGENERIC;
}
- else
- {
- /* Number of fragments actually allocated */
- p_aout->sys->i_fragstotal = audio_buf.fragstotal;
- /* Maximum duration the soundcard's buffer can hold */
- p_aout->sys->max_buffer_duration =
+ /* Number of fragments actually allocated */
+ p_aout->sys->i_fragstotal = audio_buf.fragstotal;
+
+ /* Maximum duration the soundcard's buffer can hold */
+ p_aout->sys->max_buffer_duration =
(mtime_t)audio_buf.fragstotal * audio_buf.fragsize * 1000000
/ p_aout->format.i_bytes_per_frame
/ p_aout->format.i_rate
* p_aout->format.i_frame_length;
- p_aout->i_nb_samples = audio_buf.fragsize /
- p_aout->format.i_bytes_per_frame;
- }
-
+ aout_PacketInit( p_aout, &p_sys->packet,
+ audio_buf.fragsize/p_aout->format.i_bytes_per_frame );
aout_VolumeSoftInit( p_aout );
}
ioctl( p_sys->i_fd, SNDCTL_DSP_RESET, NULL );
close( p_sys->i_fd );
+ aout_PacketDestroy( p_aout );
free( p_sys );
}
struct aout_sys_t
{
+ aout_packet_t packet;
audio_output_t *p_aout;
PaStream *p_stream;
#endif
msg_Dbg( p_aout, "portaudio closed");
+ aout_PacketDestroy( p_aout );
free( p_sys );
}
/* Calculate the frame size in bytes */
p_sys->i_sample_size = 4 * i_channels;
- p_aout->i_nb_samples = FRAME_SIZE;
aout_FormatPrepare( &p_aout->format );
+ aout_PacketInit( p_aout, &p_sys->packet, FRAME_SIZE );
aout_VolumeSoftInit( p_aout );
/* Check for channel reordering */
"prebuf=%u, minreq=%u",
pba->maxlength, pba->tlength, pba->prebuf, pba->minreq);
- aout->i_nb_samples = pba->minreq / pa_frame_size(&ss);
-
var_Create(aout, "audio-device", VLC_VAR_INTEGER|VLC_VAR_HASCHOICE);
var_Change(aout, "audio-device", VLC_VAR_SETTEXT,
&(vlc_value_t){ .psz_string = (char *)_("Audio device") },
*****************************************************************************/
struct aout_sys_t
{
+ aout_packet_t packet;
uint32_t i_wave_device_id; /* ID of selected output device */
HWAVEOUT h_waveout; /* handle to waveout instance */
}
/* Calculate the frame size in bytes */
- p_aout->i_nb_samples = A52_FRAME_NB;
p_aout->format.i_bytes_per_frame = AOUT_SPDIF_SIZE;
p_aout->format.i_frame_length = A52_FRAME_NB;
p_aout->sys->i_buffer_size =
p_aout->format.i_bytes_per_frame;
+ aout_PacketInit( p_aout, &p_aout->p_sys->packet, A52_FRAME_NB );
aout_VolumeNoneInit( p_aout );
}
else
}
/* Calculate the frame size in bytes */
- p_aout->i_nb_samples = FRAME_SIZE;
aout_FormatPrepare( &p_aout->format );
p_aout->sys->i_buffer_size = FRAME_SIZE *
p_aout->format.i_bytes_per_frame;
+ aout_PacketInit( p_aout, &p_aout->p_sys->packet, FRAME_SIZE );
aout_VolumeSoftInit( p_aout );
/* Check for hardware volume support */
CloseHandle( p_sys->new_buffer_event);
free( p_sys->p_silence_buffer );
+ aout_PacketDestroy( p_aout );
free( p_sys );
}
/* Filters between mixer and output */
filter_t *filters[AOUT_MAX_FILTERS];
int nb_filters;
-
- aout_packet_t packet;
} aout_owner_t;
typedef struct
aout_FormatPrepare( &p_aout->format );
aout_FormatPrint( p_aout, "output", &p_aout->format );
- /* Prepare FIFO. */
- aout_PacketInit (p_aout, &owner->packet, p_aout->i_nb_samples);
-
/* Choose the mixer format. */
owner->mixer_format = p_aout->format;
if (AOUT_FMT_NON_LINEAR(&p_aout->format))
aout_VolumeNoneInit( p_aout ); /* clear volume callback */
owner->module = NULL;
aout_FiltersDestroyPipeline (owner->filters, owner->nb_filters);
- aout_PacketDestroy (p_aout);
}
/*****************************************************************************
static inline aout_packet_t *aout_packet (audio_output_t *aout)
{
- aout_owner_t *owner = aout_owner (aout);
- return &owner->packet;
+ return (aout_packet_t *)(aout->sys);
}
void aout_PacketInit (audio_output_t *aout, aout_packet_t *p, unsigned samples)
{
aout_packet_t *p = aout_packet (p_aout);
aout_fifo_t *p_fifo = &p->partial;
- const unsigned samples = p_aout->i_nb_samples;
- /* FIXME: Remove this silly constraint. Just pass buffers as they come to
- * "smart" audio outputs. */
+ const unsigned samples = p->samples;
assert( samples > 0 );
vlc_assert_locked( &p_aout->lock );
aout_FormatPrint
aout_FormatPrintChannels
aout_OutputNextBuffer
+aout_PacketInit
+aout_PacketDestroy
aout_PacketPlay
aout_PacketPause
aout_PacketFlush