Commit 6ecd4022 authored by Clément Stenac's avatar Clément Stenac

Remove vlc_object_find for playlist from the core

parent 3f99651d
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
#ifndef _VLC_PLAYLIST_H_ #ifndef _VLC_PLAYLIST_H_
#define _VLC_PLAYLIST_H_ #define _VLC_PLAYLIST_H_
#include <assert.h>
/** /**
* \file * \file
* This file contain structures and function prototypes related * This file contain structures and function prototypes related
...@@ -208,6 +210,16 @@ int playlist_ThreadDestroy ( playlist_t * ); ...@@ -208,6 +210,16 @@ int playlist_ThreadDestroy ( playlist_t * );
#define PL_LOCK vlc_mutex_lock( &p_playlist->object_lock ); #define PL_LOCK vlc_mutex_lock( &p_playlist->object_lock );
#define PL_UNLOCK vlc_mutex_unlock( &p_playlist->object_lock ); #define PL_UNLOCK vlc_mutex_unlock( &p_playlist->object_lock );
#define pl_Get( a ) a->p_libvlc->p_playlist
#define pl_Yield( a ) __pl_Yield( VLC_OBJECT(a) )
static inline playlist_t *__pl_Yield( vlc_object_t *p_this )
{
assert( p_this->p_libvlc->p_playlist );
vlc_object_yield( p_this->p_libvlc->p_playlist );
return p_this->p_libvlc->p_playlist;
}
#define pl_Release(a) vlc_object_release( a->p_libvlc->p_playlist );
/* Playlist control */ /* Playlist control */
#define playlist_Play(p) playlist_LockControl(p,PLAYLIST_PLAY ) #define playlist_Play(p) playlist_LockControl(p,PLAYLIST_PLAY )
#define playlist_Pause(p) playlist_LockControl(p,PLAYLIST_PAUSE ) #define playlist_Pause(p) playlist_LockControl(p,PLAYLIST_PAUSE )
......
...@@ -530,15 +530,10 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) ...@@ -530,15 +530,10 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
static void NotifyPlaylist( input_thread_t *p_input ) static void NotifyPlaylist( input_thread_t *p_input )
{ {
playlist_t *p_playlist = playlist_t *p_playlist = pl_Yield( p_input );
(playlist_t *)vlc_object_find( p_input, VLC_OBJECT_PLAYLIST,
FIND_PARENT );
if( p_playlist )
{
var_SetInteger( p_playlist, "item-change", var_SetInteger( p_playlist, "item-change",
p_input->input.p_item->i_id ); p_input->input.p_item->i_id );
vlc_object_release( p_playlist ); pl_Release( p_input );
}
} }
static void UpdateBookmarksOption( input_thread_t *p_input ) static void UpdateBookmarksOption( input_thread_t *p_input )
......
...@@ -1135,8 +1135,6 @@ static void End( input_thread_t * p_input ) ...@@ -1135,8 +1135,6 @@ static void End( input_thread_t * p_input )
/* Close optional stream output instance */ /* Close optional stream output instance */
if( p_input->p_sout ) if( p_input->p_sout )
{ {
vlc_object_t *p_pl =
vlc_object_find( p_input, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
vlc_value_t keep; vlc_value_t keep;
vlc_mutex_lock( &p_input->counters.counters_lock ); vlc_mutex_lock( &p_input->counters.counters_lock );
...@@ -1145,20 +1143,18 @@ static void End( input_thread_t * p_input ) ...@@ -1145,20 +1143,18 @@ static void End( input_thread_t * p_input )
CL_CO( sout_send_bitrate ); CL_CO( sout_send_bitrate );
vlc_mutex_unlock( &p_input->counters.counters_lock ); vlc_mutex_unlock( &p_input->counters.counters_lock );
if( var_Get( p_input, "sout-keep", &keep ) >= 0 && keep.b_bool && p_pl ) if( var_Get( p_input, "sout-keep", &keep ) >= 0 && keep.b_bool )
{ {
/* attach sout to the playlist */ /* attach sout to the playlist */
msg_Dbg( p_input, "keeping sout" ); msg_Dbg( p_input, "keeping sout" );
vlc_object_detach( p_input->p_sout ); vlc_object_detach( p_input->p_sout );
vlc_object_attach( p_input->p_sout, p_pl ); vlc_object_attach( p_input->p_sout, p_input->p_libvlc->p_playlist );
} }
else else
{ {
msg_Dbg( p_input, "destroying sout" ); msg_Dbg( p_input, "destroying sout" );
sout_DeleteInstance( p_input->p_sout ); sout_DeleteInstance( p_input->p_sout );
} }
if( p_pl )
vlc_object_release( p_pl );
} }
#undef CL_CO #undef CL_CO
...@@ -1824,21 +1820,16 @@ static int UpdateMeta( input_thread_t *p_input, vlc_bool_t b_quick ) ...@@ -1824,21 +1820,16 @@ static int UpdateMeta( input_thread_t *p_input, vlc_bool_t b_quick )
static void UpdateItemLength( input_thread_t *p_input, int64_t i_length, static void UpdateItemLength( input_thread_t *p_input, int64_t i_length,
vlc_bool_t b_quick ) vlc_bool_t b_quick )
{ {
playlist_t *p_playlist;
char psz_buffer[MSTRTIME_MAX_SIZE]; char psz_buffer[MSTRTIME_MAX_SIZE];
vlc_mutex_lock( &p_input->input.p_item->lock ); vlc_mutex_lock( &p_input->input.p_item->lock );
p_input->input.p_item->i_duration = i_length; p_input->input.p_item->i_duration = i_length;
vlc_mutex_unlock( &p_input->input.p_item->lock ); vlc_mutex_unlock( &p_input->input.p_item->lock );
p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST, pl_Yield( p_input );
FIND_PARENT); var_SetInteger( pl_Get( p_input ), "item-change",
if( p_playlist )
{
var_SetInteger( p_playlist, "item-change",
p_input->input.p_item->i_id ); p_input->input.p_item->i_id );
vlc_object_release( p_playlist ); pl_Release( p_input )
}
input_Control( p_input, INPUT_ADD_INFO, _("General"), _("Duration"), input_Control( p_input, INPUT_ADD_INFO, _("General"), _("Duration"),
msecstotimestr( psz_buffer, i_length / 1000 ) ); msecstotimestr( psz_buffer, i_length / 1000 ) );
......
...@@ -70,16 +70,12 @@ char *vlc_input_item_GetInfo( input_item_t *p_i, ...@@ -70,16 +70,12 @@ char *vlc_input_item_GetInfo( input_item_t *p_i,
static void vlc_input_item_Destroy ( gc_object_t *p_this ) static void vlc_input_item_Destroy ( gc_object_t *p_this )
{ {
vlc_object_t *p_obj = (vlc_object_t *)p_this->p_destructor_arg; vlc_object_t *p_obj = (vlc_object_t *)p_this->p_destructor_arg;
int i;
input_item_t *p_input = (input_item_t *) p_this; input_item_t *p_input = (input_item_t *) p_this;
int i;
playlist_t *p_playlist = (playlist_t *)vlc_object_find( p_obj, playlist_t *p_playlist = pl_Yield( p_obj );
VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
vlc_input_item_Clean( p_input ); vlc_input_item_Clean( p_input );
if( p_playlist )
{
for( i = 0 ; i< p_playlist->i_input_items ; i++ ) for( i = 0 ; i< p_playlist->i_input_items ; i++ )
{ {
if( p_playlist->pp_input_items[i]->i_id == p_input->i_id ) if( p_playlist->pp_input_items[i]->i_id == p_input->i_id )
...@@ -89,8 +85,7 @@ static void vlc_input_item_Destroy ( gc_object_t *p_this ) ...@@ -89,8 +85,7 @@ static void vlc_input_item_Destroy ( gc_object_t *p_this )
break; break;
} }
} }
vlc_object_release( p_playlist ); pl_Release( p_obj );
}
free( p_input ); free( p_input );
} }
...@@ -208,20 +203,19 @@ input_item_t *input_ItemNewWithType( vlc_object_t *p_obj, const char *psz_uri, ...@@ -208,20 +203,19 @@ input_item_t *input_ItemNewWithType( vlc_object_t *p_obj, const char *psz_uri,
const char **ppsz_options, int i_duration, const char **ppsz_options, int i_duration,
int i_type ) int i_type )
{ {
/* FIXME DON'T SEARCH PLAYLIST */ playlist_t *p_playlist = pl_Yield( p_obj );
/* FIXME SHOULD LOCK */ DECMALLOC_NULL( p_input, input_item_t );
input_item_t *p_input = (input_item_t *)malloc( sizeof( input_item_t ) );
playlist_t *p_playlist = (playlist_t *) vlc_object_find( p_obj,
VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
vlc_input_item_Init( p_obj, p_input ); vlc_input_item_Init( p_obj, p_input );
vlc_gc_init( p_input, vlc_input_item_Destroy, (void *)p_obj ); vlc_gc_init( p_input, vlc_input_item_Destroy, (void *)p_obj );
PL_LOCK;
p_input->i_id = ++p_playlist->i_last_input_id; p_input->i_id = ++p_playlist->i_last_input_id;
TAB_APPEND( p_playlist->i_input_items,
INSERT_ELEM( p_playlist->pp_input_items, p_playlist->i_input_items, p_playlist->pp_input_items,
p_playlist->i_input_items, p_input ); p_input );
vlc_object_release( p_playlist ); PL_UNLOCK;
pl_Release( p_obj );
p_input->b_fixed_name = VLC_FALSE; p_input->b_fixed_name = VLC_FALSE;
......
...@@ -445,20 +445,17 @@ void __intf_UserHide( vlc_object_t *p_this, int i_id ) ...@@ -445,20 +445,17 @@ void __intf_UserHide( vlc_object_t *p_this, int i_id )
/* Get the interaction object. Create it if needed */ /* Get the interaction object. Create it if needed */
static interaction_t * InteractionGet( vlc_object_t *p_this ) static interaction_t * InteractionGet( vlc_object_t *p_this )
{ {
playlist_t *p_playlist;
interaction_t *p_interaction; interaction_t *p_interaction;
playlist_t *p_playlist = pl_Yield( p_this );
p_playlist = (playlist_t*) vlc_object_find( p_this, VLC_OBJECT_PLAYLIST, PL_LOCK;
FIND_ANYWHERE );
if( !p_playlist )
return NULL;
if( p_playlist->p_interaction == NULL ) if( p_playlist->p_interaction == NULL )
InteractionInit( p_playlist ); InteractionInit( p_playlist );
p_interaction = p_playlist->p_interaction; p_interaction = p_playlist->p_interaction;
PL_UNLOCK;
vlc_object_release( p_playlist ); pl_Release( p_this );
return p_interaction; return p_interaction;
} }
......
...@@ -114,28 +114,14 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout, ...@@ -114,28 +114,14 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
{ {
if( !p_fmt ) if( !p_fmt )
{ {
/* Reattach video output to input before bailing out */ /* Reattach video output to playlist before bailing out */
if( p_vout ) if( p_vout )
{ {
vlc_object_t *p_playlist; vlc_object_t *p_playlist = pl_Yield( p_this );
p_playlist = vlc_object_find( p_this, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( p_playlist )
{
spu_Attach( p_vout->p_spu, p_this, VLC_FALSE ); spu_Attach( p_vout->p_spu, p_this, VLC_FALSE );
vlc_object_detach( p_vout ); vlc_object_detach( p_vout );
vlc_object_attach( p_vout, p_playlist ); vlc_object_attach( p_vout, p_playlist );
pl_Release( p_this );
vlc_object_release( p_playlist );
}
else
{
msg_Dbg( p_this, "cannot find playlist, destroying vout" );
vlc_object_detach( p_vout );
vout_Destroy( p_vout );
}
} }
return NULL; return NULL;
} }
...@@ -151,12 +137,7 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout, ...@@ -151,12 +137,7 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
if( !p_vout ) if( !p_vout )
{ {
playlist_t *p_playlist; playlist_t *p_playlist = pl_Yield( p_this );
p_playlist = vlc_object_find( p_this,
VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
if( p_playlist )
{
vlc_mutex_lock( &p_playlist->gc_lock ); vlc_mutex_lock( &p_playlist->gc_lock );
p_vout = vlc_object_find( p_playlist, p_vout = vlc_object_find( p_playlist,
VLC_OBJECT_VOUT, FIND_CHILD ); VLC_OBJECT_VOUT, FIND_CHILD );
...@@ -167,8 +148,6 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout, ...@@ -167,8 +148,6 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
p_vout = NULL; p_vout = NULL;
} }
vlc_mutex_unlock( &p_playlist->gc_lock ); vlc_mutex_unlock( &p_playlist->gc_lock );
vlc_object_release( p_playlist );
}
} }
} }
...@@ -498,7 +477,8 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt ) ...@@ -498,7 +477,8 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
*****************************************************************************/ *****************************************************************************/
void vout_Destroy( vout_thread_t *p_vout ) void vout_Destroy( vout_thread_t *p_vout )
{ {
vlc_object_t *p_playlist; vout_thread_t *p_another_vout;
vlc_object_t *p_playlist = pl_Yield( p_vout );
/* Request thread destruction */ /* Request thread destruction */
p_vout->b_die = VLC_TRUE; p_vout->b_die = VLC_TRUE;
...@@ -506,18 +486,12 @@ void vout_Destroy( vout_thread_t *p_vout ) ...@@ -506,18 +486,12 @@ void vout_Destroy( vout_thread_t *p_vout )
var_Destroy( p_vout, "intf-change" ); var_Destroy( p_vout, "intf-change" );
p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( p_vout->psz_filter_chain ) free( p_vout->psz_filter_chain ); if( p_vout->psz_filter_chain ) free( p_vout->psz_filter_chain );
/* Free structure */ /* Free structure */
vlc_object_destroy( p_vout ); vlc_object_destroy( p_vout );
/* If it was the last vout, tell the interface to show up */ p_another_vout = vlc_object_find( p_playlist,
if( p_playlist != NULL )
{
vout_thread_t *p_another_vout = vlc_object_find( p_playlist,
VLC_OBJECT_VOUT, FIND_ANYWHERE ); VLC_OBJECT_VOUT, FIND_ANYWHERE );
if( p_another_vout == NULL ) if( p_another_vout == NULL )
{ {
...@@ -530,7 +504,6 @@ void vout_Destroy( vout_thread_t *p_vout ) ...@@ -530,7 +504,6 @@ void vout_Destroy( vout_thread_t *p_vout )
vlc_object_release( p_another_vout ); vlc_object_release( p_another_vout );
} }
vlc_object_release( p_playlist ); vlc_object_release( p_playlist );
}
} }
/***************************************************************************** /*****************************************************************************
......
...@@ -1099,19 +1099,14 @@ static int OnTopCallback( vlc_object_t *p_this, char const *psz_cmd, ...@@ -1099,19 +1099,14 @@ static int OnTopCallback( vlc_object_t *p_this, char const *psz_cmd,
vlc_value_t oldval, vlc_value_t newval, void *p_data ) vlc_value_t oldval, vlc_value_t newval, void *p_data )
{ {
vout_thread_t *p_vout = (vout_thread_t *)p_this; vout_thread_t *p_vout = (vout_thread_t *)p_this;
playlist_t *p_playlist; playlist_t *p_playlist = pl_Yield( p_this );
vout_Control( p_vout, VOUT_SET_STAY_ON_TOP, newval.b_bool ); vout_Control( p_vout, VOUT_SET_STAY_ON_TOP, newval.b_bool );
p_playlist = (playlist_t *)vlc_object_find( p_this, VLC_OBJECT_PLAYLIST,
FIND_PARENT );
if( p_playlist )
{
/* Modify playlist as well because the vout might have to be restarted */ /* Modify playlist as well because the vout might have to be restarted */
var_Create( p_playlist, "video-on-top", VLC_VAR_BOOL ); var_Create( p_playlist, "video-on-top", VLC_VAR_BOOL );
var_Set( p_playlist, "video-on-top", newval ); var_Set( p_playlist, "video-on-top", newval );
vlc_object_release( p_playlist ); pl_Release( p_this );
}
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -1119,21 +1114,15 @@ static int FullscreenCallback( vlc_object_t *p_this, char const *psz_cmd, ...@@ -1119,21 +1114,15 @@ static int FullscreenCallback( vlc_object_t *p_this, char const *psz_cmd,
vlc_value_t oldval, vlc_value_t newval, void *p_data ) vlc_value_t oldval, vlc_value_t newval, void *p_data )
{ {
vout_thread_t *p_vout = (vout_thread_t *)p_this; vout_thread_t *p_vout = (vout_thread_t *)p_this;
playlist_t *p_playlist;
vlc_value_t val; vlc_value_t val;
playlist_t *p_playlist = pl_Yield( p_this );
p_vout->i_changes |= VOUT_FULLSCREEN_CHANGE; p_vout->i_changes |= VOUT_FULLSCREEN_CHANGE;
p_playlist = (playlist_t *)vlc_object_find( p_this, VLC_OBJECT_PLAYLIST,
FIND_PARENT );
if( p_playlist )
{
/* Modify playlist as well because the vout might have to be restarted */ /* Modify playlist as well because the vout might have to be restarted */
var_Create( p_playlist, "fullscreen", VLC_VAR_BOOL ); var_Create( p_playlist, "fullscreen", VLC_VAR_BOOL );
var_Set( p_playlist, "fullscreen", newval ); var_Set( p_playlist, "fullscreen", newval );
pl_Release( p_playlist );
vlc_object_release( p_playlist );
}
/* Disable "always on top" in fullscreen mode */ /* Disable "always on top" in fullscreen mode */
var_Get( p_vout, "video-on-top", &val ); var_Get( p_vout, "video-on-top", &val );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment