From: lilo_booter Date: Thu, 11 Mar 2004 19:05:55 +0000 (+0000) Subject: more small optimisations X-Git-Url: http://research.m1stereo.tv/gitweb?a=commitdiff_plain;h=23c2a612605501afef9f5c9029145958e6c7fbd8;p=melted more small optimisations git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@203 d19143bc-622f-0410-bfdd-b5b2a6649095 --- diff --git a/demo/mlt_voiceover b/demo/mlt_voiceover index 804ef96..57b4d1c 100644 --- a/demo/mlt_voiceover +++ b/demo/mlt_voiceover @@ -1,15 +1,13 @@ inigo \ clip1.dv \ clip2.mpeg \ --track - "+voice over demo.txt" \ +-track "+voice over demo.txt" \ out=299 \ font="Sans Bold 72" \ fgcolour=0x00000000 \ bgcolour=0xff9933aa \ pad=10 \ --track - music1.ogg \ +-track music1.ogg \ -transition \ composite:0%,80%:100%x20% \ distort=1 \ diff --git a/src/framework/mlt_deque.c b/src/framework/mlt_deque.c index c048310..4d5a2bd 100644 --- a/src/framework/mlt_deque.c +++ b/src/framework/mlt_deque.c @@ -40,7 +40,14 @@ struct mlt_deque_s mlt_deque mlt_deque_init( ) { - return calloc( 1, sizeof( struct mlt_deque_s ) ); + mlt_deque this = malloc( sizeof( struct mlt_deque_s ) ); + if ( this != NULL ) + { + this->list = NULL; + this->size = 0; + this->count = 0; + } + return this; } /** Return the number of items in the deque. @@ -58,8 +65,8 @@ static int mlt_deque_allocate( mlt_deque this ) { if ( this->count == this->size ) { - this->list = realloc( this->list, sizeof( void * ) * ( this->size + 10 ) ); - this->size += 10; + this->list = realloc( this->list, sizeof( void * ) * ( this->size + 20 ) ); + this->size += 20; } return this->list == NULL; } diff --git a/src/framework/mlt_properties.c b/src/framework/mlt_properties.c index 2824cca..2664edd 100644 --- a/src/framework/mlt_properties.c +++ b/src/framework/mlt_properties.c @@ -38,6 +38,7 @@ typedef struct mlt_property *value; int count; int size; + mlt_properties mirror; } property_list; @@ -87,17 +88,14 @@ static inline int generate_hash( char *name ) real producer. */ -static void mlt_properties_do_mirror( mlt_properties this, char *name ) +static inline void mlt_properties_do_mirror( mlt_properties this, char *name ) { - if ( strcmp( name, "in" ) && strcmp( name, "out" ) ) + property_list *list = this->private; + if ( list->mirror != NULL && strcmp( name, "in" ) && strcmp( name, "out" ) ) { - mlt_properties mirror = mlt_properties_get_data( this, "mlt_mirror", NULL ); - if ( mirror != NULL ) - { - char *value = mlt_properties_get( this, name ); - if ( value != NULL ) - mlt_properties_set( mirror, name, value ); - } + char *value = mlt_properties_get( this, name ); + if ( value != NULL ) + mlt_properties_set( list->mirror, name, value ); } } @@ -106,7 +104,8 @@ static void mlt_properties_do_mirror( mlt_properties this, char *name ) void mlt_properties_mirror( mlt_properties this, mlt_properties that ) { - mlt_properties_set_data( this, "mlt_mirror", that, 0, NULL, NULL ); + property_list *list = this->private; + list->mirror = that; } /** Inherit all serialisable properties from that into this. @@ -157,19 +156,22 @@ static inline mlt_property mlt_properties_find( mlt_properties this, char *name property_list *list = this->private; mlt_property value = NULL; int key = generate_hash( name ); - int i = list->hash[ key ]; + int i = list->hash[ key ] - 1; - // Check if we're hashed - if ( list->count > 0 && - name[ 0 ] == list->name[ i ][ 0 ] && - !strcmp( list->name[ i ], name ) ) - value = list->value[ i ]; - - // Locate the item - for ( i = 0; value == NULL && i < list->count; i ++ ) - if ( name[ 0 ] == list->name[ i ][ 0 ] && !strcmp( list->name[ i ], name ) ) + if ( i >= 0 ) + { + // Check if we're hashed + if ( list->count > 0 && + name[ 0 ] == list->name[ i ][ 0 ] && + !strcmp( list->name[ i ], name ) ) value = list->value[ i ]; + // Locate the item + for ( i = list->count - 1; value == NULL && i >= 0; i -- ) + if ( name[ 0 ] == list->name[ i ][ 0 ] && !strcmp( list->name[ i ], name ) ) + value = list->value[ i ]; + } + return value; } @@ -194,7 +196,8 @@ static mlt_property mlt_properties_add( mlt_properties this, char *name ) list->value[ list->count ] = mlt_property_init( ); // Assign to hash table - list->hash[ key ] = list->count; + if ( list->hash[ key ] == 0 ) + list->hash[ key ] = list->count + 1; // Return and increment count accordingly return list->value[ list->count ++ ]; @@ -453,6 +456,7 @@ int mlt_properties_rename( mlt_properties this, char *source, char *dest ) { free( list->name[ i ] ); list->name[ i ] = strdup( dest ); + list->hash[ generate_hash( dest ) ] = i + 1; break; } } diff --git a/src/framework/mlt_property.c b/src/framework/mlt_property.c index eaa1967..f3613ce 100644 --- a/src/framework/mlt_property.c +++ b/src/framework/mlt_property.c @@ -31,13 +31,27 @@ mlt_property mlt_property_init( ) { - return calloc( 1, sizeof( struct mlt_property_s ) ); + mlt_property this = malloc( sizeof( struct mlt_property_s ) ); + if ( this != NULL ) + { + this->types = 0; + this->prop_int = 0; + this->prop_position = 0; + this->prop_double = 0; + this->prop_int64 = 0; + this->prop_string = NULL; + this->data = NULL; + this->length = 0; + this->destructor = NULL; + this->serialiser = NULL; + } + return this; } /** Clear a property. */ -void mlt_property_clear( mlt_property this ) +static inline void mlt_property_clear( mlt_property this ) { // Special case data handling if ( this->types & mlt_prop_data && this->destructor != NULL ) @@ -47,8 +61,17 @@ void mlt_property_clear( mlt_property this ) if ( this->types & mlt_prop_string ) free( this->prop_string ); - // We can wipe it now. - memset( this, 0, sizeof( struct mlt_property_s ) ); + // Wipe stuff + this->types = 0; + this->prop_int = 0; + this->prop_position = 0; + this->prop_double = 0; + this->prop_int64 = 0; + this->prop_string = NULL; + this->data = NULL; + this->length = 0; + this->destructor = NULL; + this->serialiser = NULL; } /** Set an int on this property. diff --git a/src/framework/mlt_property.h b/src/framework/mlt_property.h index 3f59ad2..7db6aa2 100644 --- a/src/framework/mlt_property.h +++ b/src/framework/mlt_property.h @@ -67,7 +67,6 @@ typedef struct mlt_property_s */ extern mlt_property mlt_property_init( ); -extern void mlt_property_clear( mlt_property this ); extern int mlt_property_set_int( mlt_property this, int value ); extern int mlt_property_set_double( mlt_property this, double value ); extern int mlt_property_set_position( mlt_property this, mlt_position value ); diff --git a/src/modules/sdl/consumer_sdl.c b/src/modules/sdl/consumer_sdl.c index 962d4ae..bfa6e82 100644 --- a/src/modules/sdl/consumer_sdl.c +++ b/src/modules/sdl/consumer_sdl.c @@ -349,6 +349,12 @@ static int consumer_play_video( consumer_sdl this, mlt_frame frame, int64_t elap // Get the image, width and height mlt_frame_get_image( frame, &image, &vfmt, &width, &height, 0 ); + if ( playtime > elapsed + 25000 ) + { + struct timespec tm = { ( playtime - elapsed ) / 1000000, ( ( playtime - elapsed ) % 1000000 ) * 1000 }; + nanosleep( &tm, NULL ); + } + // Handle events if ( this->sdl_screen != NULL ) { @@ -451,12 +457,6 @@ static int consumer_play_video( consumer_sdl this, mlt_frame frame, int64_t elap SDL_DisplayYUVOverlay( this->sdl_overlay, &this->sdl_screen->clip_rect ); } } - - if ( playtime > elapsed + 25000 ) - { - struct timespec tm = { ( playtime - elapsed ) / 1000000, ( ( playtime - elapsed ) % 1000000 ) * 1000 }; - nanosleep( &tm, NULL ); - } } // Close the frame