vlc | branch: master | Felix Paul Kühne <[email protected]> | Wed Feb 15 20:19:18 2012 +0100| [43cbb735cf5afa66d8193bfe03a614ef7de45286] | committer: Felix Paul Kühne
macosx: prevent pseudo-random crashes on quit found by Rafael we do 2 things: check whether the interface is still alive when calling libvlccore stuff. additionally, we store the interface pointer instead of using VLCIntf twice to save a 1 objc selector call, which saves quite a bit of CPU time. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=43cbb735cf5afa66d8193bfe03a614ef7de45286 --- modules/gui/macosx/CoreInteraction.m | 112 +++++++++++++++++++++++++-------- 1 files changed, 85 insertions(+), 27 deletions(-) diff --git a/modules/gui/macosx/CoreInteraction.m b/modules/gui/macosx/CoreInteraction.m index d552f79..3a7f1be 100644 --- a/modules/gui/macosx/CoreInteraction.m +++ b/modules/gui/macosx/CoreInteraction.m @@ -118,8 +118,12 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (void)toggleRecord { + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + input_thread_t * p_input; - p_input = pl_CurrentInput( VLCIntf ); + p_input = pl_CurrentInput( p_intf ); if( p_input ) { var_ToggleBool( p_input, "record" ); @@ -142,8 +146,12 @@ static VLCCoreInteraction *_o_sharedInstance = nil; { float f_rate; + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return 0; + input_thread_t * p_input; - p_input = pl_CurrentInput( VLCIntf ); + p_input = pl_CurrentInput( p_intf ); if (p_input) { f_rate = var_GetFloat( p_input, "rate" ); @@ -179,7 +187,11 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (BOOL)isPlaying { - input_thread_t * p_input = pl_CurrentInput( VLCIntf ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return NO; + + input_thread_t * p_input = pl_CurrentInput( p_intf ); if (!p_input) return NO; @@ -216,7 +228,11 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (int)durationOfCurrentPlaylistItem { - input_thread_t * p_input = pl_CurrentInput( VLCIntf ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return 0; + + input_thread_t * p_input = pl_CurrentInput( p_intf ); int64_t i_duration = -1; if (!p_input) return i_duration; @@ -229,7 +245,11 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (NSURL*)URLOfCurrentPlaylistItem { - input_thread_t *p_input = pl_CurrentInput( VLCIntf ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return nil; + + input_thread_t *p_input = pl_CurrentInput( p_intf ); if (!p_input) return nil; input_item_t *p_item = input_GetItem( p_input ); @@ -255,7 +275,11 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (NSString*)nameOfCurrentPlaylistItem { - input_thread_t *p_input = pl_CurrentInput( VLCIntf ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return nil; + + input_thread_t *p_input = pl_CurrentInput( p_intf ); if (!p_input) return nil; input_item_t *p_item = input_GetItem( p_input ); @@ -347,8 +371,12 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (void)shuffle { + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + vlc_value_t val; - playlist_t * p_playlist = pl_Get( VLCIntf ); + playlist_t * p_playlist = pl_Get( p_intf ); vout_thread_t *p_vout = getVout(); var_Get( p_playlist, "random", &val ); @@ -376,7 +404,11 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (void)repeatAll { - playlist_t * p_playlist = pl_Get( VLCIntf ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + + playlist_t * p_playlist = pl_Get( p_intf ); var_SetBool( p_playlist, "repeat", NO ); var_SetBool( p_playlist, "loop", YES ); @@ -393,7 +425,11 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (void)repeatOne { - playlist_t * p_playlist = pl_Get( VLCIntf ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + + playlist_t * p_playlist = pl_Get( p_intf ); var_SetBool( p_playlist, "repeat", YES ); var_SetBool( p_playlist, "loop", NO ); @@ -410,7 +446,11 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (void)repeatOff { - playlist_t * p_playlist = pl_Get( VLCIntf ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + + playlist_t * p_playlist = pl_Get( p_intf ); var_SetBool( p_playlist, "repeat", NO ); var_SetBool( p_playlist, "loop", NO ); @@ -427,46 +467,61 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (void)volumeUp { - playlist_t * p_playlist = pl_Get( VLCIntf ); - aout_VolumeUp( p_playlist, 1, NULL ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + + aout_VolumeUp( pl_Get( p_intf ), 1, NULL ); } - (void)volumeDown { - playlist_t * p_playlist = pl_Get( VLCIntf ); - aout_VolumeDown( p_playlist, 1, NULL ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + + aout_VolumeDown( pl_Get( p_intf ), 1, NULL ); } - (void)mute { - playlist_t * p_playlist = pl_Get( VLCIntf ); - aout_ToggleMute( p_playlist, NULL ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + + aout_ToggleMute( pl_Get( p_intf ), NULL ); } - (BOOL)isMuted -{ - playlist_t * p_playlist = pl_Get( VLCIntf ); +{ + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return NO; + BOOL b_is_muted = NO; - b_is_muted = aout_IsMuted( VLC_OBJECT(p_playlist) ); + b_is_muted = aout_IsMuted( VLC_OBJECT(pl_Get( p_intf )) ); return b_is_muted; } - (int)volume { - intf_thread_t * p_intf = VLCIntf; - playlist_t * p_playlist = pl_Get( VLCIntf ); - audio_volume_t i_volume = aout_VolumeGet( p_playlist ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return 0; + + audio_volume_t i_volume = aout_VolumeGet( pl_Get( p_intf ) ); return (int)i_volume; } - (void)setVolume: (int)i_value { - intf_thread_t * p_intf = VLCIntf; - playlist_t * p_playlist = pl_Get( VLCIntf ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; - aout_VolumeSet( p_playlist, i_value ); + aout_VolumeSet( pl_Get( p_intf ), i_value ); } #pragma mark - @@ -484,8 +539,11 @@ static VLCCoreInteraction *_o_sharedInstance = nil; - (void)toggleFullscreen { - playlist_t * p_playlist = pl_Get( VLCIntf ); - var_ToggleBool( p_playlist, "fullscreen" ); + intf_thread_t *p_intf = VLCIntf; + if (!p_intf) + return; + + var_ToggleBool( pl_Get( p_intf ), "fullscreen" ); } @end _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
