[vlc-commits] DirectSound: merge memory allocation for sys and notif
Rémi Denis-Courmont
git at videolan.org
Wed Feb 1 22:42:37 CET 2012
vlc/vlc-2.0 | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Feb 1 20:23:20 2012 +0200| [857038adb6aff846e31d0ee88e5b0589e40d6a59] | committer: Jean-Baptiste Kempf
DirectSound: merge memory allocation for sys and notif
This removes one error case and simplifies a bit.
(cherry picked from commit f09289e8b2759fb02bad580c3a47d305f3ea1fc3)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=857038adb6aff846e31d0ee88e5b0589e40d6a59
---
modules/audio_output/directx.c | 50 +++++++++++++++------------------------
1 files changed, 19 insertions(+), 31 deletions(-)
diff --git a/modules/audio_output/directx.c b/modules/audio_output/directx.c
index a44a0dc..6a69b04 100644
--- a/modules/audio_output/directx.c
+++ b/modules/audio_output/directx.c
@@ -44,7 +44,6 @@
*****************************************************************************/
typedef struct notification_thread_t
{
- audio_output_t *p_aout;
int i_frame_size; /* size in bytes of one frame */
int i_write_slot; /* current write position in our circular buffer */
@@ -75,7 +74,7 @@ struct aout_sys_t
* takes care of mixing all the
* secondary buffers into the primary) */
- notification_thread_t *p_notif; /* DirectSoundThread id */
+ notification_thread_t notif; /* DirectSoundThread id */
int i_frame_size; /* Size in bytes of one frame */
@@ -290,28 +289,20 @@ static int OpenAudio( vlc_object_t *p_this )
}
/* Now we need to setup our DirectSound play notification structure */
- p_aout->sys->p_notif = calloc( 1, sizeof( *p_aout->sys->p_notif ) );
- if( unlikely( !p_aout->sys->p_notif ) )
- {
- CloseAudio( VLC_OBJECT(p_aout) );
- return VLC_ENOMEM;
- }
- p_aout->sys->p_notif->p_aout = p_aout;
-
- vlc_atomic_set(&p_aout->sys->p_notif->abort, 0);
- p_aout->sys->p_notif->event = CreateEvent( 0, FALSE, FALSE, 0 );
- p_aout->sys->p_notif->i_frame_size = p_aout->sys->i_frame_size;
+ vlc_atomic_set(&p_aout->sys->notif.abort, 0);
+ p_aout->sys->notif.event = CreateEvent( 0, FALSE, FALSE, 0 );
+ if( unlikely(p_aout->sys->notif.event == NULL) )
+ abort();
+ p_aout->sys->notif.i_frame_size = p_aout->sys->i_frame_size;
/* then launch the notification thread */
msg_Dbg( p_aout, "creating DirectSoundThread" );
- if( vlc_clone( &p_aout->sys->p_notif->thread,
- DirectSoundThread, p_aout->sys->p_notif,
+ if( vlc_clone( &p_aout->sys->notif.thread, DirectSoundThread, p_aout,
VLC_THREAD_PRIORITY_HIGHEST ) )
{
msg_Err( p_aout, "cannot create DirectSoundThread" );
- CloseHandle( p_aout->sys->p_notif->event );
- free( p_aout->sys->p_notif );
- p_aout->sys->p_notif = NULL;
+ CloseHandle( p_aout->sys->notif.event );
+ p_aout->sys->notif.event = NULL;
CloseAudio( VLC_OBJECT(p_aout) );
return VLC_EGENERIC;
}
@@ -569,13 +560,13 @@ static void Probe( audio_output_t * p_aout )
static void Play( audio_output_t *p_aout, block_t *p_buffer )
{
/* get the playing date of the first aout buffer */
- p_aout->sys->p_notif->start_date = p_buffer->i_pts;
+ p_aout->sys->notif.start_date = p_buffer->i_pts;
/* fill in the first samples (zeroes) */
FillBuffer( p_aout, 0, NULL );
/* wake up the audio output thread */
- SetEvent( p_aout->sys->p_notif->event );
+ SetEvent( p_aout->sys->notif.event );
aout_PacketPlay( p_aout, p_buffer );
p_aout->pf_play = aout_PacketPlay;
@@ -599,15 +590,15 @@ static void CloseAudioCommon( vlc_object_t *p_this )
msg_Dbg( p_aout, "closing audio device" );
/* kill the position notification thread, if any */
- if( p_sys->p_notif )
+ if( p_sys->notif.event != NULL )
{
- vlc_atomic_set(&p_aout->sys->p_notif->abort, 1);
+ vlc_atomic_set(&p_aout->sys->notif.abort, 1);
/* wake up the audio thread if needed */
if( p_aout->pf_play == Play )
- SetEvent( p_sys->p_notif->event );
+ SetEvent( p_sys->notif.event );
- vlc_join( p_sys->p_notif->thread, NULL );
- free( p_sys->p_notif );
+ vlc_join( p_sys->notif.thread, NULL );
+ CloseHandle( p_sys->notif.event );
}
/* release the secondary buffer */
@@ -938,8 +929,8 @@ static void DestroyDSBuffer( audio_output_t *p_aout )
static int FillBuffer( audio_output_t *p_aout, int i_frame,
aout_buffer_t *p_buffer )
{
- notification_thread_t *p_notif = p_aout->sys->p_notif;
aout_sys_t *p_sys = p_aout->sys;
+ notification_thread_t *p_notif = &p_sys->notif;
void *p_write_position, *p_wrap_around;
unsigned long l_bytes1, l_bytes2;
HRESULT dsresult;
@@ -1008,8 +999,8 @@ static int FillBuffer( audio_output_t *p_aout, int i_frame,
*****************************************************************************/
static void* DirectSoundThread( void *data )
{
- notification_thread_t *p_notif = (notification_thread_t*)data;
- audio_output_t *p_aout = p_notif->p_aout;
+ audio_output_t *p_aout = (audio_output_t *)data;
+ notification_thread_t *p_notif = &p_aout->sys->notif;
mtime_t last_time;
int canc = vlc_savecancel ();
@@ -1101,9 +1092,6 @@ static void* DirectSoundThread( void *data )
/* make sure the buffer isn't playing */
IDirectSoundBuffer_Stop( p_aout->sys->p_dsbuffer );
- /* free the event */
- CloseHandle( p_notif->event );
-
vlc_restorecancel (canc);
msg_Dbg( p_aout, "DirectSoundThread exiting" );
return NULL;
More information about the vlc-commits
mailing list