[vlc-devel] commit: Recurse through the object tree instead of using the objects table ( Rémi Denis-Courmont )

lokidor lokidor at lokiserv.ath.cx
Mon May 26 21:55:46 CEST 2008


git version control a écrit :
> vlc | branch: master | Rémi Denis-Courmont <rem at videolan.org> | Wed May 14 21:11:18 2008 +0300| [30066f7bd1ce28d48032737de40d96bdff516bf4]
>
> Recurse through the object tree instead of using the objects table
>
>   
>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=30066f7bd1ce28d48032737de40d96bdff516bf4
>>     
> ---
>
>  src/misc/objects.c |   49 ++++++++++++++++++++-----------------------------
>  1 files changed, 20 insertions(+), 29 deletions(-)
>
> diff --git a/src/misc/objects.c b/src/misc/objects.c
> index 914b3d9..63c65ec 100644
> --- a/src/misc/objects.c
> +++ b/src/misc/objects.c
> @@ -78,7 +78,7 @@ static void           SetAttachment ( vlc_object_t *, bool );
>  
>  static vlc_list_t   * NewList       ( int );
>  static void           ListReplace   ( vlc_list_t *, vlc_object_t *, int );
> -/*static void           ListAppend    ( vlc_list_t *, vlc_object_t * );*/
> +static void           ListAppend    ( vlc_list_t *, vlc_object_t * );
>  static int            CountChildren ( vlc_object_t *, int );
>  static void           ListChildren  ( vlc_list_t *, vlc_object_t *, int );
>  
> @@ -959,6 +959,19 @@ void __vlc_object_detach( vlc_object_t *p_this )
>      vlc_mutex_unlock( &structure_lock );
>  }
>  
> +
> +static void vlc_tree_find (vlc_object_t *node, int type, vlc_list_t *list)
> +{
> +    assert (node);
> +    vlc_assert_locked (&structure_lock);
> +
> +    if (node->i_object_type == type)
> +        ListAppend (list, node);
> +
> +    for (int i = 0; i < node->i_children; i++)
> +        vlc_tree_find (node->pp_children[i], type, list);
> +}
> +
>  /**
>   ****************************************************************************
>   * find a list typed objects and increment their refcount
> @@ -969,7 +982,6 @@ void __vlc_object_detach( vlc_object_t *p_this )
>  vlc_list_t * __vlc_list_find( vlc_object_t *p_this, int i_type, int i_mode )
>  {
>      vlc_list_t *p_list;
> -    vlc_object_t **pp_current, **pp_end;
>      int i_count = 0, i_index = 0;
>      libvlc_global_data_t *p_libvlc_global = vlc_global();
>  
> @@ -979,31 +991,10 @@ vlc_list_t * __vlc_list_find( vlc_object_t *p_this, int i_type, int i_mode )
>      switch( i_mode & 0x000f )
>      {
>      case FIND_ANYWHERE:
> -        pp_current = p_libvlc_global->pp_objects;
> -        pp_end = pp_current + p_libvlc_global->i_objects;
> -
> -        for( ; pp_current < pp_end ; pp_current++ )
> -        {
> -            if( vlc_internals(*pp_current)->b_attached
> -                 && (*pp_current)->i_object_type == i_type )
> -            {
> -                i_count++;
> -            }
> -        }
> -
> -        p_list = NewList( i_count );
> -        pp_current = p_libvlc_global->pp_objects;
> -
> -        for( ; pp_current < pp_end ; pp_current++ )
> -        {
> -            if( vlc_internals(*pp_current)->b_attached
> -                 && (*pp_current)->i_object_type == i_type )
> -            {
> -                ListReplace( p_list, *pp_current, i_index );
> -                if( i_index < i_count ) i_index++;
> -            }
> -        }
> -    break;
> +        p_list = NewList (0);
> +        if (p_list != NULL)
> +            vlc_tree_find (VLC_OBJECT (p_libvlc_global), i_type, p_list);
> +        break;
>  
>      case FIND_CHILD:
>          i_count = CountChildren( p_this, i_type );
> @@ -1570,7 +1561,7 @@ static void ListReplace( vlc_list_t *p_list, vlc_object_t *p_object,
>      return;
>  }
>  
> -/*static void ListAppend( vlc_list_t *p_list, vlc_object_t *p_object )
> +static void ListAppend( vlc_list_t *p_list, vlc_object_t *p_object )
>  {
>      if( p_list == NULL )
>      {
> @@ -1591,7 +1582,7 @@ static void ListReplace( vlc_list_t *p_list, vlc_object_t *p_object,
>      p_list->i_count++;
>  
>      return;
> -}*/
> +}
>  
>  static int CountChildren( vlc_object_t *p_this, int i_type )
>  {
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel
>   
I don't know if it's a bug or a new feature but I get no longer the 
video embedded in the vlc interface on the maemo platform.
The video is available in a separate window, but this is not usable as 
we cannot have two windows in the same time on this platform.
After several tests It seems the thing come around this commit.

Lokidor




More information about the vlc-devel mailing list