X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_tractor.c;h=40c78215826772c5a9b32fb4832d044921aa3286;hb=f4963a6aa07644399b273b5d2b1f9299c9047414;hp=45caa62c97bd698c420011136bfe93f4632c90f2;hpb=bf3264b9e340ba5c11cbf59835a8af3db94e0cc2;p=melted diff --git a/src/framework/mlt_tractor.c b/src/framework/mlt_tractor.c index 45caa62..40c7821 100644 --- a/src/framework/mlt_tractor.c +++ b/src/framework/mlt_tractor.c @@ -1,7 +1,10 @@ -/* - * mlt_tractor.c -- tractor service class - * Copyright (C) 2003-2004 Ushodaya Enterprises Limited - * Author: Charles Yates +/** + * \file mlt_tractor.c + * \brief tractor service class + * \see mlt_tractor_s + * + * Copyright (C) 2003-2009 Ushodaya Enterprises Limited + * \author Charles Yates * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,26 +21,31 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "config.h" - #include "mlt_tractor.h" #include "mlt_frame.h" #include "mlt_multitrack.h" #include "mlt_field.h" +#include "mlt_log.h" #include #include #include #include -/** Forward references to static methods. +/* Forward references to static methods. */ -static int producer_get_frame( mlt_producer this, mlt_frame_ptr frame, int track ); +static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int track ); static void mlt_tractor_listener( mlt_multitrack tracks, mlt_tractor this ); -/** Constructor for the tractor. -*/ +/** Construct a tractor without a field or multitrack. + * + * Sets the resource property to "", the mlt_type to "mlt_producer", + * and mlt_service to "tractor". + * + * \public \memberof mlt_tractor_s + * \return the new tractor + */ mlt_tractor mlt_tractor_init( ) { @@ -69,6 +77,15 @@ mlt_tractor mlt_tractor_init( ) return this; } +/** Construct a tractor as well as a field and multitrack. + * + * Sets the resource property to "", the mlt_type to "mlt_producer", + * and mlt_service to "tractor". + * + * \public \memberof mlt_tractor_s + * \return the new tractor + */ + mlt_tractor mlt_tractor_new( ) { mlt_tractor this = calloc( sizeof( struct mlt_tractor_s ), 1 ); @@ -106,7 +123,12 @@ mlt_tractor mlt_tractor_new( ) } /** Get the service object associated to the tractor. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + * \return the parent service object + * \see MLT_TRACTOR_SERVICE + */ mlt_service mlt_tractor_service( mlt_tractor this ) { @@ -114,7 +136,12 @@ mlt_service mlt_tractor_service( mlt_tractor this ) } /** Get the producer object associated to the tractor. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + * \return the parent producer object + * \see MLT_TRACTOR_PRODUCER + */ mlt_producer mlt_tractor_producer( mlt_tractor this ) { @@ -122,7 +149,12 @@ mlt_producer mlt_tractor_producer( mlt_tractor this ) } /** Get the properties object associated to the tractor. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + * \return the tractor's property list + * \see MLT_TRACTOR_PROPERTIES + */ mlt_properties mlt_tractor_properties( mlt_tractor this ) { @@ -130,7 +162,11 @@ mlt_properties mlt_tractor_properties( mlt_tractor this ) } /** Get the field this tractor is harvesting. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + * \return a field or NULL if there is no field for this tractor + */ mlt_field mlt_tractor_field( mlt_tractor this ) { @@ -138,7 +174,11 @@ mlt_field mlt_tractor_field( mlt_tractor this ) } /** Get the multitrack this tractor is pulling. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + * \return a multitrack or NULL if there is none + */ mlt_multitrack mlt_tractor_multitrack( mlt_tractor this ) { @@ -146,7 +186,10 @@ mlt_multitrack mlt_tractor_multitrack( mlt_tractor this ) } /** Ensure the tractors in/out points match the multitrack. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + */ void mlt_tractor_refresh( mlt_tractor this ) { @@ -169,7 +212,12 @@ static void mlt_tractor_listener( mlt_multitrack tracks, mlt_tractor this ) } /** Connect the tractor. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + * \param producer a producer + * \return true on error + */ int mlt_tractor_connect( mlt_tractor this, mlt_service producer ) { @@ -183,7 +231,13 @@ int mlt_tractor_connect( mlt_tractor this, mlt_service producer ) } /** Set the producer for a specific track. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + * \param producer a producer + * \param index the 0-based track index + * \return true on error + */ int mlt_tractor_set_track( mlt_tractor this, mlt_producer producer, int index ) { @@ -191,7 +245,12 @@ int mlt_tractor_set_track( mlt_tractor this, mlt_producer producer, int index ) } /** Get the producer for a specific track. -*/ + * + * \public \memberof mlt_tractor_s + * \param this a tractor + * \param index the 0-based track index + * \return the producer for track \p index + */ mlt_producer mlt_tractor_get_track( mlt_tractor this, int index ) { @@ -205,7 +264,7 @@ static int producer_get_image( mlt_frame this, uint8_t **buffer, mlt_image_forma mlt_frame frame = mlt_frame_pop_service( this ); mlt_properties frame_properties = MLT_FRAME_PROPERTIES( frame ); mlt_properties_set( frame_properties, "rescale.interp", mlt_properties_get( properties, "rescale.interp" ) ); - mlt_properties_set_int( frame_properties, "rescale_alpha", mlt_properties_get_int( properties, "resize_alpha" ) ); + mlt_properties_set_int( frame_properties, "resize_alpha", mlt_properties_get_int( properties, "resize_alpha" ) ); mlt_properties_set_int( frame_properties, "distort", mlt_properties_get_int( properties, "distort" ) ); mlt_properties_set_double( frame_properties, "consumer_aspect_ratio", mlt_properties_get_double( properties, "consumer_aspect_ratio" ) ); mlt_properties_set_int( frame_properties, "consumer_deinterlace", mlt_properties_get_int( properties, "consumer_deinterlace" ) ); @@ -253,9 +312,13 @@ static void destroy_data_queue( void *arg ) } /** Get the next frame. - - TODO: This function needs to be redesigned... -*/ + * + * \private \memberof mlt_tractor_s + * \param parent the producer interface to the tractor + * \param[out] frame a frame by reference + * \param track the 0-based track index + * \return true on error + */ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int track ) { @@ -285,7 +348,7 @@ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int tra // Determine whether this tractor feeds to the consumer or stops here int global_feed = mlt_properties_get_int( properties, "global_feed" ); - // If we don't have one, we're in trouble... + // If we don't have one, we're in trouble... if ( multitrack != NULL ) { // Used to garbage collect all frames @@ -311,7 +374,7 @@ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int tra mlt_producer_set_speed( target, mlt_producer_get_speed( parent ) ); // We will create one frame and attach everything to it - *frame = mlt_frame_init( ); + *frame = mlt_frame_init( MLT_PRODUCER_SERVICE( parent ) ); // Get the properties of the frame frame_properties = MLT_FRAME_PROPERTIES( *frame ); @@ -392,14 +455,14 @@ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int tra first_video = temp; // Ensure that all frames know the aspect ratio of the background - mlt_properties_set_double( temp_properties, "output_ratio", + mlt_properties_set_double( temp_properties, "output_ratio", mlt_properties_get_double( MLT_FRAME_PROPERTIES( first_video ), "aspect_ratio" ) ); mlt_properties_set_int( MLT_FRAME_PROPERTIES( temp ), "image_count", ++ image_count ); image_count = 1; } } - + // Now stack callbacks if ( audio != NULL ) { @@ -441,7 +504,7 @@ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int tra } else { - fprintf( stderr, "tractor without a multitrack!!\n" ); + mlt_log( MLT_PRODUCER_SERVICE( parent ), MLT_LOG_ERROR, "tractor without a multitrack!!\n" ); mlt_service_get_frame( this->producer, frame, track ); } @@ -454,13 +517,16 @@ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int tra else { // Generate a test card - *frame = mlt_frame_init( ); + *frame = mlt_frame_init( MLT_PRODUCER_SERVICE( parent ) ); return 0; } } -/** Close the tractor. -*/ +/** Close the tractor and free its resources. + * + * \public \memberof mlt_tractor_s + * \param this a tractor + */ void mlt_tractor_close( mlt_tractor this ) {