[vlc-commits] sndio: allocate sys structure
Rémi Denis-Courmont
git at videolan.org
Thu Jul 19 21:37:42 CEST 2012
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Jul 19 22:19:03 2012 +0300| [a8ca319f3bc8c57ca006a00c5857ecc03689be74] | committer: Rémi Denis-Courmont
sndio: allocate sys structure
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a8ca319f3bc8c57ca006a00c5857ecc03689be74
---
modules/audio_output/sndio.c | 43 +++++++++++++++++++++++++-----------------
1 file changed, 26 insertions(+), 17 deletions(-)
diff --git a/modules/audio_output/sndio.c b/modules/audio_output/sndio.c
index 98637b2..c5fea8c 100644
--- a/modules/audio_output/sndio.c
+++ b/modules/audio_output/sndio.c
@@ -45,17 +45,27 @@ vlc_module_end ()
static void Play (audio_output_t *, block_t *);
static void Pause (audio_output_t *, bool, mtime_t);
+struct aout_sys_t
+{
+ struct sio_hdl *hdl;
+};
+
/** Initializes an sndio playback stream */
static int Open (vlc_object_t *obj)
{
audio_output_t *aout = (audio_output_t *)obj;
+ aout_sys_t *sys = malloc (sizeof (*sys));
+ if (unlikely(sys == NULL))
+ return VLC_EGENERIC;
- struct sio_hdl *sio = sio_open (NULL, SIO_PLAY, 0 /* blocking */);
- if (sio == NULL)
+ sys->hdl = sio_open (NULL, SIO_PLAY, 0 /* blocking */);
+ if (sys->hdl == NULL)
{
msg_Err (obj, "cannot create audio playback stream");
+ free (sys);
return VLC_EGENERIC;
}
+ aout->sys = sys;
struct sio_par par;
sio_initpar (&par);
@@ -67,7 +77,7 @@ static int Open (vlc_object_t *obj)
par.rate = aout->format.i_rate;
par.xrun = SIO_SYNC;
- if (!sio_setpar (sio, &par) || !sio_getpar (sio, &par))
+ if (!sio_setpar (sys->hdl, &par) || !sio_getpar (sys->hdl, &par))
{
msg_Err (obj, "cannot negotiate audio playback parameters");
goto error;
@@ -135,36 +145,35 @@ static int Open (vlc_object_t *obj)
aout_FormatPrepare (&f);
aout->format = f;
- aout->sys = (void *)sio;
+ aout->sys = sys;
aout->pf_play = Play;
aout->pf_pause = Pause;
aout->pf_flush = NULL; /* sndio sucks! */
/* TODO: sio_setvol()/sio_onvol() */
- aout->volume_set = NULL;
- aout->mute_set = NULL;
- sio_start (sio);
+ sio_start (sys->hdl);
return VLC_SUCCESS;
error:
- sio_close (sio);
+ Close (obj);
return VLC_EGENERIC;
}
static void Close (vlc_object_t *obj)
{
audio_output_t *aout = (audio_output_t *)obj;
- struct sio_hdl *sio = (void *)aout->sys;
+ aout_sys_t *sys = aout->sys;
- sio_close (sio);
+ sio_close (sys->hdl);
+ free (sys);
}
static void Play (audio_output_t *aout, block_t *block)
{
- struct sio_hdl *sio = (void *)aout->sys;
+ aout_sys_t *sys = aout->sys;
struct sio_par par;
- if (sio_getpar (sio, &par) == 0)
+ if (sio_getpar (sys->hdl, &par) == 0)
{
mtime_t delay = par.bufsz * CLOCK_FREQ / aout->format.i_rate;
@@ -172,9 +181,9 @@ static void Play (audio_output_t *aout, block_t *block)
aout_TimeReport (aout, block->i_pts - delay);
}
- while (block->i_buffer > 0 && !sio_eof (sio))
+ while (block->i_buffer > 0 && !sio_eof (sys->hdl))
{
- size_t bytes = sio_write (sio, block->p_buffer, block->i_buffer);
+ size_t bytes = sio_write (sys->hdl, block->p_buffer, block->i_buffer);
block->p_buffer += bytes;
block->i_buffer -= bytes;
@@ -185,11 +194,11 @@ static void Play (audio_output_t *aout, block_t *block)
static void Pause (audio_output_t *aout, bool pause, mtime_t date)
{
- struct sio_hdl *sio = (void *)aout->sys;
+ aout_sys_t *sys = aout->sys;
if (pause)
- sio_stop (sio);
+ sio_stop (sys->hdl);
else
- sio_start (sio);
+ sio_start (sys->hdl);
(void) date;
}
More information about the vlc-commits
mailing list