adding the rock thrower...
[melted] / src / framework / mlt_consumer.c
index 635ad65..6c751aa 100644 (file)
@@ -42,6 +42,14 @@ mlt_service mlt_consumer_service( mlt_consumer this )
        return &this->parent;
 }
 
+/** Get the consumer properties.
+*/
+
+mlt_properties mlt_consumer_properties( mlt_consumer this )
+{
+       return mlt_service_properties( &this->parent );
+}
+
 /** Connect the consumer to the producer.
 */
 
@@ -50,13 +58,50 @@ int mlt_consumer_connect( mlt_consumer this, mlt_service producer )
        return mlt_service_connect_producer( &this->parent, producer, 0 );
 }
 
+/** Start the consumer.
+*/
+
+int mlt_consumer_start( mlt_consumer this )
+{
+       if ( this->start != NULL )
+               return this->start( this );
+       return 0;
+}
+
+/** Stop the consumer.
+*/
+
+int mlt_consumer_stop( mlt_consumer this )
+{
+       if ( this->stop != NULL )
+               return this->stop( this );
+       return 0;
+}
+
+/** Determine if the consumer is stopped.
+*/
+
+int mlt_consumer_is_stopped( mlt_consumer this )
+{
+       if ( this->is_stopped != NULL )
+               return this->is_stopped( this );
+       return 0;
+}
+
 /** Close the consumer.
 */
 
 void mlt_consumer_close( mlt_consumer this )
 {
-       if ( this->close != NULL )
-               this->close( this );
+       // Get the childs close function
+       void ( *consumer_close )( ) = this->close;
+
+       // Make sure it only gets called once
+       this->close = NULL;
+
+       // Call the childs close if available
+       if ( consumer_close != NULL )
+               consumer_close( this );
        else
                mlt_service_close( &this->parent );
 }