X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmisc%2Fobjects.c;h=314c463fad831537a7046d4683d7721c6da0799b;hb=924e05dc3db078d17e8435ec427f8f4863b8f11d;hp=f1512ffd20e1233881f09aeaca947e76d38c4d48;hpb=e01eb15e2a09e0dcb42b2145770b7ae2d2e42436;p=vlc diff --git a/src/misc/objects.c b/src/misc/objects.c index f1512ffd20..314c463fad 100644 --- a/src/misc/objects.c +++ b/src/misc/objects.c @@ -1,8 +1,8 @@ /***************************************************************************** * objects.c: vlc_object_t handling ***************************************************************************** - * Copyright (C) 2002 VideoLAN - * $Id: objects.c,v 1.36 2003/06/24 13:33:49 sam Exp $ + * Copyright (C) 2004 VideoLAN + * $Id$ * * Authors: Samuel Hocevar * @@ -21,20 +21,23 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ +/** + * \file + * This file contains the functions to handle the vlc_object_t type + */ + + /***************************************************************************** * Preamble *****************************************************************************/ #include +#include #ifdef HAVE_STDLIB_H # include /* realloc() */ #endif -#include "stream_control.h" -#include "input_ext-intf.h" -#include "input_ext-dec.h" - -#include "video.h" +#include "vlc_video.h" #include "video_output.h" #include "audio_output.h" @@ -43,8 +46,10 @@ #include "vlc_playlist.h" #include "vlc_interface.h" +#include "vlc_codec.h" -#include "httpd.h" +#include "vlc_httpd.h" +#include "vlc_vlm.h" /***************************************************************************** * Local prototypes *****************************************************************************/ @@ -76,6 +81,14 @@ static vlc_mutex_t structure_lock; * i_type is not a known value such as VLC_OBJECT_ROOT, VLC_OBJECT_VOUT and * so on, vlc_object_create will use its value for the object size. *****************************************************************************/ + +/** + * Initialize a vlc object + * + * This function allocates memory for a vlc object and initializes it. If + * i_type is not a known value such as VLC_OBJECT_ROOT, VLC_OBJECT_VOUT and + * so on, vlc_object_create will use its value for the object size. + */ void * __vlc_object_create( vlc_object_t *p_this, int i_type ) { vlc_object_t * p_new; @@ -100,6 +113,10 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type ) i_size = sizeof(intf_thread_t); psz_type = "interface"; break; + case VLC_OBJECT_DIALOGS: + i_size = sizeof(intf_thread_t); + psz_type = "dialogs provider"; + break; case VLC_OBJECT_PLAYLIST: i_size = sizeof(playlist_t); psz_type = "playlist"; @@ -108,10 +125,30 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type ) i_size = sizeof(input_thread_t); psz_type = "input"; break; + case VLC_OBJECT_DEMUX: + i_size = sizeof(demux_t); + psz_type = "demux"; + break; + case VLC_OBJECT_STREAM: + i_size = sizeof(stream_t); + psz_type = "stream"; + break; + case VLC_OBJECT_ACCESS: + i_size = sizeof(access_t); + psz_type = "access"; + break; case VLC_OBJECT_DECODER: - i_size = sizeof(decoder_fifo_t); + i_size = sizeof(decoder_t); psz_type = "decoder"; break; + case VLC_OBJECT_PACKETIZER: + i_size = sizeof(decoder_t); + psz_type = "packetizer"; + break; + case VLC_OBJECT_ENCODER: + i_size = sizeof(encoder_t); + psz_type = "encoder"; + break; case VLC_OBJECT_VOUT: i_size = sizeof(vout_thread_t); psz_type = "video output"; @@ -128,6 +165,18 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type ) i_size = sizeof( httpd_t ); psz_type = "http daemon"; break; + case VLC_OBJECT_VLM: + i_size = sizeof( vlm_t ); + psz_type = "vlm dameon"; + break; + case VLC_OBJECT_OPENGL: + i_size = sizeof( vout_thread_t ); + psz_type = "opengl provider"; + break; + case VLC_OBJECT_ANNOUNCE: + i_size = sizeof( announce_handler_t ); + psz_type = "announce handler"; + break; default: i_size = i_type > 0 ? i_type > (int)sizeof(vlc_object_t) @@ -163,6 +212,7 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type ) p_new->b_error = VLC_FALSE; p_new->b_dead = VLC_FALSE; p_new->b_attached = VLC_FALSE; + p_new->b_force = VLC_FALSE; p_new->i_vars = 0; p_new->p_vars = (variable_t *)malloc( 16 * sizeof( variable_t ) ); @@ -233,9 +283,10 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type ) return p_new; } -/***************************************************************************** - * vlc_object_destroy: destroy a vlc object - ***************************************************************************** +/** + **************************************************************************** + * Destroy a vlc object + * * This function destroys an object that has been previously allocated with * vlc_object_create. The object's refcount must be zero and it must not be * attached to other objects in any way. @@ -246,13 +297,15 @@ void __vlc_object_destroy( vlc_object_t *p_this ) if( p_this->i_children ) { - msg_Err( p_this, "cannot delete object with children" ); + msg_Err( p_this, "cannot delete object (%i, %s) with children" , + p_this->i_object_id, p_this->psz_object_name ); return; } if( p_this->p_parent ) { - msg_Err( p_this, "cannot delete object with a parent" ); + msg_Err( p_this, "cannot delete object (%i, %s) with a parent", + p_this->i_object_id, p_this->psz_object_name ); return; } @@ -321,9 +374,9 @@ void __vlc_object_destroy( vlc_object_t *p_this ) free( p_this ); } -/***************************************************************************** - * vlc_object_get: find an object given its ID - ***************************************************************************** +/** + * find an object given its ID + * * This function looks for the object whose i_object_id field is i_id. We * use a dichotomy so that lookups are in log2(n). *****************************************************************************/ @@ -383,8 +436,9 @@ void * __vlc_object_get( vlc_object_t *p_this, int i_id ) return NULL; } -/***************************************************************************** - * vlc_object_find: find a typed object and increment its refcount +/** + **************************************************************************** + * find a typed object and increment its refcount ***************************************************************************** * This function recursively looks for a given object type. i_mode can be one * of FIND_PARENT, FIND_CHILD or FIND_ANYWHERE. @@ -406,8 +460,21 @@ void * __vlc_object_find( vlc_object_t *p_this, int i_type, int i_mode ) /* Otherwise, recursively look for the object */ if( (i_mode & 0x000f) == FIND_ANYWHERE ) { - p_found = FindObject( VLC_OBJECT(p_this->p_vlc), i_type, - (i_mode & ~0x000f) | FIND_CHILD ); + vlc_object_t *p_root = p_this; + + /* Find the root */ + while( p_root->p_parent != NULL && + p_root != VLC_OBJECT( p_this->p_vlc ) ) + { + p_root = p_root->p_parent; + } + + p_found = FindObject( p_root, i_type, (i_mode & ~0x000f)|FIND_CHILD ); + if( p_found == NULL && p_root != VLC_OBJECT( p_this->p_vlc ) ) + { + p_found = FindObject( VLC_OBJECT( p_this->p_vlc ), + i_type, (i_mode & ~0x000f)|FIND_CHILD ); + } } else { @@ -419,8 +486,9 @@ void * __vlc_object_find( vlc_object_t *p_this, int i_type, int i_mode ) return p_found; } -/***************************************************************************** - * vlc_object_yield: increment an object refcount +/** + **************************************************************************** + * increment an object refcount *****************************************************************************/ void __vlc_object_yield( vlc_object_t *p_this ) { @@ -429,8 +497,9 @@ void __vlc_object_yield( vlc_object_t *p_this ) vlc_mutex_unlock( &structure_lock ); } -/***************************************************************************** - * vlc_object_release: decrement an object refcount +/** + **************************************************************************** + * decrement an object refcount *****************************************************************************/ void __vlc_object_release( vlc_object_t *p_this ) { @@ -439,8 +508,9 @@ void __vlc_object_release( vlc_object_t *p_this ) vlc_mutex_unlock( &structure_lock ); } -/***************************************************************************** - * vlc_object_attach: attach object to a parent object +/** + **************************************************************************** + * attach object to a parent object ***************************************************************************** * This function sets p_this as a child of p_parent, and p_parent as a parent * of p_this. This link can be undone using vlc_object_detach. @@ -465,8 +535,9 @@ void __vlc_object_attach( vlc_object_t *p_this, vlc_object_t *p_parent ) vlc_mutex_unlock( &structure_lock ); } -/***************************************************************************** - * vlc_object_detach: detach object from its parent +/** + **************************************************************************** + * detach object from its parent ***************************************************************************** * This function removes all links between an object and its parent. *****************************************************************************/ @@ -490,8 +561,9 @@ void __vlc_object_detach( vlc_object_t *p_this ) vlc_mutex_unlock( &structure_lock ); } -/***************************************************************************** - * vlc_list_find: find a list typed objects and increment their refcount +/** + **************************************************************************** + * find a list typed objects and increment their refcount ***************************************************************************** * This function recursively looks for a given object type. i_mode can be one * of FIND_PARENT, FIND_CHILD or FIND_ANYWHERE.