From: Laurent Aimar Date: Thu, 22 Feb 2007 19:34:05 +0000 (+0000) Subject: Do not use (input_thread_t*)p_access->p_parent it is not always true. X-Git-Tag: 0.9.0-test0~8476 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=e7a8394a1b4baf527d3acf10e3fdd3cabba22509;p=vlc Do not use (input_thread_t*)p_access->p_parent it is not always true. (Use vlc_find_object(PARENT) --- diff --git a/modules/access/cdda.c b/modules/access/cdda.c index 589e0d7c9a..4181b416a0 100644 --- a/modules/access/cdda.c +++ b/modules/access/cdda.c @@ -141,10 +141,6 @@ static int Open( vlc_object_t *p_this ) vcddev_t *vcddev; char *psz_name; int i_mrl_tracknum = -1; - - input_thread_t *p_input; - playlist_item_t *p_item = NULL; - playlist_t *p_playlist = NULL; int i_ret; if( !p_access->psz_path || !*p_access->psz_path ) @@ -179,36 +175,38 @@ static int Open( vlc_object_t *p_this ) STANDARD_BLOCK_ACCESS_INIT p_sys->vcddev = vcddev; - /* We only do separate items if the whole disc is requested - - * Dirty hack we access some private data ! */ - p_input = (input_thread_t *)( p_access->p_parent ); - /* Do we play a single track ? */ p_sys->i_track = var_CreateGetInteger( p_access, "cdda-track" ); if( p_sys->i_track < 0 && i_mrl_tracknum <= 0 ) { - p_playlist = pl_Yield( p_access ); - if( p_playlist->status.p_item->p_input == - input_GetItem( (input_thread_t *)p_access->p_parent)) - p_item = p_playlist->status.p_item; - else - { - input_item_t *p_current = input_GetItem( - (input_thread_t*)p_access->p_parent); - p_item = playlist_ItemGetByInput( p_playlist, p_current, VLC_FALSE ); + /* We only do separate items if the whole disc is requested */ + playlist_t *p_playlist = pl_Yield( p_access ); - if( !p_item ) + i_ret = -1; + if( p_playlist ) + { + input_thread_t *p_input = (input_thread_t*)vlc_object_find( p_access, VLC_OBJECT_INPUT, FIND_PARENT ); + if( p_input ) { - msg_Dbg( p_playlist, "unable to find item in playlist"); - return -1; + input_item_t *p_current = input_GetItem( p_input ); + playlist_item_t *p_item; + + if( p_playlist->status.p_item->p_input == p_current ) + p_item = p_playlist->status.p_item; + else + p_item = playlist_ItemGetByInput( p_playlist, p_current, VLC_FALSE ); + + if( p_item ) + i_ret = GetTracks( p_access, p_playlist, p_item ); + else + msg_Dbg( p_playlist, "unable to find item in playlist"); + vlc_object_release( p_input ); } + vlc_object_release( p_playlist ); } - - i_ret = GetTracks( p_access, p_playlist, p_item ); - - if( p_playlist ) vlc_object_release( p_playlist ); - if( i_ret < 0 ) goto error; + if( i_ret < 0 ) + goto error; } else { @@ -261,7 +259,6 @@ static int Open( vlc_object_t *p_this ) error: ioctl_Close( VLC_OBJECT(p_access), p_sys->vcddev ); free( p_sys ); - if( p_playlist ) vlc_object_release( p_playlist ); return VLC_EGENERIC; } diff --git a/modules/access/cdda/info.c b/modules/access/cdda/info.c index e8b0caae56..b136dd63b7 100644 --- a/modules/access/cdda/info.c +++ b/modules/access/cdda/info.c @@ -937,19 +937,19 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, CDDAMetaInfoInit( p_access ); CDDAMetaInfo( p_access, p_cdda->i_track ); - if (p_playlist) { - - p_item = playlist_ItemGetByInput( p_playlist, - input_GetItem(((input_thread_t *)p_access->p_parent)), VLC_FALSE ); + if( p_playlist ) + { + input_thread_t *p_input = (input_thread_t*)vlc_object_find( p_access, VLC_OBJECT_INPUT, FIND_PARENT ); + if( p_input ) + { + p_item = playlist_ItemGetByInput( p_playlist, input_GetItem(p_input), VLC_FALSE ); - if( p_item == p_playlist->status.p_item && !b_single_track ) - { - b_play = VLC_TRUE; - } - else - { - b_play = VLC_FALSE; - } + if( p_item == p_playlist->status.p_item && !b_single_track ) + b_play = VLC_TRUE; + else + b_play = VLC_FALSE; + vlc_object_release( p_input ); + } } if( b_single_track && !p_cdda->b_nav_mode ) diff --git a/modules/access/directory.c b/modules/access/directory.c index 832cb6c5cb..4311edc1b2 100644 --- a/modules/access/directory.c +++ b/modules/access/directory.c @@ -195,22 +195,32 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len) return VLC_ENOMEM; playlist_t *p_playlist = pl_Yield( p_access ); + input_thread_t *p_input = (input_thread_t*)vlc_object_find( p_access, VLC_OBJECT_INPUT, FIND_PARENT ); + playlist_item_t *p_item_in_category; - input_item_t *p_current_input = input_GetItem( - (input_thread_t*)p_access->p_parent); - playlist_item_t *p_current = playlist_ItemGetByInput( p_playlist, - p_current_input, - VLC_FALSE ); + input_item_t *p_current_input; + playlist_item_t *p_current; + + if( !p_input ) + { + msg_Err( p_access, "unable to find input (internal error)" ); + vlc_object_release( p_playlist ); + return VLC_ENOOBJ; + } + + p_current_input = input_GetItem( p_input ); + p_current = playlist_ItemGetByInput( p_playlist, p_current_input, VLC_FALSE ); - if( p_current == NULL ) + if( !p_current ) { msg_Err( p_access, "unable to find item in playlist" ); + vlc_object_release( p_input ); vlc_object_release( p_playlist ); return VLC_ENOOBJ; } /* Remove the ending '/' char */ - if (psz_name[0]) + if( psz_name[0] ) { char *ptr = psz_name + strlen (psz_name); switch (*--ptr) @@ -249,6 +259,7 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len) playlist_Signal( p_playlist ); if( psz_name ) free( psz_name ); + vlc_object_release( p_input ); vlc_object_release( p_playlist ); /* Return fake data forever */